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

es.tid.topologyModuleBase.plugins.reader.TopologyReaderCOP Maven / Gradle / Ivy

The newest version!
package es.tid.topologyModuleBase.plugins.reader;


import java.io.File;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.locks.Lock;

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.ospf.ospfv2.lsa.tlv.subtlv.MaximumBandwidth;
import es.tid.ospf.ospfv2.lsa.tlv.subtlv.complexFields.BitmapLabelSet;
import es.tid.tedb.DomainTEDB;
import es.tid.tedb.IntraDomainEdge;
import es.tid.tedb.SimpleTEDB;
import es.tid.tedb.TEDB;
import es.tid.tedb.TE_Information;
import es.tid.topologyModuleBase.TopologyModuleParams;
import es.tid.topologyModuleBase.COPServiceTopology.client.ApiClient;
import es.tid.topologyModuleBase.COPServiceTopology.client.ApiException;
import es.tid.topologyModuleBase.COPServiceTopology.client.Configuration;
import es.tid.topologyModuleBase.COPServiceTopology.client.api.DefaultApi;
import es.tid.topologyModuleBase.COPServiceTopology.model.EdgeEnd;
import es.tid.topologyModuleBase.COPServiceTopology.model.TopologiesSchema;
import es.tid.topologyModuleBase.COPServiceTopology.model.Edge.EdgeTypeEnum;
import es.tid.topologyModuleBase.COPServiceTopology.model.*;
import es.tid.topologyModuleBase.database.TopologiesDataBase;
import es.tid.topologyModuleBase.plugins.reader.TopologyReader;

public class TopologyReaderCOP extends TopologyReader
{

	private boolean isRunning=false;

	public TopologyReaderCOP(TopologiesDataBase ted,TopologyModuleParams params, Lock lock)
	{
		super(ted,params,lock);
	}

	@Override
	public void readTopology() 
	{
		
		//Initialize Traffic Engineering Database
		/*ApiClient apiClient = new ApiClient();
		apiClient.setBasePath("http://"+params.getRemoteCOPhost()+":"+params.getRemoteCOPPort()+"/restconf");
		readNetwork(new DefaultApi(apiClient));
		*/
		ApiClient defaultClient = new ApiClient();
		defaultClient.setBasePath("http://"+params.getRemoteCOPhost()+":"+params.getRemoteCOPPort()+"/restconf");
		log.info("New COPTopologyReader trying to read topology from: "+defaultClient.getBasePath());
		//Timer timer = new Timer();
		//timer.schedule(new ReadTopologyTask(ted,lock,new DefaultApi(defaultClient)), 0, 20000);
		(new ReadTopologyTask(ted,lock,new DefaultApi(defaultClient))).run();

	}
	@Override
	public void run(){
		readTopology();
	}
 private class ReadTopologyTask extends TimerTask {
		private TopologiesDataBase ted;
		private Lock lock;
		private DefaultApi api;
		
		
		
		public ReadTopologyTask(TopologiesDataBase ted, Lock lock, DefaultApi api) {
			super();
			this.ted = ted;
			this.lock = lock;
			this.api = api;
		}

