MATSIM
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
org.matsim.guice.GraphvizRenderer Class Reference

Public Member Functions

void render (Graph< Node, Edge > graph)
 
void setOut (PrintWriter out)
 

Protected Member Functions

void reset ()
 
void finish ()
 

Private Member Functions

void renderNode (GraphvizNode node)
 
Map< String, String > getNodeAttributes (GraphvizNode node)
 
String getNodeLabel (GraphvizNode node)
 
void renderEdge (GraphvizEdge edge)
 
Map< String, String > getEdgeAttributes (GraphvizEdge edge)
 
String getAttrString (Map< String, String > attrs)
 
String getArrowString (List< ArrowType > arrows)
 
String getEdgeEndPoint (String nodeId, String portId, CompassPoint compassPoint)
 
String htmlEscape (String str)
 
void newInterfaceNode (InterfaceNode node)
 
void newImplementationNode (ImplementationNode node)
 
void newInstanceNode (InstanceNode node)
 
void newDependencyEdge (DependencyEdge edge)
 
void newBindingEdge (BindingEdge edge)
 
void addNode (GraphvizNode node)
 

Private Attributes

boolean fields = false
 
final Map< NodeId, GraphvizNode > nodes = Maps.newHashMap()
 
final List< GraphvizEdge > edges = Lists.newArrayList()
 
final NameFactory nameFactory = new ShortNameFactory()
 
final PortIdFactory portIdFactory = new PortIdFactoryImpl()
 
PrintWriter out
 
String rankdir = "TB"
 

Detailed Description

Definition at line 34 of file GraphvizRenderer.java.

Member Function Documentation

◆ render()

void org.matsim.guice.GraphvizRenderer.render ( Graph< Node, Edge >  graph)

Definition at line 46 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.finish(), org.matsim.guice.GraphvizRenderer.getAttrString(), org.matsim.guice.GraphvizRenderer.newBindingEdge(), org.matsim.guice.GraphvizRenderer.newDependencyEdge(), org.matsim.guice.GraphvizRenderer.newImplementationNode(), org.matsim.guice.GraphvizRenderer.newInstanceNode(), org.matsim.guice.GraphvizRenderer.newInterfaceNode(), org.matsim.guice.GraphvizRenderer.renderEdge(), and org.matsim.guice.GraphvizRenderer.renderNode().

Referenced by org.matsim.guice.MatsimGrapher.postProcess().

46  {
47  for (Node node : graph.vertexSet()) {
48  if (node instanceof InstanceNode) {
49  newInstanceNode(((InstanceNode) node));
50  } else if (node instanceof ImplementationNode) {
51  newImplementationNode(((ImplementationNode) node));
52  } else if (node instanceof InterfaceNode) {
53  newInterfaceNode(((InterfaceNode) node));
54  }
55  }
56  for (Edge edge : graph.edgeSet()) {
57  if (edge instanceof BindingEdge) {
58  newBindingEdge(((BindingEdge) edge));
59  } else if (edge instanceof DependencyEdge) {
60  newDependencyEdge(((DependencyEdge) edge));
61  }
62  }
63  out.println("digraph injector {");
64 
65  Map<String, String> attrs = Maps.newHashMap();
66  attrs.put("rankdir", rankdir);
67  out.println("graph " + getAttrString(attrs) + ";");
68 
69  for (GraphvizNode node : nodes.values()) {
70  renderNode(node);
71  }
72 
73  for (GraphvizEdge edge : edges) {
74  renderEdge(edge);
75  }
76 
77 // out.println("{");
78 // out.println("rank=same;");
79 // out.println(nodes.get(NodeId.newTypeId(Key.get(Mobsim.class))).getIdentifier()+";");
80 // out.println(nodes.get(NodeId.newTypeId(Key.get(TripRouter.class))).getIdentifier()+";");
81 // out.println(nodes.get(NodeId.newTypeId(Key.get(PlansScoring.class))).getIdentifier()+";");
82 // out.println(nodes.get(NodeId.newTypeId(Key.get(PrepareForSim.class))).getIdentifier()+";");
83 // out.println(nodes.get(NodeId.newTypeId(Key.get(PlansReplanning.class))).getIdentifier()+";");
84 // out.println("}");
85 //
86 // out.println("{");
87 // out.println("rank=same;");
88 // out.println(nodes.get(NodeId.newTypeId(Key.get(RoutingModule.class, Names.named("car")))).getIdentifier()+";");
89 // out.println(nodes.get(NodeId.newTypeId(Key.get(TravelTime.class, Names.named("car")))).getIdentifier()+";");
90 // out.println(nodes.get(NodeId.newTypeId(Key.get(TravelDisutilityFactory.class, Names.named("car")))).getIdentifier()+";");
91 // out.println("}");
92 
93  finish();
94 
95  out.flush();
96  }
final Map< NodeId, GraphvizNode > nodes
String getAttrString(Map< String, String > attrs)
void newBindingEdge(BindingEdge edge)
void newDependencyEdge(DependencyEdge edge)
void renderEdge(GraphvizEdge edge)
final List< GraphvizEdge > edges
void newImplementationNode(ImplementationNode node)
void renderNode(GraphvizNode node)
void newInstanceNode(InstanceNode node)
void newInterfaceNode(InterfaceNode node)
Here is the call graph for this function:

