[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/network-cfg.json b/apps/scalablegateway/network-cfg.json
new file mode 100644
index 0000000..3f1b2ab
--- /dev/null
+++ b/apps/scalablegateway/network-cfg.json
@@ -0,0 +1,14 @@
+{
+    "apps" : {
+        "org.onosproject.scalablegateway" : {
+            "scalablegateway" : {
+              "nodes" : [
+              {
+                "bridgeId" : "of:0000000000000003",
+                "dataPlaneIp" : "10.62.148.17",
+                "gatewayExternalInterfaceName" : "veth0"
+                }]
+            }
+        }
+    }
+}
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
index 6df49ce..3b9af7c 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/api/GatewayNode.java
@@ -66,6 +66,15 @@
     }
 
     /**
+     * Returns GatewayNode builder object.
+     *
+     * @return GatewayNode builder
+     */
+    public static GatewayNode.Builder builder() {
+        return new Builder();
+    }
+
+    /**
      * GatewayNode Builder class.
      */
     public static final class Builder {
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);
     }
 
 }