package net.onrc.onos.ofcontroller.core;

import java.util.List;

import net.floodlightcontroller.linkdiscovery.LinkInfo;
import net.floodlightcontroller.routing.Link;

public interface ILinkStorage extends INetMapStorage {
	
    /*
     * Link creation
     */
	public void update(Link link, DM_OPERATION op);
	public void update(Link link, LinkInfo linkinfo, DM_OPERATION op);
	public void update(List<Link> List, DM_OPERATION op);

	/*
	 *  Add Linkinfo
	 */
	public void updateLink (Link link, LinkInfo linkinfo, DM_OPERATION op);
	
	/*
	 * Delete a single link
	 */
	public void deleteLink(Link link);

	/*
	 * Delete links associated with dpid and port 
	 * If only dpid is used, All links associated for switch are removed
	 * Useful for port up/down and also switch join/remove events
	 */ 
	public void deleteLinksOnPort(Long dpid, short port);
	
	/*
	 * Delete a list of links
	 */
	public void deleteLinks(List<Link> links);

	/*
	 * Get Links from Storage
	 *  If dpid and port both are specified specific link is retrieved
	 *  If only dpid is set all links associated with Switch are retrieved
	 */
	public List<Link> getLinks(Long dpid, short port);
	public List<Link> getLinks(String dpid);
	public List<Link> getActiveLinks();
	
	/*
	 * Init with Storage conf
	 */
	public void init(String conf);

}
