Remove ConcurrentHashMaps from LBaaS classes 78/26578/2
authorRyan Moats <rmoats@us.ibm.com>
Sun, 6 Sep 2015 14:16:06 +0000 (09:16 -0500)
committerRyan Moats <rmoats@us.ibm.com>
Sun, 6 Sep 2015 20:34:15 +0000 (15:34 -0500)
Side effects:
- fix up the lbaas yang model
- collapsed transcriber LoadBalancerPoolMemberInterface class
  into LoadBalancerPoolInterface class
- collapsed LoadBalancerPoolMemberCRUD methods into
  LoadBalancerPoolCRUD interface
- fix up other neutron-spi classes and northbound classes in line
  with the above changes

Change-Id: I353cced2bcd8c2aad9385b19e0f478df35c0a677
Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
12 files changed:
model/src/main/yang/neutron-lbaasv2.yang
neutron-spi/src/main/java/org/opendaylight/neutron/spi/INeutronLoadBalancerPoolCRUD.java
neutron-spi/src/main/java/org/opendaylight/neutron/spi/INeutronLoadBalancerPoolMemberCRUD.java [deleted file]
neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronCRUDInterfaces.java
neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronLoadBalancerPool.java
northbound-api/src/main/java/org/opendaylight/neutron/northbound/api/NeutronLoadBalancerPoolNorthbound.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/Activator.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerHealthMonitorInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerListenerInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolMemberInterface.java [deleted file]

