Renamed networkgraph package to topology.
Moved NetworkGraphPublisher into new topology package.

net.onrc.onos.ofcontroller.networkgraph.* => net.onrc.onos.core.topology.*
net.onrc.onos.ofcontroller.floodlightlistener.NetworkGraphPublisher => net.onrc.onos.core.topology.NetworkGraphPublisher

Change-Id: I8b156d0fcbba520fee61e92ab659bb02cfa704ac
diff --git a/src/main/java/net/onrc/onos/core/topology/PortImpl.java b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
new file mode 100644
index 0000000..cd7d82b
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
@@ -0,0 +1,113 @@
+package net.onrc.onos.core.topology;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Port Object stored in In-memory Topology.
+ *
+ * TODO REMOVE following design memo: This object itself may hold the DBObject,
+ * but this Object itself will not issue any read/write to the DataStore.
+ */
+public class PortImpl extends NetworkGraphObject implements Port {
+
+	private Switch sw;
+
+	private Long number;
+	private String description;
+
+	protected Link outgoingLink;
+	protected Link incomingLink;
+	// These needs to be ConcurrentCollecton if allowing Graph to be accessed Concurrently
+	protected Set<Device> devices;
+
+	public PortImpl(NetworkGraph graph, Switch parentSwitch, Long number) {
+		super(graph);
+		this.sw = parentSwitch;
+		this.number = number;
+		this.devices = new HashSet<>();
+	}
+
+	@Override
+	public Long getDpid() {
+	    return sw.getDpid();
+	}
+
+	@Override
+	public Long getNumber() {
+		return number;
+	}
+
+	@Override
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	@Override
+	public Long getHardwareAddress() {
+		// TODO Auto-generated method stub
+		return 0L;
+	}
+
+	@Override
+	public Switch getSwitch() {
+		return sw;
+	}
+
+	@Override
+	public Link getOutgoingLink() {
+		return outgoingLink;
+	}
+
+	@Override
+	public Link getIncomingLink() {
+		return incomingLink;
+	}
+
+	@Override
+	public Iterable<Device> getDevices() {
+	    return Collections.unmodifiableSet(this.devices);
+	}
+
+	public void setOutgoingLink(Link link) {
+		outgoingLink = link;
+	}
+
+	public void setIncomingLink(Link link) {
+		incomingLink = link;
+	}
+
+	/**
+	 *
+	 * @param d
+	 * @return true if successfully added
+	 */
+	public boolean addDevice(Device d) {
+	    return this.devices.add(d);
+	}
+
+	/**
+	 *
+	 * @param d
+	 * @return true if device existed and was removed
+	 */
+	public boolean removeDevice(Device d) {
+	    return this.devices.remove(d);
+	}
+
+	public void removeAllDevice() {
+	    this.devices.clear();
+	}
+
+	@Override
+	public String toString() {
+		return String.format("%d:%d",
+				getSwitch().getDpid(),
+				getNumber());
+	}
+}