Add VM name field in kubevirt port object, expose via CLI and REST

Change-Id: I0ac84073fa7692862314fdf8862b4e3a256dd2d8
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
index ccd35e9..493d80a 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPort.java
@@ -37,6 +37,7 @@
 
     private static final String NOT_NULL_MSG = "Port % cannot be null";
 
+    private final String vmName;
     private final String networkId;
     private final MacAddress macAddress;
     private final IpAddress ipAddress;
@@ -47,6 +48,7 @@
     /**
      * Default constructor.
      *
+     * @param vmName            VM name
      * @param networkId         network identifier
      * @param macAddress        MAC address
      * @param ipAddress         IP address
@@ -54,8 +56,9 @@
      * @param portNumber        port number
      * @param securityGroups    security groups
      */
-    public DefaultKubevirtPort(String networkId, MacAddress macAddress, IpAddress ipAddress,
+    public DefaultKubevirtPort(String vmName, String networkId, MacAddress macAddress, IpAddress ipAddress,
                                DeviceId deviceId, PortNumber portNumber, Set<String> securityGroups) {
+        this.vmName = vmName;
         this.networkId = networkId;
         this.macAddress = macAddress;
         this.ipAddress = ipAddress;
@@ -65,6 +68,11 @@
     }
 
     @Override
+    public String vmName() {
+        return vmName;
+    }
+
+    @Override
     public String networkId() {
         return networkId;
     }
@@ -122,6 +130,7 @@
     @Override
     public KubevirtPort updateIpAddress(IpAddress updateIpAddress) {
         return new Builder()
+                .vmName(vmName)
                 .networkId(networkId)
                 .macAddress(macAddress)
                 .ipAddress(updateIpAddress)
@@ -134,6 +143,7 @@
     @Override
     public KubevirtPort updatePortNumber(PortNumber updatedPortNumber) {
         return new Builder()
+                .vmName(vmName)
                 .networkId(networkId)
                 .macAddress(macAddress)
                 .ipAddress(ipAddress)
@@ -146,6 +156,7 @@
     @Override
     public KubevirtPort updateDeviceId(DeviceId updatedDeviceId) {
         return new Builder()
+                .vmName(vmName)
                 .networkId(networkId)
                 .macAddress(macAddress)
                 .ipAddress(ipAddress)
@@ -167,6 +178,7 @@
     @Override
     public KubevirtPort updateSecurityGroups(Set<String> sgs) {
         return new Builder()
+                .vmName(vmName)
                 .networkId(networkId)
                 .macAddress(macAddress)
                 .ipAddress(ipAddress)
@@ -185,19 +197,21 @@
             return false;
         }
         DefaultKubevirtPort that = (DefaultKubevirtPort) o;
-        return networkId.equals(that.networkId) && macAddress.equals(that.macAddress) &&
-                ipAddress.equals(that.ipAddress) && deviceId.equals(that.deviceId) &&
-                portNumber.equals(that.portNumber) && securityGroups.equals(that.securityGroups);
+        return vmName.equals(that.vmName) && networkId.equals(that.networkId) &&
+                macAddress.equals(that.macAddress) && ipAddress.equals(that.ipAddress) &&
+                deviceId.equals(that.deviceId) && portNumber.equals(that.portNumber) &&
+                securityGroups.equals(that.securityGroups);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(networkId, macAddress, ipAddress, deviceId, portNumber, securityGroups);
+        return Objects.hash(vmName, networkId, macAddress, ipAddress, deviceId, portNumber, securityGroups);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
+                .add("vmName", vmName)
                 .add("networkId", networkId)
                 .add("macAddress", macAddress)
                 .add("ipAddress", ipAddress)
@@ -221,6 +235,7 @@
      */
     public static final class Builder implements KubevirtPort.Builder {
 
+        private String vmName;
         private String networkId;
         private MacAddress macAddress;
         private IpAddress ipAddress;
@@ -234,11 +249,18 @@
 
         @Override
         public KubevirtPort build() {
+            checkArgument(vmName != null, NOT_NULL_MSG, "vmName");
             checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
             checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
 
-            return new DefaultKubevirtPort(networkId, macAddress, ipAddress,
-                    deviceId, portNumber, securityGroups);
+            return new DefaultKubevirtPort(vmName, networkId, macAddress,
+                    ipAddress, deviceId, portNumber, securityGroups);
+        }
+
+        @Override
+        public KubevirtPort.Builder vmName(String vmName) {
+            this.vmName = vmName;
+            return this;
         }
 
         @Override
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
index 3f19640..48c75d4 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtPort.java
@@ -28,6 +28,13 @@
 public interface KubevirtPort {
 
     /**
+     * Returns the name of VM where the kubevirt port is attached.
+     *
+     * @return VM name
+     */
+    String vmName();
+
+    /**
      * Returns the network identifier associated with the port.
      *
      * @return network identifier
@@ -128,6 +135,14 @@
         KubevirtPort build();
 
         /**
+         * Returns port builder with supplied VM name.
+         *
+         * @param vmName VM name
+         * @return port builder
+         */
+        Builder vmName(String vmName);
+
+        /**
          * Returns port builder with supplied network identifier.
          *
          * @param networkId network identifier