package es.tid.tedb;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.complexFields.BitmapLabelSet;
import es.tid.pce.pcep.objects.tlvs.StorageTLV;
import org.jgrapht.graph.SimpleDirectedWeightedGraph;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.Inet4Address;
import java.util.*;
/**
* Base de datos de ingenieria de trafico
* CLASE DE PRUEBA REESTRUCTURAR DESPUES!!!!!!!!!!
* @author Alejandro Tovar
*
*/
public class SimpleITTEDB implements DomainTEDB{
private long graphId;
private SimpleDirectedWeightedGraph<Object,IntraDomainEdge> networkGraph;
private LinkedList<InterDomainEdge> interDomainLinks; //MARTA
//public SimpleDirectedWeightedGraph<Integer,IntraDomainEdge> grafo;
//private byte[] domainReachabilityIPv4Prefix;
//private Object domainId;
//private byte[] mask;
private Hashtable <Object,Object> it_site_id_domain_ed;
private Hashtable <Object,Object> resource_id_domain_ed;
private Hashtable <StorageTLV,Object> storage_domain_ed;
ReachabilityEntry reachabilityEntry;
private Logger log;
public SimpleDirectedWeightedGraph<Object,IntraDomainEdge> getDuplicatedNetworkGraph(){
it_site_id_domain_ed=new Hashtable <Object,Object>();
resource_id_domain_ed=new Hashtable <Object,Object>();
SimpleDirectedWeightedGraph<Object,IntraDomainEdge> graphCopy= (SimpleDirectedWeightedGraph<Object, IntraDomainEdge>) networkGraph.clone();
log = LoggerFactory.getLogger("PCEServer");
return graphCopy;
}
public void initializeFromFile(String file){
interDomainLinks = FileTEDBUpdater.readInterDomainLinks(file);//MARTA
storage_domain_ed = FileTEDBUpdater.getStorageCharacteristics(file);
it_site_id_domain_ed=FileTEDBUpdater.getITSites(file);
resource_id_domain_ed=FileTEDBUpdater.getResource(file);
reachabilityEntry = new ReachabilityEntry();
FileTEDBUpdater.getDomainReachabilityFromFile(file,reachabilityEntry);
networkGraph=FileTEDBUpdater.readITNetwork(file);
// domainId=FileTEDBUpdater.readNetworkDomain(file);
// domainReachabilityIPv4Prefix=new byte[4];
// domainReachabilityIPv4Prefix[0]=(byte)172;
// domainReachabilityIPv4Prefix[1]=(byte)16;
// domainReachabilityIPv4Prefix[2]=(byte)101;
// domainReachabilityIPv4Prefix[3]=(byte)0;
// mask=new byte[4];
// mask[0]=(byte)255;
// mask[1]=(byte)255;
// mask[2]=(byte)255;
// mask[3]=(byte)0;
}
@Override
public void initializeFromFile(String file, String learnFrom) {
}
public long getGraphId() {
return graphId;
}
public void setGraphId(long graphId) {
this.graphId = graphId;
}
public boolean belongsToDomain(Object addr){
int i;
byte[] addrbytes=((Inet4Address)addr).getAddress();
for (i=0;i<4;++i){
int a= ((int)addrbytes[i])&0xFF;
log.info("addrbytes["+i+"]= "+a);
addrbytes[i]=(byte) (addrbytes[i]&(reachabilityEntry.getMask())[i]);
int aa= ((int)addrbytes[i])&0xFF;
log.info("addrbytesMask["+i+"]= "+aa);
}
for (i=0;i<4;++i){
if (addrbytes[i]!=(reachabilityEntry.getAggregatedIPRange().getAddress())[i]){
log.info("addrbytes[i] "+addrbytes[i]);
log.info("domainAddress[i] "+((int)((reachabilityEntry.getAggregatedIPRange().getAddress())[i])&0xFF));
return false;
}
}
return true;
}
// public byte[] getDomainReachabilityIPv4Prefix() {
// return domainReachabilityIPv4Prefix;
// }
// public void setDomainReachabilityIPv4Prefix(byte[] domainReachabilityIPv4Prefix) {
// this.domainReachabilityIPv4Prefix = domainReachabilityIPv4Prefix;
// }
// public Object getDomainId() {
// return domainId;
// }
// public void setDomainId(Object domainId) {
// this.domainId = domainId;
// }
public ReachabilityEntry getReachabilityEntry() {
return reachabilityEntry;
}
public void setReachabilityEntry(ReachabilityEntry reachabilityEntry) {
this.reachabilityEntry = reachabilityEntry;
}
public SimpleDirectedWeightedGraph<Object, IntraDomainEdge> getNetworkGraph() {
return networkGraph;
}
public void setNetworkGraph(
SimpleDirectedWeightedGraph<Object, IntraDomainEdge> networkGraph) {
this.networkGraph = networkGraph;
}
public LinkedList<InterDomainEdge> getInterDomainLinks() {
return interDomainLinks;
}
public void setInterDomainLinks(LinkedList<InterDomainEdge> interDomainLinks) {
this.interDomainLinks = interDomainLinks;
}
public Hashtable<StorageTLV, Object> getStorageCharacteristics() {
return storage_domain_ed;
}
public void setStorageCharacteristics(Hashtable<StorageTLV,Object> storage_domain_ed) {
this.storage_domain_ed = storage_domain_ed;
}
// public DirectedWeightedMultigraph<Object, InterDomainEdge> getDuplicatedMDNetworkGraph() {
// // TODO Auto-generated method stub
// return null;
// }
@Override
public String printTopology() {
String topoString;
Set<Object> vetexSet= networkGraph.vertexSet();
Iterator <Object> vertexIterator=vetexSet.iterator();
topoString="Domains: \r\n";
while (vertexIterator.hasNext()){
Object vertex= vertexIterator.next();
topoString=topoString+"\t"+vertex.toString()+"\r\n";
Enumeration<Object> site = it_site_id_domain_ed.keys();
Enumeration<Object> resource = resource_id_domain_ed.keys();
if(site.hasMoreElements()){
while(site.hasMoreElements()){
Object ele=site.nextElement();
Object dom=it_site_id_domain_ed.get(ele);
if(dom.equals(vertex)){
topoString=topoString+"\t -IT site:\t"+ele.toString()+"\r\n";
while (resource.hasMoreElements()){
Object res=resource.nextElement();
Object dombis=resource_id_domain_ed.get(res);
if (dombis.equals(vertex))
topoString=topoString+"\t -IT Resource:\t"+res.toString()+"\r\n";
}
}
}
}
}
topoString=topoString+"Intradomain Link list: \r\n";
Set<IntraDomainEdge> edgeSet= networkGraph.edgeSet();
Iterator <IntraDomainEdge> edgeIterator=edgeSet.iterator();
while (edgeIterator.hasNext()){
IntraDomainEdge edge= edgeIterator.next();
topoString=topoString+"\t"+edge.toString()+"\r\n";
}
topoString=topoString+printInterDomainLinks();
return topoString;
}
@Override
public String printInterDomainLinks() {
String topoString="";
int size = interDomainLinks.size();
topoString="Interdomain Link list: \r\n";
for (int i=0;i<size;i++){
//por pantalla
InterDomainEdge edge = interDomainLinks.get(i);
topoString=topoString+"\t"+edge.toString()+"\r\n";
}
return topoString;
}
public void notifyWavelengthChange(Object localInterfaceIPAddress,Object remoteInterfaceIPAddress,TE_Information info){
boolean removeLink=false;
if (info.getMaximumBandwidth()!= null){
if (info.getUnreservedBandwidth()!= null){
if (info.getUnreservedBandwidth().getUnreservedBandwidth()!= null){
if (info.getUnreservedBandwidth().getUnreservedBandwidth()[0]== 0){
IntraDomainEdge intraDomainEdge = networkGraph.getEdge(localInterfaceIPAddress, remoteInterfaceIPAddress);
if (intraDomainEdge!=null){
networkGraph.removeEdge(localInterfaceIPAddress, remoteInterfaceIPAddress);
}
removeLink=true;
}
}
}
}
if (removeLink==false){
IntraDomainEdge intraDomainEdge = networkGraph.getEdge(localInterfaceIPAddress, remoteInterfaceIPAddress);
intraDomainEdge.setTE_info(info);
}
}
@Override
public boolean isITtedb() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean containsVertex(Object vertex) {
// TODO Auto-generated method stub
return false;
}
@Override
public void register(TEDListener compAlgPreComp) {
// TODO Auto-generated method stub
}
@Override
public void notifyWavelengthChange(Object localInterfaceIPAddress,
Object remoteInterfaceIPAddress,
BitmapLabelSet previousBitmapLabelSet,
BitmapLabelSet newBitmapLabelSet) {
// TODO Auto-generated method stub
}
@Override
public WSONInformation getWSONinfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void notifyNewVertex(Object vertex) {
// TODO Auto-generated method stub
}
@Override
public void notifyNewEdge(Object source, Object destination) {
// TODO Auto-generated method stub
}
@Override
public void clearAllReservations() {
// TODO Auto-generated method stub
}
@Override
public void notifyWavelengthReservation(
LinkedList<Object> sourceVertexList,
LinkedList<Object> targetVertexList, int wavelength,
boolean bidirectional) {
// TODO Auto-generated method stub
}
@Override
public void notifyWavelengthEndReservation(
LinkedList<Object> sourceVertexList,
LinkedList<Object> targetVertexList, int wavelength,
boolean bidirectional) {
// TODO Auto-generated method stub
}
@Override
public void notifyWavelengthReservationSSON(
LinkedList<Object> sourceVertexList,
LinkedList<Object> targetVertexList, int wavelength,
boolean bidirectional, int m) {
// TODO Auto-generated method stub
}
@Override
public void notifyNewEdgeIP(Object source, Object destination,
TE_Information informationTEDB) {
// TODO Auto-generated method stub
}
@Override
public void notifyWavelengthEndReservationSSON(
LinkedList<Object> sourceVertexList,
LinkedList<Object> targetVertexList, int wavelength,
boolean bidirectional, int m) {
// TODO Auto-generated method stub
}
@Override
public void registerSSON(SSONListener compAlgPreComp) {
// TODO Auto-generated method stub
}
@Override
public SSONInformation getSSONinfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public Set<IntraDomainEdge> getIntraDomainLinks() {
// TODO Auto-generated method stub
return null;
}
@Override
public void notifyWavelengthReservationWLAN(
LinkedList<Object> sourceVertexList,
LinkedList<Object> targetVertexList,
LinkedList<Integer> wlans, boolean bidirectional) {
// TODO Auto-generated method stub
}
@Override
public Inet4Address getDomainID() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setWSONinfo(WSONInformation wSONinfo) {
// TODO Auto-generated method stub
}
@Override
public void setSSONinfo(SSONInformation sSONinfo) {
// TODO Auto-generated method stub
}
@Override
public void createGraph() {
// TODO Auto-generated method stub
}
@Override
public Set<Object> getIntraDomainLinksvertexSet() {
// TODO Auto-generated method stub
return null;
}
@Override
public Hashtable<Object, Node_Info> getNodeTable() {
// TODO Auto-generated method stub
return null;
}
@Override
public IT_Resources getItResources() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setItResources(IT_Resources itResources) {
// TODO Auto-generated method stub
}
}