◆ reset()

void org.matsim.guice.GraphvizRenderer.reset ( )
protected

Definition at line 99 of file GraphvizRenderer.java.

99  {
100  nodes.clear();
101  edges.clear();
102  }
final Map< NodeId, GraphvizNode > nodes
final List< GraphvizEdge > edges

◆ setOut()

void org.matsim.guice.GraphvizRenderer.setOut ( PrintWriter  out)

◆ finish()

void org.matsim.guice.GraphvizRenderer.finish ( )
protected

Definition at line 112 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.render().

112  {
113  out.println("}");
114  }

◆ renderNode()

void org.matsim.guice.GraphvizRenderer.renderNode ( GraphvizNode  node)
private

Definition at line 116 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.getAttrString(), and org.matsim.guice.GraphvizRenderer.getNodeAttributes().

Referenced by org.matsim.guice.GraphvizRenderer.render().

116  {
117  Map<String, String> attrs = getNodeAttributes(node);
118  out.println(node.getIdentifier() + " " + getAttrString(attrs));
119  }
String getAttrString(Map< String, String > attrs)
Map< String, String > getNodeAttributes(GraphvizNode node)
Here is the call graph for this function:

◆ getNodeAttributes()

Map<String, String> org.matsim.guice.GraphvizRenderer.getNodeAttributes ( GraphvizNode  node)
private

Definition at line 121 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.getNodeLabel().

Referenced by org.matsim.guice.GraphvizRenderer.renderNode().

121  {
122  Map<String, String> attrs = Maps.newHashMap();
123 
124  attrs.put("label", getNodeLabel(node));
125  // remove most of the margin because the table has internal padding
126  attrs.put("margin", "\"0.02,0\"");
127  attrs.put("shape", node.getShape().toString());
128  attrs.put("style", node.getStyle().toString());
129 
130  return attrs;
131  }
String getNodeLabel(GraphvizNode node)
Here is the call graph for this function:

◆ getNodeLabel()

String org.matsim.guice.GraphvizRenderer.getNodeLabel ( GraphvizNode  node)
private

Creates the "label" for a node. This is a string of HTML that defines a table with a heading at the top and (in the case of ImplementationNodes) rows for each of the member fields.

Definition at line 138 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.htmlEscape().

Referenced by org.matsim.guice.GraphvizRenderer.getNodeAttributes().

