ONOS-7066 ONOS-7067 PI abstractions refactoring and P4Info model parser

Includes changes previously reviewed in #15607, #15877, and #15955.

Change-Id: Ie2ff62e415f2099832ebfe05961a879b7b188fc3
diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
index bcfb7d0..9e298d3 100644
--- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
+++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
@@ -22,7 +22,6 @@
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.bmv2.model.Bmv2PipelineModelParser;
 import org.onosproject.driver.pipeline.DefaultSingleTablePipeline;
 import org.onosproject.net.behaviour.Pipeliner;
 import org.onosproject.net.device.PortStatisticsDiscovery;
@@ -32,6 +31,8 @@
 import org.onosproject.net.pi.model.PiPipelineInterpreter;
 import org.onosproject.net.pi.model.PiPipelineModel;
 import org.onosproject.net.pi.runtime.PiPipeconfService;
+import org.onosproject.p4runtime.model.P4InfoParser;
+import org.onosproject.p4runtime.model.P4InfoParserException;
 
 import java.net.URL;
 import java.util.Collection;
@@ -75,10 +76,10 @@
     private static PiPipeconf buildBasicPipeconf() {
         final URL jsonUrl = PipeconfLoader.class.getResource(BASIC_JSON_PATH);
         final URL p4InfoUrl = PipeconfLoader.class.getResource(BASIC_P4INFO);
-        final PiPipelineModel model = Bmv2PipelineModelParser.parse(jsonUrl);
+
         return DefaultPiPipeconf.builder()
                 .withId(BASIC_PIPECONF_ID)
-                .withPipelineModel(model)
+                .withPipelineModel(parseP4Info(p4InfoUrl))
                 .addBehaviour(PiPipelineInterpreter.class, BasicInterpreterImpl.class)
                 .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
                 .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
@@ -92,10 +93,10 @@
     private static PiPipeconf buildEcmpPipeconf() {
         final URL jsonUrl = PipeconfLoader.class.getResource(ECMP_JSON_PATH);
         final URL p4InfoUrl = PipeconfLoader.class.getResource(ECMP_P4INFO);
-        final PiPipelineModel model = Bmv2PipelineModelParser.parse(jsonUrl);
+
         return DefaultPiPipeconf.builder()
                 .withId(ECMP_PIPECONF_ID)
-                .withPipelineModel(model)
+                .withPipelineModel(parseP4Info(p4InfoUrl))
                 .addBehaviour(PiPipelineInterpreter.class, EcmpInterpreterImpl.class)
                 .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
                 .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
@@ -103,4 +104,12 @@
                 .addExtension(BMV2_JSON, jsonUrl)
                 .build();
     }
+
+    private static PiPipelineModel parseP4Info(URL p4InfoUrl) {
+        try {
+            return P4InfoParser.parse(p4InfoUrl);
+        } catch (P4InfoParserException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }