Better handling of extensions in PiPipeconf

Now built using a URL, while input streams are generated on-demand.
Before it could happen that the input stream was completelly read by
someone, leaving it unusable by others.

Change-Id: I61a76bf8b8c1d2f6e2d987661025e0323d59e1c7
diff --git a/drivers/bmv2/BUCK b/drivers/bmv2/BUCK
index b406b08..3726829 100644
--- a/drivers/bmv2/BUCK
+++ b/drivers/bmv2/BUCK
@@ -27,6 +27,7 @@
     '//incubator/bmv2/model:onos-incubator-bmv2-model',
     '//incubator/grpc-dependencies:grpc-core-repkg-1.3.0',
     '//lib:grpc-netty-1.3.0',
+    '//drivers/default:onos-drivers-default',
 ]
 
 TEST_DEPS = [
@@ -43,6 +44,7 @@
     '//protocols/grpc/ctl:onos-protocols-grpc-ctl',
     '//protocols/grpc/proto:onos-protocols-grpc-proto',
     '//incubator/bmv2/model:onos-incubator-bmv2-model',
+    '//drivers/default:onos-drivers-default',
 ] + GRPC_DEPS
 
 osgi_jar_with_tests(
diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
index 4903c3e..3004627 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
@@ -17,12 +17,14 @@
 package org.onosproject.drivers.bmv2;
 
 import org.onosproject.bmv2.model.Bmv2PipelineModelParser;
+import org.onosproject.driver.pipeline.DefaultSingleTablePipeline;
+import org.onosproject.net.behaviour.Pipeliner;
 import org.onosproject.net.pi.model.DefaultPiPipeconf;
 import org.onosproject.net.pi.model.PiPipeconf;
 import org.onosproject.net.pi.model.PiPipeconfId;
 import org.onosproject.net.pi.model.PiPipelineInterpreter;
 
-import java.io.InputStream;
+import java.net.URL;
 
 import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.BMV2_JSON;
 import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.P4_INFO_TEXT;
@@ -42,16 +44,16 @@
 
     static PiPipeconf get() {
 
-        final InputStream jsonConfigStream = Bmv2DefaultPipeconfFactory.class.getResourceAsStream(JSON_PATH);
-        final InputStream p4InfoStream = Bmv2DefaultPipeconfFactory.class.getResourceAsStream(P4INFO_PATH);
+        final URL jsonUrl = Bmv2DefaultPipeconfFactory.class.getResource(JSON_PATH);
+        final URL p4InfoUrl = Bmv2DefaultPipeconfFactory.class.getResource(P4INFO_PATH);
 
         return DefaultPiPipeconf.builder()
                 .withId(new PiPipeconfId(PIPECONF_ID))
-                .withPipelineModel(Bmv2PipelineModelParser.parse(jsonConfigStream))
-                // TODO: reuse default single table pipeliner.
+                .withPipelineModel(Bmv2PipelineModelParser.parse(jsonUrl))
                 .addBehaviour(PiPipelineInterpreter.class, Bmv2DefaultInterpreter.class)
-                .addExtension(P4_INFO_TEXT, p4InfoStream)
-                .addExtension(BMV2_JSON, jsonConfigStream)
+                .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
+                .addExtension(P4_INFO_TEXT, p4InfoUrl)
+                .addExtension(BMV2_JSON, jsonUrl)
                 .build();
     }
 }