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/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
new file mode 100644
index 0000000..bf43155
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -0,0 +1,101 @@
+package net.onrc.onos.core.topology;
+
+import java.nio.ByteBuffer;
+
+import net.onrc.onos.core.topology.PortEvent.SwitchPort;
+
+/**
+ * Self-contained Link event Object
+ *
+ * TODO: We probably want common base class/interface for Self-Contained Event Object
+ *
+ */
+public class LinkEvent {
+    protected final SwitchPort src;
+    protected final SwitchPort dst;
+
+    /**
+     * Default constructor for Serializer to use.
+     */
+    @Deprecated
+    public LinkEvent() {
+	src = null;
+	dst = null;
+    }
+
+    public LinkEvent(Long src_dpid, Long src_port_no, Long dst_dpid,
+	    Long dst_port_no) {
+	src = new SwitchPort(src_dpid, src_port_no);
+	dst = new SwitchPort(dst_dpid, dst_port_no);
+    }
+
+    public LinkEvent(Link link) {
+	src = new SwitchPort(link.getSrcSwitch().getDpid(),
+		link.getSrcPort().getNumber());
+	dst = new SwitchPort(link.getDstSwitch().getDpid(),
+		link.getDstPort().getNumber());
+    }
+
+    public SwitchPort getSrc() {
+	return src;
+    }
+
+    public SwitchPort getDst() {
+	return dst;
+    }
+
+    @Override
+    public String toString() {
+	return "[LinkEvent " + src + "->" + dst + "]";
+    }
+
+    public static final int LINKID_BYTES = 2 + PortEvent.PORTID_BYTES * 2;
+
+    public static ByteBuffer getLinkID(Long src_dpid, Long src_port_no,
+	    Long dst_dpid, Long dst_port_no) {
+	return (ByteBuffer) ByteBuffer.allocate(LinkEvent.LINKID_BYTES).putChar('L')
+		.put(PortEvent.getPortID(src_dpid, src_port_no))
+		.put(PortEvent.getPortID(dst_dpid, dst_port_no)).flip();
+    }
+
+    public byte[] getID() {
+	return getLinkID(src.getDpid(), src.getNumber(),
+		dst.getDpid(), dst.getNumber()).array();
+    }
+
+    public ByteBuffer getIDasByteBuffer() {
+	return getLinkID(src.getDpid(), src.getNumber(),
+		dst.getDpid(), dst.getNumber());
+    }
+
+    @Override
+    public int hashCode() {
+	final int prime = 31;
+	int result = 1;
+	result = prime * result + ((dst == null) ? 0 : dst.hashCode());
+	result = prime * result + ((src == null) ? 0 : src.hashCode());
+	return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+	if (this == obj)
+	    return true;
+	if (obj == null)
+	    return false;
+	if (getClass() != obj.getClass())
+	    return false;
+	LinkEvent other = (LinkEvent) obj;
+	if (dst == null) {
+	    if (other.dst != null)
+		return false;
+	} else if (!dst.equals(other.dst))
+	    return false;
+	if (src == null) {
+	    if (other.src != null)
+		return false;
+	} else if (!src.equals(other.src))
+	    return false;
+	return true;
+    }
+}
\ No newline at end of file