fixed dependencies for faas renderer
[groupbasedpolicy.git] / renderers / ios-xe / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ios_xe_provider / impl / writer / PolicyWriter.java
index 711b576387913aea454db0ef2def51a85b6a89fe..6532cdb817ebca9208fa8bd0a9ce0795a896b794 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer;
 
+import java.util.HashSet;
+import java.util.Set;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.Futures;
@@ -21,19 +23,16 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class PolicyWriter {
 
     private static final Logger LOG = LoggerFactory.getLogger(PolicyWriter.class);
 
     private final DataBroker mountpoint;
     // Local cache
-    private final List<ClassMap> classMapEntries;
-    private final List<Class> policyMapEntries;
-    private final List<ServiceFfName> remoteForwarders;
-    private final List<ServiceChain> serviceChains;
+    private final Set<ClassMap> classMapEntries;
+    private final Set<Class> policyMapEntries;
+    private final Set<ServiceFfName> remoteForwarders;
+    private final Set<ServiceChain> serviceChains;
     private final NodeId nodeId;
     private final String interfaceName;
     private final String policyMapName;
@@ -41,10 +40,10 @@ public class PolicyWriter {
 
     public PolicyWriter(final DataBroker dataBroker, final String interfaceName, final String ipAddress,
                         final String policyMapName, final NodeId nodeId) {
-        classMapEntries = new ArrayList<>();
-        policyMapEntries = new ArrayList<>();
-        remoteForwarders = new ArrayList<>();
-        serviceChains = new ArrayList<>();
+        classMapEntries = new HashSet<>();
+        policyMapEntries = new HashSet<>();
+        remoteForwarders = new HashSet<>();
+        serviceChains = new HashSet<>();
 
         this.nodeId = Preconditions.checkNotNull(nodeId);
         mountpoint = Preconditions.checkNotNull(dataBroker);
@@ -53,24 +52,12 @@ public class PolicyWriter {
         this.policyMapName = Preconditions.checkNotNull(policyMapName);
     }
 
-    public void cache(ClassMap classMap) {
-        classMapEntries.add(classMap);
-    }
-
-    public void cache(List<Class> policyMapEntries) {
-        this.policyMapEntries.addAll(policyMapEntries);
-    }
-
-    public void cache(ServiceFfName remoteForwarder) {
-        remoteForwarders.add(remoteForwarder);
-    }
-
-    public void cache(ServiceChain serviceChain) {
-        serviceChains.add(serviceChain);
-    }
-
     public CheckedFuture<Boolean, TransactionCommitFailedException> commitToDatastore() {
-        LOG.info("Configuring policy on node {} ... ", nodeId.getValue());
+        LOG.debug("Configuring policy on node {}, interface {} ... ", nodeId.getValue(), interfaceName);
+        if (policyMapEntries.isEmpty()) {
+            LOG.debug("Policy map {} is empty, skipping", policyMapName);
+            return Futures.immediateCheckedFuture(true);
+        }
         // SFC
         boolean remoteResult = PolicyWriterUtil.writeRemote(remoteForwarders, nodeId, mountpoint);
         boolean servicePathsResult = PolicyWriterUtil.writeServicePaths(serviceChains, nodeId, mountpoint);
@@ -79,35 +66,55 @@ public class PolicyWriter {
         boolean policyMapResult = PolicyWriterUtil.writePolicyMap(policyMapName, policyMapEntries, nodeId, mountpoint);
         boolean interfaceResult = PolicyWriterUtil.writeInterface(policyMapName, interfaceName, nodeId, mountpoint);
         // Result
-        LOG.info("Policy configuration on node {} completed", nodeId.getValue());
+        LOG.info("Policy-map created on node {}, interface {}", nodeId.getValue(), interfaceName);
         return Futures.immediateCheckedFuture(classMapResult && policyMapResult && interfaceResult && remoteResult
                 && servicePathsResult);
     }
 
     public CheckedFuture<Boolean, TransactionCommitFailedException> removeFromDatastore() {
-        LOG.info("Removing policy from node {} ... ", nodeId.getValue());
+        LOG.debug("Removing policy from node {}, interface {} ... ", nodeId.getValue(), interfaceName);
+        if (policyMapEntries.isEmpty()) {
+            LOG.debug("Policy map {} is empty, nothing to remove", policyMapName);
+            return Futures.immediateCheckedFuture(true);
+        }
         // GBP - maintain order!
         boolean policyMapEntriesResult = PolicyWriterUtil.removePolicyMapEntries(policyMapName, policyMapEntries,
                 nodeId, mountpoint);
         boolean classMapResult = PolicyWriterUtil.removeClassMaps(classMapEntries, nodeId, mountpoint);
-        // TODO remove class map?
         // SFC
+        boolean remoteSffResult = PolicyWriterUtil.removeRemote(remoteForwarders, nodeId, mountpoint);
         boolean servicePathsResult = PolicyWriterUtil.removeServicePaths(serviceChains, nodeId, mountpoint);
-        // TODO remove remote forwarders
         // Result
-        LOG.info("Policy removed from node {}", nodeId.getValue());
-        return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult);
+        LOG.info("Policy-map removed from node {}, interface {}", nodeId.getValue(), interfaceName);
+        return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult
+                && remoteSffResult);
+    }
+
+    public void cache(ClassMap classMap) {
+        classMapEntries.add(classMap);
+    }
+
+    public void cache(Class policyMapEntry) {
+        this.policyMapEntries.add(policyMapEntry);
+    }
+
+    public void cache(ServiceFfName remoteForwarder) {
+        remoteForwarders.add(remoteForwarder);
+    }
+
+    public void cache(ServiceChain serviceChain) {
+        serviceChains.add(serviceChain);
     }
 
     public String getManagementIpAddress() {
         return managementIpAddress;
     }
 
-    public DataBroker getCurrentMountpoint() {
+    public DataBroker getMountpoint() {
         return mountpoint;
     }
 
-    public NodeId getCurrentNodeId() {
+    public NodeId getNodeId() {
         return nodeId;
     }
 }