view src/main/java/alice/topology/manager/StartTopologyManager.java @ 410:74e13553e3e3 dispose

change call do setKey in constractor
author tatsuki
date Sat, 05 Jul 2014 18:27:55 +0900
parents fee3efd9257d
children aefbe41fcf12
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() {
		if (!conf.extendTopology) {
			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();
			}

			new IncomingHosts(topology, nodeNames);

			ConfigWaiter cs3 = new ConfigWaiter(nodeNum);
			cs3.done.setKey("local", "done");
		} else {
			System.out.println("mode -t");
			HashMap<String,HostMessage> parentInfo = new HashMap<String,HostMessage>();
			int cominghostCount = 0;
			ods.put("nodeConnectionInfo", parentInfo);
			ods.put("hostCount", cominghostCount);
			new ComingServiceHosts();
		}
	}

}