apply checkstyle check during build for neutron-ovsdb
[groupbasedpolicy.git] / neutron-ovsdb / src / main / java / org / opendaylight / groupbasedpolicy / neutron / ovsdb / util / InventoryHelper.java
index 7ec29c0961cee178a28cd3666a0a927050e7fca9..807ad1c8e84ce101ab1741db3a9d7281a108448d 100755 (executable)
@@ -7,16 +7,26 @@
  */
 package org.opendaylight.groupbasedpolicy.neutron.ovsdb.util;
 
+import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbBridgeFromTerminationPoint;
+import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbTerminationPoint;
+import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.readFromDs;
+import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.submitToDs;
+
 import com.google.common.base.Optional;
+
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
+
 import org.apache.commons.lang3.StringUtils;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.neutron.ovsdb.AbstractTunnelType;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfaces;
@@ -24,7 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfacesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
@@ -37,23 +46,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbBridgeFromTerminationPoint;
-import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbTerminationPoint;
-import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.readFromDs;
-import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.submitToDs;
-
 public class InventoryHelper {
 
     private static final Logger LOG = LoggerFactory.getLogger(InventoryHelper.class);
     private static final String HEX = "0x";
 
     /**
-     * Convert an OpenFlow Datapath ID to a Long
+     * Convert an OpenFlow Datapath ID to a Long.
      *
      * @param dpid The OpenFlow Datapath ID
      * @return The Long representation of the DPID
@@ -74,7 +73,9 @@ public class InventoryHelper {
      * augmentation, converting that to a Long, and prepending it with the
      * "openflow:" prefix.
      *
-     * @param ovsdbBridge The OVSDB bridge augmentation
+     * @param ovsdbBridge The {@link OvsdbBridgeAugmentation}
+     * @param ovsdbTpIid the {@link OvsdbTerminationPointAugmentation}
+     * @param dataBroker the {@link DataBroker}
      * @return String representation of the Inventory NodeId, null if it fails
      */
     public static String getInventoryNodeIdString(OvsdbBridgeAugmentation ovsdbBridge,
@@ -105,6 +106,8 @@ public class InventoryHelper {
      *
      * @param inventoryNodeId The string representation of the Inventory NodeId
      * @param ovsdbTp The {@link OvsdbTerminationPointAugmentation}
+     * @param tpIid the InstanceIdentifier for OvsdbTerminationPointAugmentation
+     * @param dataBroker the {@link DataBroker}
      * @return String representation of the Inventory NodeConnectorId, null if it fails
      */
     public static String getInventoryNodeConnectorIdString(String inventoryNodeId,
@@ -137,8 +140,11 @@ public class InventoryHelper {
     /**
      * Read the {@link OfOverlayNodeConfig} augmentation from the
      * Inventory Node, and verify that the tunnel types we need
-     * are present
+     * are present.
      *
+     * @param nodeIdString The inventory node id string
+     * @param requiredTunnelTypes the list of tunnel types
+     * @param dataBroker the {@link DataBroker}
      * @return true if tunnel types are present, false otherwise
      */
     public static boolean checkOfOverlayConfig(String nodeIdString, List<AbstractTunnelType> requiredTunnelTypes,
@@ -168,9 +174,10 @@ public class InventoryHelper {
         return true;
     }
 
-    public static void addOfOverlayExternalPort(String nodeIdString, NodeConnectorId ncId, DataBroker dataBroker) {
+    public static InstanceIdentifier<ExternalInterfaces> addOfOverlayExternalPort(NodeId nodeId, NodeConnectorId ncId,
+        DataBroker dataBroker) {
         InstanceIdentifier<ExternalInterfaces> nodeExternalInterfacesIid = InstanceIdentifier.builder(Nodes.class)
-            .child(Node.class, new NodeKey(new NodeId(nodeIdString)))
+            .child(Node.class, new NodeKey(nodeId))
             .augmentation(OfOverlayNodeConfig.class)
             .child(ExternalInterfaces.class, new ExternalInterfacesKey(ncId))
             .build();
@@ -178,10 +185,11 @@ public class InventoryHelper {
         ExternalInterfaces externalInterfaces = new ExternalInterfacesBuilder().setKey(new ExternalInterfacesKey(ncId))
             .setNodeConnectorId(ncId)
             .build();
-        WriteTransaction transaction = dataBroker.newReadWriteTransaction();
+        WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
         transaction.put(LogicalDatastoreType.CONFIGURATION, nodeExternalInterfacesIid, externalInterfaces, true);
-        submitToDs(transaction);
-        LOG.trace("Added external interface node connector {} to node {}", ncId.getValue(), nodeIdString);
+        DataStoreHelper.submitToDs(transaction);
+        LOG.trace("Added external interface node connector {} to node {}", ncId.getValue(), nodeId.getValue());
+        return nodeExternalInterfacesIid;
     }
 
     public static OfOverlayNodeConfig getOfOverlayConfig(String nodeIdString, DataBroker dataBroker) {
@@ -199,26 +207,15 @@ public class InventoryHelper {
         return null;
     }
 
-    private static boolean addOfOverlayAugmentation(OfOverlayNodeConfig config, String nodeIdString, DataBroker dataBroker) {
-        InstanceIdentifier<OfOverlayNodeConfig> ofOverlayNodeIid = InstanceIdentifier.builder(Nodes.class)
-            .child(Node.class, new NodeKey(new NodeId(nodeIdString)))
-            .augmentation(OfOverlayNodeConfig.class)
-            .build();
-
-        WriteTransaction transaction = dataBroker.newReadWriteTransaction();
-        transaction.put(LogicalDatastoreType.CONFIGURATION, ofOverlayNodeIid, config, true);
-        return submitToDs(transaction);
-    }
-
     /**
-     * Update the {@link OfOverlayConfig} of an Inventory Node
+     * Update the {@link OfOverlayNodeConfig} of an Inventory Node
      * using the new tunnel state.
      *
-     * @param ip
-     * @param nodeIdString
-     * @param nodeConnectorIdString
-     * @param tunnelType
-     * @param dataBroker
+     * @param ip the ipaddress
+     * @param nodeIdString the string representation of the inventory NodeId
+     * @param nodeConnectorIdString the string representation of the inventory NodeConnectorId
+     * @param tunnelType the tunnel type
+     * @param dataBroker the {@link DataBroker}
      */
     public static void updateOfOverlayConfig(IpAddress ip, String nodeIdString, String nodeConnectorIdString,
             AbstractTunnelType tunnelType, DataBroker dataBroker) {
@@ -238,7 +235,7 @@ public class InventoryHelper {
         Set<Tunnel> existingTunnels = new HashSet<Tunnel>();
         if (ofConfig != null) {
             ofOverlayNodeConfigBuilder = new OfOverlayNodeConfigBuilder(ofConfig);
-            if(ofConfig.getTunnel() != null) {
+            if (ofConfig.getTunnel() != null) {
                 existingTunnels.addAll(ofConfig.getTunnel());
             }
         } else {
@@ -283,9 +280,9 @@ public class InventoryHelper {
             ofOverlayNodeConfigBuilder.setTunnel(new ArrayList<Tunnel>(existingTunnels));
         }
         OfOverlayNodeConfig newConfig = ofOverlayNodeConfigBuilder.build();
-        if (addOfOverlayAugmentation(newConfig, nodeIdString, dataBroker)) {
-            LOG.trace("updateOfOverlayConfig - Added Tunnel: {} to Node: {} at NodeConnector: {}",tunnelBuilder.build(), nodeIdString, nodeConnectorIdString);
-            return;
+        if (addOfOverlayConfig(newConfig, new NodeId(nodeIdString), dataBroker)) {
+            LOG.trace("updateOfOverlayConfig - Added Tunnel: {} to Node: {} at NodeConnector: {}",
+                tunnelBuilder.build(), nodeIdString, nodeConnectorIdString);
         } else {
             LOG.error("updateOfOverlayConfig - could not write OfOverlayNodeConfig: {} to datastore.", newConfig);
         }
@@ -315,14 +312,42 @@ public class InventoryHelper {
 
         // runs only if some tunnels were really removed
         if (existingTunnels.removeAll(tunnelsToRemove)) {
-            OfOverlayNodeConfigBuilder ofOverlayBuilder;
-            if (ofConfig == null) {
-                ofOverlayBuilder = new OfOverlayNodeConfigBuilder();
-            } else {
-                ofOverlayBuilder = new OfOverlayNodeConfigBuilder(ofConfig);
+            ReadWriteTransaction writeTx = dataBroker.newReadWriteTransaction();
+            for (Tunnel tunnel : tunnelsToRemove) {
+                InstanceIdentifier<Tunnel> tunnelIid = InstanceIdentifier.builder(Nodes.class)
+                    .child(Node.class, new NodeKey(new NodeId(nodeIdString)))
+                    .augmentation(OfOverlayNodeConfig.class)
+                    .child(Tunnel.class, tunnel.getKey())
+                    .build();
+                writeTx.delete(LogicalDatastoreType.CONFIGURATION, tunnelIid);
+                LOG.trace("Removing tunnel: {} from node {}",tunnel, nodeIdString);
             }
-            ofOverlayBuilder.setTunnel(existingTunnels);
-            addOfOverlayAugmentation(ofOverlayBuilder.build(), nodeIdString, dataBroker);
+            submitToDs(writeTx);
+        }
+    }
+
+    private static boolean addOfOverlayConfig(OfOverlayNodeConfig newConfig, NodeId nodeId, DataBroker dataBroker) {
+        ReadWriteTransaction writeTx = dataBroker.newReadWriteTransaction();
+        InstanceIdentifier<OfOverlayNodeConfig> ofOverlayNodeIid = InstanceIdentifier.builder(Nodes.class)
+            .child(Node.class, new NodeKey(nodeId))
+            .augmentation(OfOverlayNodeConfig.class)
+            .build();
+        writeTx.put(LogicalDatastoreType.CONFIGURATION, ofOverlayNodeIid, newConfig, true);
+        LOG.trace("Adding tunnel: {} to node {}", newConfig, nodeId.getValue());
+        return submitToDs(writeTx);
+    }
+
+    private static boolean addTunnelsOfOverlayConfig(List<Tunnel> tunnels, NodeId nodeId, DataBroker dataBroker) {
+        ReadWriteTransaction writeTx = dataBroker.newReadWriteTransaction();
+        for (Tunnel tunnel : tunnels) {
+            InstanceIdentifier<Tunnel> tunnelIid = InstanceIdentifier.builder(Nodes.class)
+                .child(Node.class, new NodeKey(nodeId))
+                .augmentation(OfOverlayNodeConfig.class)
+                .child(Tunnel.class, tunnel.getKey())
+                .build();
+            writeTx.put(LogicalDatastoreType.CONFIGURATION, tunnelIid, tunnel, true);
+            LOG.trace("Adding tunnel: {} to node {}",tunnel, nodeId.getValue());
         }
+        return submitToDs(writeTx);
     }
 }