package es.tid.pce.parentPCE;
import es.tid.pce.computingEngine.AlgorithmRule;
import es.tid.pce.computingEngine.MapAlgoRule;
import es.tid.pce.management.PcepCapability;
import es.tid.tedb.Layer;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.LinkedList;
import java.util.concurrent.atomic.AtomicInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import java.util.concurrent.Callable;
public class ParentPCEServerParameters {
/**
* PCE Server Port of the Parent PCE. Default value 4189
*/
private int ParentPCEServerPort = 4189;
/**
* TCP port to connect to manage the Parent PCE
*/
private int parentPCEManagementPort = 8888;
/**
* Number of Path Request Processor Threads. Default value 1
*/
private int ChildPCERequestsProcessors=1;
/**
* File to send the logs. By default ParentPCEServer.log
*/
private String ParentPCEServerLogFile="ParentPCEServer.log";
/**
* File to send logs of the PCEP Parser of the Parent PCE. By default ParentPCEPPareserServer.log
*/
private String ParentPCEPParserLogFile="ParentPCEPPareserServer.log";
/**
*
*/
private String networkDescriptionFile="MDnetwork.xml";
private String reachFile="ReachFile.xml";
private String totalFile="total.xml";
/**
*
*/
private String ITnetworkDescriptionFile="network_IT_102.xml";
/**
*
*/
private String MDnetworkDescriptionFile="network_MD.xml";
/**
*
*/
private String ITMDnetworkDescriptionFile="network_IT_MD.xml";
/**
*
*/
private int initialSessionID=0;
/**
*
*/
private AtomicInteger sessionIDCounter;
/**
*
*/
private int KeepAliveTimer=30;
/**
*
*/
private int minKeepAliveTimerPCCAccepted=2;
/**
*
*/
private int maxDeadTimerPCCAccepted=30000;
/**
*
*/
private boolean zeroDeadTimerPCCAccepted=false;
private boolean testflag=false;
/**
* Dead Timer
*/
private int DeadTimer=120;
private Layer defaultPCELayer;
private boolean multiDomain=true;
private boolean ITcapable=false;
public LinkedList<Layer> PCElayers;
private LinkedList<String> algorithmList;
public LinkedList<MapAlgoRule> algorithmRuleList;
// private Level ParentPCELogLevel=Level.SEVERE;
//
// private Level PCEPParserLogLevel=Level.SEVERE;
private boolean readMDTEDFromFile=false;
private boolean strongestLog=false;
private String GUIHost;
private int GUIPort;
private String ParentPCEServerAddress;
private boolean fullTopologyMode=false;
private PcepCapability localPcepCapability;
/**
* BGP. This variable indeicates if the PCE has a BGP module
*/
private boolean actingAsBGP4Peer;
/**
* BGP. File where read the BGP parameters to configure
*/
private String BGP4File = "BGP4Parameters.xml";
/**
* The Parent PCE has a database with the whole topology. The interdomain and intradomain links.
*/
private boolean knowsWholeTopology = false;
/**
* Name of the configuration file
*/
private String confFile;
public String getParentPCEServerAddress() {
return ParentPCEServerAddress;
}
public void setParentPCEServerAddress(String parentPCEServerAddress) {
ParentPCEServerAddress = parentPCEServerAddress;
}
public String getGUIHost() {
return GUIHost;
}
public void setGUIHost(String gUIHost) {
GUIHost = gUIHost;
}
public int getGUIPort() {
return GUIPort;
}
public void setGUIPort(int gUIPort) {
GUIPort = gUIPort;
}
public boolean isStrongestLog() {
return strongestLog;
}
public void setStrongestLog(boolean strongestLog) {
this.strongestLog = strongestLog;
}
public boolean isReadMDTEDFromFile() {
return readMDTEDFromFile;
}
public void setReadMDTEDFromFile(boolean readMDTEDFromFile) {
this.readMDTEDFromFile = readMDTEDFromFile;
}
public int getParentPCEServerPort() {
return ParentPCEServerPort;
}
public void setParentPCEServerPort(int parentPCEServerPort) {
ParentPCEServerPort = parentPCEServerPort;
}
public String getNetworkDescriptionFile() {
return networkDescriptionFile;
}
public void setNetworkDescriptionFile(String networkDescriptionFile) {
this.networkDescriptionFile = networkDescriptionFile;
}
public String getReachFile() {
return reachFile;
}
public void setReachFile(String File) {
this.reachFile = File;
}
public String getTotalFile() {
return totalFile;
}
public void setTotalFile(String File) {
this.totalFile = File;
}
public String getITNetworkDescriptionFile() {
return ITnetworkDescriptionFile;
}
public void setITNetworkDescriptionFile(String ITnetworkDescriptionFile) {
this.ITnetworkDescriptionFile = ITnetworkDescriptionFile;
}
public String getMDnetworkDescriptionFile() {
return MDnetworkDescriptionFile;
}
public void setMDnetworkDescriptionFile(String mDnetworkDescriptionFile) {
MDnetworkDescriptionFile = mDnetworkDescriptionFile;
}
public String getITMDnetworkDescriptionFile() {
return ITMDnetworkDescriptionFile;
}
public void setITMDnetworkDescriptionFile(String ITmDnetworkDescriptionFile) {
ITMDnetworkDescriptionFile = ITmDnetworkDescriptionFile;
}
public LinkedList<String> getAlgorithmList() {
return algorithmList;
}
public void setAlgorithmList(LinkedList<String> algorithmList) {
this.algorithmList = algorithmList;
}
public AtomicInteger getSessionIDCounter() {
return sessionIDCounter;
}
public void setSessionIDCounter(AtomicInteger sessionIDCounter) {
this.sessionIDCounter = sessionIDCounter;
}
public int getChildPCERequestsProcessors() {
return ChildPCERequestsProcessors;
}
public void setChildPCERequestsProcessors(int chidPCERequestsProcessors) {
ChildPCERequestsProcessors = chidPCERequestsProcessors;
}
public String getParentPCEServerLogFile() {
return ParentPCEServerLogFile;
}
public void setParentPCEServerLogFile(String parentPCEServerLogFile) {
ParentPCEServerLogFile = parentPCEServerLogFile;
}
public String getParentPCEPParserLogFile() {
return ParentPCEPParserLogFile;
}
public void setParentPCEPParserLogFile(String parentPCEPParserLogFile) {
ParentPCEPParserLogFile = parentPCEPParserLogFile;
}
public int getInitialSessionID() {
return initialSessionID;
}
public void setInitialSessionID(int initialSessionID) {
this.initialSessionID = initialSessionID;
}
public int getKeepAliveTimer() {
return KeepAliveTimer;
}
public void setKeepAliveTimer(int keepAliveTimer) {
KeepAliveTimer = keepAliveTimer;
}
public int getDeadTimer() {
return DeadTimer;
}
public void setDeadTimer(int deadTimer) {
DeadTimer = deadTimer;
}
public int getMinKeepAliveTimerPCCAccepted() {
return minKeepAliveTimerPCCAccepted;
}
public void setMinKeepAliveTimerPCCAccepted(int minKeepAliveTimerPCCAccepted) {
this.minKeepAliveTimerPCCAccepted = minKeepAliveTimerPCCAccepted;
}
public int getMaxDeadTimerPCCAccepted() {
return maxDeadTimerPCCAccepted;
}
public void setMaxDeadTimerPCCAccepted(int maxDeadTimerPCCAccepted) {
this.maxDeadTimerPCCAccepted = maxDeadTimerPCCAccepted;
}
public boolean isZeroDeadTimerPCCAccepted() {
return zeroDeadTimerPCCAccepted;
}
public void setZeroDeadTimerPCCAccepted(boolean zeroDeadTimerPCCAccepted) {
this.zeroDeadTimerPCCAccepted = zeroDeadTimerPCCAccepted;
}
public Layer getDefaultPCELayer() {
return defaultPCELayer;
}
public void setDefaultPCELayer(Layer defaultPCELayer) {
this.defaultPCELayer = defaultPCELayer;
}
public boolean isMultiDomain() {
return multiDomain;
}
public void setMultiDomain(boolean multiDomain) {
this.multiDomain = multiDomain;
}
public boolean isITCapable() {
return ITcapable;
}
public void setITCapable(boolean itCapable) {
this.ITcapable = itCapable;
}
// public Level getParentPCELogLevel() {
// return ParentPCELogLevel;
// }
//
// public void setParentPCELogLevel(Level parentPCELogLevel) {
// ParentPCELogLevel = parentPCELogLevel;
// }
//
// public Level getPCEPParserLogLevel() {
// return PCEPParserLogLevel;
// }
//
// public void setPCEPParserLogLevel(Level pCEPParserLogLevel) {
// PCEPParserLogLevel = pCEPParserLogLevel;
// }
//
public int getParentPCEManagementPort() {
return parentPCEManagementPort;
}
public boolean isKnowsWholeTopology() {
return knowsWholeTopology;
}
public boolean isTest() {
return testflag;
}
public PcepCapability getLocalPcepCapability() {
return localPcepCapability;
}
/**
* Default Constructor.
*/
public ParentPCEServerParameters(){
this.confFile="ParentPCEConf.xml";
}
/**
* Constructor with the name of the configuration file.
* @param confFile Name of the configuration file.
*/
public ParentPCEServerParameters(String confFile){
if (confFile!=null){
this.confFile=confFile;
}else {
confFile="PCEServerConfiguration.xml";
}
}
public void initialize(){
algorithmList=new LinkedList<String>();
PCElayers=new LinkedList<Layer>();
algorithmRuleList= new LinkedList<MapAlgoRule>();
localPcepCapability= new PcepCapability();
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
String tempVal;
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("layer")) {
Layer lay= new Layer();
String layer=attributes.getValue("type");
if (layer.equals("gmpls")){
lay.gmpls=true;
lay.encodingType=Integer.parseInt(attributes.getValue("encodingType"));
lay.switchingType=Integer.parseInt(attributes.getValue("switchingType"));
}
boolean defaultL=Boolean.parseBoolean(attributes.getValue("default"));
if (defaultL==true) {
defaultPCELayer = lay;
}
PCElayers.add(lay);
}
else if (qName.equalsIgnoreCase("algorithm")) {
String aname=attributes.getValue("name");
/*
try {
//ClassLoader classLoader = ParentPCEServerParameters.class.getClassLoader();
//Class aClass = classLoader.loadClass("tid.pce.computingEngine.algorithms.CPLEXOptimizedPathComputing");
Class aClass = Class.forName("tid.pce.computingEngine.algorithms.CPLEXOptimizedPathComputing");
//Callable<PCEPResponse> aCass2=(Callable<PCEPResponse>)aClass;
Callable<PCEPResponse> cpr= ( Callable<PCEPResponse>)aClass.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}
else if (qName.equalsIgnoreCase("algorithmRule")) {
MapAlgoRule mar= new MapAlgoRule();
AlgorithmRule ar=new AlgorithmRule();
String aname=attributes.getValue("name");
ar.of=Integer.parseInt(attributes.getValue("of"));
ar.svec=Boolean.parseBoolean(attributes.getValue("svec"));
mar.ar=ar;
mar.algoName=aname;
mar.isParentPCEAlgorithm=Boolean.parseBoolean(attributes.getValue("isParentPCEAlgorithm"));
algorithmRuleList.add(mar);
}
}
public void endElement(String uri, String localName,
String qName)
throws SAXException {
if(qName.equalsIgnoreCase("ParentPCEServerAddress")) {
ParentPCEServerAddress=tempVal.trim();
}
else if(qName.equalsIgnoreCase("ParentPCEServerPort")) {
ParentPCEServerPort=Integer.parseInt(tempVal.trim());
}
else if (qName.equalsIgnoreCase("ChildPCERequestsProcessors")) {
ChildPCERequestsProcessors=Integer.parseInt(tempVal.trim());
}
else if (qName.equalsIgnoreCase("ParentPCEServerLogFile")) {
ParentPCEServerLogFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("ParentPCEPParserLogFile")) {
ParentPCEPParserLogFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("networkDescriptionFile")) {
networkDescriptionFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("MDnetworkDescriptionFile")) {
MDnetworkDescriptionFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("ITnetworkDescriptionFile")) {
ITnetworkDescriptionFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("ITMDnetworkDescriptionFile")) {
ITMDnetworkDescriptionFile=tempVal.trim();
}
else if (qName.equalsIgnoreCase("initialSessionID")) {
initialSessionID=Integer.parseInt(tempVal.trim());
}
else if (qName.equalsIgnoreCase("KeepAliveTimer")) {
KeepAliveTimer=Integer.parseInt(tempVal.trim());
}
else if (qName.equalsIgnoreCase("DeadTimer")) {
DeadTimer=Integer.parseInt(tempVal.trim());
}
// else if (qName.equalsIgnoreCase("ParentPCELogLevel")) {
// ParentPCELogLevel=Level.parse(tempVal.trim());
// }
// else if (qName.equalsIgnoreCase("PCEPParserLogLevel")) {
// PCEPParserLogLevel=Level.parse(tempVal.trim());
// }
else if (qName.equalsIgnoreCase("OSPFParserLogLevel")) {
//PCEPParserLogLevel=Level.parse(tempVal.trim());
}else if (qName.equalsIgnoreCase("strongestLog")) {
strongestLog=Boolean.parseBoolean(tempVal.trim());
} else if (qName.equalsIgnoreCase("GUIHost")) {
GUIHost=tempVal.trim();
}else if (qName.equalsIgnoreCase("GUIPort")) {
GUIPort=Integer.parseInt(tempVal.trim());
}else if (qName.equalsIgnoreCase("fullTopologyMode")) {
fullTopologyMode=Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("parentPCEManagementPort")){
parentPCEManagementPort = Integer.parseInt(tempVal.trim());
}
else if (qName.equalsIgnoreCase("readMDTEDFromFile")) {
readMDTEDFromFile=Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("actingAsBGP4Peer")) {
actingAsBGP4Peer=Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("BGP4File")) {
BGP4File=tempVal.trim();
}
else if (qName.equalsIgnoreCase("multiDomain")) {
multiDomain=Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("knowsWholeTopology")) {
knowsWholeTopology=Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("gmpls")) {
localPcepCapability.setGmpls(Boolean.parseBoolean(tempVal.trim()));
}
else if (qName.equalsIgnoreCase("stateful")) {
localPcepCapability.setStateful(Boolean.parseBoolean(tempVal.trim()));
}
else if (qName.equalsIgnoreCase("testAlgo")) {
testflag = Boolean.parseBoolean(tempVal.trim());
}
else if (qName.equalsIgnoreCase("lspUpdate")) {
localPcepCapability.setLspUpdate(Boolean.parseBoolean(tempVal.trim()));
}
else if (qName.equalsIgnoreCase("parentPCE")) {
localPcepCapability.setParentPCE(Boolean.parseBoolean(tempVal.trim()));
}
else if (qName.equalsIgnoreCase("childPCE")) {
localPcepCapability.setChildPCE(Boolean.parseBoolean(tempVal.trim()));
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
tempVal = new String(ch,start,length);
}
};
saxParser.parse(confFile, handler);
}catch (Exception e) {
System.err.println("Problemas al leer la configuracion");
e.printStackTrace();
System.exit(1);
}
sessionIDCounter=new AtomicInteger(initialSessionID);
}
public boolean isActingAsBGP4Peer() {
return actingAsBGP4Peer;
}
public String getBGP4File() {
return BGP4File;
}
}