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

es.tid.vntm.topology.VNTMGraph Maven / Gradle / Ivy

The newest version!
package es.tid.vntm.topology;




	import java.io.File;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import es.tid.vntm.topology.elements.EndPoint;
import es.tid.vntm.topology.elements.IPNodeParams;
import es.tid.vntm.topology.elements.Intf;
import es.tid.vntm.topology.elements.Link;
import es.tid.vntm.topology.elements.Location;
import es.tid.vntm.topology.elements.Node;


	public class VNTMGraph {
		
		HashMap nodes;
		
		HashMap> links;

		/**
		 * @return the nodes
		 */
		public ArrayList getNodes() {
			return new ArrayList (nodes.values());
		}

		public void addNode(Node node){
			nodes.put(node.getNodeID(), node);
		
		}
		public void removeNode(String nodeID){
			nodes.remove(nodeID);
		}
		public void removeLink(String layer, Link link){
			links.get(layer).remove(link);			
		}
		public void addLink(String layer,Link link){
			if (links.containsKey(layer)){
				links.get(layer).add(link);			
			}
			else
			{
				ArrayList linksArray = new ArrayList();
				linksArray.add(link);
				links.put(layer,linksArray);
			}
			
		}
		public Node getNode(String nodeID){
			if (nodes.containsKey(nodeID))
				return nodes.get(nodeID);
			else
				return null;		
		}
		
	/*	public Node getNode(Inet4Address address){
			if (nodes.containsKey(address))
				return nodes.get(address);
			else
				return null;		
		}*/

		public Node getNode(Inet4Address address){
				Iterator> it = nodes.entrySet().iterator();
				String aux = address.toString().substring(1);
				while (it.hasNext()){
					Entry e = it.next();
					Node n = e.getValue();
					System.out.println("Comparando "+aux+" y "+n.getAddress().get(0));
					if (aux.equals(n.getAddress().get(0)))
						return n;
				}
				return null;
		}
		
		public Link getLink(String layer, EndPoint src, EndPoint dest){
			if (links.containsKey(layer)){
				Iterator iter = links.get(layer).iterator();
				while(iter.hasNext()){
					Link link = iter.next();
					if (src.compareTo(link.getSource()) ==0)
						if (dest.compareTo(link.getDest())==0)
							return link;
					if (link.isDirectional()==false)
						if (src.compareTo(link.getDest()) ==0)
							if (dest.compareTo(link.getSource())==0)
								return link;
				}
			}
			return null;
		}
		
		public Link getLink(String source){
				Iterator iter = links.get("interlayer").iterator();
				while(iter.hasNext()){
					Link link = iter.next();
					if (source.equals((link.getSource().getNode())))
							return link;

				}
			return null;
		}
		
		/**
		 * @return the links
		 */
		public ArrayList getLinks(String layer) {
			if (links.containsKey(layer)==false){
				links.put(layer, new ArrayList());
			}
			
			return links.get(layer);

			}

		public VNTMGraph(){
			nodes = new HashMap ();
			links = new HashMap> ();
		}

//		public void addLink(Link link){
//			links.add(link);
//		}
		

		/**
		 * Reads and create the topology from a Network XML file. 
		 * @param fileName
		 * @return
		 */
		public void readNetwork(String fileName) {
			//First, create the graph		
			File file = new File(fileName);
			try {
				DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
				Document doc = builder.parse(file);		
				NodeList nodes_domains = doc.getElementsByTagName("domain");

				//First pass to get all the nodes

				for (int j = 0; j < nodes_domains.getLength(); j++) {

					Element element1 = (Element) nodes_domains.item(j);

					Element element_domain = (Element) nodes_domains.item(j);
					NodeList nodes_domain_id = element_domain.getElementsByTagName("domain_id");
					for (int k = 0; k < nodes_domain_id.getLength(); k++) {
						Element domain_id_e = (Element) nodes_domain_id.item(0);
						String domain_id = getCharacterDataFromElement(domain_id_e);						
					}
					NodeList nodes = element1.getElementsByTagName("node");
					System.out.println("nodes.getLength"+nodes.getLength());
					if (nodes.getLength()>0){
						for (int i = 0; i < nodes.getLength(); i++) {
							Element element = (Element) nodes.item(i);
							//Node Name
							NodeList nodeName_node = element.getElementsByTagName("nodeName");
							Element nodeName_e = (Element) nodeName_node.item(0);
							String nodeName = getCharacterDataFromElement(nodeName_e);
							NodeList addressList_node = element.getElementsByTagName("addressList");
							ArrayList addresses = null;
							if (addressList_node.getLength()>0){
								addresses= new ArrayList();
								for (int k = 0; k < addressList_node.getLength(); k++) {
									Element addressList_e = (Element) addressList_node.item(k);
									NodeList address_node = addressList_e.getElementsByTagName("address");
									Element address_el = (Element) address_node.item(0);
									String address = getCharacterDataFromElement(address_el);
									addresses.add(address);
								}
							}
							//Is physical Node
							boolean isPhysical_node = true;
							NodeList isPhysical_nodeList = element.getElementsByTagName("isPhysical");
							if (isPhysical_nodeList.getLength()>0){
								Element isPhysical_el = (Element) isPhysical_nodeList.item(0);									
								String isPhysical_s = getCharacterDataFromElement(isPhysical_el);
								isPhysical_node = Boolean.parseBoolean(isPhysical_s);
							}
							//Is physical Node
							String layerNode = null;
							NodeList layerNode_nodeList = element.getElementsByTagName("layerNode");
							if (layerNode_nodeList.getLength()>0){
								Element layerNode_el = (Element) layerNode_nodeList.item(0);									
								layerNode = getCharacterDataFromElement(layerNode_el);
								
							}
							
							//Interface List
							ArrayList intfList = null;
							NodeList interfacesList_node = element.getElementsByTagName("interfacesList");
							if (interfacesList_node.getLength()>0){
								ArrayList layer= null;
								ArrayList addressesIntf = null;
								ArrayList supportedCounters = null;
								intfList = new ArrayList();							
								Element interface_e = (Element) interfacesList_node.item(0);
								NodeList interface_node = interface_e.getElementsByTagName("interface");
								if (interface_node.getLength()>0){									
									for (int k = 0; k < interface_node.getLength(); k++) {
										Element interface_el = (Element) interface_node.item(k);
										//name interface
										NodeList nameIntf_node = interface_el.getElementsByTagName("nameIntf");
										Element nameIntf_el = (Element) nameIntf_node.item(0);										
										String nameIntf = getCharacterDataFromElement(nameIntf_el);
										//addressesIntf
										NodeList addressIntfList_node = interface_el.getElementsByTagName("addressIntfList");
										if (addressIntfList_node.getLength()>0){
											addressesIntf = new ArrayList();										
											for (int it = 0; it < addressIntfList_node.getLength(); it++) {
												Element addressIntf_e = (Element) addressIntfList_node.item(it);
												NodeList addressIntf_node = addressIntf_e.getElementsByTagName("addressIntf");
												Element addressIntf_el = (Element) addressIntf_node.item(0);										
												String addressIntf = getCharacterDataFromElement(addressIntf_el);												
												addressesIntf.add(addressIntf);
											}
										}
										//IntfUp
										//name interface
										NodeList intfUp_node = interface_el.getElementsByTagName("intfUp");
										boolean intfUp = true;
										if (intfUp_node.getLength()>0){
											Element intfUp_el = (Element) intfUp_node.item(0);										
											String intfUp_s = getCharacterDataFromElement(intfUp_el);
											intfUp = Boolean.parseBoolean(intfUp_s);

										}

										//layeringList
										NodeList layeringList_node = interface_el.getElementsByTagName("layeringList");										
										if (layeringList_node.getLength()>0){
											layer = new ArrayList();										
											for (int it = 0; it < layeringList_node.getLength(); it++) {
												Element layering_e = (Element) layeringList_node.item(it);
												NodeList layering_node = layering_e.getElementsByTagName("layering");
												Element layering_el = (Element) layering_node.item(0);										
												String layering = getCharacterDataFromElement(layering_el);
												layer.add(layering);
											}
										}
										//supportedCountersList
										NodeList supportedCountersList_node = interface_el.getElementsByTagName("supportedCountersList");										
										if (supportedCountersList_node.getLength()>0){
											supportedCounters = new ArrayList();										
											for (int it = 0; it < supportedCountersList_node.getLength(); it++) {
												Element  supportedCounters_e = (Element) supportedCountersList_node.item(it);
												NodeList supportedCounters_node = supportedCounters_e.getElementsByTagName("supportedCounters");
												Element supportedCounters_el = (Element) supportedCounters_node.item(0);										
												String supportedCounters_s = getCharacterDataFromElement(supportedCounters_el);
												supportedCounters.add(supportedCounters_s);
											}
										}
										//isPhysical
										//Is physical Node
										NodeList isPhysicalIntf_node = interface_el.getElementsByTagName("isPhysical");
										boolean isPhysical_intf=true;
										if (isPhysicalIntf_node.getLength()>0){
											Element isPhysical_el = (Element) isPhysicalIntf_node.item(0);									
											String isPhysical_s = getCharacterDataFromElement(isPhysical_el);
											isPhysical_intf= Boolean.parseBoolean(isPhysical_s);
										}
										//Is physical Node
										NodeList parentInterfaceName_node = interface_el.getElementsByTagName("parentInterfaceName");
										String parentInterfaceName=null;
										if (parentInterfaceName_node.getLength()>0){
											Element parentInterfaceName_el = (Element) parentInterfaceName_node.item(0);									
											parentInterfaceName = getCharacterDataFromElement(parentInterfaceName_el);												
										}

										Intf intf=new Intf();										
										intf.setName(nameIntf);
										intf.setPhysical(isPhysical_intf);												
										intf.setLayering(layer);
										intf.setAddress(addressesIntf);
										intf.setParentInterfaceName(parentInterfaceName);
										intf.setSupportedCounters(supportedCounters);		
										intf.setIntfUp(intfUp);
										intfList.add(intf);					

									}
								}
							}
							//domain
							int domain=1;
							NodeList domain_node = element.getElementsByTagName("domain");
							if (domain_node.getLength()>0){
								Element domain_e = (Element)domain_node.item(0);
								String domain_s = getCharacterDataFromElement(domain_e);
								domain= Integer.parseInt(domain_s);
							}
							//location
							NodeList location_node = element.getElementsByTagName("location");
							Location location= null;
							if (location_node.getLength()>0){							
								Element location_el = (Element) location_node.item(0);
								//Xcord
								NodeList Xcord_node = location_el.getElementsByTagName("Xcord");
								Element Xcord_el = (Element) Xcord_node.item(0);										
								String Xcord_s = getCharacterDataFromElement(Xcord_el);
								double Xcord = Double.parseDouble(Xcord_s);

								//Xcord
								NodeList Ycord_node = location_el.getElementsByTagName("Ycord");
								Element Ycord_el = (Element) Ycord_node.item(0);										
								String Ycord_s = getCharacterDataFromElement(Ycord_el);
								double Ycord = Double.parseDouble(Ycord_s);
								location= new Location(Xcord,Ycord);
							}
							//ipParams
							NodeList ipParams_node = element.getElementsByTagName("ipParams");
							IPNodeParams ipNodeParams = null;
							if (ipParams_node.getLength()>0){
								ipNodeParams= new IPNodeParams();
							}
							//parentRouter
							NodeList parentRouter_node = element.getElementsByTagName("parentRouter");
							String parentRouter = null;
							if (parentRouter_node.getLength()>0){
								Element parentRouter_e = (Element)parentRouter_node.item(0);
								parentRouter = getCharacterDataFromElement(parentRouter_e);
							}


							Node node = new Node();	
							node.setNodeID(nodeName);
							node.setDomain(domain);
							//ip.setLocation(new Location(1, 1));
							node.setPhysical(isPhysical_node);
							node.setParentRouter(parentRouter);
							node.setIpParams(ipNodeParams);
							node.setAddress(addresses);
							node.setIntfList(intfList);
							node.setLayer(layerNode);
							this.addNode(node);
						}
					}

					NodeList links = element1.getElementsByTagName("link");
					if (links.getLength()>0){
						for (int i = 0; i < links.getLength(); i++) {
							Element element = (Element) links.item(i);
							//linkID
							NodeList linkID_node = element.getElementsByTagName("linkID");
							Element linkID_e = (Element) linkID_node.item(0);
							String linkID = getCharacterDataFromElement(linkID_e);
							//isDirectional
							NodeList isDirectional_node = element.getElementsByTagName("isDirectional");
							Element isDirectional_e = (Element) isDirectional_node.item(0);
							boolean isDirectional = Boolean.parseBoolean(getCharacterDataFromElement(isDirectional_e));

							//source
							NodeList source_node = element.getElementsByTagName("source");
							EndPoint source = null;
							if (source_node.getLength()>0){		
								Element source_e = (Element) source_node.item(0);
								//node
								String node = null;
								NodeList node_node = source_e.getElementsByTagName("nodeLink");

								if (node_node.getLength()>0){		
									Element node_el = (Element) node_node.item(0);
									node = getCharacterDataFromElement(node_el);
								}
								//intf
								NodeList intf_node = source_e.getElementsByTagName("intfLink");
								String intf =null;	 
								if (intf_node.getLength()>0){	
									Element intf_el = (Element) intf_node.item(0);
									intf= getCharacterDataFromElement(intf_el);
								}
								if ((intf != null)&&(node != null))
									source=new EndPoint(node,intf);



							}

							//destination
							NodeList destination_node = element.getElementsByTagName("destination");
							EndPoint destination = null;
							if (destination_node.getLength()>0){							
								Element destination_e = (Element) destination_node.item(0);
								//node
								NodeList node_node = destination_e.getElementsByTagName("nodeLink");
								Element node_el = (Element) node_node.item(0);
								String node = getCharacterDataFromElement(node_el);
								//intf
								NodeList intf_node = destination_e.getElementsByTagName("intfLink");
								Element intf_el = (Element) intf_node.item(0);
								String intf = getCharacterDataFromElement(intf_el);
								destination=new EndPoint(node,intf);							
							}

							//type
							String type_link = null;
							NodeList type_nodeList = element.getElementsByTagName("typeLink");
							if (type_nodeList.getLength()>0){
								Element type_el = (Element) type_nodeList.item(0);									
								type_link = getCharacterDataFromElement(type_el);

							}
							//layerLink
							String layerLink = null;
							NodeList layerLink_nodeList = element.getElementsByTagName("layerLink");
							if (layerLink_nodeList.getLength()>0){
								Element layerLink_el = (Element) layerLink_nodeList.item(0);									
								layerLink = getCharacterDataFromElement(layerLink_el);

							}
							
							Link link = new Link();
							link.setLinkID(linkID);
							link.setSource(source);
							link.setDest(destination);	
							link.setDirectional(isDirectional);
							link.setType(type_link);
							this.addLink(layerLink,link);

						}
					}


				}

			} catch (Exception e) {
				e.printStackTrace();
			}

		}

		public static String getCharacterDataFromElement(Element e) {
			org.w3c.dom.Node child = e.getFirstChild();
			if (child instanceof CharacterData) {
				CharacterData cd = (CharacterData) child;
				return cd.getData();
			} else {
				return "?";
			}
		}

		public 	void createSimpleONEGraph(){


			//Create a simple graph for the following topology
			/*	_______                            _______
	    |	IP1	|__________________________|  IP2  |__________________________|  IP3  |
		|		|                          |       |
		 -------                            -------
	        |                                  |
		 _______                            _______
	    |		|__________________________|       |
		|OT1	|                          | OT2   |
		 -------                            -------
			 */

			/*----------------- Node IP1 --------------------*/
			Node ip1 = new Node();

			ip1.setNodeID("IP1");
			ip1.setDomain(1);
			ip1.setLocation(new Location(1, 1));
			ip1.setPhysical(true);
			ip1.setParentRouter(null);
			ip1.setIpParams(new IPNodeParams());
			ip1.setAddress(new ArrayList());
			ip1.getAddress().add("192.168.0.1");
			//Create a physical Interface for IP1 
			Intf ip1If1 = new Intf();
			ip1If1.setName("ip1If1");
			ip1If1.setPhysical(true);
			ArrayList layer11 = new ArrayList();
			layer11.add("IP");

			ip1If1.setLayering(layer11);
			ArrayList address11 = new ArrayList();
			address11.add("192.168.1.11");
			ip1If1.setAddress(address11);

			//Create a physical Interface for IP1
			Intf ip1If2 = new Intf();
			ip1If2.setName("ip1If2");
			ip1If2.setPhysical(true);
			ArrayList layer12 = new ArrayList();
			layer12.add("IP");

			ip1If2.setLayering(layer12);
			ArrayList address12 = new ArrayList();
			address12.add("192.168.1.12");
			ip1If2.setAddress(address12);
			//Create a physical Interface for IP1
			Intf ip1If3 = new Intf();
			ip1If3.setName("ip1If3");
			ip1If3.setPhysical(true);
			ArrayList layer13 = new ArrayList();
			layer13.add("IP");

			ip1If3.setLayering(layer13);
			ArrayList address13 = new ArrayList();
			address13.add("192.168.1.13");
			ip1If3.setAddress(address13);

			//Add list of interfaces
			ArrayList interfacesIP1 = new ArrayList();
			interfacesIP1.add(ip1If1);
			interfacesIP1.add(ip1If2);
			interfacesIP1.add(ip1If3);
			ip1.setIntfList(interfacesIP1);




			/*----------------- Node IP2 --------------------*/
			Node ip2 = new Node();	
			ip2.setNodeID("IP2");
			ip2.setDomain(1);
			ip2.setLocation(new Location(1, 2));
			ip2.setPhysical(true);
			ip2.setParentRouter(null);
			ip2.setIpParams(new IPNodeParams());
			ip2.setAddress(new ArrayList());
			ip2.getAddress().add("192.168.0.2");

			//Create a physical Interface for IP2
			Intf ip2If1 = new Intf();
			ip2If1.setName("ip2If1");	
			ip2If1.setPhysical(true);
			ArrayList layer21 = new ArrayList();
			layer21.add("IP");	
			ip2If1.setLayering(layer21);	
			ArrayList address21 = new ArrayList();
			address21.add("192.168.1.21");
			ip2If1.setAddress(address21);


			//Create a physical Interface for IP2
			Intf ip2If2 = new Intf();
			ip2If2.setName("ip2If2");	
			ip2If2.setPhysical(true);
			ArrayList layer22 = new ArrayList();
			layer22.add("IP");	
			ip2If2.setLayering(layer22);	
			ArrayList address22 = new ArrayList();
			address22.add("192.168.1.22");
			ip2If2.setAddress(address22);

			//Create a physical Interface for IP2
			Intf ip2If3 = new Intf();
			ip2If3.setName("ip2If3");	
			ip2If3.setPhysical(true);
			ArrayList layer23 = new ArrayList();
			layer23.add("IP");	
			ip2If3.setLayering(layer23);	
			ArrayList address23 = new ArrayList();
			address23.add("192.168.1.23");
			ip2If3.setAddress(address23);

			ArrayList interfaces2 = new ArrayList();
			interfaces2.add(ip2If1);	
			interfaces2.add(ip2If2);
			ip2.setIntfList(interfaces2);

			/*----------------- Node IP3 --------------------*/
			Node ip3 = new Node();

			ip3.setNodeID("IP3");
			ip3.setDomain(1);
			ip3.setLocation(new Location(1, 3));
			ip3.setPhysical(true);
			ip3.setParentRouter(null);
			ip3.setIpParams(new IPNodeParams());
			ip3.setAddress(new ArrayList());
			ip3.getAddress().add("192.168.0.3");

			//Create a physical Interface for IP3 --- 1
			Intf ip3If1 = new Intf();
			ip3If1.setName("ip3If1");	
			ip3If1.setPhysical(true);
			ArrayList layer31 = new ArrayList();
			layer31.add("IP");
			ip3If1.setLayering(layer31);
			ArrayList address31 = new ArrayList();
			address31.add("192.168.1.31");
			ip3If1.setAddress(address31);

			//Create a physical Interface for IP3 --- 2
			Intf ip3If2 = new Intf();
			ip3If2.setName("ip3If2");
			ip3If2.setPhysical(true);
			ArrayList layer32 = new ArrayList();
			layer32.add("IP");
			ip3If2.setLayering(layer32);
			ArrayList address32 = new ArrayList();
			address32.add("192.168.1.32");
			ip3If2.setAddress(address32);

			//Create a physical Interface for IP3 --- 3
			Intf ip3If3 = new Intf();
			ip3If3.setName("ip3If3");
			ip3If3.setPhysical(true);
			ArrayList layer33 = new ArrayList();
			layer33.add("IP");
			ip3If3.setLayering(layer33);
			ArrayList address33 = new ArrayList();
			address33.add("192.168.1.33");
			ip3If3.setAddress(address33);

			ArrayList interfaces3 = new ArrayList();
			interfaces3.add(ip3If1);
			interfaces3.add(ip3If2);
			interfaces3.add(ip3If3);
			ip3.setIntfList(interfaces3);


			/*----------------- Node IP4 --------------------*/	
			Node ip4 = new Node();	
			ip4.setNodeID("IP4");
			ip4.setDomain(1);
			ip4.setLocation(new Location(1, 4));
			ip4.setPhysical(true);
			ip4.setParentRouter(null);
			ip4.setIpParams(new IPNodeParams());
			ip4.setAddress(new ArrayList());
			ip4.getAddress().add("192.168.0.4");

			//Create a physical Interface for IP4 --- 1
			Intf ip4If1 = new Intf();
			ip4If1.setName("ip4If1");	
			ip4If1.setPhysical(true);
			ArrayList layer41 = new ArrayList();
			layer41.add("IP");	
			ip4If1.setLayering(layer41);	
			ArrayList address41 = new ArrayList();
			address41.add("192.168.1.41");
			ip4If1.setAddress(address41);
			//Create a physical Interface for IP4 --- 2
			Intf ip4If2 = new Intf();
			ip4If2.setName("ip4If2");
			ip4If2.setPhysical(true);
			ArrayList layer42 = new ArrayList();
			layer42.add("IP");	
			ip4If2.setLayering(layer42);	
			ArrayList address42 = new ArrayList();
			address42.add("192.168.1.42");
			ip4If2.setAddress(address42);
			//Create a physical Interface for IP4 --- 3
			Intf ip4If3 = new Intf();
			ip4If3.setName("ip4If3");	
			ip4If3.setPhysical(true);
			ArrayList layer43 = new ArrayList();
			layer43.add("IP");	
			ip4If3.setLayering(layer43);	
			ArrayList address43 = new ArrayList();
			address43.add("192.168.1.43");
			ip4If3.setAddress(address43);

			ArrayList interfaces4 = new ArrayList();
			interfaces4.add(ip4If1);
			interfaces4.add(ip4If2);
			interfaces4.add(ip4If3);
			ip4.setIntfList(interfaces4);

			/*----------------- Node O1 --------------------*/	
			Node o1 = new Node();	
			o1.setNodeID("O1");
			o1.setDomain(1);
			o1.setLocation(new Location(2, 1));
			o1.setPhysical(true);
			o1.setParentRouter(null);
			o1.setIpParams(new IPNodeParams());
			o1.setAddress(new ArrayList());
			o1.getAddress().add("1.1.1.1");
			//Create a physical Interface for O1 --- 1
			Intf o1If1 = new Intf();
			o1If1.setName("o1If1");	
			o1If1.setPhysical(true);
			ArrayList layer51 = new ArrayList();
			layer51.add("Transport");	
			o1If1.setLayering(layer51);	
			ArrayList address51 = new ArrayList();
			address51.add("1.1.1.11");	
			o1If1.setAddress(address51);
			//Create a physical Interface for O1 --- 2
			Intf o1If2 = new Intf();
			o1If2.setName("o1If2");	
			o1If2.setPhysical(true);
			ArrayList layer52 = new ArrayList();
			layer52.add("Transport");	
			o1If2.setLayering(layer52);	
			ArrayList address52 = new ArrayList();
			address52.add("1.1.1.12");
			o1If2.setAddress(address52);
			//Create a physical Interface for O1 --- 3
			Intf o1If3 = new Intf();
			o1If3.setName("o1If3");	
			o1If3.setPhysical(true);
			ArrayList layer53 = new ArrayList();
			layer53.add("Transport");	
			o1If3.setLayering(layer53);	
			ArrayList address53 = new ArrayList();
			address53.add("1.1.1.13");
			o1If3.setAddress(address53);

			ArrayList interfaces5 = new ArrayList();
			interfaces5.add(o1If1);
			interfaces5.add(o1If2);
			interfaces5.add(o1If3);
			o1.setIntfList(interfaces5);
			/*----------------- Node O2 --------------------*/	
			Node o2 = new Node();	
			o2.setNodeID("O2");
			o2.setDomain(1);
			o2.setLocation(new Location(2, 2));
			o2.setPhysical(true);
			o2.setParentRouter(null);
			o2.setIpParams(new IPNodeParams());
			o2.setAddress(new ArrayList());
			o2.getAddress().add("1.1.1.2");
			//Create a physical Interface for O2 --- 1
			Intf o2If1 = new Intf();
			o2If1.setName("o2If1");	
			o2If1.setPhysical(true);
			ArrayList layer61 = new ArrayList();
			layer61.add("Transport");	
			o2If1.setLayering(layer61);	
			ArrayList address61 = new ArrayList();
			address61.add("1.1.1.21");
			o2If1.setAddress(address61);
			//Create a physical Interface for O2 --- 2
			Intf o2If2 = new Intf();
			o2If2.setName("o2If2");	
			o2If2.setPhysical(true);
			ArrayList layer62 = new ArrayList();
			layer62.add("Transport");	
			o2If2.setLayering(layer62);	
			ArrayList address62 = new ArrayList();
			address62.add("1.1.1.22");
			o2If2.setAddress(address62);
			//Create a physical Interface for O2 --- 3
			Intf o2If3 = new Intf();
			o2If3.setName("o2If3");	
			o2If3.setPhysical(true);
			ArrayList layer63 = new ArrayList();
			layer63.add("Transport");	
			o2If3.setLayering(layer63);	
			ArrayList address63 = new ArrayList();
			address63.add("1.1.1.23");
			o2If3.setAddress(address63);
			ArrayList interfaces6 = new ArrayList();
			interfaces6.add(o2If1);
			interfaces6.add(o2If2);
			interfaces6.add(o2If3);
			o2.setIntfList(interfaces6);
			/*----------------- Node O3 --------------------*/	
			Node o3 = new Node();	
			o3.setNodeID("O3");
			o3.setDomain(1);
			o3.setLocation(new Location(2, 3));
			o3.setPhysical(true);
			o3.setParentRouter(null);
			o3.setIpParams(new IPNodeParams());
			o3.setAddress(new ArrayList());
			o3.getAddress().add("1.1.1.3");
			//Create a physical Interface for O3 --- 1
			Intf o3If1 = new Intf();
			o3If1.setName("o3If1");	
			o3If1.setPhysical(true);
			ArrayList layer71 = new ArrayList();
			layer71.add("Transport");	
			o3If1.setLayering(layer71);	
			ArrayList address71 = new ArrayList();
			address71.add("1.1.1.31");
			o3If1.setAddress(address71);
			//Create a physical Interface for O3 --- 2
			Intf o3If2 = new Intf();
			o3If2.setName("o3If2");	
			o3If2.setPhysical(true);
			ArrayList layer72 = new ArrayList();
			layer72.add("Transport");	
			o3If2.setLayering(layer72);	
			ArrayList address72 = new ArrayList();
			address72.add("1.1.1.32");
			o3If2.setAddress(address72);
			//Create a physical Interface for O3 --- 3
			Intf o3If3 = new Intf();
			o3If3.setName("o3If3");	
			o3If3.setPhysical(true);
			ArrayList layer73 = new ArrayList();
			layer73.add("Transport");	
			o3If3.setLayering(layer73);	
			ArrayList address73 = new ArrayList();
			address73.add("1.1.1.33");
			o3If3.setAddress(address73);
			//Create a physical Interface for O3 --- 4
			Intf o3If4 = new Intf();
			o3If4.setName("o3If4");	
			o3If4.setPhysical(true);
			ArrayList layer74 = new ArrayList();
			layer74.add("Transport");	
			o3If4.setLayering(layer74);	
			ArrayList address74 = new ArrayList();
			address74.add("1.1.1.34");
			o3If4.setAddress(address74);
			ArrayList interfaces7 = new ArrayList();
			interfaces7.add(o3If1);
			interfaces7.add(o3If2);
			interfaces7.add(o3If3);
			interfaces7.add(o3If4);
			o3.setIntfList(interfaces7);
			/*----------------- Node O4 --------------------*/	
			Node o4 = new Node();	
			o4.setNodeID("O4");
			o4.setDomain(1);
			o4.setLocation(new Location(2, 4));
			o4.setPhysical(true);
			o4.setParentRouter(null);
			o4.setIpParams(new IPNodeParams());
			o4.setAddress(new ArrayList());
			o4.getAddress().add("1.1.1.4");

			//Create a physical Interface for O4 --- 1
			Intf o4If1 = new Intf();
			o4If1.setName("o4If1");	
			o4If1.setPhysical(true);
			ArrayList layer81 = new ArrayList();
			layer81.add("Transport");	
			o4If1.setLayering(layer81);	
			ArrayList address81 = new ArrayList();
			address81.add("1.1.1.41");
			o4If1.setAddress(address81);
			//Create a physical Interface for O4 --- 2
			Intf o4If2 = new Intf();
			o4If2.setName("o4If2");	
			o4If2.setPhysical(true);
			ArrayList layer82 = new ArrayList();
			layer82.add("Transport");	
			o4If2.setLayering(layer82);	

			ArrayList address82 = new ArrayList();
			address82.add("1.1.1.42");
			o4If2.setAddress(address82);

			ArrayList interfaces8 = new ArrayList();
			interfaces8.add(o4If1);
			interfaces8.add(o4If2);
			o4.setIntfList(interfaces8);
			/*-------------- ADD NODES -----------------*/
			nodes.put(ip1.getNodeID(), ip1);
			nodes.put(ip2.getNodeID(), ip2);	
			nodes.put(ip3.getNodeID(), ip3);
			nodes.put(ip4.getNodeID(), ip4);
			nodes.put(o1.getNodeID(), o1);
			nodes.put(o2.getNodeID(), o2);
			nodes.put(o3.getNodeID(), o3);
			nodes.put(o4.getNodeID(), o4);
			/*--------------------- CREATE Links --------------------------*/
			ArrayList linksIP = new ArrayList();
			ArrayList linksTransport = new ArrayList();
			ArrayList linksInterlayer = new ArrayList();
			/*IP1 - IP2*/
			Link link1 = new Link();
			EndPoint source = new EndPoint("IP1","192.168.0.1");
			EndPoint dest = new EndPoint("IP2","192.168.0.2");
			link1.setDirectional(true);
			link1.setSource(source);
			link1.setDest(dest);
			link1.setType("intradomain");
			linksIP.add(link1);

			/*IP1 - IP3*/
			Link link2 = new Link();
			EndPoint source2 = new EndPoint("IP1","192.168.0.1");
			EndPoint dest2 = new EndPoint("IP3","192.168.0.3");
			link2.setDirectional(true);
			link2.setSource(source2);
			link2.setDest(dest2);	
			link2.setType("intradomain");
			linksIP.add(link2);
			
			/*IP1 - O1*/
			Link link3 = new Link();
			EndPoint source3 = new EndPoint("IP1","192.168.0.1");
			EndPoint dest3 = new EndPoint("O1","1.1.1.1");
			link3.setSource(source3);
			link3.setDest(dest3);	
			link3.setDirectional(true);
			link3.setType("interlayer");
			linksInterlayer.add(link3);

			/*IP2 - IP4*/
			Link link4 = new Link();
			EndPoint source4 = new EndPoint("IP2","192.168.0.2");
			EndPoint dest4 = new EndPoint("IP4","192.168.0.4");
			link4.setSource(source4);
			link4.setDest(dest4);	
			link4.setDirectional(true);
			link4.setType("intradomain");
			linksIP.add(link4);

			/*IP3 - IP4*/
			Link link5 = new Link();
			EndPoint source5 = new EndPoint("IP3","192.168.0.3");
			EndPoint dest5 = new EndPoint("IP4","192.168.0.4");
			link5.setSource(source5);
			link5.setDest(dest5);	
			link5.setDirectional(true);
			link5.setType("intradomain");
			linksIP.add(link5);



			/*IP3 - O3*/
			Link link6 = new Link();
			EndPoint source6 = new EndPoint("IP3","192.168.0.3");
			EndPoint dest6 = new EndPoint("O3","1.1.1.3");
			link6.setSource(source6);
			link6.setDest(dest6);	
			link6.setDirectional(true);
			link6.setType("interlayer");
			linksInterlayer.add(link6);

			/*IP4 - O4*/
			Link link7 = new Link();
			EndPoint source7 = new EndPoint("IP4","192.168.0.4");
			EndPoint dest7 = new EndPoint("O4","1.1.1.4");
			link7.setSource(source7);
			link7.setDest(dest7);	
			link7.setDirectional(true);
			link7.setType("interlayer");
			linksInterlayer.add(link7);

			/*IP2 - O2*/
			Link link8 = new Link();
			EndPoint source8 = new EndPoint("IP2","192.168.0.2");
			EndPoint dest8 = new EndPoint("O2","1.1.1.2");
			link8.setSource(source8);
			link8.setDest(dest8);	
			link8.setDirectional(true);
			link8.setType("interlayer");
			linksInterlayer.add(link8);

			/*O1 - O2*/
			Link link9 = new Link();
			EndPoint source9 = new EndPoint("O1","1.1.1.1");
			EndPoint dest9 = new EndPoint("O2","1.1.1.2");
			link9.setSource(source9);
			link9.setDest(dest9);	
			link9.setDirectional(true);
			link9.setType("intradomain");
			linksTransport.add(link9);
			/*O1 - O3*/
			Link link10 = new Link();
			EndPoint source10 = new EndPoint("O1","1.1.1.1");
			EndPoint dest10 = new EndPoint("O3","1.1.1.3");
			link10.setSource(source10);
			link10.setDest(dest10);	
			link10.setDirectional(true);
			link10.setType("intradomain");
			linksTransport.add(link10);
			/*O2 - O3*/
			Link link11 = new Link();
			EndPoint source11 = new EndPoint("O2","1.1.1.2");
			EndPoint dest11 = new EndPoint("O3","1.1.1.3");
			link11.setSource(source11);
			link11.setDest(dest11);	
			link11.setDirectional(true);
			link11.setType("intradomain");
			linksTransport.add(link11);
			/*O3 - O4*/
			Link link12 = new Link();
			EndPoint source12 = new EndPoint("O3","1.1.1.3");
			EndPoint dest12 = new EndPoint("O4","1.1.1.4");
			link12.setSource(source12);
			link12.setDest(dest12);	
			link12.setDirectional(true);
			link12.setType("intradomain");
			linksTransport.add(link12);
			//	ip1If1.


		}

		@Override
		public String toString() {
			String topology;			 
			Iterator  nodesIterator=nodes.values().iterator();
			topology = "NODES: \n\t*  ";
			while (nodesIterator.hasNext()){
				Node node = nodesIterator.next();
				topology = topology + node.toString();
				if(nodesIterator.hasNext())
					topology = topology + "\n*  ";


			}
			Set keys=  links.keySet();
			
			Iterator  keysIterator=keys.iterator();
			while (keysIterator.hasNext()){
				topology = topology+ "\n******************************************************************\n";
				topology = topology + "LINKS: \n\t*  ";		
				String layer = keysIterator.next();
				ArrayList linkSet = links.get(layer);
				Iterator  linksIterator = null;
				if (linkSet != null){
					topology = topology + layer+" Layer\n* ";
					linksIterator=linkSet.iterator();
					while (linksIterator.hasNext()){
						Link link = linksIterator.next();
						//if (link.getType().equals("intradomain")){
							topology = topology + link.toString();
							if (linksIterator.hasNext())
								topology = topology + "\n\t*  ";
						
					//}
					}
				}
			}

			return topology;
		}
		

		

	}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy