Initial implementation of SNAT functionality.

Change-Id: I9094755c6d25a62e527976b9bf275d7c1e2a3f86
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
index 98653d9..f6a9545 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
@@ -40,6 +40,7 @@
     private final Set<String> internal;
     private final Map<String, String> external;
     private final KubevirtPeerRouter peerRouter;
+    private final String gateway;
 
     /**
      * A default constructor.
@@ -50,17 +51,20 @@
      * @param internal      internal networks
      * @param external      external network
      * @param peerRouter    external peer router
+     * @param gateway       elected gateway node id
      */
     public DefaultKubevirtRouter(String name, String description, boolean enableSnat,
                                  Set<String> internal,
                                  Map<String, String> external,
-                                 KubevirtPeerRouter peerRouter) {
+                                 KubevirtPeerRouter peerRouter,
+                                 String gateway) {
         this.name = name;
         this.description = description;
         this.enableSnat = enableSnat;
         this.internal = internal;
         this.external = external;
         this.peerRouter = peerRouter;
+        this.gateway = gateway;
     }
 
     @Override
@@ -102,6 +106,11 @@
     }
 
     @Override
+    public String electedGateway() {
+        return gateway;
+    }
+
+    @Override
     public KubevirtRouter updatePeerRouter(KubevirtPeerRouter updated) {
         return DefaultKubevirtRouter.builder()
                 .name(name)
@@ -110,6 +119,20 @@
                 .internal(internal)
                 .external(external)
                 .peerRouter(updated)
+                .electedGateway(gateway)
+                .build();
+    }
+
+    @Override
+    public KubevirtRouter updatedElectedGateway(String updated) {
+        return DefaultKubevirtRouter.builder()
+                .name(name)
+                .enableSnat(enableSnat)
+                .description(description)
+                .internal(internal)
+                .external(external)
+                .peerRouter(peerRouter)
+                .electedGateway(updated)
                 .build();
     }
 
@@ -124,12 +147,14 @@
         DefaultKubevirtRouter that = (DefaultKubevirtRouter) o;
         return enableSnat == that.enableSnat && name.equals(that.name) &&
                 description.equals(that.description) && internal.equals(that.internal) &&
-                external.equals(that.external) && peerRouter.equals(that.peerRouter);
+                external.equals(that.external) && peerRouter.equals(that.peerRouter) &&
+                gateway.equals(that.electedGateway());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(name, description, enableSnat, internal, external, peerRouter);
+        return Objects.hash(name, description, enableSnat,
+                internal, external, peerRouter, gateway);
     }
 
     @Override
@@ -141,6 +166,7 @@
                 .add("internal", internal)
                 .add("external", external)
                 .add("peerRouter", peerRouter)
+                .add("electedGateway", gateway)
                 .toString();
     }
 
@@ -161,13 +187,14 @@
         private Set<String> internal;
         private Map<String, String> external;
         private KubevirtPeerRouter peerRouter;
+        private String gateway;
 
         @Override
         public KubevirtRouter build() {
             checkArgument(name != null, NOT_NULL_MSG, "name");
 
             return new DefaultKubevirtRouter(name, description, enableSnat,
-                    internal, external, peerRouter);
+                    internal, external, peerRouter, gateway);
         }
 
         @Override
@@ -205,5 +232,11 @@
             this.peerRouter = router;
             return this;
         }
+
+        @Override
+        public Builder electedGateway(String gateway) {
+            this.gateway = gateway;
+            return this;
+        }
     }
 }