package es.tid.pce.parentPCE;
import es.tid.bgp.bgp4.messages.BGP4Update;
import es.tid.bgp.bgp4Peer.updateTEDB.UpdateProccesorThread;
import es.tid.pce.pcep.objects.Notification;
import es.tid.tedb.ITMDTEDB;
import es.tid.tedb.MDTEDB;
import java.net.Inet4Address;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MultiDomainTopologyUpdater {
private Logger log;
private MultiDomainTopologyUpdaterThread mdtuThread;
private LinkedBlockingQueue<MultiDomainUpdate> multiDomainUpdateQueue;
// private LinkedBlockingQueue<ITMultiDomainUpdate> ITmultiDomainUpdateQueue;
private MDTEDB multiDomainTEDB;
private ITMDTEDB ITmultiDomainTEDB;
/**
* BGP
*/
private boolean bgpActivated=false;
private LinkedBlockingQueue<BGP4Update> updateList;
private UpdateProccesorThread updateProccesorThread;
public MultiDomainTopologyUpdater(MDTEDB multiDomainTEDB, boolean bgpActivated){
log=LoggerFactory.getLogger("MultiDomainTologyUpdater");
multiDomainUpdateQueue= new LinkedBlockingQueue<MultiDomainUpdate>();
this.multiDomainTEDB=multiDomainTEDB;
this.bgpActivated=bgpActivated;
}
public MultiDomainTopologyUpdater(ITMDTEDB ITmultiDomainTEDB){
log=LoggerFactory.getLogger("PCEServer");
multiDomainUpdateQueue= new LinkedBlockingQueue<MultiDomainUpdate>();
this.updateList=new LinkedBlockingQueue<BGP4Update>();
this.ITmultiDomainTEDB=ITmultiDomainTEDB;
}
public void initialize(){
log.info("Multidomain Topology Updater initiated");
// if (bgpActivated){
// this.updateProccesorThread=new UpdateProccesorThread(updateList, multiDomainTEDB);
// updateProccesorThread.start();
// }else{
mdtuThread= new MultiDomainTopologyUpdaterThread(multiDomainUpdateQueue,multiDomainTEDB);
mdtuThread.start();
//}
}
public void ITinitialize(){
log.info("IT Multidomain Topology Updater initiated");
mdtuThread= new MultiDomainTopologyUpdaterThread(multiDomainUpdateQueue,ITmultiDomainTEDB);
mdtuThread.start();
}
public void processNotification(Notification notif, Inet4Address pceId, Inet4Address domainID){
MultiDomainUpdate multiDomainUpdate= new MultiDomainUpdate();
multiDomainUpdate.setDomainID(domainID);
multiDomainUpdate.setPCEID(pceId);
multiDomainUpdate.setNotif(notif);
multiDomainUpdateQueue.add(multiDomainUpdate);
}
public void dispathRequests(BGP4Update updateMessage){
log.info("Adding update message to the queue");
updateList.add(updateMessage);
}
public void stopMultiDomainTopologyUpdater(){
if (mdtuThread!=null){
mdtuThread.interrupt();
}
}
public String printLSAList(){
return mdtuThread.printLSAList();
}
public String printLSAShortList(){
return mdtuThread.printLSAShortList();
}
public int sizeLSAList(){
return mdtuThread.sizeLSAList();
}
public UpdateProccesorThread getUpdateProccesorThread() {
return updateProccesorThread;
}
}