Topology events related modifications:
 * Added new class TopologyEvent which encapsulates one of the following
   events: Switch event, Port event, Link event, Device event
* Added getID() method  to the new TopologyEvent class, and to each
  of the concrete topology related events.
* Added default constructors, because they are needed for Kryo-related
  deserialization
* Added Kryo registration for the new classes.

Change-Id: I61233b3176a7124bdf9e906da9f5efdc663b3003
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
new file mode 100644
index 0000000..927d266
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
@@ -0,0 +1,92 @@
+package net.onrc.onos.ofcontroller.networkgraph;
+
+/**
+ * Self-contained Topology event Object
+ *
+ * TODO: For now the topology event contains one of the following events:
+ * Switch, Port, Link, Device. In the future it will contain multiple events
+ * in a single transaction.
+ */
+public class TopologyEvent {
+    SwitchEvent switchEvent = null;		// Set for Switch event
+    PortEvent portEvent = null;			// Set for Port event
+    LinkEvent linkEvent = null;			// Set for Link event
+    DeviceEvent deviceEvent = null;		// Set for Device event
+
+    /**
+     * Default constructor.
+     */
+    public TopologyEvent() {
+    }
+
+    /**
+     * Constructor for given Switch event.
+     *
+     * @param switchEvent the Switch event to use.
+     */
+    TopologyEvent(SwitchEvent switchEvent) {
+	this.switchEvent = switchEvent;
+    }
+
+    /**
+     * Constructor for given Port event.
+     *
+     * @param portEvent the Port event to use.
+     */
+    TopologyEvent(PortEvent portEvent) {
+	this.portEvent = portEvent;
+    }
+
+    /**
+     * Constructor for given Link event.
+     *
+     * @param linkEvent the Link event to use.
+     */
+    TopologyEvent(LinkEvent linkEvent) {
+	this.linkEvent = linkEvent;
+    }
+
+    /**
+     * Constructor for given Device event.
+     *
+     * @param deviceEvent the Device event to use.
+     */
+    TopologyEvent(DeviceEvent deviceEvent) {
+	this.deviceEvent = deviceEvent;
+    }
+
+    /**
+     * Get the string representation of the event.
+     *
+     * @return the string representation of the event.
+     */
+    @Override
+    public String toString() {
+	if (switchEvent != null)
+	    return switchEvent.toString();
+	if (portEvent != null)
+	    return portEvent.toString();
+	if (linkEvent != null)
+	    return linkEvent.toString();
+	if (deviceEvent != null)
+	    return deviceEvent.toString();
+	return null;
+    }
+
+    /**
+     * Get the Topology event ID.
+     *
+     * @return the Topology event ID.
+     */
+    public byte[] getID() {
+	if (switchEvent != null)
+	    return switchEvent.getID();
+	if (portEvent != null)
+	    return portEvent.getID();
+	if (linkEvent != null)
+	    return linkEvent.getID();
+	if (deviceEvent != null)
+	    return deviceEvent.getID();
+	return null;
+    }
+}