73
|
1 package christie.topology.manager;
|
|
2
|
|
3 import christie.annotation.Peek;
|
|
4 import christie.codegear.CodeGear;
|
|
5 import christie.codegear.CodeGearManager;
|
|
6
|
|
7 import java.io.File;
|
|
8 import java.io.FileNotFoundException;
|
|
9 import java.io.FileReader;
|
|
10 import java.util.ArrayList;
|
|
11 import java.util.HashMap;
|
|
12 import java.util.LinkedList;
|
|
13
|
94
|
14 import christie.topology.HostMessage;
|
73
|
15 import com.alexmerz.graphviz.ParseException;
|
|
16 import com.alexmerz.graphviz.Parser;
|
|
17 import com.alexmerz.graphviz.objects.*;
|
|
18
|
|
19 public class FileParser extends CodeGear {
|
|
20
|
|
21 @Peek
|
|
22 TopologyManagerConfig topologyManagerConfig;
|
|
23
|
|
24 @Override
|
|
25 protected void run(CodeGearManager cgm) {
|
|
26 LinkedList<String> nodeNames = new LinkedList<>();
|
94
|
27 HashMap<String, LinkedList<HostMessage>> resultParse = new HashMap<>();
|
73
|
28 int nodeNum = 0;
|
|
29
|
|
30 try {
|
|
31 FileReader reader = new FileReader(new File(topologyManagerConfig.confFilePath));
|
|
32 Parser parser = new Parser();
|
|
33 parser.parse(reader);
|
|
34
|
|
35 ArrayList<Graph> digraphs = parser.getGraphs();
|
|
36
|
|
37 for (Graph digraph : digraphs) {
|
|
38 ArrayList<Node> nodes = digraph.getNodes(false);
|
|
39 nodeNum = nodes.size();
|
|
40
|
|
41 for (Node node : nodes) {
|
|
42 String nodeName = node.getId().getId();
|
|
43 nodeNames.add(nodeName);
|
|
44 resultParse.put(nodeName, new LinkedList<>());
|
|
45 }
|
|
46
|
|
47 ArrayList<Edge> edges = digraph.getEdges();
|
|
48
|
94
|
49 for (Edge edge : edges) {
|
|
50 HostMessage nodeInfo = new HostMessage();
|
73
|
51
|
94
|
52 nodeInfo.setNodeInfo(edge.getSource().getNode().getId().getId(),
|
|
53 edge.getAttribute("label"),
|
|
54 edge.getTarget().getNode().getId().getId());
|
114
|
55
|
|
56 // remote側のhost, portを与えるので, IncomingHostsで取りやすいように
|
|
57 // <remoteNodeName, nodeInfo> って形にした.
|
|
58 resultParse.get(nodeInfo.getRemoteNodeName()).add(nodeInfo);
|
73
|
59 }
|
|
60 }
|
|
61
|
|
62 } catch (FileNotFoundException e) {
|
|
63 e.printStackTrace();
|
|
64 } catch (ParseException e) {
|
|
65 e.printStackTrace();
|
|
66 }
|
|
67
|
|
68 getLocalDGM().put("resultParse", resultParse);
|
|
69 getLocalDGM().put("nodeNum", nodeNum);
|
|
70 getLocalDGM().put("nodeNames", nodeNames);
|
74
|
71 getLocalDGM().put("waiterNodeNames", nodeNames.clone());
|
|
72
|
73
|
73
|
|
74
|
|
75 }
|
|
76 }
|