Move Path to intent package.

It's a bit confusing to have Path object, which is not part of Topology
under topology package.
Moving Path to intent package, since it started as a data structure for Path Intents

Stop inheriting Collection class.

Change-Id: Iaaa07e5f102bb12ad814db0be47bcfac536781e8
diff --git a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
index 4e0fd47..e9a29c0 100644
--- a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
@@ -318,7 +318,7 @@
                     }
 
                     Boolean isflowEntryForThisSwitch = false;
-                    net.onrc.onos.core.topology.Path path = pathIntent.getPath();
+                    net.onrc.onos.core.intent.Path path = pathIntent.getPath();
 
                     for (Iterator<LinkEvent> i = path.iterator(); i.hasNext();) {
                         LinkEvent le = (LinkEvent) i.next();
@@ -419,7 +419,7 @@
         // packets in the meantime and probably don't want to send very old packets.
 
         List<PacketToPush> packets = null;
-        net.onrc.onos.core.topology.Path graphPath = installedPath.getPath();
+        net.onrc.onos.core.intent.Path graphPath = installedPath.getPath();
 
         short outPort;
         if (graphPath.isEmpty()) {
diff --git a/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
index 37a2346..e487f86 100644
--- a/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGFlowsSummaryResource.java
@@ -7,11 +7,11 @@
 import net.onrc.onos.core.intent.Intent;
 import net.onrc.onos.core.intent.Intent.IntentState;
 import net.onrc.onos.core.intent.IntentMap;
+import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.intent.PathIntent;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.IPathCalcRuntimeService;
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.util.CallerId;
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.FlowEntry;
diff --git a/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java b/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
index 8704988..6cee929 100644
--- a/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
+++ b/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
@@ -6,7 +6,6 @@
 
 import net.onrc.onos.core.topology.Link;
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.topology.Switch;
 
 /**
diff --git a/src/main/java/net/onrc/onos/core/intent/Path.java b/src/main/java/net/onrc/onos/core/intent/Path.java
new file mode 100644
index 0000000..e819290
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/intent/Path.java
@@ -0,0 +1,164 @@
+package net.onrc.onos.core.intent;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import net.onrc.onos.core.topology.LinkEvent;
+
+/**
+ * Base class for Path representation.
+ *
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public class Path implements List<LinkEvent> {
+
+    private List<LinkEvent> links;
+
+    /**
+     * Default constructor to create an empty path.
+     */
+    public Path() {
+        links = new LinkedList<LinkEvent>();
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        Iterator<LinkEvent> i = this.iterator();
+        while (i.hasNext()) {
+            builder.append(i.next().toString());
+            if (i.hasNext()) {
+                builder.append(", ");
+            }
+        }
+        return builder.toString();
+    }
+
+    @Override
+    public int size() {
+        return links.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return links.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+        return links.contains(o);
+    }
+
+    @Override
+    public Iterator<LinkEvent> iterator() {
+        return links.iterator();
+    }
+
+    @Override
+    public Object[] toArray() {
+        return links.toArray();
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a) {
+        return links.toArray(a);
+    }
+
+    @Override
+    public boolean add(LinkEvent e) {
+        return links.add(e);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+        return links.remove(o);
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c) {
+        return links.containsAll(c);
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends LinkEvent> c) {
+        return links.addAll(c);
+    }
+
+    @Override
+    public boolean addAll(int index, Collection<? extends LinkEvent> c) {
+        return links.addAll(index, c);
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+        return links.removeAll(c);
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c) {
+        return links.retainAll(c);
+    }
+
+    @Override
+    public void clear() {
+        links.clear();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return links.equals(o);
+    }
+
+    @Override
+    public int hashCode() {
+        return links.hashCode();
+    }
+
+    @Override
+    public LinkEvent get(int index) {
+        return links.get(index);
+    }
+
+    @Override
+    public LinkEvent set(int index, LinkEvent element) {
+        return links.set(index, element);
+    }
+
+    @Override
+    public void add(int index, LinkEvent element) {
+        links.add(index, element);
+    }
+
+    @Override
+    public LinkEvent remove(int index) {
+        return links.remove(index);
+    }
+
+    @Override
+    public int indexOf(Object o) {
+        return links.indexOf(o);
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+        return links.lastIndexOf(o);
+    }
+
+    @Override
+    public ListIterator<LinkEvent> listIterator() {
+        return links.listIterator();
+    }
+
+    @Override
+    public ListIterator<LinkEvent> listIterator(int index) {
+        return links.listIterator(index);
+    }
+
+    @Override
+    public List<LinkEvent> subList(int fromIndex, int toIndex) {
+        return links.subList(fromIndex, toIndex);
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/intent/PathIntent.java b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
index 154a61a..2e1f6a6 100644
--- a/src/main/java/net/onrc/onos/core/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
@@ -1,6 +1,5 @@
 package net.onrc.onos.core.intent;
 
-import net.onrc.onos.core.topology.Path;
 
 /**
  * @author Toshio Koide (t-koide@onlab.us)
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
index e4966f6..4939f90 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
@@ -13,11 +13,11 @@
 import net.onrc.onos.core.intent.IntentOperation;
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.intent.IntentOperationList;
+import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.intent.PathIntent;
 import net.onrc.onos.core.intent.PathIntentMap;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.topology.NetworkGraph;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.topology.Switch;
 
 import org.slf4j.Logger;
diff --git a/src/main/java/net/onrc/onos/core/topology/Path.java b/src/main/java/net/onrc/onos/core/topology/Path.java
deleted file mode 100644
index a00c425..0000000
--- a/src/main/java/net/onrc/onos/core/topology/Path.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.onrc.onos.core.topology;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
-/**
- * Base class for Path representation.
- *
- * @author Toshio Koide (t-koide@onlab.us)
- */
-public class Path extends LinkedList<LinkEvent> {
-    private static final long serialVersionUID = 7127274096495173415L;
-
-    @Override
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        Iterator<LinkEvent> i = this.iterator();
-        while (i.hasNext()) {
-            builder.append(i.next().toString());
-            if (i.hasNext()) {
-                builder.append(", ");
-            }
-        }
-        return builder.toString();
-    }
-}
diff --git a/src/main/java/net/onrc/onos/core/topology/web/NetworkGraphShortestPathResource.java b/src/main/java/net/onrc/onos/core/topology/web/NetworkGraphShortestPathResource.java
index 2fa195b..d513804 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/NetworkGraphShortestPathResource.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/NetworkGraphShortestPathResource.java
@@ -5,11 +5,11 @@
 import java.util.List;
 
 import net.onrc.onos.core.intent.ConstrainedBFSTree;
+import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.topology.INetworkGraphService;
 import net.onrc.onos.core.topology.Link;
 import net.onrc.onos.core.topology.LinkEvent;
 import net.onrc.onos.core.topology.NetworkGraph;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.topology.Switch;
 import net.onrc.onos.core.topology.serializers.LinkSerializer;
 import net.onrc.onos.core.util.Dpid;
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
index a1c4728..3d7f4aa 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
@@ -15,6 +15,7 @@
 import net.onrc.onos.core.intent.Intent;
 import net.onrc.onos.core.intent.IntentOperation;
 import net.onrc.onos.core.intent.IntentOperationList;
+import net.onrc.onos.core.intent.Path;
 import net.onrc.onos.core.intent.PathIntent;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.IntentStateList;
@@ -23,7 +24,6 @@
 import net.onrc.onos.core.packetservice.SinglePacketOutNotification;
 import net.onrc.onos.core.topology.DeviceEvent;
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.topology.PortEvent;
 import net.onrc.onos.core.topology.SwitchEvent;
 import net.onrc.onos.core.topology.TopologyEvent;
@@ -52,6 +52,7 @@
 import net.onrc.onos.core.util.Switch;
 // import net.onrc.onos.core.util.SwitchPort;
 
+
 import com.esotericsoftware.kryo.Kryo;
 
 /**
diff --git a/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java b/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
index 669311f..a99fc10 100644
--- a/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/ConstrainedBFSTreeTest.java
@@ -5,7 +5,6 @@
 import static org.junit.Assert.assertNull;
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 
 import org.junit.After;
 import org.junit.Before;
diff --git a/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java b/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
index 2d09a8d..876d2b1 100644
--- a/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/IntentOperationListTest.java
@@ -1,9 +1,7 @@
 package net.onrc.onos.core.intent;
 
 import static org.junit.Assert.assertEquals;
-
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.util.serializers.KryoFactory;
 
 import org.junit.After;
diff --git a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
index a67d2b5..2f3cac4 100644
--- a/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/PathIntentMapTest.java
@@ -11,7 +11,6 @@
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.topology.Link;
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.topology.Port;
 import net.onrc.onos.core.topology.Switch;
 
diff --git a/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java b/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
index 1b400df..eaef4c7 100644
--- a/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/PathIntentTest.java
@@ -1,9 +1,7 @@
 package net.onrc.onos.core.intent;
 
 import static org.junit.Assert.assertEquals;
-
 import net.onrc.onos.core.topology.LinkEvent;
-import net.onrc.onos.core.topology.Path;
 import net.onrc.onos.core.util.serializers.KryoFactory;
 
 import org.junit.After;