		@Override
		public void run() {
			// TODO Auto-generated method stub
			
			lock.lock();
			isRunning=true;
			try {
				TopologiesSchema retrieveTopologies = api.retrieveTopologies();
				//EdgeEnd retrieveLocalIf = api.retrieveTopologiesTopologyEdgesLocalIfidLocalIfidById("1", "ADVA_2_CTTC_2");
				//log.info(retrieveTopologies.toString());
				//System.out.println("DESPUES retrieveTopologies: "+retrieveTopologies.toString());
				//Topology top = api.retrieveTopologiesTopologyTopologyById("0.0.0.1");
			
				
				for(Topology top : retrieveTopologies.getTopology()){
					
					DomainTEDB db = (DomainTEDB)this.ted.getDB(top.getTopologyId());
					System.out.println("COP reader, reading db with domainID: "+top.getTopologyId()+ " bd->"+db);
					if(db != null){
						ted.getTeds().remove(top.getTopologyId());
					}
					db = new SimpleTEDB();
					((SimpleTEDB)db).createGraph();
						
					for(Node n : top.getNodes()){
						es.tid.tedb.elements.Node node = TranslateModel.translate2Node(n);
						((SimpleTEDB)db).getNetworkGraph().addVertex(node);
					}
					for(Edge e: top.getEdges()){
						es.tid.tedb.elements.Link link = TranslateModel.translate2Link(e);
						fromLinkToIntradomainlink((SimpleTEDB)db, link, e);
					}
					
					this.ted.addTEDB(top.getTopologyId(), db);
					
				}
			} catch (ApiException e) {
				// TODO Auto-generated catch block
				log.info("APIException in COPtopologyReader from: " + api.getApiClient().getBasePath());
				e.printStackTrace();
			}catch (Exception e){
				log.info("GeneralException in COPtopologyReader from: " + api.getApiClient().getBasePath());
				e.printStackTrace();
			}finally{
				isRunning=false;
				lock.unlock();
			}
		}

		private void fromLinkToIntradomainlink(SimpleTEDB db, es.tid.tedb.elements.Link link, Edge e){
			boolean finished=false;
			System.out.println("From link To Intradomianlink, link: "+link.toString());
			Iterator vertices=db.getNetworkGraph().vertexSet().iterator();
			es.tid.tedb.elements.Node src=null; es.tid.tedb.elements.Node dst=null;
			while (vertices.hasNext() && !finished){
				es.tid.tedb.elements.Node node=(es.tid.tedb.elements.Node) vertices.next();
				System.out.println("Nodes in graph: "+node.getNodeID());
				if (link.getDest().getNode().equals(node.getNodeID()))
					dst=node;
				else if (link.getSource().getNode().equals(node.getNodeID()))
					src=node;
	
			}
			IntraDomainEdge edge= new IntraDomainEdge();
			edge.setBw(link.getBandwidth());
			edge.setDirectional(link.isDirectional());
			edge.setLinkID(link.getLinkID());
			edge.setType(link.getType());
			edge.setDst_Numif_id(link.getDest());
			edge.setSrc_Numif_id(link.getSource());
			if (src==null){
				log.info("SRC NULL");
			}
			if (dst==null){
				log.info("DST NULL");
			}
			if(link.getType().equals(EdgeTypeEnum.dwdm_edge.toString())){
				DwdmEdge dEdge = (DwdmEdge)e;
				TE_Information tE_info= new TE_Information();
				//tE_info.createBitmapLabelSet(numLabels, grid,  cs, n);
				
				byte[] bitmap=new byte[(dEdge.getBitmap().getNumChannels()/8)+1];
				for(int i=0;i>(i%8));
					}
				}
				((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setNumLabels(dEdge.getBitmap().getNumChannels());
				((BitmapLabelSet)edge.getTE_info().getAvailableLabels().getLabelSet()).setBytesBitmap(bitmap);
				edge.setTE_info(tE_info);
			}
	
			db.getNetworkGraph().addEdge(src, dst, edge);
			db.getIntraDomainEdges().add(edge);
	
		}

	

		/*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 "?";
			}
		}*/
 
 }
@Override
public boolean isRunning() {
	// TODO Auto-generated method stub
	return isRunning;
}

@Override
public String getPluginName() {
	// TODO Auto-generated method stub
	return "COP client-importer";
}

@Override
public String displayInfo() {
	// TODO Auto-generated method stub
	String str=getPluginName()+"\n";
	str+="Status: ";
	if(isRunning())str+="running";
	else str+="stop";
	str+="\nBase path:"+"http://"+params.getRemoteCOPhost()+":"+params.getRemoteCOPPort()+"/restconf";
	return str;
}
}