package es.tid.pce.computingEngine.algorithms;
import java.net.Inet4Address;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.jgrapht.graph.DirectedWeightedMultigraph;
import org.jgrapht.graph.SimpleDirectedWeightedGraph;
import es.tid.pce.pcep.objects.ExcludeRouteObject;
import es.tid.pce.pcep.objects.subobjects.UnnumberIfIDXROSubobject;
import es.tid.pce.pcep.objects.subobjects.XROSubObjectValues;
import es.tid.pce.pcep.objects.subobjects.XROSubobject;
import es.tid.tedb.InterDomainEdge;
import es.tid.tedb.IntraDomainEdge;
import es.tid.tedb.ReachabilityManager;
public class GraphFunctions {
public static void processXRO(ExcludeRouteObject xro, SimpleDirectedWeightedGraph<Object, IntraDomainEdge> graphLambda){
Logger log=LoggerFactory.getLogger("PCEServer");
try{
if (xro!=null){
log.info("XRO: Thre are "+xro.getXROSubobjectList().size()+" exclusions");
for (int i=0;i<xro.getXROSubobjectList().size();++i){
XROSubobject eroso=xro.getXROSubobjectList().get(i);
if (eroso.getType()==XROSubObjectValues.XRO_SUBOBJECT_UNNUMBERED_IF_ID){
UnnumberIfIDXROSubobject eros=(UnnumberIfIDXROSubobject)eroso;
log.info("XRO: UNNUMBERED_IF_ID TO EXCLUDE: "+eros.getRouterID()+":"+eros.getInterfaceID());
//Inet4Address source_domain_id=reachabilityManager.getDomain(eros.getRouterID());
Inet4Address source_node_ip= eros.getRouterID();
log.info("XRO: IT BELONGS TO NODE "+source_node_ip);
boolean hasVertex=graphLambda.containsVertex(source_node_ip);
log.info("XRO: EL GRAPH TIENE VERTEX "+hasVertex);
if (hasVertex){
log.info("%% 1: graphLambda:: "+graphLambda.toString());
graphLambda.removeVertex(source_node_ip);
log.info("%% 2: graphLambda:: "+graphLambda.toString());
// Set<IntraDomainEdge> setEdges=graphLambda.edgesOf(source_node_ip);
// log.info("%% setEdges:: "+ setEdges.toString());
//
// Iterator<IntraDomainEdge> iter=setEdges.iterator();
//
// while (iter.hasNext()){
// IntraDomainEdge edge=iter.next();
// log.info("XRO: LOOKING AT EDGE "+edge.getSrc_if_id());
// if (edge.getSrc_if_id()==eros.getInterfaceID()){
// if (edge.getSrc_if_id()==eros.getInterfaceID()){
// graphLambda.removeEdge(edge);
// log.info("XRO: REMOVE EDGE "+eros.getRouterID()+":"+edge.getSrc_if_id());
// }
// }
// }
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}