138  {
139  String cellborder = node.getStyle() == NodeStyle.INVISIBLE ? "1" : "0";
140 
141  StringBuilder html = new StringBuilder();
142  html.append("<");
143  html.append("<table cellspacing=\"0\" cellpadding=\"5\" cellborder=\"");
144  html.append(cellborder).append("\" border=\"0\">");
145 
146  html.append("<tr>").append("<td align=\"left\" port=\"header\" ");
147  html.append("bgcolor=\"" + node.getHeaderBackgroundColor() + "\">");
148 
149  String subtitle = Joiner.on("<br align=\"left\"/>").join(node.getSubtitles());
150  if (subtitle.length() != 0) {
151  html.append("<font color=\"").append(node.getHeaderTextColor());
152  html.append("\" point-size=\"10\">");
153  html.append(subtitle).append("<br align=\"left\"/>").append("</font>");
154  }
155 
156  html.append("<font color=\"" + node.getHeaderTextColor() + "\">");
157  html.append(htmlEscape(node.getTitle())).append("<br align=\"left\"/>");
158  html.append("</font>").append("</td>").append("</tr>");
159 
160  for (Map.Entry<String, String> field : node.getFields().entrySet()) {
161  html.append("<tr>");
162  html.append("<td align=\"left\" port=\"").append(htmlEscape(field.getKey())).append("\">");
163  html.append(htmlEscape(field.getValue()));
164  html.append("</td>").append("</tr>");
165  }
166 
167  html.append("</table>");
168  html.append(">");
169  return html.toString();
170  }
Here is the call graph for this function:

◆ renderEdge()

void org.matsim.guice.GraphvizRenderer.renderEdge ( GraphvizEdge  edge)
private

Definition at line 172 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.getAttrString(), org.matsim.guice.GraphvizRenderer.getEdgeAttributes(), and org.matsim.guice.GraphvizRenderer.getEdgeEndPoint().

Referenced by org.matsim.guice.GraphvizRenderer.render().

172  {
173  Map<String, String> attrs = getEdgeAttributes(edge);
174 
175  String tailId = getEdgeEndPoint(nodes.get(edge.getTailNodeId()).getIdentifier(),
176  edge.getTailPortId(), edge.getTailCompassPoint());
177 
178  String headId = getEdgeEndPoint(nodes.get(edge.getHeadNodeId()).getIdentifier(),
179  edge.getHeadPortId(), edge.getHeadCompassPoint());
180 
181  out.println(tailId + " -> " + headId + " " + getAttrString(attrs));
182  }
final Map< NodeId, GraphvizNode > nodes
String getAttrString(Map< String, String > attrs)
Map< String, String > getEdgeAttributes(GraphvizEdge edge)
String getEdgeEndPoint(String nodeId, String portId, CompassPoint compassPoint)
Here is the call graph for this function:

◆ getEdgeAttributes()

Map<String, String> org.matsim.guice.GraphvizRenderer.getEdgeAttributes ( GraphvizEdge  edge)
private

Definition at line 184 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.getArrowString().

Referenced by org.matsim.guice.GraphvizRenderer.renderEdge().

184  {
185  Map<String, String> attrs = Maps.newHashMap();
186 
187  attrs.put("arrowhead", getArrowString(edge.getArrowHead()));
188  attrs.put("arrowtail", getArrowString(edge.getArrowTail()));
189  attrs.put("style", edge.getStyle().toString());
190 
191  return attrs;
192  }
String getArrowString(List< ArrowType > arrows)
Here is the call graph for this function:

◆ getAttrString()

String org.matsim.guice.GraphvizRenderer.getAttrString ( Map< String, String >  attrs)
private

Definition at line 194 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.render(), org.matsim.guice.GraphvizRenderer.renderEdge(), and org.matsim.guice.GraphvizRenderer.renderNode().

194  {
195  List<String> attrList = Lists.newArrayList();
196 
197  for (Map.Entry<String, String> attr : attrs.entrySet()) {
198  String value = attr.getValue();
199 
200  if (value != null) {
201  attrList.add(attr.getKey() + "=" + value);
202  }
203  }
204 
205  return "[" + Joiner.on(", ").join(attrList) + "]";
206  }

