Clean up yang model - Part VI
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronLoadBalancerHealthMonitorInterface.java
1 /*
2  * Copyright (C) 2014 Red Hat, Inc.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.neutron.transcriber;
10
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
15 import java.util.Set;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
18
19 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
20 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
21 import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
22 import org.opendaylight.neutron.spi.Neutron_ID;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeBase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeHttp;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeHttps;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeIcmp;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeTcp;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
33 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 import com.google.common.collect.ImmutableBiMap;
40
41 public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
42     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
43     private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
44
45     private static final ImmutableBiMap<Class<? extends ProbeBase>,String> PROBE_MAP
46             = new ImmutableBiMap.Builder<Class<? extends ProbeBase>,String>()
47             .put(ProbeHttp.class,"HTTP")
48             .put(ProbeHttps.class,"HTTPS")
49             .put(ProbeIcmp.class,"ICMP")
50             .put(ProbeTcp.class,"TCP")
51             .build();
52
53
54     NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
55         super(providerContext);
56     }
57
58     @Override
59     public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
60         return loadBalancerHealthMonitorDB.containsKey(uuid);
61     }
62
63     @Override
64     public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
65         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
66             LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
67             return null;
68         }
69         return loadBalancerHealthMonitorDB.get(uuid);
70     }
71
72     @Override
73     public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
74         Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
75         for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
76             NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
77             allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
78         }
79         LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
80         List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
81         ans.addAll(allLoadBalancerHealthMonitors);
82         return ans;
83     }
84
85     @Override
86     public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
87         if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
88             return false;
89         }
90         loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
91         //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
92         return true;
93     }
94
95     @Override
96     public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
97         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
98             return false;
99         }
100         loadBalancerHealthMonitorDB.remove(uuid);
101         //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
102         return true;
103     }
104
105     @Override
106     public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
107         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
108             return false;
109         }
110         NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
111         return overwrite(target, delta);
112     }
113
114     @Override
115     public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
116         return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
117     }
118
119     @Override
120     protected Healthmonitors toMd(String uuid) {
121         HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
122         healthmonitorsBuilder.setUuid(toUuid(uuid));
123         return healthmonitorsBuilder.build();
124     }
125
126     @Override
127     protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
128             Healthmonitors healthMonitors) {
129         return InstanceIdentifier.create(Neutron.class)
130                 .child(Healthmonitor.class )
131                 .child(Healthmonitors.class, healthMonitors.getKey());
132     }
133
134     @Override
135     protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
136         HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
137         healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
138         if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
139             healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
140         }
141         if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
142             healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
143         }
144         if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
145             healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
146         }
147         if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
148             healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
149         }
150         if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
151             List<Uuid> listUuid = new ArrayList<Uuid>();
152             for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
153                 listUuid.add(toUuid(neutron_id.getID()));
154             }
155             healthmonitorsBuilder.setPools(listUuid);
156         }
157         if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
158             healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
159         }
160         if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
161             healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
162         }
163         if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
164             ImmutableBiMap<String, Class<? extends ProbeBase>> mapper =
165                     PROBE_MAP.inverse();
166             healthmonitorsBuilder.setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
167         }
168         if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
169             healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
170         }
171         if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
172             healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
173         } else {
174             LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
175         }
176         return healthmonitorsBuilder.build();
177     }
178
179     public static void registerNewInterface(BundleContext context,
180                                             ProviderContext providerContext,
181                                             List<ServiceRegistration<?>> registrations) {
182         NeutronLoadBalancerHealthMonitorInterface neutronLoadBalancerHealthMonitorInterface = new NeutronLoadBalancerHealthMonitorInterface(providerContext);
183         ServiceRegistration<INeutronLoadBalancerHealthMonitorCRUD> neutronLoadBalancerHealthMonitorInterfaceRegistration = context.registerService(INeutronLoadBalancerHealthMonitorCRUD.class, neutronLoadBalancerHealthMonitorInterface, null);
184         if(neutronLoadBalancerHealthMonitorInterfaceRegistration != null) {
185             registrations.add(neutronLoadBalancerHealthMonitorInterfaceRegistration);
186         }
187     }
188 }