package es.tid.topologyModuleBase.UnifyTopoModel.model;
import es.tid.tedb.*;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.List;
//import es.tid.tedb.elements.Link;
public class TranslateModel {
public static Port translateNode(DomainTEDB db, es.tid.tedb.elements.Node n){
Port port = new Port();
port.setId( ((es.tid.tedb.elements.Node) n).getNodeID() );
return port;
}
public static Port translateNodeIp(DomainTEDB ted, Inet4Address n, Node_Info nodeInfo) {
Port port = new Port();
port.setId(((java.net.Inet4Address) n).getHostAddress());
return port;
}
public static Node translateTopology(String domainID, DomainTEDB ted){
Node node = new Node();
node.setId(domainID);
//Translating nodes from TEDB to Unify Model
PortsSchema ports = new PortsSchema();
List<Port> portlist = new ArrayList<Port>();
for(Object nodeFromTed : ted.getIntraDomainLinksvertexSet()){
if(nodeFromTed instanceof es.tid.tedb.elements.Node){
portlist.add(translateNode(ted, (es.tid.tedb.elements.Node)nodeFromTed));
} else if(nodeFromTed instanceof java.net.Inet4Address){
portlist.add(translateNodeIp(ted, (java.net.Inet4Address)nodeFromTed, ted.getNodeTable().get(node)));
}
}
node.setLinks(translateIntraDomainLinks(domainID, ted));
if (ted.getItResources()!=null){
SoftwareResource resources = new SoftwareResource();
resources.setCpu(ted.getItResources().getCpu());
resources.setMem(ted.getItResources().getMem());
resources.setStorage(ted.getItResources().getStorage());
node.setResources(resources);
Metadata metadata = new Metadata();
MetadataMetadata e= new MetadataMetadata();
e.setKey("unify-slor");
e.setValue(ted.getItResources().getControllerIT());
metadata.getMetadata().add(e);
node.metadata.add(e);
}
ports.setPort(portlist);
node.setPorts(ports);
return node;
}
public static LinksSchema translateInterDomainLinks(String domainID, MultiDomainTEDB ted){
//Translating InterDomain links from TEDB to Unify Model
LinksSchema links = new LinksSchema();
List<Link> linklist = new ArrayList<Link>();
for(InterDomainEdge linkTed : ted.getInterDomainLinks()){
Link link = new Link();
if (linkTed.getSrc_router_id() instanceof java.net.Inet4Address){
String src = ((java.net.Inet4Address) linkTed.getSrc_router_id()).getHostAddress();
String srcDomain = ((java.net.Inet4Address) linkTed.getDomain_src_router()).getHostAddress();
String srcUnify = "/nodes/node[id="+srcDomain+"]/ports/port[id="+src+"]";
link.setSrc(srcUnify);
}else{
System.out.println("Type of InterDomain link not implemented for UnifyModel");
}
if (linkTed.getDst_router_id() instanceof java.net.Inet4Address){
String dst = ((java.net.Inet4Address) linkTed.getDst_router_id()).getHostAddress();
String dstDomain = ((java.net.Inet4Address) linkTed.getDomain_dst_router()).getHostAddress();
String dstUnify = "/nodes/node[id="+dstDomain+"]/ports/port[id="+dst+"]";
link.setDst(dstUnify);
}else{
System.out.println("Type of InterDomain link not implemented for UnifyModel");
}
linklist.add(link);
}
links.setLink(linklist);
return links;
}
public static LinksSchema translateIntraDomainLinks(String domainID, DomainTEDB ted){
//Translating InterDomain links from TEDB to Unify Model
LinksSchema links = new LinksSchema();
List<Link> linklist = new ArrayList<Link>();
for(IntraDomainEdge linkTed : ted.getIntraDomainLinks()){
Link link = new Link();
link.setId(linkTed.getLinkID());
if( linkTed.getSource() instanceof java.net.Inet4Address){
String src = "/nodes/node[id="+domainID+"]/ports/port[id="+((java.net.Inet4Address)linkTed.getSource()).getHostAddress()+"]";
link.setSrc(src);
//} else if( linkTed.getSource( instanceof es.tid.tedb.elements.EndPoint ){
} else {
System.out.println("Type of link not implemented for UnifyModel");
}
if( linkTed.getTarget() instanceof java.net.Inet4Address){
String dst = "/nodes/node[id="+domainID+"]/ports/port[id="+((java.net.Inet4Address)linkTed.getTarget()).getHostAddress()+"]";
link.setDst(dst);
//} else if( linkTed.getTarget( instanceof es.tid.tedb.elements.EndPoint ){
} else {
System.out.println("Type of link not implemented for UnifyModel");
}
LinkResource linkResource = new LinkResource();
if (linkTed.getTE_info().getUndirLinkDelay() != null) linkResource.setDelay(String.valueOf(linkTed.getTE_info().getUndirLinkDelay().getDelay()));
if (linkTed.getTE_info().getUndirAvailableBw() != null) linkResource.setBandwidth(String.valueOf(linkTed.getTE_info().getUndirAvailableBw().getAvailableBw()));
if (linkResource != null) link.setResources(linkResource);
linklist.add(link);
}
links.setLink(linklist);
return links;
}
}