◆ getArrowString()

String org.matsim.guice.GraphvizRenderer.getArrowString ( List< ArrowType >  arrows)
private

Turns a List of ArrowTypes into a String that represents combining them. With Graphviz, that just means concatenating them.

Definition at line 213 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.getEdgeAttributes().

213  {
214  return Joiner.on("").join(arrows);
215  }

◆ getEdgeEndPoint()

String org.matsim.guice.GraphvizRenderer.getEdgeEndPoint ( String  nodeId,
String  portId,
CompassPoint  compassPoint 
)
private

Definition at line 217 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.renderEdge().

217  {
218  List<String> portStrings = Lists.newArrayList(nodeId);
219 
220  if (portId != null) {
221  portStrings.add(portId);
222  }
223 
224  if (compassPoint != null) {
225  portStrings.add(compassPoint.toString());
226  }
227 
228  return Joiner.on(":").join(portStrings);
229  }

◆ htmlEscape()

String org.matsim.guice.GraphvizRenderer.htmlEscape ( String  str)
private

Definition at line 231 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.getNodeLabel().

231  {
232  return str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
233  }

◆ newInterfaceNode()

void org.matsim.guice.GraphvizRenderer.newInterfaceNode ( InterfaceNode  node)
private

Definition at line 235 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.addNode().

Referenced by org.matsim.guice.GraphvizRenderer.render().

235  {
236  NodeId nodeId = node.getId();
237  GraphvizNode gnode = new GraphvizNode(nodeId);
238  gnode.setStyle(NodeStyle.DASHED);
239  Key<?> key = nodeId.getKey();
240  gnode.setTitle(nameFactory.getClassName(key));
241  gnode.addSubtitle(0, nameFactory.getAnnotationName(key));
242  addNode(gnode);
243  }
Here is the call graph for this function:

◆ newImplementationNode()

void org.matsim.guice.GraphvizRenderer.newImplementationNode ( ImplementationNode  node)
private

Definition at line 245 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.addNode().

Referenced by org.matsim.guice.GraphvizRenderer.render().

245  {
246  NodeId nodeId = node.getId();
247  GraphvizNode gnode = new GraphvizNode(nodeId);
248  gnode.setStyle(NodeStyle.SOLID);
249 
250  gnode.setHeaderBackgroundColor("#000000");
251  gnode.setHeaderTextColor("#ffffff");
252  gnode.setTitle(nameFactory.getClassName(nodeId.getKey()));
253 
254  if (fields) {
255  for (Member member : node.getMembers()) {
256  gnode.addField(portIdFactory.getPortId(member), nameFactory.getMemberName(member));
257  }
258  }
259 
260  addNode(gnode);
261  }
Here is the call graph for this function:

◆ newInstanceNode()

void org.matsim.guice.GraphvizRenderer.newInstanceNode ( InstanceNode  node)
private

Definition at line 263 of file GraphvizRenderer.java.

References org.matsim.guice.GraphvizRenderer.addNode().

Referenced by org.matsim.guice.GraphvizRenderer.render().

263  {
264  NodeId nodeId = node.getId();
265  GraphvizNode gnode = new GraphvizNode(nodeId);
266  gnode.setStyle(NodeStyle.SOLID);
267 
268  gnode.setHeaderBackgroundColor("#000000");
269  gnode.setHeaderTextColor("#ffffff");
270  gnode.setTitle(nameFactory.getClassName(nodeId.getKey()));
271 
272  gnode.addSubtitle(0, nameFactory.getSourceName(node.getSource()));
273 
274  gnode.setHeaderBackgroundColor("#aaaaaa");
275  gnode.setHeaderTextColor("#ffffff");
276  gnode.setTitle(nameFactory.getInstanceName(node.getInstance()));
277 
278  if (fields) {
279  for (Member member : node.getMembers()) {
280  gnode.addField(portIdFactory.getPortId(member), nameFactory.getMemberName(member));
281  }
282  }
283  addNode(gnode);
284  }
Here is the call graph for this function:

