All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.tid.topologyModuleBase.TopologyModuleParamsArray Maven / Gradle / Ivy

The newest version!
package es.tid.topologyModuleBase;

import es.tid.topologyModuleBase.util.UtilsFunctions;
import org.w3c.dom.CharacterData;
import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.logging.Logger;

/**
 * 
 * @author La humiltat
 *
 */

public class TopologyModuleParamsArray 
{
	private ArrayList paramList;
	/**
	 * 
	 */
	private int managementPort;
	
	/**
	 * 
	 */
	private String managementIP;
	/**
	 * Logger
	 */
	private static Logger log=Logger.getLogger("TMController");
	
	/**
	 * Name of the configuration file
	 */
	private String confFile;



	public TopologyModuleParamsArray(String confFile)
	{
		paramList = new ArrayList();
		if (confFile!=null){
			this.setConfFile(confFile);
		}
		else
		{
			confFile="TMConfiguration.xml";
		}
	}
	public TopologyModuleParamsArray(){
		paramList = new ArrayList();
		setConfFile("TMConfiguration.xml");
	}

	public void initialize()
	{
		log.info("Reading from file::"+this.confFile);
		try
		{
			DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			File confFile = new File(this.confFile);
			Document doc = builder.parse(confFile);
			
			managementPort = Integer.parseInt((getCharacterDataFromElement((Element) doc.getElementsByTagName("managementPort").item(0))));
			managementIP = getCharacterDataFromElement((Element) doc.getElementsByTagName("managementIP").item(0));
			
			
			NodeList list_nodes_OSPF = doc.getElementsByTagName("OSPF");
			
			for (int i = 0; i < list_nodes_OSPF.getLength(); i++) 
			{
				TopologyModuleParams littleParams = new TopologyModuleParams();
				Element nodes_OSPF = (Element) list_nodes_OSPF.item(i);
				

				littleParams.setOSPFSession(Boolean.parseBoolean((getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("OSPFSession").item(0)))));
				littleParams.setOSPFListenerIP(getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("OSPFListenerIP").item(0)));
				littleParams.setReachabilityFile(getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("reachabilityFile").item(0)));
				littleParams.setOSPFMulticast(Boolean.parseBoolean((getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("OSPFMulticast").item(0)))));
				littleParams.setOSPFUnicast(Boolean.parseBoolean((getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("OSPFUnicast").item(0)))));
				littleParams.setOSPFTCPSession(Boolean.parseBoolean((getCharacterDataFromElement((Element) nodes_OSPF.getElementsByTagName("OSPFTCPSession").item(0)))));
				
				littleParams.setOSPF(true);
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_Openflow = doc.getElementsByTagName("Openflow");
			for (int i = 0; i < list_nodes_Openflow.getLength(); i++) 
			{
				TopologyModuleParams littleParams = new TopologyModuleParams();
				Element nodes_Openflow = (Element) list_nodes_Openflow.item(i);
				

				littleParams.setControllerIP(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("ControllerIP").item(0)));
				littleParams.setControllerPORT(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("ControllerPort").item(0)));
				littleParams.setTopologyPath(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("ControllerTopoQueryLinks").item(0)));
				littleParams.setTopologyNodesPath(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("ControllerTopoQueryNodes").item(0)));
				littleParams.setControllerListFile(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("controllerListFile").item(0)));
				littleParams.setInterDomainFile(getCharacterDataFromElement((Element) nodes_Openflow.getElementsByTagName("interDomainFile").item(0)));
				
				littleParams.setFloodLight(true);
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_Gson = doc.getElementsByTagName("Gson");
						
			for (int i = 0; i < list_nodes_Gson.getLength(); i++) 
			{
				TopologyModuleParams littleParams = new TopologyModuleParams();
				Element nodes_Gson = (Element) list_nodes_Gson.item(i);
				
				littleParams.setGsonPort(Integer.parseInt(getCharacterDataFromElement((Element) nodes_Gson.getElementsByTagName("GsonPort").item(0))));
				
				littleParams.setGSON(true);
				paramList.add(littleParams);
			}
			
			
			NodeList list_nodes_XML = doc.getElementsByTagName("XML");
			
			for (int i = 0; i < list_nodes_XML.getLength(); i++) 
			{
				Element nodes_xml = (Element) list_nodes_XML.item(i);

				
				TopologyModuleParams littleParams = new TopologyModuleParams();
				littleParams.setModexml(getCharacterDataFromElement(((Element) nodes_xml.getElementsByTagName("mode").item(0))));
				littleParams.setNetworkDescriptionFile(getCharacterDataFromElement(((Element) nodes_xml.getElementsByTagName("XMLFileTopology").item(0))));
				littleParams.setXML(true);
				if (littleParams.getModexml()=="TM") littleParams.setIdentifier(getCharacterDataFromElement(((Element) nodes_xml.getElementsByTagName("Identifier").item(0))));

				log.info("XML configured with file: "+littleParams.getNetworkDescriptionFile());
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_COP = doc.getElementsByTagName("COP");
			
			for (int i = 0; i < list_nodes_COP.getLength(); i++) 
			{
				Element nodes_cop = (Element) list_nodes_COP.item(i);
				TopologyModuleParams littleParams = new TopologyModuleParams();
				if(nodes_cop.getElementsByTagName("import_ip").getLength()>0){
					
					littleParams.setRemoteCOPhost((getCharacterDataFromElement(((Element) nodes_cop.getElementsByTagName("import_ip").item(0)))));
					littleParams.setRemoteCOPPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_cop.getElementsByTagName("import_port").item(0))))));
					littleParams.setCOPReading(true);
				}
				if(nodes_cop.getElementsByTagName("serve_port").getLength()>0){
					littleParams.setExportCOPPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_cop.getElementsByTagName("serve_port").item(0))))));
					littleParams.setCOPWriting(true);
				}
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_IETF = doc.getElementsByTagName("IETF");
			
			for (int i = 0; i < list_nodes_IETF.getLength(); i++) 
			{
				Element nodes_IETF = (Element) list_nodes_IETF.item(i);
				TopologyModuleParams littleParams = new TopologyModuleParams();
				if(nodes_IETF.getElementsByTagName("import_ip").getLength()>0){
					
					littleParams.setRemoteIETFhost((getCharacterDataFromElement(((Element) nodes_IETF.getElementsByTagName("import_ip").item(0)))));
					littleParams.setRemoteIETFPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_IETF.getElementsByTagName("import_port").item(0))))));
					littleParams.setIETFReading(true);
				}
				if(nodes_IETF.getElementsByTagName("serve_port").getLength()>0){
					littleParams.setExportIETFPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_IETF.getElementsByTagName("serve_port").item(0))))));
					littleParams.setIETFWritting(true);
				}
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_Unify = doc.getElementsByTagName("UNIFY");
			
			for (int i = 0; i < list_nodes_Unify.getLength(); i++) 
			{
				Element nodes_Unify = (Element) list_nodes_Unify.item(i);
				TopologyModuleParams littleParams = new TopologyModuleParams();
				if(nodes_Unify.getElementsByTagName("import_ip").getLength()>0){
					
					littleParams.setRemoteUnifyhost((getCharacterDataFromElement(((Element) nodes_Unify.getElementsByTagName("import_ip").item(0)))));
					littleParams.setRemoteUnifyPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_Unify.getElementsByTagName("import_port").item(0))))));
					littleParams.setUnifyReading(true);
				}
				if(nodes_Unify.getElementsByTagName("serve_port").getLength()>0){
					littleParams.setExportUnifyPort(Integer.parseInt((getCharacterDataFromElement(((Element) nodes_Unify.getElementsByTagName("serve_port").item(0))))));
					littleParams.setUnifyWritting(true);
				}
				paramList.add(littleParams);
			}
			
			NodeList list_nodes_BGPLS = doc.getElementsByTagName("BGPLS");

			for (int i = 0; i < list_nodes_BGPLS.getLength(); i++)
			{
				TopologyModuleParams littleParams = new TopologyModuleParams();
				Element nodes_BGPLS= (Element) list_nodes_BGPLS.item(i);

				littleParams.setBGPSConfigurationFile(getCharacterDataFromElement((Element) nodes_BGPLS.getElementsByTagName("BGPLSconfigFile").item(0)));

				// Flag for detect the operation mode (r, w, r/w).
				Boolean fWriter = getPeerModeTagValue(nodes_BGPLS, "Writer"); 	// Write flag.
				Boolean fReader = getPeerModeTagValue(nodes_BGPLS, "Reader");	// Reader flag
				if(!fReader && !fWriter){
					log.warning("BGPLS not configured properly (Neither a sender nor a receiver or sender/receiver). Please check .xml file");
				} else {
					littleParams.setBGPLSReaderWriting(fReader && fWriter); // Reader/Writter plugin
					littleParams.setBGPLSReading(fReader && !fWriter);  	// Reader plugin.
					littleParams.setBGPLSWriting(!fReader && fWriter);		// Writer plugin.
					log.info("BGPLS configured as " + getModeStr(littleParams));
				}

				paramList.add(littleParams);
			}
			
			
			
			NodeList list_nodes_ws = doc.getElementsByTagName("WSOld");
			
			for (int i = 0; i < list_nodes_ws.getLength(); i++) 
			{
				Element nodes_ws = (Element) list_nodes_ws.item(i);

				
				TopologyModuleParams littleParams = new TopologyModuleParams();
				littleParams.setIpWSOld(getCharacterDataFromElement(((Element) nodes_ws.getElementsByTagName("ip").item(0))));
				littleParams.setPortWSOld(Integer.parseInt(getCharacterDataFromElement(((Element) nodes_ws.getElementsByTagName("port").item(0)))));
				littleParams.setWSOld(true);
				paramList.add(littleParams);
			}
			
			
		}
		catch (Exception e)
		{
			log.info(UtilsFunctions.exceptionToString(e));
		}
	
		
	}

	//Private functions

	/**
	 * This method gets the value from an XML element.
	 * @param e XML Element.
	 * @return Value as string.
	 */
	private String getCharacterDataFromElement(Element e) {
		if (e == null)
		{
			return null;
		}
		Node child = e.getFirstChild();
		if (child instanceof CharacterData) {
			CharacterData cd = (CharacterData) child;
			return cd.getData();
		} else {
			return "?";
		}
	}

	/**
	 * This method is used to verify if the XML contains the following tags "Reader" and "Writer". If the tags are
	 * available, returns its value. If it isn't present, returns false.
	 * @param nodes_BGPLS Element object with the "nodes_BGPLS" xml data.
	 * @param tag XML tag name. This field can be "Reader" or "Writer" (case sensitive).
	 * @return Returns a boolean with the xml tag value. If this tag is not present, then returns false as default.
	 */
	private boolean getPeerModeTagValue(Element nodes_BGPLS, String tag){
		if (getCharacterDataFromElement((Element) nodes_BGPLS.getElementsByTagName(tag).item(0)).equalsIgnoreCase("True")) {
			return true;
		}
		return false;
	}

	/**
	 * This method is used for returns the operation mode as String.
	 * @param littleParams Topology object.
	 * @return The name of the operation mode as string: Reader, Reader/Writer, Writer. If the operation mode is not
	 * available, it returns "N/A".
	 */
	private String getModeStr(TopologyModuleParams littleParams) {
		if(littleParams.isBGPLSReading()){
			return "Reader";
		} else if (littleParams.isBGPLSReadingWriting()){
			return "Reader/Writer";
		} else if (littleParams.isBGPLSWriting()){
			return "Writer";
		}
		return "N/A";
	}
		//GETTERS AND SETTERS
	
	public int getMangementPort()
	{
		return managementPort;
	}
	
	public void setMangementPort(int mangementPort)
	{
		this.managementPort = mangementPort;
	}
	
	public String getMangementIP()
	{
		return managementIP;
	}
	
	public void setMangementIP(String mangementIP)
	{
		this.managementIP = mangementIP;
	}
	

	public String getConfFile()
	{
		return confFile;
	}

	public void setConfFile(String confFile)
	{
		this.confFile = confFile;
	}


	public ArrayList getParamList() 
	{
		return paramList;
	}
	
	public void setParamList(ArrayList paramList) 
	{
		this.paramList = paramList;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy