Merge "Clean up overlong start method in Activator"
[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.lbaasv2.rev141002.HealthmonitorAttrs.Type;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.osgi.framework.BundleContext;
31 import org.osgi.framework.ServiceRegistration;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
36     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
37     private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
38
39
40     NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
41         super(providerContext);
42     }
43
44     @Override
45     public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
46         return loadBalancerHealthMonitorDB.containsKey(uuid);
47     }
48
49     @Override
50     public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
51         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
52             LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
53             return null;
54         }
55         return loadBalancerHealthMonitorDB.get(uuid);
56     }
57
58     @Override
59     public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
60         Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
61         for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
62             NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
63             allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
64         }
65         LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
66         List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
67         ans.addAll(allLoadBalancerHealthMonitors);
68         return ans;
69     }
70
71     @Override
72     public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
73         if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
74             return false;
75         }
76         loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
77         //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
78         return true;
79     }
80
81     @Override
82     public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
83         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
84             return false;
85         }
86         loadBalancerHealthMonitorDB.remove(uuid);
87         //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
88         return true;
89     }
90
91     @Override
92     public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
93         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
94             return false;
95         }
96         NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
97         return overwrite(target, delta);
98     }
99
100     @Override
101     public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
102         return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
103     }
104
105     @Override
106     protected Healthmonitors toMd(String uuid) {
107         HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
108         healthmonitorsBuilder.setUuid(toUuid(uuid));
109         return healthmonitorsBuilder.build();
110     }
111
112     @Override
113     protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
114             Healthmonitors healthMonitors) {
115         return InstanceIdentifier.create(Neutron.class)
116                 .child(Healthmonitor.class )
117                 .child(Healthmonitors.class, healthMonitors.getKey());
118     }
119
120     @Override
121     protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
122         HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
123         healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
124         if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
125             healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
126         }
127         if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
128             healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
129         }
130         if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
131             healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
132         }
133         if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
134             healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
135         }
136         if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
137             List<Uuid> listUuid = new ArrayList<Uuid>();
138             for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
139                 listUuid.add(toUuid(neutron_id.getID()));
140             }
141             healthmonitorsBuilder.setPools(listUuid);
142         }
143         if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
144             healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
145         }
146         if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
147             healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
148         }
149         if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
150             healthmonitorsBuilder.setType(Type.valueOf(healthMonitor.getLoadBalancerHealthMonitorType()));
151         }
152         if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
153             healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
154         }
155         if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
156             healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
157         } else {
158             LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
159         }
160         return healthmonitorsBuilder.build();
161     }
162
163     public static void registerNewInterface(BundleContext context,
164                                             ProviderContext providerContext,
165                                             List<ServiceRegistration<?>> registrations) throws Exception {
166         NeutronLoadBalancerHealthMonitorInterface neutronLoadBalancerHealthMonitorInterface = new NeutronLoadBalancerHealthMonitorInterface(providerContext);
167         ServiceRegistration<INeutronLoadBalancerHealthMonitorCRUD> neutronLoadBalancerHealthMonitorInterfaceRegistration = context.registerService(INeutronLoadBalancerHealthMonitorCRUD.class, neutronLoadBalancerHealthMonitorInterface, null);
168         if(neutronLoadBalancerHealthMonitorInterfaceRegistration != null) {
169             registrations.add(neutronLoadBalancerHealthMonitorInterfaceRegistration);
170         }
171     }
172 }