[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/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
index 0ad2101..9e23b5d 100644
--- a/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/openstackrouting/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingArpHandler.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.openstacknetworking.routing;
 
+import com.google.common.collect.Lists;
 import org.onlab.packet.ARP;
 import org.onlab.packet.EthType;
 import org.onlab.packet.Ethernet;
@@ -34,9 +35,11 @@
 import org.onosproject.openstackinterface.OpenstackInterfaceService;
 import org.onosproject.openstackinterface.OpenstackPort;
 import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
+import org.onosproject.scalablegateway.api.ScalableGatewayService;
 import org.slf4j.Logger;
 
 import java.nio.ByteBuffer;
+import java.util.List;
 import java.util.Optional;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -51,21 +54,23 @@
     private final PacketService packetService;
     private final OpenstackInterfaceService openstackService;
     private final OpenstackNetworkingConfig config;
+    private final ScalableGatewayService gatewayService;
     private static final String NETWORK_ROUTER_GATEWAY = "network:router_gateway";
     private static final String NETWORK_FLOATING_IP = "network:floatingip";
 
     /**
      * Default constructor.
-     *
-     * @param packetService packet service
+     *  @param packetService packet service
      * @param openstackService openstackInterface service
      * @param config openstackRoutingConfig
+     * @param gatewayService
      */
     OpenstackRoutingArpHandler(PacketService packetService, OpenstackInterfaceService openstackService,
-                               OpenstackNetworkingConfig config) {
+                               OpenstackNetworkingConfig config, ScalableGatewayService gatewayService) {
         this.packetService = packetService;
         this.openstackService = checkNotNull(openstackService);
         this.config = checkNotNull(config);
+        this.gatewayService = gatewayService;
     }
 
     /**
@@ -79,10 +84,12 @@
                 .matchEthType(EthType.EtherType.ARP.ethType().toShort())
                 .build();
 
-        packetService.requestPackets(arpSelector,
-                PacketPriority.CONTROL,
-                appId,
-                Optional.of(DeviceId.deviceId(config.gatewayBridgeId())));
+        getExternalInfo().forEach(deviceId ->
+                packetService.requestPackets(arpSelector,
+                        PacketPriority.CONTROL,
+                        appId,
+                        Optional.of(deviceId))
+        );
     }
 
     /**
@@ -138,4 +145,10 @@
         }
         return port.macAddress();
     }
+
+    private List<DeviceId> getExternalInfo() {
+        List<DeviceId> externalInfoList = Lists.newArrayList();
+        gatewayService.getGatewayDeviceIds().forEach(externalInfoList::add);
+        return externalInfoList;
+    }
 }