Implement kubevirt router store, manager and codec with unit tests

Change-Id: Ib93a71326aa35b4817f0e6b6c97d5f57b26fe470
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 e606275..4bf04a2 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
@@ -18,7 +18,6 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import org.onlab.packet.IpAddress;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -39,7 +38,7 @@
     private final String description;
     private final boolean enableSnat;
     private final Set<String> internal;
-    private final Map<IpAddress, String> external;
+    private final Map<String, String> external;
     private final KubevirtPeerRouter peerRouter;
 
     /**
@@ -54,7 +53,7 @@
      */
     public DefaultKubevirtRouter(String name, String description, boolean enableSnat,
                                  Set<String> internal,
-                                 Map<IpAddress, String> external,
+                                 Map<String, String> external,
                                  KubevirtPeerRouter peerRouter) {
         this.name = name;
         this.description = description;
@@ -85,7 +84,7 @@
     }
 
     @Override
-    public Map<IpAddress, String> external() {
+    public Map<String, String> external() {
         return ImmutableMap.copyOf(external);
     }
 
@@ -95,6 +94,18 @@
     }
 
     @Override
+    public KubevirtRouter updatePeerRouter(KubevirtPeerRouter updated) {
+        return DefaultKubevirtRouter.builder()
+                .name(name)
+                .enableSnat(enableSnat)
+                .description(description)
+                .internal(internal)
+                .external(external)
+                .peerRouter(updated)
+                .build();
+    }
+
+    @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -140,7 +151,7 @@
         private String description;
         private boolean enableSnat;
         private Set<String> internal;
-        private Map<IpAddress, String> external;
+        private Map<String, String> external;
         private KubevirtPeerRouter peerRouter;
 
         @Override
@@ -176,7 +187,7 @@
         }
 
         @Override
-        public Builder external(Map<IpAddress, String> external) {
+        public Builder external(Map<String, String> external) {
             this.external = Objects.requireNonNullElseGet(external, HashMap::new);
             return this;
         }