transcriber: consolidate createInstanceIdentifier()
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronLoadBalancerHealthMonitorInterface.java
index f1aa949282595506be78e50767570229d3e97f37..4a0ed41c337a2337e04104f72cc79d789f0bc9db 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (c) 2014, 2015 Red Hat, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 
 package org.opendaylight.neutron.transcriber;
 
+import com.google.common.collect.ImmutableBiMap;
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
+import org.opendaylight.neutron.spi.Neutron_ID;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeHttp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeHttps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbePing;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeTcp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.Healthmonitors;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.healthmonitors.Healthmonitor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.healthmonitors.HealthmonitorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-public class NeutronLoadBalancerHealthMonitorInterface implements INeutronLoadBalancerHealthMonitorCRUD {
-    private static final Logger logger = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
-    private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
-
+public final class NeutronLoadBalancerHealthMonitorInterface
+        extends AbstractNeutronInterface<Healthmonitor, Healthmonitors, NeutronLoadBalancerHealthMonitor>
+        implements INeutronLoadBalancerHealthMonitorCRUD {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
 
-    // this method uses reflection to update an object from it's delta.
+    private static final ImmutableBiMap<Class<? extends ProbeBase>,
+            String> PROBE_MAP = new ImmutableBiMap.Builder<Class<? extends ProbeBase>, String>()
+                    .put(ProbeHttp.class, "HTTP").put(ProbeHttps.class, "HTTPS").put(ProbePing.class, "PING")
+                    .put(ProbeTcp.class, "TCP").build();
 
-    private boolean overwrite(Object target, Object delta) {
-        Method[] methods = target.getClass().getMethods();
-
-        for (Method toMethod : methods) {
-            if (toMethod.getDeclaringClass().equals(target.getClass())
-                    && toMethod.getName().startsWith("set")) {
-
-                String toName = toMethod.getName();
-                String fromName = toName.replace("set", "get");
-
-                try {
-                    Method fromMethod = delta.getClass().getMethod(fromName);
-                    Object value = fromMethod.invoke(delta, (Object[]) null);
-                    if (value != null) {
-                        toMethod.invoke(target, value);
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    return false;
-                }
-            }
-        }
-        return true;
+    NeutronLoadBalancerHealthMonitorInterface(DataBroker db) {
+        super(HealthmonitorBuilder.class, db);
     }
 
     @Override
-    public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
-        return loadBalancerHealthMonitorDB.containsKey(uuid);
+    protected List<Healthmonitor> getDataObjectList(Healthmonitors healthMonitors) {
+        return healthMonitors.getHealthmonitor();
     }
 
     @Override
-    public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
-        if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
-            logger.debug("No LoadBalancerHealthMonitor has Been Defined");
-            return null;
-        }
-        return loadBalancerHealthMonitorDB.get(uuid);
+    protected InstanceIdentifier<Healthmonitor> createInstanceIdentifier(Healthmonitor healthMonitor) {
+        return InstanceIdentifier.create(Neutron.class).child(Healthmonitors.class).child(Healthmonitor.class,
+                healthMonitor.getKey());
     }
 
     @Override
-    public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
-        Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
-        for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
-            NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
-            allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
-        }
-        logger.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
-        List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
-        ans.addAll(allLoadBalancerHealthMonitors);
-        return ans;
-    }
-
-    @Override
-    public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
-        if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
-            return false;
+    protected Healthmonitor toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
+        final HealthmonitorBuilder healthmonitorBuilder = new HealthmonitorBuilder();
+        healthmonitorBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
+        if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
+            healthmonitorBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
         }
-        loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
-        //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
-        return true;
-    }
-
-    @Override
-    public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
-        if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
-            return false;
+        if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
+            healthmonitorBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
         }
-        loadBalancerHealthMonitorDB.remove(uuid);
-        //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
-        return true;
-    }
-
-    @Override
-    public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
-        if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
-            return false;
+        if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
+            healthmonitorBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
         }
-        NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
-        return overwrite(target, delta);
+        if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
+            healthmonitorBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
+        }
+        if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
+            final List<Uuid> listUuid = new ArrayList<Uuid>();
+            for (final Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
+                listUuid.add(toUuid(neutron_id.getID()));
+            }
+            healthmonitorBuilder.setPools(listUuid);
+        }
+        if (healthMonitor.getTenantID() != null) {
+            healthmonitorBuilder.setTenantId(toUuid(healthMonitor.getTenantID()));
+        }
+        if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
+            healthmonitorBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
+        }
+        if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
+            final ImmutableBiMap<String, Class<? extends ProbeBase>> mapper = PROBE_MAP.inverse();
+            healthmonitorBuilder
+                    .setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
+        }
+        if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
+            healthmonitorBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
+        }
+        if (healthMonitor.getID() != null) {
+            healthmonitorBuilder.setUuid(toUuid(healthMonitor.getID()));
+        } else {
+            LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
+        }
+        return healthmonitorBuilder.build();
     }
 
-    @Override
-    public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
-        return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
+    protected NeutronLoadBalancerHealthMonitor fromMd(Healthmonitor healthMonitor) {
+        final NeutronLoadBalancerHealthMonitor answer = new NeutronLoadBalancerHealthMonitor();
+        if (healthMonitor.isAdminStateUp() != null) {
+            answer.setLoadBalancerHealthMonitorAdminStateIsUp(healthMonitor.isAdminStateUp());
+        }
+        if (healthMonitor.getDelay() != null) {
+            answer.setLoadBalancerHealthMonitorDelay(healthMonitor.getDelay().intValue());
+        }
+        if (healthMonitor.getExpectedCodes() != null) {
+            answer.setLoadBalancerHealthMonitorExpectedCodes(healthMonitor.getExpectedCodes());
+        }
+        if (healthMonitor.getHttpMethod() != null) {
+            answer.setLoadBalancerHealthMonitorHttpMethod(healthMonitor.getHttpMethod());
+        }
+        if (healthMonitor.getMaxRetries() != null) {
+            answer.setLoadBalancerHealthMonitorMaxRetries(Integer.valueOf(healthMonitor.getMaxRetries()));
+        }
+        if (healthMonitor.getPools() != null) {
+            final List<Neutron_ID> list = new ArrayList<Neutron_ID>();
+            for (final Uuid id : healthMonitor.getPools()) {
+                list.add(new Neutron_ID(id.getValue()));
+            }
+            answer.setLoadBalancerHealthMonitorPools(list);
+        }
+        if (healthMonitor.getTenantId() != null) {
+            answer.setTenantID(healthMonitor.getTenantId());
+        }
+        if (healthMonitor.getTimeout() != null) {
+            answer.setLoadBalancerHealthMonitorTimeout(healthMonitor.getTimeout().intValue());
+        }
+        if (healthMonitor.getType() != null) {
+            answer.setLoadBalancerHealthMonitorType(PROBE_MAP.get(healthMonitor.getType()));
+        }
+        if (healthMonitor.getUrlPath() != null) {
+            answer.setLoadBalancerHealthMonitorUrlPath(healthMonitor.getUrlPath());
+        }
+        if (healthMonitor.getUuid() != null) {
+            answer.setID(healthMonitor.getUuid().getValue());
+        } else {
+            LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
+        }
+        return answer;
     }
 }