Refactored LinkStorage and SwitchStorage preparing for event notification implementation.
diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
index 8ee346b..753563e 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/internal/LinkStorageImpl.java
@@ -20,32 +20,117 @@
 import com.tinkerpop.pipes.transform.PathPipe;
 
 /**
- * This is the class for storing the information of links into CassandraDB
+ * This is the class for storing the information of links into GraphDB
  */
 public class LinkStorageImpl implements ILinkStorage {
 	
 	protected static Logger log = LoggerFactory.getLogger(LinkStorageImpl.class);
 	protected GraphDBOperation dbop;
 
+	
+	/**
+	 * Initialize the object. Open LinkStorage using given configuration file.
+	 * @param conf Path (absolute path for now) to configuration file.
+	 */
+	@Override
+	public void init(String conf) {
+		this.dbop = new GraphDBOperation(conf);
+	}
+
 	/**
 	 * Update a record in the LinkStorage in a way provided by op.
 	 * @param link Record of a link to be updated.
 	 * @param op Operation to be done.
 	 */
 	@Override
-	public void update(Link link, DM_OPERATION op) {
-		update(link, (LinkInfo)null, op);
+	public void update(Link link, LinkInfo linkinfo, DM_OPERATION op) {
+		switch (op) {
+		case CREATE:
+		case INSERT:
+			addLinkImpl(link,op);
+			break;
+		case UPDATE:
+			if (linkinfo != null) {
+				setLinkInfo(link, linkinfo);
+			} else {
+				deleteLinkInfo(link);
+			}
+			break;
+		case DELETE:
+			deleteLink(link);
+			break;
+		}
 	}
 
+	@Override
+	public void addLink(Link link) {
+		addLinkImpl(link, DM_OPERATION.INSERT);
+	}
+	
 	/**
 	 * Update multiple records in the LinkStorage in a way provided by op.
 	 * @param links List of records to be updated.
 	 * @param op Operation to be done.
 	 */
 	@Override
-	public void update(List<Link> links, DM_OPERATION op) {
+	public void addLinks(List<Link> links) {
 		for (Link lt: links) {
-			update(lt, (LinkInfo)null, op);
+			addLinkImpl(lt, DM_OPERATION.INSERT);
+		}
+	}
+
+	/**
+		 * Delete a record in the LinkStorage.
+		 * @param lt Record to be deleted.
+		 */
+		@Override
+		public void deleteLink(Link lt) {
+			IPortObject vportSrc = null, vportDst = null;
+			
+			log.debug("deleteLink(): {}", lt);
+			
+	        try {
+	            // get source port vertex
+	         	String dpid = HexString.toHexString(lt.getSrc());
+	         	short port = lt.getSrcPort();
+	         	vportSrc = dbop.searchPort(dpid, port);
+	            
+	            // get dst port vertex
+	         	dpid = HexString.toHexString(lt.getDst());
+	         	port = lt.getDstPort();
+	         	vportDst = dbop.searchPort(dpid, port);
+	     		// FIXME: This needs to remove all edges
+	         	
+	         	if (vportSrc != null && vportDst != null) {
+	         		vportSrc.removeLink(vportDst);
+	        		dbop.commit();
+	            	log.debug("deleteLink(): deleted edges src {} dst {}", new Object[]{
+	            			lt, vportSrc, vportDst});
+	            	
+	        		// TODO publish DELETE_LINK event here
+	            } else {
+	            	log.error("deleteLink(): failed invalid vertices {} src {} dst {}", new Object[]{lt, vportSrc, vportDst});
+	            	dbop.rollback();
+	            }
+	         	
+	        } catch (TitanException e) {
+	            /*
+	             * retry till we succeed?
+	             */
+	        	log.error("deleteLink(): titan exception {} {}", new Object[]{lt, e.toString()});
+	        	dbop.rollback();
+	        	e.printStackTrace();
+	        }
+		}
+
+	/**
+	 * Delete multiple records in LinkStorage.
+	 * @param links List of records to be deleted.
+	 */
+	@Override
+	public void deleteLinks(List<Link> links) {
+		for (Link lt : links) {
+			deleteLink(lt);
 		}
 	}
 
@@ -55,30 +140,28 @@
 	 * @param linkinfo Meta-information of a link to be updated.
 	 * @param op Operation to be done.
 	 */
-	@Override
-	public void update(Link link, LinkInfo linkinfo, DM_OPERATION op) {
-		switch (op) {
-		case UPDATE:
-		case CREATE:
-		case INSERT:
-			updateLink(link, linkinfo, op);
-			break;
-		case DELETE:
-			deleteLink(link);
-			break;
-		}
+	private void setLinkInfo(Link link, LinkInfo linkinfo) {
+		// TODO implement this
+		
+		// TODO publish UPDATE_LINK event here
 	}
 	
+	private void deleteLinkInfo(Link link) {
+		// TODO implement this
+		
+		// TODO publish UPDATE_LINK event here
+	}
+
 	/**
 	 * Perform INSERT/CREATE/UPDATE operation to update the LinkStorage.
 	 * @param lt Record of a link to be updated.
 	 * @param linkinfo Meta-information of a link to be updated.
 	 * @param op Operation to be done. (only INSERT/CREATE/UPDATE is acceptable)
 	 */
-	public void updateLink(Link lt, LinkInfo linkinfo, DM_OPERATION op) {
+	private void addLinkImpl(Link lt, DM_OPERATION op) {
 		IPortObject vportSrc = null, vportDst = null;
 	
-		log.trace("updateLink(): op {} {} {}", new Object[]{op, lt, linkinfo});
+		log.trace("updateLink(): op {} {}", new Object[]{op, lt});
 		
         try {
             // get source port vertex
@@ -101,7 +184,6 @@
             	}
 
             	if (currLinks.contains(vportDst)) {
-            		// TODO: update linkinfo
             		if (op.equals(DM_OPERATION.INSERT) || op.equals(DM_OPERATION.CREATE)) {
             			log.debug("addOrUpdateLink(): failed link exists {} {} src {} dst {}", 
             					new Object[]{op, lt, vportSrc, vportDst});
@@ -111,6 +193,8 @@
 
             		dbop.commit();
             		log.debug("updateLink(): link added {} {} src {} dst {}", new Object[]{op, lt, vportSrc, vportDst});
+            		
+            		// TODO publish ADD_LINK event here
             	}
             } else {
             	log.error("updateLink(): failed invalid vertices {} {} src {} dst {}", new Object[]{op, lt, vportSrc, vportDst});
@@ -126,78 +210,11 @@
 	}
 	
 	/**
-	 * Delete multiple records in LinkStorage.
-	 * @param links List of records to be deleted.
-	 */
-	@Override
-	public void deleteLinks(List<Link> links) {
-
-		for (Link lt : links) {
-			deleteLink(lt);
-		}
-	}
-	
-	/**
-	 * Delete a record in the LinkStorage.
-	 * @param lt Record to be deleted.
-	 */
-	@Override
-	public void deleteLink(Link lt) {
-		IPortObject vportSrc = null, vportDst = null;
-		
-		log.debug("deleteLink(): {}", lt);
-		
-        try {
-            // get source port vertex
-         	String dpid = HexString.toHexString(lt.getSrc());
-         	short port = lt.getSrcPort();
-         	vportSrc = dbop.searchPort(dpid, port);
-            
-            // get dst port vertex
-         	dpid = HexString.toHexString(lt.getDst());
-         	port = lt.getDstPort();
-         	vportDst = dbop.searchPort(dpid, port);
-     		// FIXME: This needs to remove all edges
-         	
-         	if (vportSrc != null && vportDst != null) {
-/*
-        		int count = 0;
-         		for (Edge e : vportSrc.asVertex().getEdges(Direction.OUT)) {
-         			log.debug("deleteLink(): {} in {} out {}", 
-         					new Object[]{e.getLabel(), e.getVertex(Direction.IN), e.getVertex(Direction.OUT)});
-         			if (e.getLabel().equals("link") && e.getVertex(Direction.IN).equals(vportDst)) {
-         				graph.removeEdge(e);
-         				count++;
-         			}
-         		}
-*/
-         		vportSrc.removeLink(vportDst);
-        		dbop.commit();
-            	log.debug("deleteLink(): deleted edges src {} dst {}", new Object[]{
-            			lt, vportSrc, vportDst});
-            	
-            } else {
-            	log.error("deleteLink(): failed invalid vertices {} src {} dst {}", new Object[]{lt, vportSrc, vportDst});
-            	dbop.rollback();
-            }
-         	
-        } catch (TitanException e) {
-            /*
-             * retry till we succeed?
-             */
-        	log.error("deleteLink(): titan exception {} {}", new Object[]{lt, e.toString()});
-        	dbop.rollback();
-        	e.printStackTrace();
-        }
-	}
-
-	/**
 	 * Get list of all links connected to the port specified by given DPID and port number.
 	 * @param dpid DPID of desired port.
 	 * @param port Port number of desired port.
 	 * @return List of links. Empty list if no port was found.
 	 */
-	// TODO: Fix me
 	@Override
 	public List<Link> getLinks(Long dpid, short port) {
     	List<Link> links = new ArrayList<Link>();
@@ -221,24 +238,13 @@
 	}
 	
 	/**
-	 * Initialize the object. Open LinkStorage using given configuration file.
-	 * @param conf Path (absolute path for now) to configuration file.
-	 */
-	@Override
-	public void init(String conf) {
-		//TODO extract the DB location from properties
-		this.dbop = new GraphDBOperation(conf);
-	}
-
-	/**
 	 * Delete records of the links connected to the port specified by given DPID and port number.
 	 * @param dpid DPID of desired port.
 	 * @param port Port number of desired port.
 	 */
-	// TODO: Fix me
 	@Override
 	public void deleteLinksOnPort(Long dpid, short port) {
-		List<Link> linksToDelete = getLinks(dpid,port);
+		List<Link> linksToDelete = getLinks(dpid, port);
 		
 		for(Link l : linksToDelete) {
 			deleteLink(l);
@@ -250,7 +256,6 @@
 	 * @param dpid DPID of desired switch.
 	 * @return List of links. Empty list if no port was found.
 	 */
-	// TODO: Fix me
 	@Override
 	public List<Link> getLinks(String dpid) {
 		List<Link> links = new ArrayList<Link>();
@@ -302,12 +307,34 @@
 		return links;
 	}
 	
+	@Override
+	public LinkInfo getLinkInfo(Link link) {
+		// TODO implement this
+		return null;
+	}
+
+	/**
+	 * Finalize the object.
+	 */
+	public void finalize() {
+		close();
+	}
+
+	/**
+	 * Close LinkStorage.
+	 */
+	@Override
+	public void close() {
+		// TODO Auto-generated method stub
+//		graph.shutdown();		
+	}
+
+	// TODO should be moved to TopoLinkServiceImpl (never used in this class)
 	static class ExtractLink implements PipeFunction<PathPipe<Vertex>, Link> {
 	
 		@SuppressWarnings("unchecked")
 		@Override
 		public Link compute(PathPipe<Vertex> pipe ) {
-			// TODO Auto-generated method stub
 			long s_dpid = 0;
 			long d_dpid = 0;
 			short s_port = 0;
@@ -328,22 +355,6 @@
 			return l;
 		}
 	}
-	
-	/**
-	 * Finalize the object.
-	 */
-	public void finalize() {
-		close();
-	}
-
-	/**
-	 * Close LinkStorage.
-	 */
-	@Override
-	public void close() {
-		// TODO Auto-generated method stub
-//		graph.shutdown();		
-	}
 
 
 }