view src/main/java/christie/topology/manager/FileParser.java @ 121:8949d0ecf1f6

refactor Topology
author akahori
date Tue, 11 Dec 2018 15:46:09 +0900
parents ce96f375f369
children a0391cfdcef6
line wrap: on
line source

package christie.topology.manager;

import christie.annotation.Peek;
import christie.codegear.CodeGear;
import christie.codegear.CodeGearManager;

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 christie.topology.HostMessage;
import com.alexmerz.graphviz.ParseException;
import com.alexmerz.graphviz.Parser;
import com.alexmerz.graphviz.objects.*;

public class FileParser extends CodeGear {

    @Peek
    TopologyManagerConfig topologyManagerConfig;

    @Override
    protected void run(CodeGearManager cgm) {
        LinkedList<String> nodeNames = new LinkedList<>();
        HashMap<String, LinkedList<HostMessage>> resultParse = new HashMap<>();
        int nodeNum = 0;

        try {
            FileReader reader = new FileReader(new File(topologyManagerConfig.confFilePath));
            Parser parser = new Parser();
            parser.parse(reader);

            ArrayList<Graph> digraphs = parser.getGraphs();

            for (Graph digraph : digraphs) {
                ArrayList<Node> nodes = digraph.getNodes(false);
                nodeNum = nodes.size();

                for (Node node : nodes) {
                    String nodeName = node.getId().getId();
                    nodeNames.add(nodeName);
                    resultParse.put(nodeName, new LinkedList<>());
                }

                ArrayList<Edge> edges = digraph.getEdges();

                for (Edge edge : edges) {
                    HostMessage nodeInfo = new HostMessage();

                    nodeInfo.setNodeInfo(edge.getSource().getNode().getId().getId(),
                                         edge.getAttribute("label"),
                                         edge.getTarget().getNode().getId().getId());

                    // remote側のhost, portを与えるので, IncomingHostsで取りやすいように
                    // <remoteNodeName, nodeInfo> って形にした.
                    resultParse.get(nodeInfo.getRemoteNodeName()).add(nodeInfo);
                }
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        getLocalDGM().put("resultParse", resultParse);
        getLocalDGM().put("nodeNum", nodeNum);
        getLocalDGM().put("nodeNames", nodeNames);
        getLocalDGM().put("waiterNodeNames", nodeNames.clone());



    }
}