* Update the Topology class implementation:
  - The port IDs are type "integer" instead of "short" so it will be easier
    to use it for more general purpose (e.g., topologies with lots of tunnels).
  - Implemented methods to get/add/remove various topology elements:
    switch, port, link
  - Added state to keep track of the reversed unidirectional links, so they
    can be properly removed if a switch or a port is removed.
* Add a Topology instance inside the PathComputation class, and
  populate it as appropriate with ENTRY_ADD/ENTRY_REMOVE topology events
  from the datagrid.
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
index 89e8da6..cece840 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/PathComputation.java
@@ -8,6 +8,7 @@
 import java.util.concurrent.LinkedBlockingQueue;
 
 import net.onrc.onos.datagrid.IDatagridService;
+import net.onrc.onos.ofcontroller.topology.Topology;
 import net.onrc.onos.ofcontroller.topology.TopologyElement;
 import net.onrc.onos.ofcontroller.util.EventEntry;
 import net.onrc.onos.ofcontroller.util.FlowPath;
@@ -24,6 +25,7 @@
 
     private FlowManager flowManager;		// The Flow Manager to use
     private IDatagridService datagridService;	// The Datagrid Service to use
+    private Topology topology;			// The network topology
 
     // The queue with Flow Path and Topology Element updates
     private BlockingQueue<EventEntry<?>> networkEvents =
@@ -45,6 +47,7 @@
 		    IDatagridService datagridService) {
 	this.flowManager = flowManager;
 	this.datagridService = datagridService;
+	this.topology = new Topology();
     }
 
     /**
@@ -117,6 +120,22 @@
 	if (topologyEvents.isEmpty() && flowPathEvents.isEmpty())
 	    return;		// Nothing to do
 
+	//
+	// Add the topology events
+	//
+	boolean isTopologyModified = false;
+	for (EventEntry<TopologyElement> eventEntry : topologyEvents) {
+	    TopologyElement topologyElement = eventEntry.eventData();
+	    switch (eventEntry.eventType()) {
+	    case ENTRY_ADD:
+		isTopologyModified = topology.addTopologyElement(topologyElement);
+		break;
+	    case ENTRY_REMOVE:
+		isTopologyModified = topology.removeTopologyElement(topologyElement);
+		break;
+	    }
+	}
+
 	// TODO: Implement it!
 
 	// Cleanup