WIP: Adding PathInstallRuntime for installing flow entries using FlowPusher

I also had to add several methods to our base classes to do type conversion,
which is a bit messy. Also, do to naming overlaps, we need to have some fully
specified class names.

Adding IntentRuntime service to drive the runtimes.

Change-Id: I675fbfe243b0bf18536425dfd9f9e6e5ca795845
diff --git a/src/main/java/net/onrc/onos/intent/runtime/PathInstallRuntime.java b/src/main/java/net/onrc/onos/intent/runtime/PathInstallRuntime.java
new file mode 100644
index 0000000..0b74cfc
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/runtime/PathInstallRuntime.java
@@ -0,0 +1,48 @@
+package net.onrc.onos.intent.runtime;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import net.floodlightcontroller.core.IFloodlightProviderService;
+import net.floodlightcontroller.core.IOFSwitch;
+import net.onrc.onos.intent.FlowEntry;
+import net.onrc.onos.ofcontroller.flowprogrammer.IFlowPusherService;
+import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+import net.onrc.onos.ofcontroller.util.Pair;
+
+/**
+ * 
+ * @author Brian O'Connor <bocon@onlab.us>
+ *
+ */
+
+public class PathInstallRuntime {
+    NetworkGraph graph;
+    IFlowPusherService pusher;
+    IFloodlightProviderService provider;
+    protected List<Set<FlowEntry>> plan;
+
+    public PathInstallRuntime(NetworkGraph graph) {
+	this.graph = graph;
+    }
+
+    public void installPlan(List<Set<FlowEntry>> plan) {
+	this.plan = plan;
+	Map<Long,IOFSwitch> switches = provider.getSwitches();
+	for(Set<FlowEntry> phase : plan) {
+	    Set<Pair<IOFSwitch, net.onrc.onos.ofcontroller.util.FlowEntry>> entries 
+	    = new HashSet<>();
+	    // convert flow entries and create pairs
+	    for(FlowEntry entry : phase) {
+		entries.add(new Pair<>(switches.get(entry.getSwitch().getDpid()), 
+			entry.getFlowEntry()));
+	    }
+	    // push flow entries to switches
+	    pusher.pushFlowEntries(entries);
+	    // TODO: wait for confirmation messages before proceeding
+	}
+    }
+
+}