view src/alice/topology/manager/StartTopologyManager.java @ 272:4c74418eaf96

refactor
author sugi
date Sun, 25 Aug 2013 15:06:43 +0900
parents 9982e1c4f099
children d136c65d8904
line wrap: on
line source

package alice.topology.manager;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;

import org.apache.log4j.Logger;

import alice.codesegment.CodeSegment;
import alice.topology.HostMessage;

import com.alexmerz.graphviz.ParseException;
import com.alexmerz.graphviz.Parser;
import com.alexmerz.graphviz.objects.Edge;
import com.alexmerz.graphviz.objects.Graph;
import com.alexmerz.graphviz.objects.Node;

public class StartTopologyManager extends CodeSegment {

	TopologyManagerConfig conf;
	Logger logger = Logger.getLogger(StartTopologyManager.class);

	public StartTopologyManager(TopologyManagerConfig conf) {
		this.conf = conf;
	}

	@Override
	public void run() {
		LinkedList<String> nodeNames = new LinkedList<String>();
		HashMap<String, LinkedList<NodeInfo>> topology = new HashMap<String, LinkedList<NodeInfo>>();
		int nodeNum = 0;
		try {
			FileReader reader = new FileReader(new File(conf.confFilePath));
			Parser parser = new Parser();
			parser.parse(reader);
			ArrayList<Graph> graphs = parser.getGraphs();
			for (Graph graph : graphs) {
				ArrayList<Node> nodes = graph.getNodes(false);
				nodeNum = nodes.size();
				for (Node node : nodes) {
					String nodeName = node.getId().getId();
					nodeNames.add(nodeName);
					topology.put(nodeName, new LinkedList<NodeInfo>());
				}
				ArrayList<Edge> edges = graph.getEdges();
				HashMap<String, NodeInfo> hash = new HashMap<String, NodeInfo>();
				for (Edge edge : edges) {
					String connection = edge.getAttribute("label");
					String source = edge.getSource().getNode().getId().getId();
					String target = edge.getTarget().getNode().getId().getId();
					LinkedList<NodeInfo> sources = topology.get(target);
					NodeInfo nodeInfo = new NodeInfo(source, connection);
					sources.add(nodeInfo);
					hash.put(source + "," + target, nodeInfo);
				}
				for (Edge edge : edges) {
					String connection = edge.getAttribute("label");
					String source = edge.getSource().getNode().getId().getId();
					String target = edge.getTarget().getNode().getId().getId();
					NodeInfo nodeInfo = hash.get(target + "," + source);
					if (nodeInfo != null) {
						nodeInfo.reverseName = connection;
					}
				}
			}
			
		} catch (FileNotFoundException e) {
			logger.error("File not found: " + conf.confFilePath);
			e.printStackTrace();
		} catch (ParseException e) {
			logger.error("File format error: " + conf.confFilePath);
			e.printStackTrace();
		}
		HashMap<String, ArrayList<HostMessage>> connectionList = new HashMap<String, ArrayList<HostMessage>>();
		ods.put("connection", connectionList);
		ods.put("_ABSIPTABLE" ,new ArrayList<HostMessage>());
		
		new createABSIPList();
		
		IncomingHosts cs1 = new IncomingHosts(topology, nodeNames);
		cs1.host.setKey("local", "host");
		cs1.connection.setKey("local", "connection");

		//TopologyFinish cs2 = new TopologyFinish();
		//cs2.finish.setKey("local", "finish");
		
		ConfigWaiter cs3 = new ConfigWaiter(nodeNum);
		cs3.done.setKey("local", "done");
		
		
	}

}