Container Management and associated Northbound APIs.
[controller.git] / opendaylight / containermanager / implementation / src / main / java / org / opendaylight / controller / containermanager / internal / ContainerImpl.java
index 15f939d39bb853e7f411d3d71814fd21c0d8166b..1dfab887af4779039e677f8a40d9a9d30de9f5ac 100644 (file)
  * @brief  Class that instantiated per-container implements the
  * interface IContainer
  *
- *
  */
 package org.opendaylight.controller.containermanager.internal;
 
+import java.util.concurrent.ConcurrentMap;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Dictionary;
+import java.util.Map;
+
 import org.apache.felix.dm.Component;
+import org.opendaylight.controller.sal.core.ContainerFlow;
+import org.opendaylight.controller.sal.core.IContainer;
+import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
+
+import org.opendaylight.controller.containermanager.ContainerData;
+
 import java.util.Set;
-import org.opendaylight.controller.sal.core.Node;
-import org.opendaylight.controller.sal.core.ContainerFlow;
 import java.util.List;
-import org.opendaylight.controller.sal.core.IContainer;
 
 public class ContainerImpl implements IContainer {
     private String containerName = null;
+    private IContainerInternal iContainerInternal = null;
+
+    public void setIContainerInternal(IContainerInternal s) {
+        this.iContainerInternal = s;
+    }
+
+    public void unsetIContainerInternal(IContainerInternal s) {
+        if (this.iContainerInternal == s) {
+            this.iContainerInternal = null;
+        }
+    }
 
     /**
      * Function called by the dependency manager when all the required
@@ -48,21 +66,52 @@ public class ContainerImpl implements IContainer {
 
     @Override
     public List<ContainerFlow> getContainerFlows() {
-        return null;
+        List<ContainerFlow> list = new ArrayList<ContainerFlow>();
+
+        ContainerData d = this.iContainerInternal.getContainerData(this.containerName);
+        if (d != null) {
+            list.addAll(d.getContainerFlowSpecs());
+        }
+        return list;
     }
 
     @Override
     public short getTag(Node n) {
+        ContainerData d = this.iContainerInternal.getContainerData(this.containerName);
+        if (d != null) {
+            return d.getStaticVlan();
+        }
+        // Return 0 because in containerData that means an unassigned tag
         return (short) 0;
     }
 
     @Override
     public Set<NodeConnector> getNodeConnectors() {
-        return null;
+        Set<NodeConnector> set = new HashSet<NodeConnector>();
+
+        ContainerData d = this.iContainerInternal.getContainerData(this.containerName);
+        if (d != null) {
+            ConcurrentMap<Node, Set<NodeConnector>> m = d.getSwPorts();
+            if (m != null) {
+                for (Map.Entry<Node, Set<NodeConnector>> entry : m.entrySet()) {
+                    set.addAll(entry.getValue());
+                }
+            }
+        }
+        return set;
     }
 
     @Override
     public Set<Node> getNodes() {
-        return null;
+        Set<Node> set = new HashSet<Node>();
+
+        ContainerData d = this.iContainerInternal.getContainerData(this.containerName);
+        if (d != null) {
+            ConcurrentMap<Node, Set<NodeConnector>> m = d.getSwPorts();
+            if (m != null) {
+                set.addAll(m.keySet());
+            }
+        }
+        return set;
     }
 }