ONOS-4420 Implemented BMv2 packet provider

Also, moved DeviceId generation logic from Bmv2DeviceProvider to
Bmv2Device.

Change-Id: I0a7af6d558d054604038a858dce67a2d287bcde3
diff --git a/providers/bmv2/device/pom.xml b/providers/bmv2/device/pom.xml
index 021d90f..80f42e1 100644
--- a/providers/bmv2/device/pom.xml
+++ b/providers/bmv2/device/pom.xml
@@ -39,7 +39,7 @@
         <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onos-core-common</artifactId>
-            <version>1.6.0-SNAPSHOT</version>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/providers/bmv2/device/src/main/java/org/onosproject/provider/bmv2/device/impl/Bmv2DeviceProvider.java b/providers/bmv2/device/src/main/java/org/onosproject/provider/bmv2/device/impl/Bmv2DeviceProvider.java
index 2d16ff2..d9ac3a4 100644
--- a/providers/bmv2/device/src/main/java/org/onosproject/provider/bmv2/device/impl/Bmv2DeviceProvider.java
+++ b/providers/bmv2/device/src/main/java/org/onosproject/provider/bmv2/device/impl/Bmv2DeviceProvider.java
@@ -50,8 +50,6 @@
 import org.onosproject.net.provider.ProviderId;
 import org.slf4j.Logger;
 
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.List;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutorService;
@@ -63,6 +61,9 @@
 import static org.onosproject.bmv2.ctl.Bmv2ThriftClient.ping;
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 import static org.slf4j.LoggerFactory.getLogger;
+import static org.onosproject.bmv2.api.runtime.Bmv2Device.SCHEME;
+import static org.onosproject.bmv2.api.runtime.Bmv2Device.MANUFACTURER;
+import static org.onosproject.bmv2.api.runtime.Bmv2Device.HW_VERSION;
 
 /**
  * BMv2 device provider.
@@ -72,9 +73,6 @@
 
     private static final Logger LOG = getLogger(Bmv2DeviceProvider.class);
 
-    public static final String MANUFACTURER = "p4.org";
-    public static final String HW_VERSION = "bmv2";
-    public static final String SCHEME = "bmv2";
     private static final String APP_NAME = "org.onosproject.bmv2";
     private static final String UNKNOWN = "unknown";
     private static final int POLL_INTERVAL = 5; // seconds
@@ -108,25 +106,6 @@
         super(new ProviderId("bmv2", "org.onosproject.provider.device"));
     }
 
-    private static DeviceId deviceIdOf(String ip, int port) {
-        try {
-            return DeviceId.deviceId(new URI(SCHEME, ip + ":" + port, null));
-        } catch (URISyntaxException e) {
-            throw new IllegalArgumentException("Unable to build deviceID for device " + ip + ":" + port, e);
-        }
-    }
-
-    /**
-     * Creates a new device ID for the given BMv2 device.
-     *
-     * @param device a BMv2 device object
-     *
-     * @return a new device ID
-     */
-    public static DeviceId deviceIdOf(Bmv2Device device) {
-        return deviceIdOf(device.thriftServerHost(), device.thriftServerPort());
-    }
-
     @Override
     protected void activate() {
         appId = coreService.registerApplication(APP_NAME);
@@ -258,7 +237,9 @@
             if (cfg != null) {
                 try {
                     cfg.getDevicesInfo().stream().forEach(info -> {
-                        triggerProbe(deviceIdOf(info.ip().toString(), info.port()));
+                        // TODO: require also bmv2 internal device id from net-cfg (now is default 0)
+                        Bmv2Device bmv2Device = new Bmv2Device(info.ip().toString(), info.port(), 0);
+                        triggerProbe(bmv2Device.asDeviceId());
                     });
                 } catch (ConfigException e) {
                     LOG.error("Unable to read config: " + e);
@@ -283,7 +264,7 @@
         @Override
         public void handleHello(Bmv2Device device) {
             log.debug("Received hello from {}", device);
-            triggerProbe(deviceIdOf(device));
+            triggerProbe(device.asDeviceId());
         }
     }