blob: 281df21d8094eb63bc23dd8bfd4d3c0735697d34 [file] [log] [blame]
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));
}
}