KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > classycle > dependency > DependencyPathsRenderer


1 /*
2  * Copyright (c) 2003-2006, Franz-Josef Elmer, All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * - Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * - Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
15  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */

25 package classycle.dependency;
26
27 import java.util.HashSet JavaDoc;
28
29 import classycle.graph.NameAttributes;
30 import classycle.graph.Vertex;
31 import classycle.graph.VertexCondition;
32
33 /**
34  * @author Franz-Josef Elmer
35  */

36 public class DependencyPathsRenderer
37 {
38   private static final String JavaDoc INDENT = " ";
39   private final Vertex[] _graph;
40   private final VertexCondition _startSetCondition;
41   private final VertexCondition _finalSetCondition;
42   private final HashSet JavaDoc _vertices = new HashSet JavaDoc();
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 JavaDoc renderGraph(String JavaDoc lineStart)
58   {
59     lineStart = '\n' + lineStart;
60     StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
61     HashSet JavaDoc visitedVertices = new HashSet JavaDoc();
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 JavaDoc(buffer);
73   }
74
75   private void renderPaths(StringBuffer JavaDoc buffer, String JavaDoc lineStart,
76                            Vertex vertex, HashSet JavaDoc 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 JavaDoc getNameOf(Vertex vertex)
96   {
97     return ((NameAttributes) vertex.getAttributes()).getName();
98   }
99 }
100
Popular Tags