add edges from flowentry to ports and switches
diff --git a/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java b/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
index 405af1a..3eec2ec 100644
--- a/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
+++ b/src/main/java/net/floodlightcontroller/flowcache/FlowManager.java
@@ -22,6 +22,8 @@
 import net.floodlightcontroller.core.INetMapStorage;
 import net.floodlightcontroller.core.INetMapTopologyObjects.IFlowEntry;
 import net.floodlightcontroller.core.INetMapTopologyObjects.IFlowPath;
+import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
+import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
 import net.floodlightcontroller.core.IOFSwitch;
 import net.floodlightcontroller.core.module.FloodlightModuleContext;
@@ -702,23 +704,39 @@
 	    // - flowEntry.matchDstMac()
 	    // - flowEntry.actionOutput()
 	    //
+	    ISwitchObject sw = conn.utils().searchSwitch(conn,flowEntry.dpid().toString());
 	    flowEntryObj.setSwitchDpid(flowEntry.dpid().toString());
-	    if (flowEntry.flowEntryMatch().matchInPort())
-		flowEntryObj.setMatchInPort(flowEntry.flowEntryMatch().inPort().value());
-	    if (flowEntry.flowEntryMatch().matchEthernetFrameType())
-		flowEntryObj.setMatchEthernetFrameType(flowEntry.flowEntryMatch().ethernetFrameType());
-	    if (flowEntry.flowEntryMatch().matchSrcIPv4Net())
-		flowEntryObj.setMatchSrcIPv4Net(flowEntry.flowEntryMatch().srcIPv4Net().toString());
-	    if (flowEntry.flowEntryMatch().matchDstIPv4Net())
-		flowEntryObj.setMatchDstIPv4Net(flowEntry.flowEntryMatch().dstIPv4Net().toString());
-	    if (flowEntry.flowEntryMatch().matchSrcMac())
-		flowEntryObj.setMatchSrcMac(flowEntry.flowEntryMatch().srcMac().toString());
-	    if (flowEntry.flowEntryMatch().matchDstMac())
-		flowEntryObj.setMatchDstMac(flowEntry.flowEntryMatch().dstMac().toString());
+	    
+	    flowEntryObj.setSwitch(sw);
+	    if (flowEntry.flowEntryMatch().matchInPort()) {
+	    	IPortObject inport = conn.utils().searchPort(conn,flowEntry.dpid().toString(),
+	    			flowEntry.flowEntryMatch().inPort().value());
+	    	flowEntryObj.setMatchInPort(flowEntry.flowEntryMatch().inPort().value());
+	    	flowEntryObj.setInPort(inport);
+	    }
+	    if (flowEntry.flowEntryMatch().matchEthernetFrameType()) {
+	    	flowEntryObj.setMatchEthernetFrameType(flowEntry.flowEntryMatch().ethernetFrameType());
+	    }
+	    if (flowEntry.flowEntryMatch().matchSrcIPv4Net()) {
+	    	flowEntryObj.setMatchSrcIPv4Net(flowEntry.flowEntryMatch().srcIPv4Net().toString());
+	    }
+	    if (flowEntry.flowEntryMatch().matchDstIPv4Net()) {
+	    	flowEntryObj.setMatchDstIPv4Net(flowEntry.flowEntryMatch().dstIPv4Net().toString());
+	    }
+	    if (flowEntry.flowEntryMatch().matchSrcMac()) {
+	    	flowEntryObj.setMatchSrcMac(flowEntry.flowEntryMatch().srcMac().toString());
+	    }
+	    if (flowEntry.flowEntryMatch().matchDstMac()) {
+	    	flowEntryObj.setMatchDstMac(flowEntry.flowEntryMatch().dstMac().toString());
+	    }
 
 	    for (FlowEntryAction fa : flowEntry.flowEntryActions()) {
-		if (fa.actionOutput() != null)
-		    flowEntryObj.setActionOutput(fa.actionOutput().port().value());
+	    	if (fa.actionOutput() != null) {
+	    		IPortObject outport = conn.utils().searchPort(conn,flowEntry.dpid().toString(),
+	    									fa.actionOutput().port().value());
+	    		flowEntryObj.setActionOutput(fa.actionOutput().port().value());
+	    		flowEntryObj.setOutPort(outport);
+	    	}
 	    }
 	    // TODO: Hacks with hard-coded state names!
 	    if (found)