1 25 package classycle.dependency; 26 27 import java.util.HashSet ; 28 29 import classycle.graph.NameAttributes; 30 import classycle.graph.Vertex; 31 import classycle.graph.VertexCondition; 32 33 36 public class DependencyPathsRenderer 37 { 38 private static final String INDENT = " "; 39 private final Vertex[] _graph; 40 private final VertexCondition _startSetCondition; 41 private final VertexCondition _finalSetCondition; 42 private final HashSet _vertices = new HashSet (); 43 44 public DependencyPathsRenderer(Vertex[] graph, 45 VertexCondition startSetCondition, 46 VertexCondition finalSetCondition) 47 { 48 _graph = graph; 49 _startSetCondition = startSetCondition; 50 _finalSetCondition = finalSetCondition; 51 for (int i = 0; i < graph.length; i++) 52 { 53 _vertices.add(graph[i]); 54 } 55 } 56 57 public String renderGraph(String lineStart) 58 { 59 lineStart = '\n' + lineStart; 60 StringBuffer buffer = new StringBuffer (); 61 HashSet visitedVertices = new HashSet (); 62 for (int i = 0; i < _graph.length; i++) 63 { 64 Vertex vertex = _graph[i]; 65 if (_startSetCondition.isFulfilled(vertex)) 66 { 67 buffer.append(lineStart).append(getNameOf(vertex)); 68 renderPaths(buffer, lineStart + INDENT, vertex, visitedVertices); 69 } 70 } 71 72 return new String (buffer); 73 } 74 75 private void renderPaths(StringBuffer buffer, String lineStart, 76 Vertex vertex, HashSet visitedVertices) 77 { 78 visitedVertices.add(vertex); 79 for (int i = 0, n = vertex.getNumberOfOutgoingArcs(); i < n; i++) 80 { 81 Vertex headVertex = vertex.getHeadVertex(i); 82 if (_vertices.contains(headVertex) 83 && !_startSetCondition.isFulfilled(headVertex)) 84 { 85 buffer.append(lineStart).append("-> ").append(getNameOf(headVertex)); 86 if (!_finalSetCondition.isFulfilled(headVertex) 87 && !visitedVertices.contains(headVertex)) 88 { 89 renderPaths(buffer, lineStart + INDENT, headVertex, visitedVertices); 90 } 91 } 92 } 93 } 94 95 private String getNameOf(Vertex vertex) 96 { 97 return ((NameAttributes) vertex.getAttributes()).getName(); 98 } 99 } 100 | Popular Tags |