[ONOS-7553] Support injecting physical interfaces to openstack node

Change-Id: I5d746e9b4fa6015dbaec90d27ea7e1a7fa105e31
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
index 8927880..50f5d53 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
@@ -29,7 +29,10 @@
 import org.onosproject.net.group.GroupKey;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackNode;
+import org.onosproject.openstacknode.api.OpenstackPhyInterface;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Objects;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -51,6 +54,7 @@
     private final String vlanIntf;
     private final String uplinkPort;
     private final NodeState state;
+    private final Collection<OpenstackPhyInterface> phyIntfs;
 
     private static final String NOT_NULL_MSG = "Node % cannot be null";
 
@@ -67,6 +71,7 @@
      * @param vlanIntf      VLAN interface
      * @param uplinkPort    uplink port name
      * @param state         node state
+     * @param phyIntfs      physical interfaces
      */
     protected DefaultOpenstackNode(String hostname, NodeType type,
                                    DeviceId intgBridge,
@@ -74,7 +79,8 @@
                                    IpAddress dataIp,
                                    String vlanIntf,
                                    String uplinkPort,
-                                   NodeState state) {
+                                   NodeState state,
+                                   Collection<OpenstackPhyInterface> phyIntfs) {
         this.hostname = hostname;
         this.type = type;
         this.intgBridge = intgBridge;
@@ -83,6 +89,7 @@
         this.vlanIntf = vlanIntf;
         this.uplinkPort = uplinkPort;
         this.state = state;
+        this.phyIntfs = phyIntfs;
     }
 
     @Override
@@ -220,7 +227,8 @@
                     Objects.equals(managementIp, that.managementIp) &&
                     Objects.equals(dataIp, that.dataIp) &&
                     Objects.equals(uplinkPort, that.uplinkPort) &&
-                    Objects.equals(vlanIntf, that.vlanIntf);
+                    Objects.equals(vlanIntf, that.vlanIntf) &&
+                    Objects.equals(phyIntfs, that.phyIntfs);
         }
         return false;
     }
@@ -233,7 +241,8 @@
                 managementIp,
                 dataIp,
                 vlanIntf,
-                uplinkPort);
+                uplinkPort,
+                phyIntfs);
     }
 
     @Override
@@ -247,6 +256,7 @@
                 .add("vlanIntf", vlanIntf)
                 .add("uplinkPort", uplinkPort)
                 .add("state", state)
+                .add("phyIntfs", phyIntfs)
                 .toString();
     }
 
@@ -261,9 +271,20 @@
                 .vlanIntf(vlanIntf)
                 .uplinkPort(uplinkPort)
                 .state(newState)
+                .phyIntfs(phyIntfs)
                 .build();
     }
 
+    @Override
+    public Collection<OpenstackPhyInterface> phyIntfs() {
+
+        if (phyIntfs == null) {
+            return new ArrayList<>();
+        }
+
+        return phyIntfs;
+    }
+
     /**
      * Returns new builder instance.
      *
@@ -288,7 +309,8 @@
                 .dataIp(osNode.dataIp())
                 .vlanIntf(osNode.vlanIntf())
                 .uplinkPort(osNode.uplinkPort())
-                .state(osNode.state());
+                .state(osNode.state())
+                .phyIntfs(osNode.phyIntfs());
     }
 
     /**
@@ -304,6 +326,7 @@
         private String vlanIntf;
         private String uplinkPort;
         private NodeState state;
+        private Collection<OpenstackPhyInterface> phyIntfs;
 
         // private constructor not intended to use from external
         private Builder() {
@@ -331,7 +354,8 @@
                     dataIp,
                     vlanIntf,
                     uplinkPort,
-                    state);
+                    state,
+                    phyIntfs);
         }
 
         @Override
@@ -383,6 +407,12 @@
             this.state = state;
             return this;
         }
+
+        @Override
+        public Builder phyIntfs(Collection<OpenstackPhyInterface> phyIntfs) {
+            this.phyIntfs = phyIntfs;
+            return this;
+        }
     }
 }