package net.onrc.onos.core.topology; import java.util.Map; import net.onrc.onos.core.util.LinkTuple; import static com.google.common.base.Preconditions.checkNotNull; /** * Handler to Link object stored in In-memory Topology snapshot. */ public class LinkImpl extends TopologyObject implements Link { private final LinkTuple id; /** * Creates a Link handler object. * * @param topology Topology instance this object belongs to * @param linkTuple Link identifier */ LinkImpl(BaseInternalTopology topology, LinkTuple linkTuple) { super(topology); this.id = checkNotNull(linkTuple); } @Override public LinkTuple getLinkTuple() { return id; } @Override public Switch getSrcSwitch() { // TODO Cache BaseTopologyAdaptor instance? return new BaseTopologyAdaptor(topology).getSwitch(id.getSrc().getDpid()); } @Override public Port getSrcPort() { return new BaseTopologyAdaptor(topology).getPort(id.getSrc()); } @Override public Switch getDstSwitch() { return new BaseTopologyAdaptor(topology).getSwitch(id.getDst().getDpid()); } @Override public Port getDstPort() { return new BaseTopologyAdaptor(topology).getPort(id.getDst()); } @Override public long getLastSeenTime() { throw new UnsupportedOperationException("Not implemented yet"); } @Override public Double getCapacity() { return this.topology.getLinkData(id).getCapacity(); } /** * Returns the link type of the link. * * @return {@link net.onrc.onos.core.topology.LinkType} for this link */ @Override public LinkType getLinkType() { return LinkType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE, LinkType.ETHERNET_LINK.toString())); } @Override public String getStringAttribute(String attr) { return this.topology.getLinkData(id).getStringAttribute(attr); } @Override public String getStringAttribute(String attr, String def) { final String v = getStringAttribute(attr); if (v == null) { return def; } else { return v; } } @Override public Map<String, String> getAllStringAttributes() { return this.topology.getLinkData(id).getAllStringAttributes(); } @Override public String toString() { return String.format("%s --(cap:%f Mbps)--> %s", getSrcPort().toString(), getCapacity(), getDstPort().toString()); } /** * Returns the type of topology object. * * @return the type of the topology object */ @Override public String getType() { return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET_LAYER); } /** * Returns the config state of topology element. * * @return ConfigState */ @Override public ConfigState getConfigState() { return ConfigState.valueOf(getStringAttribute(TopologyElement.ELEMENT_CONFIG_STATE)); } /** * Returns the status of topology element. * * @return AdminStatus */ @Override public AdminStatus getStatus() { return AdminStatus.valueOf(getStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS)); } }