001    package org.kuali.maven.plugins.graph.dot;
002    
003    import java.util.List;
004    
005    import org.kuali.maven.plugins.graph.pojo.Edge;
006    import org.kuali.maven.plugins.graph.pojo.EdgeDecorator;
007    import org.kuali.maven.plugins.graph.pojo.Graph;
008    import org.kuali.maven.plugins.graph.pojo.GraphDecorator;
009    import org.kuali.maven.plugins.graph.pojo.GraphNode;
010    import org.kuali.maven.plugins.graph.pojo.NodeDecorator;
011    
012    public class StringGenerator {
013    
014        public String getString(Graph graph) {
015            StringBuilder sb = new StringBuilder();
016            sb.append("digraph dependencies {\n\n");
017            sb.append(getString(graph.getGraphDecorator()));
018            sb.append(getString(graph.getNodeDecorator()));
019            sb.append(getString(graph.getEdgeDecorator()));
020            sb.append("\n");
021            sb.append(getString(graph.getNodes()));
022            sb.append("\n");
023            sb.append(toString(graph.getEdges()));
024            sb.append("}\n");
025            return sb.toString();
026        }
027    
028        public String getString(GraphDecorator decorator) {
029            if (decorator == null) {
030                return "";
031            }
032            StringBuilder sb = new StringBuilder();
033            sb.append("  graph [");
034            sb.append(" label=\"" + decorator.getLabel() + "\"");
035            sb.append(" labeljust=\"" + decorator.getLabeljust() + "\"");
036            sb.append(" labelloc=\"" + decorator.getLabelloc() + "\"");
037            sb.append(" fontsize=\"" + decorator.getFontsize() + "\"");
038            sb.append(" fontname=\"" + decorator.getFontname() + "\"");
039            sb.append(" ranksep=\"" + decorator.getRanksep() + "\"");
040            sb.append(" rankdir=\"" + decorator.getRankdir() + "\"");
041            sb.append(" nodesep=\"" + decorator.getNodesep() + "\"");
042            sb.append(" ];\n");
043            return sb.toString();
044        }
045    
046        public String getString(NodeDecorator decorator) {
047            if (decorator == null) {
048                return "";
049            }
050            StringBuilder sb = new StringBuilder();
051            sb.append("  node [");
052            sb.append(" fontsize=\"" + decorator.getFontsize() + "\"");
053            sb.append(" fontname=\"" + decorator.getFontname() + "\"");
054            sb.append(" shape=\"" + decorator.getShape() + "\"");
055            sb.append(" ];\n");
056            return sb.toString();
057        }
058    
059        public String getString(EdgeDecorator decorator) {
060            if (decorator == null) {
061                return "";
062            }
063            StringBuilder sb = new StringBuilder();
064            sb.append("  edge [");
065            sb.append(" fontsize=\"" + decorator.getFontsize() + "\"");
066            sb.append(" fontname=\"" + decorator.getFontname() + "\"");
067            sb.append(" ];\n");
068            return sb.toString();
069        }
070    
071        public String getString(List<GraphNode> nodes) {
072            if (nodes == null) {
073                return "";
074            }
075            StringBuilder sb = new StringBuilder();
076            for (GraphNode node : nodes) {
077                sb.append(getString(node));
078            }
079            return sb.toString();
080        }
081    
082        public String getString(GraphNode node) {
083            if (node.isHidden()) {
084                return "";
085            }
086            StringBuilder sb = new StringBuilder();
087            sb.append("  \"" + node.getId() + "\" [\n");
088            sb.append("    fontsize=\"" + node.getFontsize() + "\"\n");
089            sb.append("    label=\"" + node.getLabel() + "\"\n");
090            sb.append("    color=\"" + node.getColor() + "\"\n");
091            sb.append("    fontcolor=\"" + node.getFontcolor() + "\"\n");
092            sb.append("    fillcolor=\"" + node.getFillcolor() + "\"\n");
093            sb.append("    style=\"" + node.getStyle() + "\"\n");
094            sb.append("  ];\n");
095            return sb.toString();
096        }
097    
098        public String toString(List<Edge> edges) {
099            if (edges == null) {
100                return "";
101            }
102            StringBuilder sb = new StringBuilder();
103            for (Edge edge : edges) {
104                sb.append(getString(edge));
105            }
106            return sb.toString();
107        }
108    
109        public String getString(Edge edge) {
110            GraphNode parent = edge.getParent();
111            GraphNode child = edge.getChild();
112            if (parent.isHidden() || child.isHidden()) {
113                return "";
114            }
115            StringBuilder sb = new StringBuilder();
116            sb.append("  \"" + parent.getId() + "\" -> \"" + child.getId() + "\" [\n");
117            sb.append("    label=\"" + edge.getLabel() + "\"\n");
118            sb.append("    style=\"" + edge.getStyle() + "\"\n");
119            sb.append("    color=\"" + edge.getColor() + "\"\n");
120            sb.append("    fontcolor=\"" + edge.getFontcolor() + "\"\n");
121            sb.append("    weight=\"" + edge.getWeight() + "\"\n");
122            sb.append("  ];\n");
123            return sb.toString();
124        }
125    }