Add Intent class and its extended classes

- Intent class is an abstract class for the intents
- ShortestPathIntent class extends Intent class that expresses shortest hop between source-destination pair
- ConstrainedShortestPathIntent class extends ShortestPathIntent class that expresses bandwidth as an additional intention to ShortestPathIntent
- PathIntent class extends Intent class that expresses path

Change-Id: Ia5e8ddb55b333841d9eb438f9eb28866f6e3e300
diff --git a/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
new file mode 100644
index 0000000..c5db590
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/ConstrainedShortestPathIntent.java
@@ -0,0 +1,32 @@
+package net.onrc.onos.intent;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+import net.onrc.onos.ofcontroller.networkgraph.Port;
+
+/**
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public class ConstrainedShortestPathIntent extends ShortestPathIntent {
+	protected Double bandwidth;
+
+	public ConstrainedShortestPathIntent(
+			Port srcPort, MACAddress srcMac,
+			Port dstPort, MACAddress dstMac,
+			Double bandwidth) {
+		super(srcPort, srcMac, dstPort, dstMac);
+		this.bandwidth = bandwidth;
+	}
+
+	public ConstrainedShortestPathIntent(NetworkGraph graph,
+			Long srcSwitch, Long srcPort, long srcMac,
+			Long dstSwitch, Long dstPort, long dstMac,
+			Double bandwidth) {
+		super(graph, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
+		this.bandwidth = bandwidth;
+	}
+
+	public Double getBandwidth() {
+		return bandwidth;
+	}
+}
diff --git a/src/main/java/net/onrc/onos/intent/Intent.java b/src/main/java/net/onrc/onos/intent/Intent.java
new file mode 100644
index 0000000..33888ae
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/Intent.java
@@ -0,0 +1,7 @@
+package net.onrc.onos.intent;
+
+/**
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public abstract class Intent {
+}
diff --git a/src/main/java/net/onrc/onos/intent/PathIntent.java b/src/main/java/net/onrc/onos/intent/PathIntent.java
new file mode 100644
index 0000000..22948b9
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/PathIntent.java
@@ -0,0 +1,38 @@
+package net.onrc.onos.intent;
+
+import net.onrc.onos.ofcontroller.networkgraph.Path;
+
+/**
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public class PathIntent extends Intent {
+	protected Path path;
+	protected Double bandwidth;
+	protected Intent parentIntent;
+
+	/**
+	 * 
+	 * @param graph
+	 * @param path
+	 * @param bandwidth bandwidth which should be allocated for the path.
+	 * If null, it means no intent for bandwidth allocation (best effort).
+	 * @param parentIntent parent intent. If null, it means this is root intent.
+	 */
+	public PathIntent(Path path, Double bandwidth, Intent parentIntent) {
+		this.path = path;
+		this.bandwidth = bandwidth;
+		this.parentIntent = parentIntent;
+	}
+
+	public Double getBandwidth() {
+		return bandwidth;
+	}
+
+	public Path getPath() {
+		return path;
+	}
+
+	public Intent getParentIntent() {
+		return parentIntent;
+	}
+}
diff --git a/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
new file mode 100644
index 0000000..e7f1a13
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/ShortestPathIntent.java
@@ -0,0 +1,56 @@
+package net.onrc.onos.intent;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+import net.onrc.onos.ofcontroller.networkgraph.Port;
+
+/**
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public class ShortestPathIntent extends Intent {
+	protected Port srcPort = null;
+	protected Port dstPort = null;
+	protected MACAddress srcMac = null;
+	protected MACAddress dstMac = null;
+
+	public ShortestPathIntent(
+			Port srcPort, MACAddress srcMac,
+			Port dstPort, MACAddress dstMac) {
+		this.srcPort = srcPort;
+		this.dstPort = dstPort;
+		this.srcMac = srcMac;
+		this.dstMac = dstMac;
+	}
+
+	public ShortestPathIntent(NetworkGraph graph,
+			Long srcSwitch, Long srcPort, long srcMac,
+			Long dstSwitch, Long dstPort, long dstMac) {
+		this.srcPort = graph.getSwitch(srcSwitch).getPort(srcPort);
+		this.dstPort = graph.getSwitch(dstSwitch).getPort(srcPort);
+		this.srcMac = MACAddress.valueOf(srcMac);
+		this.dstMac = MACAddress.valueOf(dstMac);
+	}
+
+	public Port getSourcePort() {
+		return srcPort;
+	}
+
+	public MACAddress getSourceMac() {
+		return srcMac;
+	}
+
+	public Port getDestinationPort() {
+		return dstPort;
+	}
+
+	public MACAddress getDestinationMac() {
+		return dstMac;
+	}
+
+	@Override
+	public String toString() {
+		return String.format("srcPort:%s, srcMac:%s, dstPort:%s, dstMac:%s",
+				srcPort.toString(), srcMac.toString(),
+				dstPort.toString(), dstMac.toString());
+	}
+}