Add config validation for vRouter and PIM configs

Change-Id: I97ddf4f745a19df6998b15ae47ebde5aa5f46238
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
index 48969c3..63ceb36 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
@@ -112,4 +112,20 @@
         }
         return Optional.of(Short.parseShort(node.path(OVERRIDE_INTERVAL).asText()));
     }
+
+    @Override
+    public boolean isValid() {
+        if (!hasOnlyFields(INTERFACE_NAME, ENABLED, HELLO_INTERVAL, HOLD_TIME,
+                PRIORITY, PROPAGATION_DELAY, OVERRIDE_INTERVAL)) {
+            return false;
+        }
+
+        return isString(INTERFACE_NAME, FieldPresence.MANDATORY) &&
+                isBoolean(ENABLED, FieldPresence.MANDATORY) &&
+                isIntegralNumber(HELLO_INTERVAL, FieldPresence.OPTIONAL) &&
+                isIntegralNumber(HOLD_TIME, FieldPresence.OPTIONAL) &&
+                isIntegralNumber(PRIORITY, FieldPresence.OPTIONAL) &&
+                isIntegralNumber(PROPAGATION_DELAY, FieldPresence.OPTIONAL) &&
+                isIntegralNumber(OVERRIDE_INTERVAL, FieldPresence.OPTIONAL);
+    }
 }
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/config/RouterConfig.java b/apps/routing-api/src/main/java/org/onosproject/routing/config/RouterConfig.java
index 9099019..dbd49ff 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/config/RouterConfig.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/config/RouterConfig.java
@@ -82,4 +82,19 @@
         return interfaces;
     }
 
+    @Override
+    public boolean isValid() {
+        if (!hasOnlyFields(INTERFACES, CP_CONNECT_POINT, OSPF_ENABLED, PIM_ENABLED)) {
+            return false;
+        }
+
+        JsonNode intfNode = object.path(INTERFACES);
+        if (!intfNode.isMissingNode() && !intfNode.isArray()) {
+            return false;
+        }
+
+        return isConnectPoint(CP_CONNECT_POINT, FieldPresence.MANDATORY) &&
+                isBoolean(OSPF_ENABLED, FieldPresence.OPTIONAL) &&
+                isBoolean(PIM_ENABLED, FieldPresence.OPTIONAL);
+    }
 }