Implement serialization/deserialization feature for each Intent classes

Change-Id: I63db34914d8df76d5a000831da1e03e03383e62f
diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
index b659179..8a2e101 100644
--- a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
@@ -4,6 +4,9 @@
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 import net.onrc.onos.ofcontroller.networkgraph.Port;
 
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
 /**
  * @author Toshio Koide (t-koide@onlab.us)
  */
@@ -26,7 +29,38 @@
 		this.bandwidth = bandwidth;
 	}
 
+	public static ConstrainedShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
+		Input input = new Input(bytes);
+		ConstrainedShortestPathIntent intent = new ConstrainedShortestPathIntent(graph,
+				input.readString(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readDouble());
+		input.close();
+		return intent;
+	}
+
 	public Double getBandwidth() {
 		return bandwidth;
 	}
+
+	@Override
+	public byte[] toBytes() {
+		byte[] buffer = new byte[1024];
+		Output output = new Output(buffer, -1);
+		output.writeString(id);
+		output.writeLong(srcPort.getSwitch().getDpid());
+		output.writeLong(srcPort.getNumber());
+		output.writeLong(srcMac.toLong());
+		output.writeLong(dstPort.getSwitch().getDpid());
+		output.writeLong(dstPort.getNumber());
+		output.writeLong(dstMac.toLong());
+		output.writeDouble(bandwidth);
+		output.close();
+		return output.toBytes();
+	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/Intent.java b/src/main/java/net/onrc/onos/intent/Intent.java
index 823b106..070af25 100644
--- a/src/main/java/net/onrc/onos/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/intent/Intent.java
@@ -13,6 +13,8 @@
 	public String getId() {
 		return id;
 	}
+	
+	abstract public byte[] toBytes();
 
 	@Override
 	public int hashCode() {
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
index 07f53e1..3afa92e 100644
--- a/src/main/java/net/onrc/onos/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -38,4 +38,10 @@
 	public Intent getParentIntent() {
 		return parentIntent;
 	}
+
+	@Override
+	public byte[] toBytes() {
+		// TODO not implemented yet
+		return null;
+	}
 }
diff --git a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
index b1f58f5..3fdcf66 100644
--- a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
@@ -1,5 +1,8 @@
 package net.onrc.onos.intent;
 
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
 import net.onrc.onos.ofcontroller.networkgraph.Port;
@@ -33,6 +36,20 @@
 		this.dstMac = MACAddress.valueOf(dstMac);
 	}
 
+	public static ShortestPathIntent fromBytes(NetworkGraph graph, byte[] bytes) {
+		Input input = new Input(bytes);
+		ShortestPathIntent intent = new ShortestPathIntent(graph,
+				input.readString(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong(),
+				input.readLong());
+		input.close();
+		return intent;
+		}
+
 	public Port getSourcePort() {
 		return srcPort;
 	}
@@ -55,4 +72,19 @@
 				srcPort.toString(), srcMac.toString(),
 				dstPort.toString(), dstMac.toString());
 	}
+
+	@Override
+	public byte[] toBytes() {
+		byte[] buffer = new byte[1024];
+		Output output = new Output(buffer, -1);
+		output.writeString(id);
+		output.writeLong(srcPort.getSwitch().getDpid());
+		output.writeLong(srcPort.getNumber());
+		output.writeLong(srcMac.toLong());
+		output.writeLong(dstPort.getSwitch().getDpid());
+		output.writeLong(dstPort.getNumber());
+		output.writeLong(dstMac.toLong());
+		output.close();
+		return output.toBytes();
+	}
 }