index d2d7befb2f01eb9978f8e02f8577e7a17f8fc6a1..2db8eaa0c30b7bc6c228c6ee1a020fe087f10247 100644 (file)
@@ -50,7 +50,7 @@ module neutron-lbaasv2 {
     }
     grouping listener-attributes {
         description "LBaaSV2.0 listener attributes.";
-        leaf default-pool-d {
+        leaf default-pool-id {
             type yang:uuid;
             description "ID of default pool. Must have compatible protocol with listener.";
         }
@@ -111,14 +111,10 @@ module neutron-lbaasv2 {
                 is dependent on the load-balancer provider. Round-robin
                 must be supported.";
         }
-        leaf-list healthmonitor-ids {
+        leaf healthmonitor-id {
             type yang:uuid;
             description "List of healthmonitors associated with this pool.";
         }
-        leaf-list members {
-            type yang:uuid;
-            description "List of members that belong to the pool.";
-        }
         leaf-list listeners {
             type yang:uuid;
             description "List of listeners that belong to the pool.";
@@ -236,9 +232,9 @@ module neutron-lbaasv2 {
         }
     }
     grouping lbaas-attributes {
-        container loadbalancer {
+        container loadbalancers {
             description "Container for Loadbalancers.";
-            list loadbalancers {
+            list loadbalancer {
                 key "uuid";
                 uses attrs:base-attributes;
                 uses attrs:admin-attributes;
@@ -246,25 +242,25 @@ module neutron-lbaasv2 {
                 description "List of Loadbalancers.";
             }
         }
-        container listener {
+        container listeners {
             description "Container for Listeners.";
-            list listeners {
+            list listener {
                 key "uuid";
                 uses attrs:base-attributes;
                 uses listener-attributes;
                 description "List of Listeners";
             }
         }
-        container pool {
+        container pools {
             description "Container for LBaaSV2.0 pools.";
-            list pools {
+            list pool {
                 key "uuid";
                 uses attrs:base-attributes;
                 uses pool-attributes;
                 description "List of Pools";
-                container member {
+                container members {
                     description "Container for pool members.";
-                    list members {
+                    list member {
                         key "uuid";
                         uses member-attributes;
                         description "List of members.";
@@ -272,9 +268,9 @@ module neutron-lbaasv2 {
                 }
             }
         }
-        container healthmonitor {
+        container healthmonitors {
             description "Container for LBaaSV2.0 healthmonitors.";
-            list healthmonitors {
+            list healthmonitor {
                 key "uuid";
                 uses healthmonitor-attributes;
                 description "List of healthmonitors.";
index 75d69db1a37aca0f57b1774f1dc669ca80669ade..86b045bc6ee53adaa067d4fe6636be62ff8a4d59 100644 (file)
@@ -92,4 +92,93 @@ public interface INeutronLoadBalancerPoolCRUD {
 
     boolean neutronLoadBalancerPoolInUse(String uuid);
 
+    /**
+     * Applications call this interface method to determine if a particular
+     *NeutronLoadBalancerPoolMember object exists
+     *
+     * @param poolUuid
+     *            UUID of the NeutronLoadBalancerPool object
+     * @param uuid
+     *            UUID of the NeutronLoadBalancerPoolMember object
+     * @return boolean
+     */
+
+    boolean neutronLoadBalancerPoolMemberExists(String poolUuid, String uuid);
+
+    /**
+     * Applications call this interface method to return if a particular
+     * NeutronLoadBalancerPoolMember object exists
+     *
+     * @param poolUuid
+     *            UUID of the NeutronLoadBalancerPool object
+     * @param uuid
+     *            UUID of the NeutronLoadBalancerPoolMember object
+     * @return {@link org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember}
+     *          OpenStackNeutronLoadBalancerPoolMember class
+     */
+
+    NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String poolUuid, String uuid);
+
+    /**
+     * Applications call this interface method to return all NeutronLoadBalancerPoolMember objects
+     *
+     * @param poolUuid
+     *            UUID of the NeutronLoadBalancerPool object
+     * @return List of OpenStackNetworks objects
+     */
+
+    List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers(String poolUuid);
+
+    /**
+     * Applications call this interface method to add a NeutronLoadBalancerPoolMember object to the
+     * concurrent map
+     *
+     * @param poolUuid
+     *            UUID of the NeutronLoadBalancerPool object
+     * @param input
+     *            OpenStackNetwork object
+     * @return boolean on whether the object was added or not
+     */
+
+    boolean addNeutronLoadBalancerPoolMember(String poolUuid, NeutronLoadBalancerPoolMember input);
+
+    /**
+     * Applications call this interface method to remove a Neutron NeutronLoadBalancerPoolMember object to the
+     * concurrent map
+     *
+     * @param poolUuid
+     *            UUID of the NeutronLoadBalancerPool object
+     * @param uuid
+     *            identifier for the NeutronLoadBalancerPoolMember object
+     * @return boolean on whether the object was removed or not
+     */
+
+    boolean removeNeutronLoadBalancerPoolMember(String poolUuid, String uuid);
+
+    /**
+     * Applications call this interface method to edit a NeutronLoadBalancerPoolMember object
+     *
+     * @param poolUuid
+     *            identifier of the NeutronLoadBalancerPool object
+     * @param uuid
+     *            identifier of the NeutronLoadBalancerPoolMember object
+     * @param delta
+     *            OpenStackNeutronLoadBalancerPoolMember object containing changes to apply
+     * @return boolean on whether the object was updated or not
+     */
+
+    boolean updateNeutronLoadBalancerPoolMember(String poolUuid, String uuid, NeutronLoadBalancerPoolMember delta);
+
+    /**
+     * Applications call this interface method to see if a MAC address is in use
+     *
+     * @param poolUuid
+     *            identifier of the NeutronLoadBalancerPool object
+     * @param uuid
+     *            identifier of the NeutronLoadBalancerPoolMember object
+     * @return boolean on whether the macAddress is already associated with a
+     * port or not
+     */
+
+    boolean neutronLoadBalancerPoolMemberInUse(String poolUuid, String uuid);
 }
diff --git a/neutron-spi/src/main/java/org/opendaylight/neutron/spi/INeutronLoadBalancerPoolMemberCRUD.java b/neutron-spi/src/main/java/org/opendaylight/neutron/spi/INeutronLoadBalancerPoolMemberCRUD.java
deleted file mode 100644 (file)
index 7ea03eb..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2014 Red Hat, Inc.  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,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.neutron.spi;
-
-import java.util.List;
-
-public interface INeutronLoadBalancerPoolMemberCRUD {
-
-    /**
-     * Applications call this interface method to determine if a particular
-     *NeutronLoadBalancerPoolMember object exists
-     *
-     * @param uuid
-     *            UUID of the NeutronLoadBalancerPoolMember object
-     * @return boolean
-     */
-
-    boolean neutronLoadBalancerPoolMemberExists(String uuid);
-
-    /**
-     * Applications call this interface method to return if a particular
-     * NeutronLoadBalancerPoolMember object exists
-     *
-     * @param uuid
-     *            UUID of the NeutronLoadBalancerPoolMember object
-     * @return {@link org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember}
-     *          OpenStackNeutronLoadBalancerPoolMember class
-     */
-
-    NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String uuid);
-
-    /**
-     * Applications call this interface method to return all NeutronLoadBalancerPoolMember objects
-     *
-     * @return List of OpenStackNetworks objects
-     */
-
-    List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers();
-
-    /**
-     * Applications call this interface method to add a NeutronLoadBalancerPoolMember object to the
-     * concurrent map
-     *
-     * @param input
-     *            OpenStackNetwork object
-     * @return boolean on whether the object was added or not
-     */
-
-    boolean addNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember input);
-
-    /**
-     * Applications call this interface method to remove a Neutron NeutronLoadBalancerPoolMember object to the
-     * concurrent map
-     *
-     * @param uuid
-     *            identifier for the NeutronLoadBalancerPoolMember object
-     * @return boolean on whether the object was removed or not
-     */
-
-    boolean removeNeutronLoadBalancerPoolMember(String uuid);
-
-    /**
-     * Applications call this interface method to edit a NeutronLoadBalancerPoolMember object
-     *
-     * @param uuid
-     *            identifier of the NeutronLoadBalancerPoolMember object
-     * @param delta
-     *            OpenStackNeutronLoadBalancerPoolMember object containing changes to apply
-     * @return boolean on whether the object was updated or not
-     */
-
-    boolean updateNeutronLoadBalancerPoolMember(String uuid, NeutronLoadBalancerPoolMember delta);
-
-    /**
-     * Applications call this interface method to see if a MAC address is in use
-     *
-     * @param uuid
-     *            identifier of the NeutronLoadBalancerPoolMember object
-     * @return boolean on whether the macAddress is already associated with a
-     * port or not
-     */
-
-    boolean neutronLoadBalancerPoolMemberInUse(String uuid);
-
-}
index bfb322f95c94361f17bc78dba3d6a00fe08228cc..75797b2d49138cdc478f1a5ea3a848d2a1cd4a70 100644 (file)
@@ -32,7 +32,6 @@ public class NeutronCRUDInterfaces {
     private INeutronLoadBalancerPoolCRUD lbpInterface;
     private INeutronLoadBalancerListenerCRUD lblInterface;
     private INeutronLoadBalancerHealthMonitorCRUD lbhmInterface;
-    private INeutronLoadBalancerPoolMemberCRUD lbpmInterface;
     private INeutronMeteringLabelCRUD mlInterface;
     private INeutronMeteringLabelRuleCRUD mlrInterface;
     private INeutronVPNIKEPolicyCRUD ikepInterface;
@@ -99,10 +98,6 @@ public class NeutronCRUDInterfaces {
         return lbhmInterface;
     }
 
-    public INeutronLoadBalancerPoolMemberCRUD getLoadBalancerPoolMemberInterface() {
-        return lbpmInterface;
-    }
-
     public INeutronMeteringLabelCRUD getMeteringLabelInterface() {
         return mlInterface;
     }
@@ -201,11 +196,6 @@ public class NeutronCRUDInterfaces {
         return this;
     }
 
-    public NeutronCRUDInterfaces fetchINeutronLoadBalancerPoolMemberCRUD(Object obj) {
-        lbpmInterface = (INeutronLoadBalancerPoolMemberCRUD) getInstances(INeutronLoadBalancerPoolMemberCRUD.class, obj);
-        return this;
-    }
-
     public NeutronCRUDInterfaces fetchINeutronMeteringLabelCRUD(Object obj) {
         mlInterface = (INeutronMeteringLabelCRUD) getInstances(INeutronMeteringLabelCRUD.class, obj);
         return this;
index c73d99210ee0f98fef7d0d3c03a2327e8a7979c6..eee7e0cf78fd08dd25d9f48c879d487fe6a12af7 100644 (file)
@@ -13,7 +13,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
-import java.util.Iterator;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -75,6 +75,7 @@ public class NeutronLoadBalancerPool implements Serializable, INeutronObject {
     List<NeutronLoadBalancerPoolMember> loadBalancerPoolMembers;
 
     public NeutronLoadBalancerPool() {
+        loadBalancerPoolMembers = new ArrayList<NeutronLoadBalancerPoolMember>();
     }
 
     public String getID() {
@@ -171,13 +172,23 @@ public class NeutronLoadBalancerPool implements Serializable, INeutronObject {
         /*
          * Update the pool_id of the member to that this.loadBalancerPoolID
          */
+        List<NeutronLoadBalancerPoolMember> answer = new ArrayList<NeutronLoadBalancerPoolMember>();
         if (loadBalancerPoolMembers != null) {
             for (NeutronLoadBalancerPoolMember member: loadBalancerPoolMembers) {
                 member.setPoolID(loadBalancerPoolID);
+                answer.add(member);
             }
-            return loadBalancerPoolMembers;
         }
-        return loadBalancerPoolMembers;
+        return answer;
+    }
+
+    public NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String uuid) {
+        for (NeutronLoadBalancerPoolMember member: loadBalancerPoolMembers) {
+            if (uuid.equals(member.getID())) {
+                return member;
+            }
+        }
+        return null;
     }
 
     public void setLoadBalancerPoolMembers(List<NeutronLoadBalancerPoolMember> loadBalancerPoolMembers) {
@@ -194,9 +205,7 @@ public class NeutronLoadBalancerPool implements Serializable, INeutronObject {
 
     public NeutronLoadBalancerPool extractFields(List<String> fields) {
         NeutronLoadBalancerPool ans = new NeutronLoadBalancerPool();
-        Iterator<String> i = fields.iterator();
-        while (i.hasNext()) {
-            String s = i.next();
+        for (String s: fields) {
             if (s.equals("id")) {
                 ans.setID(this.getID());
             }
index 9256ca0b7b61fdbb8a25fbba529348b671a589ef..28685028646e0b5e36cf1bab91effb0f66858d14 100644 (file)
@@ -31,7 +31,6 @@ import org.codehaus.enunciate.jaxrs.StatusCodes;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolAware;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberAware;
-import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberCRUD;
 import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
@@ -75,16 +74,11 @@ public class NeutronLoadBalancerPoolNorthbound {
 
     private NeutronCRUDInterfaces getNeutronInterfaces() {
         NeutronCRUDInterfaces answer = new NeutronCRUDInterfaces().
-            fetchINeutronLoadBalancerPoolCRUD(this).
-            fetchINeutronLoadBalancerPoolMemberCRUD(this);
+            fetchINeutronLoadBalancerPoolCRUD(this);
         if (answer.getLoadBalancerPoolInterface() == null) {
             throw new ServiceUnavailableException(INTERFACE_NAME
                     + RestMessages.SERVICEUNAVAILABLE.toString());
         }
-        if (answer.getLoadBalancerPoolMemberInterface() == null) {
-            throw new ServiceUnavailableException(INTERFACE_NAME
-                + RestMessages.SERVICEUNAVAILABLE.toString());
-        }
         return answer;
     }
 
@@ -503,8 +497,8 @@ public class NeutronLoadBalancerPoolNorthbound {
             /**
              * Add the member from the neutron load balancer pool as well
              */
-            singletonPool.addLoadBalancerPoolMember(singleton);
 
+            loadBalancerPoolInterface.addNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, singleton);
         } else {
             Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolMemberAware.class, this);
             for (NeutronLoadBalancerPoolMember test : input.getBulk()) {
@@ -535,7 +529,7 @@ public class NeutronLoadBalancerPoolNorthbound {
                         service.neutronLoadBalancerPoolMemberCreated(test);
                     }
                 }
-                singletonPool.addLoadBalancerPoolMember(test);
+                loadBalancerPoolInterface.addNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, test);
             }
         }
         return Response.status(HttpURLConnection.HTTP_CREATED).entity(input).build();
@@ -556,12 +550,14 @@ public class NeutronLoadBalancerPoolNorthbound {
             @PathParam("loadBalancerPoolMemberUUID") String loadBalancerPoolMemberUUID,
             final NeutronLoadBalancerPoolMemberRequest input) {
         INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronInterfaces().getLoadBalancerPoolInterface();
-        INeutronLoadBalancerPoolMemberCRUD loadBalancerPoolMemberInterface = getNeutronInterfaces().getLoadBalancerPoolMemberInterface();
         NeutronLoadBalancerPool singletonPool = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolUUID);
-
         NeutronLoadBalancerPoolMember singleton = input.getSingleton();
         singleton.setPoolID(loadBalancerPoolUUID);
-        NeutronLoadBalancerPoolMember original = loadBalancerPoolMemberInterface.getNeutronLoadBalancerPoolMember(loadBalancerPoolMemberUUID);
+
+        if (singletonPool == null) {
+            throw new ResourceNotFoundException("Pool doesn't Exist");
+        }
+        NeutronLoadBalancerPoolMember original = singletonPool.getNeutronLoadBalancerPoolMember(loadBalancerPoolMemberUUID);
 
         Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolMemberAware.class, this);
         if (instances != null) {
@@ -580,7 +576,7 @@ public class NeutronLoadBalancerPoolNorthbound {
             throw new ServiceUnavailableException(NO_PROVIDER_LIST);
         }
 
-        loadBalancerPoolMemberInterface.updateNeutronLoadBalancerPoolMember(loadBalancerPoolMemberUUID, singleton);
+        loadBalancerPoolInterface.updateNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, loadBalancerPoolMemberUUID, singleton);
 
         if (instances != null) {
             for (Object instance : instances) {
@@ -646,8 +642,7 @@ public class NeutronLoadBalancerPoolNorthbound {
         /**
          * Remove the member from the neutron load balancer pool
          */
-        NeutronLoadBalancerPool singletonPool = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolUUID);
-        singletonPool.removeLoadBalancerPoolMember(singleton);
+        loadBalancerPoolInterface.removeNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, loadBalancerPoolMemberUUID);
 
         return Response.status(HttpURLConnection.HTTP_NO_CONTENT).build();
     }
index ae5b33e9b6a9be37aa5043c80b5d1f0c37d328fa..2a388224f77a116322ebf8c0a02b3cfd5f4fe5e5 100644 (file)
@@ -39,7 +39,6 @@ public class Activator implements BundleActivator {
         NeutronLoadBalancerPoolInterface.registerNewInterface(context, providerContext, registrations);
         NeutronLoadBalancerListenerInterface.registerNewInterface(context, providerContext, registrations);
         NeutronLoadBalancerHealthMonitorInterface.registerNewInterface(context, providerContext, registrations);
-        NeutronLoadBalancerPoolMemberInterface.registerNewInterface(context, providerContext, registrations);
         NeutronMeteringLabelInterface.registerNewInterface(context, providerContext, registrations);
         NeutronMeteringLabelRuleInterface.registerNewInterface(context, providerContext, registrations);
         NeutronVPNServiceInterface.registerNewInterface(context, providerContext, registrations);
index f07e7260b24392710a6d9f0651b928f15e06bfb8..086d54ed4c711c8e2edb2fc7cef7a50a5052372b 100644 (file)
@@ -26,9 +26,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeHttps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeIcmp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeTcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitors;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitors.Healthmonitor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitors.HealthmonitorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableBiMap;
 
-public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
+public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitor, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
     private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
 
@@ -57,24 +57,30 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
 
     @Override
     public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
-        return loadBalancerHealthMonitorDB.containsKey(uuid);
+        Healthmonitor healthMonitor = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (healthMonitor == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
-        if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
-            LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
+        Healthmonitor healthMonitor = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (healthMonitor == null) {
             return null;
         }
-        return loadBalancerHealthMonitorDB.get(uuid);
+        return fromMd(healthMonitor);
     }
 
     @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);
+        Healthmonitors healthMonitors = readMd(createInstanceIdentifier());
+        if (healthMonitors != null) {
+            for (Healthmonitor healthMonitor : healthMonitors.getHealthmonitor()) {
+                allLoadBalancerHealthMonitors.add(fromMd(healthMonitor));
+            }
         }
         LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
         List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
@@ -87,8 +93,7 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
         if (neutronLoadBalancerHealthMonitorExists(input.getID())) {
             return false;
         }
-        loadBalancerHealthMonitorDB.putIfAbsent(input.getID(), input);
-        //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
+        addMd(input);
         return true;
     }
 
@@ -97,9 +102,7 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
             return false;
         }
-        loadBalancerHealthMonitorDB.remove(uuid);
-        //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -107,8 +110,8 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
         if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
             return false;
         }
-        NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -117,63 +120,112 @@ public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronIn
     }
 
     @Override
-    protected Healthmonitors toMd(String uuid) {
-        HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
-        healthmonitorsBuilder.setUuid(toUuid(uuid));
-        return healthmonitorsBuilder.build();
+    protected Healthmonitor toMd(String uuid) {
+        HealthmonitorBuilder healthmonitorBuilder = new HealthmonitorBuilder();
+        healthmonitorBuilder.setUuid(toUuid(uuid));
+        return healthmonitorBuilder.build();
     }
 
     @Override
-    protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
-            Healthmonitors healthMonitors) {
+    protected InstanceIdentifier<Healthmonitor> createInstanceIdentifier(
+            Healthmonitor healthMonitor) {
         return InstanceIdentifier.create(Neutron.class)
-                .child(Healthmonitor.class )
-                .child(Healthmonitors.class, healthMonitors.getKey());
+                .child(Healthmonitors.class )
+                .child(Healthmonitor.class, healthMonitor.getKey());
+    }
+
+    protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Healthmonitors.class);
     }
 
     @Override
-    protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
-        HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
-        healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
+    protected Healthmonitor toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
+        HealthmonitorBuilder healthmonitorBuilder = new HealthmonitorBuilder();
+        healthmonitorBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
         if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
-            healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
+            healthmonitorBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
         }
         if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
-            healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
+            healthmonitorBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
         }
         if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
-            healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
+            healthmonitorBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
         }
         if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
-            healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
+            healthmonitorBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
         }
         if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
             List<Uuid> listUuid = new ArrayList<Uuid>();
             for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
                 listUuid.add(toUuid(neutron_id.getID()));
             }
-            healthmonitorsBuilder.setPools(listUuid);
+            healthmonitorBuilder.setPools(listUuid);
         }
         if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
-            healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
+            healthmonitorBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
         }
         if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
-            healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
+            healthmonitorBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
         }
         if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
             ImmutableBiMap<String, Class<? extends ProbeBase>> mapper =
                     PROBE_MAP.inverse();
-            healthmonitorsBuilder.setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
+            healthmonitorBuilder.setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
         }
         if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
-            healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
+            healthmonitorBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
         }
         if (healthMonitor.getID() != null) {
-            healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getID()));
+            healthmonitorBuilder.setUuid(toUuid(healthMonitor.getID()));
+        } else {
+            LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
+        }
+        return healthmonitorBuilder.build();
+    }
+
+    protected NeutronLoadBalancerHealthMonitor fromMd(Healthmonitor healthMonitor) {
+        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) {
+            List<Neutron_ID> list = new ArrayList<Neutron_ID>();
+            for (Uuid id : healthMonitor.getPools()) {
+                list.add(new Neutron_ID(id.getValue()));
+            }
+            answer.setLoadBalancerHealthMonitorPools(list);
+        }
+        if (healthMonitor.getTenantId() != null) {
+            answer.setLoadBalancerHealthMonitorTenantID(healthMonitor.getTenantId().getValue().replace("-",""));
+        }
+        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 healthmonitorsBuilder.build();
+        return answer;
     }
 
     public static void registerNewInterface(BundleContext context,
index 6af6a674337d2ce4d59e525b2255c26ea1eefd09..bd692170df066398eee8fef7eb18e78ab0de591f 100644 (file)
@@ -13,16 +13,14 @@ 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;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
 import org.opendaylight.neutron.spi.NeutronLoadBalancer;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Loadbalancer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.loadbalancer.Loadbalancers;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.loadbalancer.LoadbalancersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Loadbalancers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.loadbalancers.Loadbalancer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.loadbalancers.LoadbalancerBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
@@ -30,9 +28,8 @@ import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadbalancers, NeutronLoadBalancer> implements INeutronLoadBalancerCRUD {
+public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadbalancer, NeutronLoadBalancer> implements INeutronLoadBalancerCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerInterface.class);
-    private ConcurrentMap<String, NeutronLoadBalancer> loadBalancerDB  = new ConcurrentHashMap<String, NeutronLoadBalancer>();
 
 
     NeutronLoadBalancerInterface(ProviderContext providerContext) {
@@ -41,24 +38,30 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadb
 
     @Override
     public boolean neutronLoadBalancerExists(String uuid) {
-        return loadBalancerDB.containsKey(uuid);
+        Loadbalancer lb = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (lb == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronLoadBalancer getNeutronLoadBalancer(String uuid) {
-        if (!neutronLoadBalancerExists(uuid)) {
-            LOGGER.debug("No LoadBalancer Have Been Defined");
+        Loadbalancer lb = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (lb == null) {
             return null;
         }
-        return loadBalancerDB.get(uuid);
+        return fromMd(lb);
     }
 
     @Override
     public List<NeutronLoadBalancer> getAllNeutronLoadBalancers() {
         Set<NeutronLoadBalancer> allLoadBalancers = new HashSet<NeutronLoadBalancer>();
-        for (Entry<String, NeutronLoadBalancer> entry : loadBalancerDB.entrySet()) {
-            NeutronLoadBalancer loadBalancer = entry.getValue();
-            allLoadBalancers.add(loadBalancer);
+        Loadbalancers lbs = readMd(createInstanceIdentifier());
+        if (lbs != null) {
+            for (Loadbalancer lb: lbs.getLoadbalancer()) {
+                allLoadBalancers.add(fromMd(lb));
+            }
         }
         LOGGER.debug("Exiting getLoadBalancers, Found {} OpenStackLoadBalancer", allLoadBalancers.size());
         List<NeutronLoadBalancer> ans = new ArrayList<NeutronLoadBalancer>();
@@ -71,8 +74,7 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadb
         if (neutronLoadBalancerExists(input.getID())) {
             return false;
         }
-        loadBalancerDB.putIfAbsent(input.getID(), input);
-        //TODO: add code to find INeutronLoadBalancerAware services and call newtorkCreated on them
+        addMd(input);
         return true;
     }
 
@@ -81,9 +83,7 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadb
         if (!neutronLoadBalancerExists(uuid)) {
             return false;
         }
-        loadBalancerDB.remove(uuid);
-        //TODO: add code to find INeutronLoadBalancerAware services and call newtorkDeleted on them
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -91,8 +91,8 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadb
         if (!neutronLoadBalancerExists(uuid)) {
             return false;
         }
-        NeutronLoadBalancer target = loadBalancerDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -101,48 +101,82 @@ public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadb
     }
 
     @Override
-    protected Loadbalancers toMd(String uuid) {
-        LoadbalancersBuilder loadBalancersBuilder = new LoadbalancersBuilder();
-        loadBalancersBuilder.setUuid(toUuid(uuid));
-        return loadBalancersBuilder.build();
+    protected Loadbalancer toMd(String uuid) {
+        LoadbalancerBuilder loadBalancerBuilder = new LoadbalancerBuilder();
+        loadBalancerBuilder.setUuid(toUuid(uuid));
+        return loadBalancerBuilder.build();
     }
 
     @Override
-    protected InstanceIdentifier<Loadbalancers> createInstanceIdentifier(
-            Loadbalancers loadBalancers) {
+    protected InstanceIdentifier<Loadbalancer> createInstanceIdentifier(
+            Loadbalancer loadBalancer) {
         return InstanceIdentifier.create(Neutron.class)
-                .child(Loadbalancer.class)
-                .child(Loadbalancers.class, loadBalancers.getKey());
+                .child(Loadbalancers.class)
+                .child(Loadbalancer.class, loadBalancer.getKey());
+    }
+
+    protected InstanceIdentifier<Loadbalancers> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Loadbalancers.class);
+    }
+
+    protected NeutronLoadBalancer fromMd(Loadbalancer loadBalancer) {
+        NeutronLoadBalancer answer = new NeutronLoadBalancer();
+        if (loadBalancer.isAdminStateUp() != null) {
+            answer.setLoadBalancerAdminStateUp(loadBalancer.isAdminStateUp());
+        }
+        if (loadBalancer.getDescr() != null) {
+            answer.setLoadBalancerDescription(loadBalancer.getDescr());
+        }
+        if (loadBalancer.getName() != null) {
+            answer.setLoadBalancerName(loadBalancer.getName());
+        }
+        if (loadBalancer.getStatus() != null) {
+            answer.setLoadBalancerStatus(loadBalancer.getStatus());
+        }
+        if (loadBalancer.getTenantId() != null) {
+            answer.setLoadBalancerTenantID(loadBalancer.getTenantId().getValue().replace("-",""));
+        }
+        if (loadBalancer.getVipAddress() != null) {
+            answer.setLoadBalancerVipAddress(String.valueOf(loadBalancer.getVipAddress().getValue()));
+        }
+        if (loadBalancer.getVipSubnetId() != null) {
+            answer.setLoadBalancerVipSubnetID(loadBalancer.getVipSubnetId().getValue());
+        }
+        if (loadBalancer.getUuid() != null) {
+            answer.setID(loadBalancer.getUuid().getValue());
+        }
+        return answer;
     }
 
     @Override
-    protected Loadbalancers toMd(NeutronLoadBalancer loadBalancer) {
-        LoadbalancersBuilder loadBalancersBuilder = new LoadbalancersBuilder();
-        loadBalancersBuilder.setAdminStateUp(loadBalancer.getLoadBalancerAdminStateUp());
+    protected Loadbalancer toMd(NeutronLoadBalancer loadBalancer) {
+        LoadbalancerBuilder loadBalancerBuilder = new LoadbalancerBuilder();
+        loadBalancerBuilder.setAdminStateUp(loadBalancer.getLoadBalancerAdminStateUp());
         if (loadBalancer.getLoadBalancerDescription() != null) {
-            loadBalancersBuilder.setDescr(loadBalancer.getLoadBalancerDescription());
+            loadBalancerBuilder.setDescr(loadBalancer.getLoadBalancerDescription());
         }
         if (loadBalancer.getLoadBalancerName() != null) {
-            loadBalancersBuilder.setName(loadBalancer.getLoadBalancerName());
+            loadBalancerBuilder.setName(loadBalancer.getLoadBalancerName());
         }
         if (loadBalancer.getLoadBalancerStatus() != null) {
-            loadBalancersBuilder.setStatus(loadBalancer.getLoadBalancerStatus());
+            loadBalancerBuilder.setStatus(loadBalancer.getLoadBalancerStatus());
         }
         if (loadBalancer.getLoadBalancerTenantID() != null) {
-            loadBalancersBuilder.setTenantId(toUuid(loadBalancer.getLoadBalancerTenantID()));
+            loadBalancerBuilder.setTenantId(toUuid(loadBalancer.getLoadBalancerTenantID()));
         }
         if (loadBalancer.getLoadBalancerVipAddress() != null) {
-            loadBalancersBuilder.setVipAddress(new IpAddress(loadBalancer.getLoadBalancerVipAddress().toCharArray()));
+            loadBalancerBuilder.setVipAddress(new IpAddress(loadBalancer.getLoadBalancerVipAddress().toCharArray()));
         }
         if (loadBalancer.getLoadBalancerVipSubnetID() != null) {
-            loadBalancersBuilder.setVipSubnetId(toUuid(loadBalancer.getLoadBalancerVipSubnetID()));
+            loadBalancerBuilder.setVipSubnetId(toUuid(loadBalancer.getLoadBalancerVipSubnetID()));
         }
         if (loadBalancer.getID() != null) {
-            loadBalancersBuilder.setUuid(toUuid(loadBalancer.getID()));
+            loadBalancerBuilder.setUuid(toUuid(loadBalancer.getID()));
         } else {
             LOGGER.warn("Attempting to write neutron load balancer without UUID");
         }
-        return loadBalancersBuilder.build();
+        return loadBalancerBuilder.build();
     }
 
     public static void registerNewInterface(BundleContext context,
index 357f3306d3384df01c07436707d53b5501cb1cd1..f70ee6aa868ffed4d0d83589222f04d8b207e109 100644 (file)
@@ -13,8 +13,6 @@ 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;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerListenerCRUD;
@@ -25,9 +23,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolHttp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolHttps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolTcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Listener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.listener.Listeners;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.listener.ListenersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Listeners;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.listeners.Listener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.listeners.ListenerBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
@@ -37,9 +35,8 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableBiMap;
 
-public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterface<Listeners, NeutronLoadBalancerListener> implements INeutronLoadBalancerListenerCRUD {
+public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterface<Listener, NeutronLoadBalancerListener> implements INeutronLoadBalancerListenerCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerListenerInterface.class);
-    private ConcurrentMap<String, NeutronLoadBalancerListener> loadBalancerListenerDB  = new ConcurrentHashMap<String, NeutronLoadBalancerListener>();
 
     private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
             = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>,String>()
@@ -54,24 +51,30 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
 
     @Override
     public boolean neutronLoadBalancerListenerExists(String uuid) {
-        return loadBalancerListenerDB.containsKey(uuid);
+        Listener listener = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (listener == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronLoadBalancerListener getNeutronLoadBalancerListener(String uuid) {
-        if (!neutronLoadBalancerListenerExists(uuid)) {
-            LOGGER.debug("No LoadBalancerListener Have Been Defined");
+        Listener listener = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (listener == null) {
             return null;
         }
-        return loadBalancerListenerDB.get(uuid);
+        return fromMd(listener);
     }
 
     @Override
     public List<NeutronLoadBalancerListener> getAllNeutronLoadBalancerListeners() {
         Set<NeutronLoadBalancerListener> allLoadBalancerListeners = new HashSet<NeutronLoadBalancerListener>();
-        for (Entry<String, NeutronLoadBalancerListener> entry : loadBalancerListenerDB.entrySet()) {
-            NeutronLoadBalancerListener loadBalancerListener = entry.getValue();
-            allLoadBalancerListeners.add(loadBalancerListener);
+        Listeners listeners = readMd(createInstanceIdentifier());
+        if (listeners != null) {
+            for (Listener listener: listeners.getListener()) {
+                allLoadBalancerListeners.add(fromMd(listener));
+            }
         }
         LOGGER.debug("Exiting getLoadBalancerListeners, Found {} OpenStackLoadBalancerListener", allLoadBalancerListeners.size());
         List<NeutronLoadBalancerListener> ans = new ArrayList<NeutronLoadBalancerListener>();
@@ -84,8 +87,7 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
         if (neutronLoadBalancerListenerExists(input.getID())) {
             return false;
         }
-        loadBalancerListenerDB.putIfAbsent(input.getID(), input);
-        //TODO: add code to find INeutronLoadBalancerListenerAware services and call newtorkCreated on them
+        addMd(input);
         return true;
     }
 
@@ -94,9 +96,7 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
         if (!neutronLoadBalancerListenerExists(uuid)) {
             return false;
         }
-        loadBalancerListenerDB.remove(uuid);
-        //TODO: add code to find INeutronLoadBalancerListenerAware services and call newtorkDeleted on them
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -104,8 +104,8 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
         if (!neutronLoadBalancerListenerExists(uuid)) {
             return false;
         }
-        NeutronLoadBalancerListener target = loadBalancerListenerDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -115,60 +115,104 @@ public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterfa
 
 
     @Override
-    protected Listeners toMd(String uuid) {
-        ListenersBuilder listenersBuilder = new ListenersBuilder();
-        listenersBuilder.setUuid(toUuid(uuid));
-        return listenersBuilder.build();
+    protected Listener toMd(String uuid) {
+        ListenerBuilder listenerBuilder = new ListenerBuilder();
+        listenerBuilder.setUuid(toUuid(uuid));
+        return listenerBuilder.build();
     }
 
     @Override
-    protected InstanceIdentifier<Listeners> createInstanceIdentifier(
-            Listeners listeners) {
+    protected InstanceIdentifier<Listener> createInstanceIdentifier(
+            Listener listener) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Listeners.class)
+                .child(Listener.class, listener.getKey());
+    }
+
+    protected InstanceIdentifier<Listeners> createInstanceIdentifier() {
         return InstanceIdentifier.create(Neutron.class)
-                .child(Listener.class)
-                .child(Listeners.class, listeners.getKey());
+                .child(Listeners.class);
     }
 
     @Override
-    protected Listeners toMd(NeutronLoadBalancerListener listeners) {
-        ListenersBuilder listenersBuilder = new ListenersBuilder();
-        listenersBuilder.setAdminStateUp(listeners.getLoadBalancerListenerAdminStateIsUp());
-        if (listeners.getNeutronLoadBalancerListenerConnectionLimit() != null) {
-            listenersBuilder.setConnectionLimit(listeners.getNeutronLoadBalancerListenerConnectionLimit());
+    protected Listener toMd(NeutronLoadBalancerListener listener) {
+        ListenerBuilder listenerBuilder = new ListenerBuilder();
+        listenerBuilder.setAdminStateUp(listener.getLoadBalancerListenerAdminStateIsUp());
+        if (listener.getNeutronLoadBalancerListenerConnectionLimit() != null) {
+            listenerBuilder.setConnectionLimit(listener.getNeutronLoadBalancerListenerConnectionLimit());
         }
-        if (listeners.getNeutronLoadBalancerListenerDefaultPoolID() != null) {
-            listenersBuilder.setDefaultPoolD(toUuid(listeners.getNeutronLoadBalancerListenerDefaultPoolID()));
+        if (listener.getNeutronLoadBalancerListenerDefaultPoolID() != null) {
+            listenerBuilder.setDefaultPoolId(toUuid(listener.getNeutronLoadBalancerListenerDefaultPoolID()));
         }
-        if (listeners.getLoadBalancerListenerDescription() != null) {
-            listenersBuilder.setDescr(listeners.getLoadBalancerListenerDescription());
+        if (listener.getLoadBalancerListenerDescription() != null) {
+            listenerBuilder.setDescr(listener.getLoadBalancerListenerDescription());
         }
-        if (listeners.getNeutronLoadBalancerListenerLoadBalancerIDs() != null) {
+        if (listener.getNeutronLoadBalancerListenerLoadBalancerIDs() != null) {
             List<Uuid> listLoadBalancers = new ArrayList<Uuid>();
-            for (Neutron_ID neutron_id : listeners.getNeutronLoadBalancerListenerLoadBalancerIDs()) {
+            for (Neutron_ID neutron_id : listener.getNeutronLoadBalancerListenerLoadBalancerIDs()) {
                 listLoadBalancers.add(toUuid(neutron_id.getID()));
             }
-            listenersBuilder.setLoadbalancers(listLoadBalancers);
+            listenerBuilder.setLoadbalancers(listLoadBalancers);
         }
-        if (listeners.getLoadBalancerListenerName() != null) {
-            listenersBuilder.setName(listeners.getLoadBalancerListenerName());
+        if (listener.getLoadBalancerListenerName() != null) {
+            listenerBuilder.setName(listener.getLoadBalancerListenerName());
         }
-        if (listeners.getNeutronLoadBalancerListenerProtocol() != null) {
+        if (listener.getNeutronLoadBalancerListenerProtocol() != null) {
             ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
                 PROTOCOL_MAP.inverse();
-            listenersBuilder.setProtocol((Class<? extends ProtocolBase>) mapper.get(listeners.getNeutronLoadBalancerListenerProtocol()));
+            listenerBuilder.setProtocol((Class<? extends ProtocolBase>) mapper.get(listener.getNeutronLoadBalancerListenerProtocol()));
         }
-        if (listeners.getNeutronLoadBalancerListenerProtocolPort() != null) {
-            listenersBuilder.setProtocolPort(Integer.valueOf(listeners.getNeutronLoadBalancerListenerProtocolPort()));
+        if (listener.getNeutronLoadBalancerListenerProtocolPort() != null) {
+            listenerBuilder.setProtocolPort(Integer.valueOf(listener.getNeutronLoadBalancerListenerProtocolPort()));
         }
-        if (listeners.getLoadBalancerListenerTenantID() != null) {
-            listenersBuilder.setTenantId(toUuid(listeners.getLoadBalancerListenerTenantID()));
+        if (listener.getLoadBalancerListenerTenantID() != null) {
+            listenerBuilder.setTenantId(toUuid(listener.getLoadBalancerListenerTenantID()));
         }
-        if (listeners.getID() != null) {
-            listenersBuilder.setUuid(toUuid(listeners.getID()));
+        if (listener.getID() != null) {
+            listenerBuilder.setUuid(toUuid(listener.getID()));
         } else {
             LOGGER.warn("Attempting to write neutron load balancer listener without UUID");
         }
-        return listenersBuilder.build();
+        return listenerBuilder.build();
+    }
+
+    protected NeutronLoadBalancerListener fromMd(Listener listener) {
+        NeutronLoadBalancerListener answer = new NeutronLoadBalancerListener();
+        if (listener.isAdminStateUp() != null) {
+            answer.setLoadBalancerListenerAdminStateIsUp(listener.isAdminStateUp());
+        }
+        if (listener.getConnectionLimit() != null) {
+            answer.setNeutronLoadBalancerListenerConnectionLimit(listener.getConnectionLimit());
+        }
+        if (listener.getDefaultPoolId() != null) {
+            answer.setNeutronLoadBalancerListenerDefaultPoolID(listener.getDefaultPoolId().getValue());
+        }
+        if (listener.getDescr() != null) {
+            answer.setLoadBalancerListenerDescription(listener.getDescr());
+        }
+        if (listener.getLoadbalancers() != null) {
+            List<Neutron_ID> list = new ArrayList<Neutron_ID>();
+            for (Uuid id : listener.getLoadbalancers()) {
+                list.add(new Neutron_ID(id.getValue()));
+            }
+            answer.setNeutronLoadBalancerListenerLoadBalancerIDs(list);
+        }
+        if (listener.getName() != null) {
+            answer.setLoadBalancerListenerName(listener.getName());
+        }
+        if (listener.getProtocol() != null) {
+            answer.setNeutronLoadBalancerListenerProtocol(PROTOCOL_MAP.get(listener.getProtocol()));
+        }
+        if (listener.getProtocolPort() != null) {
+            answer.setNeutronLoadBalancerListenerProtocolPort(String.valueOf(listener.getProtocolPort()));
+        }
+        if (listener.getTenantId() != null) {
+            answer.setLoadBalancerListenerTenantID(listener.getTenantId().getValue().replace("-",""));
+        }
+        if (listener.getUuid() != null) {
+            answer.setID(listener.getUuid().getValue());
+        }
+        return answer;
     }
 
     public static void registerNewInterface(BundleContext context,
index 089d6b12a3d6b5ee549584afbc3ac3e960a4aa02..7605d77ea6c5596dde3d8b1c544c10dc0289af6f 100644 (file)
@@ -13,23 +13,37 @@ 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;
+
+import java.util.concurrent.ExecutionException;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
+import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
 import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
 import org.opendaylight.neutron.spi.NeutronLoadBalancer_SessionPersistence;
 import org.opendaylight.neutron.spi.Neutron_ID;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 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.rev160807.ProtocolBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolHttp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolHttps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProtocolTcp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Pool;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.Pools;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.PoolsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Pools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pools.Pool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pools.PoolBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pools.pool.Members;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pools.pool.members.Member;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pools.pool.members.MemberBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.pool.attributes.SessionPersistenceBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -38,11 +52,12 @@ import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableBiMap;
+import com.google.common.util.concurrent.CheckedFuture;
 
-public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<Pools, NeutronLoadBalancerPool> implements INeutronLoadBalancerPoolCRUD {
+public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<Pool, NeutronLoadBalancerPool> implements INeutronLoadBalancerPoolCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerPoolInterface.class);
-    private ConcurrentMap<String, NeutronLoadBalancerPool> loadBalancerPoolDB = new ConcurrentHashMap<String, NeutronLoadBalancerPool>();
 
     private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
             = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>,String>()
@@ -51,30 +66,43 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
             .put(ProtocolTcp.class,"TCP")
             .build();
 
+    private static final int DEDASHED_UUID_LENGTH = 32;
+    private static final int DEDASHED_UUID_START = 0;
+    private static final int DEDASHED_UUID_DIV1 = 8;
+    private static final int DEDASHED_UUID_DIV2 = 12;
+    private static final int DEDASHED_UUID_DIV3 = 16;
+    private static final int DEDASHED_UUID_DIV4 = 20;
+
     NeutronLoadBalancerPoolInterface(ProviderContext providerContext) {
         super(providerContext);
     }
 
     @Override
     public boolean neutronLoadBalancerPoolExists(String uuid) {
-        return loadBalancerPoolDB.containsKey(uuid);
+        Pool pool = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (pool == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronLoadBalancerPool getNeutronLoadBalancerPool(String uuid) {
-        if (!neutronLoadBalancerPoolExists(uuid)) {
-            LOGGER.debug("No LoadBalancerPool has Been Defined");
+        Pool pool = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (pool == null) {
             return null;
         }
-        return loadBalancerPoolDB.get(uuid);
+        return fromMd(pool);
     }
 
     @Override
     public List<NeutronLoadBalancerPool> getAllNeutronLoadBalancerPools() {
         Set<NeutronLoadBalancerPool> allLoadBalancerPools = new HashSet<NeutronLoadBalancerPool>();
-        for (Entry<String, NeutronLoadBalancerPool> entry : loadBalancerPoolDB.entrySet()) {
-            NeutronLoadBalancerPool loadBalancerPool = entry.getValue();
-            allLoadBalancerPools.add(loadBalancerPool);
+        Pools pools = readMd(createInstanceIdentifier());
+        if (pools != null) {
+            for (Pool pool: pools.getPool()) {
+                allLoadBalancerPools.add(fromMd(pool));
+            }
         }
         LOGGER.debug("Exiting getLoadBalancerPools, Found {} OpenStackLoadBalancerPool", allLoadBalancerPools.size());
         List<NeutronLoadBalancerPool> ans = new ArrayList<NeutronLoadBalancerPool>();
@@ -87,7 +115,7 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
         if (neutronLoadBalancerPoolExists(input.getID())) {
             return false;
         }
-        loadBalancerPoolDB.putIfAbsent(input.getID(), input);
+        addMd(input);
         //TODO: add code to find INeutronLoadBalancerPoolAware services and call newtorkCreated on them
         return true;
     }
@@ -97,8 +125,7 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
         if (!neutronLoadBalancerPoolExists(uuid)) {
             return false;
         }
-        loadBalancerPoolDB.remove(uuid);
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -106,7 +133,7 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
         if (!neutronLoadBalancerPoolExists(uuid)) {
             return false;
         }
-        loadBalancerPoolDB.putIfAbsent(uuid, delta);
+        updateMd(delta);
         return true;
     }
 
@@ -116,73 +143,120 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
     }
 
     @Override
-    protected Pools toMd(String uuid) {
-        PoolsBuilder poolsBuilder = new PoolsBuilder();
-        poolsBuilder.setUuid(toUuid(uuid));
-        return poolsBuilder.build();
+    protected Pool toMd(String uuid) {
+        PoolBuilder poolBuilder = new PoolBuilder();
+        poolBuilder.setUuid(toUuid(uuid));
+        return poolBuilder.build();
     }
 
     @Override
-    protected InstanceIdentifier<Pools> createInstanceIdentifier(Pools pools) {
+    protected InstanceIdentifier<Pool> createInstanceIdentifier(Pool pool) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Pools.class)
+                .child(Pool.class, pool.getKey());
+    }
+
+    protected InstanceIdentifier<Pools> createInstanceIdentifier() {
         return InstanceIdentifier.create(Neutron.class)
-                .child(Pool.class)
-                .child(Pools.class, pools.getKey());
+                .child(Pools.class);
     }
 
     @Override
-    protected Pools toMd(NeutronLoadBalancerPool pools) {
-        PoolsBuilder poolsBuilder = new PoolsBuilder();
-        poolsBuilder.setAdminStateUp(pools.getLoadBalancerPoolAdminIsStateIsUp());
-        if (pools.getLoadBalancerPoolDescription() != null) {
-            poolsBuilder.setDescr(pools.getLoadBalancerPoolDescription());
+    protected Pool toMd(NeutronLoadBalancerPool pool) {
+        PoolBuilder poolBuilder = new PoolBuilder();
+        poolBuilder.setAdminStateUp(pool.getLoadBalancerPoolAdminIsStateIsUp());
+        if (pool.getLoadBalancerPoolDescription() != null) {
+            poolBuilder.setDescr(pool.getLoadBalancerPoolDescription());
         }
-        if (pools.getNeutronLoadBalancerPoolHealthMonitorID() != null) {
-            List<Uuid> listHealthMonitor = new ArrayList<Uuid>();
-            listHealthMonitor.add(toUuid(pools.getNeutronLoadBalancerPoolHealthMonitorID()));
-            poolsBuilder.setHealthmonitorIds(listHealthMonitor);
+        if (pool.getNeutronLoadBalancerPoolHealthMonitorID() != null) {
+            poolBuilder.setHealthmonitorId(toUuid(pool.getNeutronLoadBalancerPoolHealthMonitorID()));
         }
-        if (pools.getLoadBalancerPoolLbAlgorithm() != null) {
-            poolsBuilder.setLbAlgorithm(pools.getLoadBalancerPoolLbAlgorithm());
+        if (pool.getLoadBalancerPoolLbAlgorithm() != null) {
+            poolBuilder.setLbAlgorithm(pool.getLoadBalancerPoolLbAlgorithm());
         }
-        if (pools.getLoadBalancerPoolListeners() != null) {
+        if (pool.getLoadBalancerPoolListeners() != null) {
             List<Uuid> listListener = new ArrayList<Uuid>();
-            for (Neutron_ID neutron_id : pools.getLoadBalancerPoolListeners()) {
+            for (Neutron_ID neutron_id : pool.getLoadBalancerPoolListeners()) {
                 listListener.add(toUuid(neutron_id.getID()));
             }
-            poolsBuilder.setListeners(listListener);
-        }
-        if (pools.getLoadBalancerPoolMembers() != null) {
-            List<Uuid> listMember = new ArrayList<Uuid>();
-            for (NeutronLoadBalancerPoolMember laodBalancerPoolMember : pools.getLoadBalancerPoolMembers()) {
-                listMember.add(toUuid(laodBalancerPoolMember.getID()));
-
-            }
-            poolsBuilder.setMembers(listMember);
+            poolBuilder.setListeners(listListener);
         }
-        if (pools.getLoadBalancerPoolName() != null) {
-            poolsBuilder.setName(pools.getLoadBalancerPoolName());
+        // because members are another container, we don't want to copy
+        // it over, so just skip it here
+        if (pool.getLoadBalancerPoolName() != null) {
+            poolBuilder.setName(pool.getLoadBalancerPoolName());
         }
-        if (pools.getLoadBalancerPoolProtocol() != null) {
+        if (pool.getLoadBalancerPoolProtocol() != null) {
             ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
                 PROTOCOL_MAP.inverse();
-            poolsBuilder.setProtocol((Class<? extends ProtocolBase>) mapper.get(pools.getLoadBalancerPoolProtocol()));
+            poolBuilder.setProtocol((Class<? extends ProtocolBase>) mapper.get(pool.getLoadBalancerPoolProtocol()));
         }
-        if (pools.getLoadBalancerPoolSessionPersistence() != null) {
-            NeutronLoadBalancer_SessionPersistence sessionPersistence = pools.getLoadBalancerPoolSessionPersistence();
+        if (pool.getLoadBalancerPoolSessionPersistence() != null) {
+            NeutronLoadBalancer_SessionPersistence sessionPersistence = pool.getLoadBalancerPoolSessionPersistence();
             SessionPersistenceBuilder sessionPersistenceBuilder = new SessionPersistenceBuilder();
             sessionPersistenceBuilder.setCookieName(sessionPersistence.getCookieName());
             sessionPersistenceBuilder.setType(sessionPersistence.getType());
-            poolsBuilder.setSessionPersistence(sessionPersistenceBuilder.build());
+            poolBuilder.setSessionPersistence(sessionPersistenceBuilder.build());
         }
-        if (pools.getLoadBalancerPoolTenantID() != null) {
-            poolsBuilder.setTenantId(toUuid(pools.getLoadBalancerPoolTenantID()));
+        if (pool.getLoadBalancerPoolTenantID() != null) {
+            poolBuilder.setTenantId(toUuid(pool.getLoadBalancerPoolTenantID()));
         }
-        if (pools.getID() != null) {
-            poolsBuilder.setUuid(toUuid(pools.getID()));
+        if (pool.getID() != null) {
+            poolBuilder.setUuid(toUuid(pool.getID()));
         } else {
             LOGGER.warn("Attempting to write neutron load balancer pool without UUID");
         }
-        return poolsBuilder.build();
+        return poolBuilder.build();
+    }
+
+    protected NeutronLoadBalancerPool fromMd(Pool pool) {
+        NeutronLoadBalancerPool answer = new NeutronLoadBalancerPool();
+        if (pool.isAdminStateUp() != null) {
+            answer.setLoadBalancerPoolAdminStateIsUp(pool.isAdminStateUp());
+        }
+        if (pool.getDescr() != null) {
+            answer.setLoadBalancerPoolDescription(pool.getDescr());
+        }
+        if (pool.getHealthmonitorId() != null) {
+            answer.setNeutronLoadBalancerPoolHealthMonitorID(pool.getHealthmonitorId().getValue());
+        }
+        if (pool.getLbAlgorithm() != null) {
+            answer.setLoadBalancerPoolLbAlgorithm(pool.getLbAlgorithm());
+        }
+        if (pool.getListeners() != null) {
+            List<Neutron_ID> ids = new ArrayList<Neutron_ID>();
+            for (Uuid id : pool.getListeners()) {
+                ids.add(new Neutron_ID(id.getValue()));
+            }
+            answer.setLoadBalancerPoolListeners(ids);
+        }
+        if (pool.getMembers() != null) {
+            List<NeutronLoadBalancerPoolMember> members = new ArrayList<NeutronLoadBalancerPoolMember>();
+            for (Member member: pool.getMembers().getMember()) {
+                members.add(fromMemberMd(member));
+            }
+            answer.setLoadBalancerPoolMembers(members);
+        }
+        if (pool.getName() != null) {
+            answer.setLoadBalancerPoolName(pool.getName());
+        }
+        if (pool.getProtocol() != null) {
+            answer.setLoadBalancerPoolProtocol(PROTOCOL_MAP.get(pool.getProtocol()));
+        }
+        if (pool.getSessionPersistence() != null) {
+            NeutronLoadBalancer_SessionPersistence sessionPersistence = new NeutronLoadBalancer_SessionPersistence();
+            sessionPersistence.setCookieName(pool.getSessionPersistence().getCookieName());
+            sessionPersistence.setType(pool.getSessionPersistence().getType());
+            
+            answer.setLoadBalancerSessionPersistence(sessionPersistence);
+        }
+        if (pool.getTenantId() != null) {
+            answer.setLoadBalancerPoolTenantID(pool.getTenantId().getValue().replace("-",""));
+        }
+        if (pool.getUuid() != null) {
+            answer.setID(pool.getUuid().getValue());
+        }
+        return answer;
     }
 
     public static void registerNewInterface(BundleContext context,
@@ -194,4 +268,197 @@ public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<P
             registrations.add(neutronLoadBalancerPoolInterfaceRegistration);
         }
     }
+
+    public boolean neutronLoadBalancerPoolMemberExists(String poolUuid, String uuid) {
+        Member member = readMemberMd(
+                createMemberInstanceIdentifier(toMd(poolUuid),
+                                               toMemberMd(uuid)));
+        if (member == null) {
+            return false;
+        }
+        return true;
+    }
+
+    public NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(
+            String poolUuid, String uuid) {
+        Member member = readMemberMd(
+                createMemberInstanceIdentifier(toMd(poolUuid),
+                                               toMemberMd(uuid)));
+        if (member == null) {
+            return null;
+        }
+        return fromMemberMd(member);
+    }
+
+    public List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers(String poolUuid) {
+        Set<NeutronLoadBalancerPoolMember> allLoadBalancerPoolMembers = new HashSet<NeutronLoadBalancerPoolMember>();
+        Members members = readMd(createMembersInstanceIdentifier(toMd(poolUuid)));
+        if (members != null) {
+            for (Member member: members.getMember()) {
+                allLoadBalancerPoolMembers.add(fromMemberMd(member));
+            }
+        }
+        LOGGER.debug("Exiting getLoadBalancerPoolMembers, Found {} OpenStackLoadBalancerPoolMember",
+                allLoadBalancerPoolMembers.size());
+        List<NeutronLoadBalancerPoolMember> ans = new ArrayList<NeutronLoadBalancerPoolMember>();
+        ans.addAll(allLoadBalancerPoolMembers);
+        return ans;
+    }
+
+    public boolean addNeutronLoadBalancerPoolMember(String poolUuid, NeutronLoadBalancerPoolMember input) {
+        if (neutronLoadBalancerPoolMemberExists(poolUuid, input.getID())) {
+            return false;
+        }
+        addMemberMd(toMd(poolUuid), input);
+        return true;
+    }
+
+    public boolean removeNeutronLoadBalancerPoolMember(String poolUuid, String uuid) {
+        if (!neutronLoadBalancerPoolMemberExists(poolUuid, uuid)) {
+            return false;
+        }
+        return removeMemberMd(toMd(poolUuid), toMemberMd(uuid));
+    }
+
+    public boolean updateNeutronLoadBalancerPoolMember(String poolUuid,
+            String uuid, NeutronLoadBalancerPoolMember delta) {
+        if (!neutronLoadBalancerPoolMemberExists(poolUuid, uuid)) {
+            return false;
+        }
+        updateMemberMd(toMd(poolUuid), delta);
+        return true;
+    }
+
+    public boolean neutronLoadBalancerPoolMemberInUse(String poolUuid,
+            String loadBalancerPoolMemberID) {
+        return !neutronLoadBalancerPoolMemberExists(poolUuid,
+                                                    loadBalancerPoolMemberID);
+    }
+
+    protected InstanceIdentifier<Member> createMemberInstanceIdentifier(Pool pool,
+            Member item) {
+        return InstanceIdentifier.create(Neutron.class)
+            .child(Pools.class)
+            .child(Pool.class, pool.getKey())
+            .child(Members.class)
+            .child(Member.class, item.getKey());
+    }
+
+    protected InstanceIdentifier<Members> createMembersInstanceIdentifier(Pool pool) {
+        return InstanceIdentifier.create(Neutron.class)
+            .child(Pools.class)
+            .child(Pool.class, pool.getKey())
+            .child(Members.class);
+    }
+
+    static NeutronLoadBalancerPoolMember fromMemberMd(Member member) {
+        NeutronLoadBalancerPoolMember answer = new NeutronLoadBalancerPoolMember();
+        if (member.isAdminStateUp() != null) {
+            answer.setPoolMemberAdminStateIsUp(member.isAdminStateUp());
+        }
+        if (member.getAddress() != null) {
+            answer.setPoolMemberAddress(String.valueOf(member.getAddress().getValue()));
+        }
+        if (member.getProtocolPort() != null) {
+            answer.setPoolMemberProtoPort(member.getProtocolPort());
+        }
+        if (member.getUuid() != null) {
+            answer.setID(member.getUuid().getValue());
+            answer.setPoolID(member.getUuid().getValue());
+        }
+        if (member.getSubnetId() != null) {
+            answer.setPoolMemberSubnetID(member.getSubnetId().getValue());
+        }
+        if (member.getTenantId() != null) {
+            answer.setPoolMemberTenantID(member.getTenantId().getValue().replace("-",""));
+        }
+        if (member.getWeight() != null) {
+            answer.setPoolMemberWeight(member.getWeight());
+        }
+        return answer;
+    }
+
+    protected Member toMemberMd(NeutronLoadBalancerPoolMember member) {
+        MemberBuilder memberBuilder = new MemberBuilder();
+        memberBuilder.setAdminStateUp(member.getPoolMemberAdminStateIsUp());
+        if (member.getPoolMemberAddress() != null) {
+            IpAddress ipAddress = new IpAddress(member.getPoolMemberAddress().toCharArray());
+            memberBuilder.setAddress(ipAddress);
+        }
+        if (member.getPoolMemberProtoPort() != null) {
+            memberBuilder.setProtocolPort(member.getPoolMemberProtoPort());
+        }
+        if (member.getID() != null) {
+            memberBuilder.setUuid(toUuid(member.getID()));
+        }
+        if (member.getPoolMemberSubnetID() != null) {
+            memberBuilder.setSubnetId(toUuid(member.getPoolMemberSubnetID()));
+        }
+        if (member.getPoolMemberTenantID() != null) {
+            memberBuilder.setTenantId(toUuid(member.getPoolMemberTenantID()));
+        }
+        if (member.getPoolMemberWeight() != null) {
+            memberBuilder.setWeight(member.getPoolMemberWeight());
+        }
+        return memberBuilder.build();
+    }
+
+    protected Member toMemberMd(String uuid) {
+        MemberBuilder memberBuilder = new MemberBuilder();
+        memberBuilder.setUuid(toUuid(uuid));
+        return memberBuilder.build();
+    }
+
+    protected <T extends org.opendaylight.yangtools.yang.binding.DataObject> T readMemberMd(InstanceIdentifier<T> path) {
+        T result = null;
+        final ReadOnlyTransaction transaction = getDataBroker().newReadOnlyTransaction();
+        CheckedFuture<Optional<T>, ReadFailedException> future = transaction.read(LogicalDatastoreType.CONFIGURATION, path);
+        if (future != null) {
+            Optional<T> optional;
+            try {
+                optional = future.checkedGet();
+                if (optional.isPresent()) {
+                    result = optional.get();
+                }
+            } catch (ReadFailedException e) {
+                LOGGER.warn("Failed to read {}", path, e);
+            }
+        }
+        transaction.close();
+        return result;
+    }
+
+    protected boolean addMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject) {
+        // TODO think about adding existence logic
+        return updateMemberMd(pool, neutronObject);
+    }
+
+    protected boolean updateMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject) {
+        WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
+        Member item = toMemberMd(neutronObject);
+        InstanceIdentifier<Member> iid = createMemberInstanceIdentifier(pool, item);
+        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item,true);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOGGER.warn("Transation failed ",e);
+            return false;
+        }
+        return true;
+    }
+
+    protected boolean removeMemberMd(Pool pool, Member item) {
+        WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
+        InstanceIdentifier<Member> iid = createMemberInstanceIdentifier(pool, item);
+        transaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOGGER.warn("Transation failed ",e);
+            return false;
+        }
+        return true;
+    }
 }
diff --git a/transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolMemberInterface.java b/transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronLoadBalancerPoolMemberInterface.java
deleted file mode 100644 (file)
index 5d360a9..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.neutron.transcriber;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberCRUD;
-import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.pools.Member;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.pools.member.Members;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.pools.member.MembersBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NeutronLoadBalancerPoolMemberInterface extends
-        AbstractNeutronInterface<Members, NeutronLoadBalancerPoolMember> implements INeutronLoadBalancerPoolMemberCRUD {
-    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerPoolMemberInterface.class);
-    private ConcurrentMap<String, NeutronLoadBalancerPoolMember> loadBalancerPoolMemberDB = new ConcurrentHashMap<String, NeutronLoadBalancerPoolMember>();
-
-    NeutronLoadBalancerPoolMemberInterface(ProviderContext providerContext) {
-        super(providerContext);
-    }
-
-    @Override
-    public boolean neutronLoadBalancerPoolMemberExists(String uuid) {
-        return loadBalancerPoolMemberDB.containsKey(uuid);
-    }
-
-    @Override
-    public NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String uuid) {
-        if (!neutronLoadBalancerPoolMemberExists(uuid)) {
-            LOGGER.debug("No LoadBalancerPoolMember Have Been Defined");
-            return null;
-        }
-        return loadBalancerPoolMemberDB.get(uuid);
-    }
-
-    @Override
-    public List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers() {
-        Set<NeutronLoadBalancerPoolMember> allLoadBalancerPoolMembers = new HashSet<NeutronLoadBalancerPoolMember>();
-        for (Map.Entry<String, NeutronLoadBalancerPoolMember> entry : loadBalancerPoolMemberDB.entrySet()) {
-            NeutronLoadBalancerPoolMember loadBalancerPoolMember = entry.getValue();
-            allLoadBalancerPoolMembers.add(loadBalancerPoolMember);
-        }
-        LOGGER.debug("Exiting getLoadBalancerPoolMembers, Found {} OpenStackLoadBalancerPoolMember",
-                allLoadBalancerPoolMembers.size());
-        List<NeutronLoadBalancerPoolMember> ans = new ArrayList<NeutronLoadBalancerPoolMember>();
-        ans.addAll(allLoadBalancerPoolMembers);
-        return ans;
-    }
-
-    @Override
-    public boolean addNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember input) {
-        if (neutronLoadBalancerPoolMemberExists(input.getID())) {
-            return false;
-        }
-        loadBalancerPoolMemberDB.putIfAbsent(input.getID(), input);
-        return true;
-    }
-
-    @Override
-    public boolean removeNeutronLoadBalancerPoolMember(String uuid) {
-        if (!neutronLoadBalancerPoolMemberExists(uuid)) {
-            return false;
-        }
-        loadBalancerPoolMemberDB.remove(uuid);
-        return true;
-    }
-
-    @Override
-    public boolean updateNeutronLoadBalancerPoolMember(String uuid, NeutronLoadBalancerPoolMember delta) {
-        if (!neutronLoadBalancerPoolMemberExists(uuid)) {
-            return false;
-        }
-        NeutronLoadBalancerPoolMember target = loadBalancerPoolMemberDB.get(uuid);
-        return overwrite(target, delta);
-    }
-
-    @Override
-    public boolean neutronLoadBalancerPoolMemberInUse(String loadBalancerPoolMemberID) {
-        return !neutronLoadBalancerPoolMemberExists(loadBalancerPoolMemberID);
-    }
-
-    @Override
-    protected InstanceIdentifier<Members> createInstanceIdentifier(Members item) {
-        return InstanceIdentifier.create(Member.class).child(Members.class);
-    }
-
-    @Override
-    protected Members toMd(NeutronLoadBalancerPoolMember member) {
-        MembersBuilder membersBuilder = new MembersBuilder();
-        membersBuilder.setAdminStateUp(member.getPoolMemberAdminStateIsUp());
-        if (member.getPoolID() != null) {
-            membersBuilder.setUuid(toUuid(member.getPoolID()));
-        }
-        if (member.getPoolMemberAddress() != null) {
-            IpAddress ipAddress = new IpAddress(member.getPoolMemberAddress().toCharArray());
-            membersBuilder.setAddress(ipAddress);
-        }
-        if (member.getPoolMemberProtoPort() != null) {
-            membersBuilder.setProtocolPort(member.getPoolMemberProtoPort());
-        }
-        if (member.getID() != null) {
-            membersBuilder.setUuid(toUuid(member.getID()));
-        }
-        if (member.getPoolMemberSubnetID() != null) {
-            membersBuilder.setSubnetId(toUuid(member.getPoolMemberSubnetID()));
-        }
-        if (member.getPoolMemberTenantID() != null) {
-            membersBuilder.setTenantId(toUuid(member.getPoolMemberTenantID()));
-        }
-        if (member.getPoolMemberWeight() != null) {
-            membersBuilder.setWeight(member.getPoolMemberWeight());
-        }
-        return membersBuilder.build();
-    }
-
-    @Override
-    protected Members toMd(String uuid) {
-        MembersBuilder membersBuilder = new MembersBuilder();
-        membersBuilder.setUuid(toUuid(uuid));
-        return membersBuilder.build();
-    }
-
-    public static void registerNewInterface(BundleContext context,
-                                            ProviderContext providerContext,
-                                            List<ServiceRegistration<?>> registrations) {
-        NeutronLoadBalancerPoolMemberInterface neutronLoadBalancerPoolMemberInterface = new NeutronLoadBalancerPoolMemberInterface(providerContext);
-        ServiceRegistration<INeutronLoadBalancerPoolMemberCRUD> neutronLoadBalancerPoolMemberInterfaceRegistration = context.registerService(INeutronLoadBalancerPoolMemberCRUD.class, neutronLoadBalancerPoolMemberInterface, null);
-        if(neutronLoadBalancerPoolMemberInterfaceRegistration != null) {
-            registrations.add(neutronLoadBalancerPoolMemberInterfaceRegistration);
-        }
-    }
-}