+++ /dev/null
-/*--------------------------------------------------------------------------\r
- * Copyright 2004 Taro L. Saito\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *--------------------------------------------------------------------------*/\r
-//--------------------------------------\r
-// XerialJ Project\r
-//\r
-// GraphvizHelper.java\r
-// Since: 2005/06/03\r
-//\r
-// $URL: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph/GraphvizHelper.java $ \r
-// $Author: leo $\r
-//--------------------------------------\r
-package org.xerial.util.graph;\r
-\r
-import java.io.OutputStream;\r
-import java.io.PrintWriter;\r
-import java.io.Writer;\r
-import java.util.ArrayList;\r
-import java.util.Properties;\r
-import java.util.Stack;\r
-import java.util.Map.Entry;\r
-\r
-import org.xerial.util.StringUtil;\r
-\r
-/**\r
- * A helper class for generateing Graphviz's dot file\r
- * \r
- * @author leo\r
- * \r
- */\r
-public class GraphvizHelper {\r
- private PrintWriter _out;\r
- private Stack<GraphvizComponent> _componentStack = new Stack<GraphvizComponent>();\r
-\r
- /**\r
- * \r
- */\r
- public GraphvizHelper(OutputStream out) {\r
- _out = new PrintWriter(out);\r
- }\r
-\r
- public GraphvizHelper(Writer out) {\r
- _out = new PrintWriter(out);\r
- }\r
-\r
- /**\r
- * begin output of digraph. Finally, you have to call endDigraph to close\r
- * the dot description.\r
- * \r
- * @param graphName\r
- */\r
- public void beginDigraph(String graphName) {\r
- pushComponent(new Digraph(graphName));\r
- }\r
-\r
- public void endDigraph() {\r
- assert !_componentStack.empty();\r
- GraphvizComponent lastComponent = popComponent();\r
- assert lastComponent instanceof Digraph;\r
- lastComponent.leave(_out);\r
- flush();\r
- }\r
-\r
- public void node(String nodeID, String label) {\r
- _out.println(String.format("%s [label=\"%s\"];", nodeID, label.toString()));\r
- }\r
-\r
- public void node(int nodeID, String label) {\r
- _out.println(String.format("%d [label=\"%s\"];", nodeID, label.toString()));\r
- }\r
-\r
- public void node(String nodeID, Properties options) {\r
- _out.println(String.format("%s [%s]", nodeID, format(options)));\r
- }\r
-\r
- private String format(Properties options) {\r
- ArrayList<String> buf = new ArrayList<String>(options.size());\r
- for (Entry<Object, Object> each : options.entrySet()) {\r
- buf.add(String.format("%s=%s", each.getKey(), each.getValue()));\r
- }\r
-\r
- return StringUtil.join(buf, ", ");\r
- }\r
-\r
- public void graphOption(String option) {\r
- _out.println(String.format("graph [%s];", option));\r
- }\r
-\r
- public void edge(String fromNodeID, String toNodeID) {\r
- _out.println(fromNodeID + " -> " + toNodeID + ";");\r
- }\r
-\r
- public void edge(String fromNodeID, String toNodeID, Properties prop) {\r
- _out.println(String.format("%s -> %s [%s];", fromNodeID, toNodeID, format(prop)));\r
- }\r
-\r
- public void edge(int fromNodeID, int toNodeID) {\r
- _out.println(fromNodeID + " -> " + toNodeID + ";");\r
- }\r
-\r
- public void edge(String fromNodeID, String toNodeID, String label) {\r
- _out.println(String.format("%s -> %s [label=\"%s\"];", fromNodeID, toNodeID, label));\r
- }\r
-\r
- public void edge(int fromNodeID, int toNodeID, String label) {\r
- _out.println(String.format("%d -> %d [label=\"%s\"];", fromNodeID, toNodeID, label));\r
- }\r
-\r
- public void endOutput() {\r
- while (!_componentStack.empty()) {\r
- GraphvizComponent lastComponent = popComponent();\r
- lastComponent.leave(_out);\r
- }\r
- _out.flush();\r
- }\r
-\r
- public void flush() {\r
- _out.flush();\r
- }\r
-\r
- private void pushComponent(GraphvizComponent component) {\r
- _componentStack.add(component);\r
- component.enter(_out);\r
- }\r
-\r
- private GraphvizComponent popComponent() {\r
- assert !_componentStack.empty();\r
- return _componentStack.pop();\r
- }\r
-\r
- class GraphvizComponent {\r
- /**\r
- * \r
- */\r
- public void enter(PrintWriter out) {}\r
-\r
- /**\r
- * \r
- */\r
- public void leave(PrintWriter out) {}\r
- }\r
-\r
- class Digraph extends GraphvizComponent {\r
- private String _graphName;\r
-\r
- public Digraph(String graphName) {\r
- _graphName = graphName;\r
- }\r
-\r
- @Override\r
- public void enter(PrintWriter out) {\r
- out.println("digraph " + _graphName + "{");\r
- }\r
-\r
- @Override\r
- public void leave(PrintWriter out) {\r
- out.println("}");\r
- }\r
-\r
- }\r
-\r
-}\r