[ONOS-4481] Integrate scalable gateway to openstackRouting

 - Modified openstack_routing to use scalable gateway application
 - Add GatewayNode Builder method

Change-Id: Ib12d52009eeb89ab59f01cafe794894aac80985e
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
index 9f89c41..4ab87b4 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNodeConfig.java
@@ -17,6 +17,7 @@
 
 
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.onlab.packet.Ip4Address;
@@ -28,9 +29,10 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.StreamSupport;
 
-import static org.slf4j.LoggerFactory.getLogger;
 import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Configuration object for OpensatckNode service.
@@ -79,9 +81,21 @@
 
     @Override
     public boolean isValid() {
-        return hasOnlyFields(NODES, BRIDGE_ID, DATAPLANE_IP, EXTERNAL_INTERFACE_NAME) &&
-                isIpAddress(DATAPLANE_IP, MANDATORY) && isString(BRIDGE_ID, MANDATORY) &&
-                isString(EXTERNAL_INTERFACE_NAME, MANDATORY);
+        JsonNode jsonNodes = object.get(NODES);
+
+        if (jsonNodes == null) {
+            return false;
+        }
+
+        return hasOnlyFields(NODES)
+                && StreamSupport.stream(jsonNodes.spliterator(), false).allMatch(this::checkValid);
+    }
+
+    private boolean checkValid(JsonNode jsonNode) {
+        ObjectNode objectNode = (ObjectNode) jsonNode;
+        return isString(objectNode, BRIDGE_ID, MANDATORY)
+                && isIpAddress(objectNode, DATAPLANE_IP, MANDATORY)
+                && isString(objectNode, EXTERNAL_INTERFACE_NAME, MANDATORY);
     }
 
 }