Implement rerouting feature in PathCalcRuntimeModule

Change-Id: Ie37ebd1fa6910e999d457481d7082adb0d1d9a3a
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
index 4ef4cf0..a5454fa 100644
--- a/src/main/java/net/onrc/onos/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -1,16 +1,19 @@
 package net.onrc.onos.intent;
 
+import java.util.LinkedList;
+import java.util.List;
+
 import net.onrc.onos.ofcontroller.networkgraph.Link;
+import net.onrc.onos.ofcontroller.networkgraph.LinkEvent;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 import net.onrc.onos.ofcontroller.networkgraph.Path;
 import net.onrc.onos.ofcontroller.networkgraph.Port;
-import net.onrc.onos.ofcontroller.networkgraph.Switch;
 
 /**
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class PathIntent extends Intent {
-	protected long pathData[];
+	protected List<LinkEvent> path;
 	protected double bandwidth;
 	protected Intent parentIntent;
 
@@ -31,13 +34,13 @@
 	 */
 	public PathIntent(String id, Path path, double bandwidth, Intent parentIntent) {
 		super(id);
-		pathData = new long[path.size() * 4];
-		for (int i=0; i<path.size(); i++) {
-			Link link = path.get(i);
-			this.pathData[i*4] = link.getSourceSwitch().getDpid();
-			this.pathData[i*4+1] = link.getSourcePort().getNumber();
-			this.pathData[i*4+2] = link.getDestinationSwitch().getDpid();
-			this.pathData[i*4+3] = link.getDestinationPort().getNumber();
+		this.path = new LinkedList<LinkEvent>();
+		for (Link link: path) {
+			this.path.add(new LinkEvent(
+					link.getSourceSwitch().getDpid(),
+					link.getSourcePort().getNumber(),
+					link.getDestinationSwitch().getDpid(),
+					link.getDestinationPort().getNumber()));
 		}
 		this.bandwidth = bandwidth;
 		this.parentIntent = parentIntent;
@@ -47,8 +50,8 @@
 		return bandwidth;
 	}
 
-	public long[] getPathData() {
-		return pathData;
+	public List<LinkEvent> getPathByLinkEvent() {
+		return path;
 	}
 
 	/**
@@ -57,19 +60,13 @@
 	 * @return path object. If there is no path in the specified graph, returns null.
 	 */
 	public Path getPath(NetworkGraph graph) {
-		Path path = new Path();
-		Switch srcSwitch;
-		Port srcPort;
-		Link link;
-		for (int i=0; i<pathData.length; i+=4) {
-			if ((srcSwitch = graph.getSwitch(pathData[i])) == null) return null;
-			if ((srcPort = srcSwitch.getPort(pathData[i+1])) == null) return null;
-			if ((link = srcPort.getOutgoingLink()) == null) return null;
-			if (link.getDestinationSwitch().getDpid() != pathData[i+2]) return null;
-			if (link.getDestinationPort().getNumber() != pathData[i+3]) return null;
-			path.add(link);
+		Path pathObj = new Path();
+		for (LinkEvent linkEvent: path) {
+			Link link = linkEvent.getLink(graph);
+			if (link == null) return null;
+			pathObj.add(link);
 		}
-		return path;
+		return pathObj;
 	}
 
 	public Intent getParentIntent() {