1 package org.matsim.guice;
3 import com.google.inject.Injector;
4 import com.google.inject.Key;
5 import com.google.inject.TypeLiteral;
6 import com.google.inject.grapher.AbstractInjectorGrapher;
7 import com.google.inject.grapher.BindingEdge;
8 import com.google.inject.grapher.DependencyEdge;
9 import com.google.inject.grapher.Edge;
10 import com.google.inject.grapher.ImplementationNode;
11 import com.google.inject.grapher.InstanceNode;
12 import com.google.inject.grapher.InterfaceNode;
13 import com.google.inject.grapher.Node;
14 import com.google.inject.grapher.NodeId;
15 import org.jgrapht.Graph;
16 import org.jgrapht.Graphs;
17 import org.jgrapht.alg.connectivity.ConnectivityInspector;
18 import org.jgrapht.graph.DefaultDirectedGraph;
19 import org.jgrapht.graph.MaskSubgraph;
41 import java.io.PrintWriter;
42 import java.io.Writer;
43 import java.util.HashMap;
49 private Graph<Node, Edge>
g;
50 private final Map<NodeId, Node>
nodes =
new HashMap<>();
56 g =
new DefaultDirectedGraph<>(Edge.class);
61 g =
new DefaultDirectedGraph<>(Edge.class);
68 nodes.put(node.getId(), node);
74 nodes.put(node.getId(), node);
80 nodes.put(node.getId(), node);
85 g.addEdge(nodes.get(edge.getFromId()), nodes.get(edge.getToId()), edge);
90 g.addEdge(nodes.get(edge.getFromId()), nodes.get(edge.getToId()), edge);
104 graphvizRenderer.setRankdir(
"LR");
105 graphvizRenderer.
setOut((PrintWriter) writer);
106 graphvizRenderer.
render(graphComponentReachableFromControler);
110 return new MaskSubgraph<>(
g, node -> {
111 if (
ConfigGroup.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
114 if (
Network.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
117 if (
Population.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
120 if (
DumpDataAtEnd.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
126 if (
MatsimServices.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
129 if (Injector.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
132 if (
PopulationFactory.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
135 if (
Scenario.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
138 if (
Config.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
141 if (
IterationStopWatch.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
144 if (
EventsManager.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
147 if (
ReplanningContext.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
150 if (
PlansDumping.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
153 if (
ActivityFacilities.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
156 if (
EventsHandling.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
159 if (
TravelTimeCalculator.class.isAssignableFrom(node.getId().getKey().getTypeLiteral().getRawType())) {
168 if (node.getId().getKey().getTypeLiteral().toString().contains(
"ExperiencedPlansServiceImpl")) {
171 if (node.getId().getKey().getTypeLiteral().toString().contains(
"ControlerListener")) {
174 if (node.getId().getKey().getTypeLiteral().toString().contains(
"EventsToActivities")) {
177 if (node.getId().getKey().getTypeLiteral().toString().contains(
"EventsToLegs")) {
180 if (node.getId().getKey().getTypeLiteral().toString().contains(
"LeastCostPathCalculatorFactory")) {
183 if (node.getId().getKey().getTypeLiteral().toString().contains(
"MainModeIdentifier")) {
186 if (node.getId().getKey().getTypeLiteral().toString().contains(
"TerminationCriterion")) {
189 if (node.getId().getKey().getTypeLiteral().equals(
new TypeLiteral<Set<MobsimListener>>(){})) {
197 Graph<Node, Edge> graphComponentReachableFromControler =
new DefaultDirectedGraph<>(Edge.class);
198 ConnectivityInspector<Node, Edge> ci =
new ConnectivityInspector<>(filteredGraph);
199 Node controlerNode = nodes.get(NodeId.newTypeId(Key.get(
ControlerI.class)));
200 Graphs.addGraph(graphComponentReachableFromControler,
new MaskSubgraph<>(g, node -> !ci.connectedSetOf(controlerNode).contains(node), edge ->
false));
201 return graphComponentReachableFromControler;
void newDependencyEdge(DependencyEdge edge)
void newInterfaceNode(InterfaceNode node)
MatsimGrapher(GrapherParameters options, Writer writer)
void newInstanceNode(InstanceNode node)
void render(Graph< Node, Edge > graph)
void newImplementationNode(ImplementationNode node)
void setOut(PrintWriter out)
Graph< Node, Edge > filterGraph()
Graph< Node, Edge > findGraphComponentReachableFromControler(Graph< Node, Edge > filteredGraph)
void newBindingEdge(BindingEdge edge)
final Map< NodeId, Node > nodes