◆ newDependencyEdge()

void org.matsim.guice.GraphvizRenderer.newDependencyEdge ( DependencyEdge  edge)
private

Definition at line 286 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.render().

286  {
287  GraphvizEdge gedge = new GraphvizEdge(edge.getFromId(), edge.getToId());
288  InjectionPoint fromPoint = edge.getInjectionPoint();
289  if (fromPoint == null) {
290  gedge.setTailPortId("header");
291  } else {
292  gedge.setTailPortId(portIdFactory.getPortId(fromPoint.getMember()));
293  }
294  gedge.setArrowHead(ImmutableList.of(ArrowType.NORMAL));
295  gedge.setTailCompassPoint(CompassPoint.EAST);
296 
297  edges.add(gedge);
298  }
final List< GraphvizEdge > edges

◆ newBindingEdge()

void org.matsim.guice.GraphvizRenderer.newBindingEdge ( BindingEdge  edge)
private

Definition at line 300 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.render().

300  {
301  GraphvizEdge gedge = new GraphvizEdge(edge.getFromId(), edge.getToId());
302  gedge.setStyle(EdgeStyle.DASHED);
303  switch (edge.getType()) {
304  case NORMAL:
305  gedge.setArrowHead(ImmutableList.of(ArrowType.NORMAL_OPEN));
306  break;
307 
308  case PROVIDER:
309  gedge.setArrowHead(ImmutableList.of(ArrowType.NORMAL_OPEN, ArrowType.NORMAL_OPEN));
310  break;
311 
312  case CONVERTED_CONSTANT:
313  gedge.setArrowHead(ImmutableList.of(ArrowType.NORMAL_OPEN, ArrowType.DOT_OPEN));
314  break;
315  }
316  edges.add(gedge);
317  }
final List< GraphvizEdge > edges

◆ addNode()

void org.matsim.guice.GraphvizRenderer.addNode ( GraphvizNode  node)
private

Definition at line 319 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.newImplementationNode(), org.matsim.guice.GraphvizRenderer.newInstanceNode(), and org.matsim.guice.GraphvizRenderer.newInterfaceNode().

319  {
320  node.setIdentifier("x" + nodes.size());
321  nodes.put(node.getNodeId(), node);
322  }
final Map< NodeId, GraphvizNode > nodes

Member Data Documentation

◆ fields

boolean org.matsim.guice.GraphvizRenderer.fields = false
private

Definition at line 36 of file GraphvizRenderer.java.

◆ nodes

final Map<NodeId, GraphvizNode> org.matsim.guice.GraphvizRenderer.nodes = Maps.newHashMap()
private

Definition at line 38 of file GraphvizRenderer.java.

◆ edges

final List<GraphvizEdge> org.matsim.guice.GraphvizRenderer.edges = Lists.newArrayList()
private

Definition at line 39 of file GraphvizRenderer.java.

◆ nameFactory

final NameFactory org.matsim.guice.GraphvizRenderer.nameFactory = new ShortNameFactory()
private

Definition at line 40 of file GraphvizRenderer.java.

◆ portIdFactory

final PortIdFactory org.matsim.guice.GraphvizRenderer.portIdFactory = new PortIdFactoryImpl()
private

Definition at line 41 of file GraphvizRenderer.java.

◆ out

PrintWriter org.matsim.guice.GraphvizRenderer.out
private

Definition at line 43 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.setOut().

◆ rankdir

String org.matsim.guice.GraphvizRenderer.rankdir = "TB"
private

Definition at line 44 of file GraphvizRenderer.java.

Referenced by org.matsim.guice.GraphvizRenderer.setOut().


The documentation for this class was generated from the following file: