From 49c20e5fb74bf7f0e5b4843197e280699bdc4ed4 Mon Sep 17 00:00:00 2001 From: jvanzyl Date: Sun, 2 Dec 2001 19:23:40 +0000 Subject: [PATCH] - the resolver now works but some additions have to be made to tell the resolver to stop when all the neighbours of the starting vertex have been visited as opposed to going through the whole graph. PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/sandbox/graph/trunk@144587 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/commons/graph/Graph.java | 4 +- .../graph/util/DependencyResolver.java | 61 ++++++++++++++++--- .../graph/visitor/DependencyVisitor.java | 10 +-- .../graph/util/TestDependencyResolver.java | 5 +- 4 files changed, 60 insertions(+), 20 deletions(-) diff --git a/src/java/org/apache/commons/graph/Graph.java b/src/java/org/apache/commons/graph/Graph.java index 24568e5..2b78f78 100644 --- a/src/java/org/apache/commons/graph/Graph.java +++ b/src/java/org/apache/commons/graph/Graph.java @@ -65,7 +65,7 @@ import org.apache.commons.graph.visitor.PrintVisitor; /** * Describes a generic graph G = (V, E), i.e. a set of vertices and edges. * - * @version $Id: Graph.java,v 1.3 2001/12/02 18:07:18 jvanzyl Exp $ + * @version $Id: Graph.java,v 1.4 2001/12/02 19:23:40 jvanzyl Exp $ * @author M. Dahm */ public class Graph implements Cloneable, Serializable { @@ -73,7 +73,7 @@ public class Graph implements Cloneable, Serializable { /** * Debugging flag */ - private boolean debug = true; + private boolean debug = false; private boolean directed = true; diff --git a/src/java/org/apache/commons/graph/util/DependencyResolver.java b/src/java/org/apache/commons/graph/util/DependencyResolver.java index e4ac537..9a51097 100644 --- a/src/java/org/apache/commons/graph/util/DependencyResolver.java +++ b/src/java/org/apache/commons/graph/util/DependencyResolver.java @@ -75,7 +75,8 @@ public class DependencyResolver */ public List getSortedDependencies(String g) { - List l = getSortedDependencies(new LabeledVertex(g)); + LabeledVertex start = (LabeledVertex) vertices.get(g); + List l = getSortedDependencies(start); ArrayList sl = new ArrayList(); for (Iterator i = l.iterator(); i.hasNext();) @@ -122,9 +123,8 @@ public class DependencyResolver */ public void addGraphable(String g, List dependencies) { - LabeledVertex startingVertex = null; - - if (vertices.get(g) == null) + LabeledVertex startingVertex = (LabeledVertex) vertices.get(g); + if (startingVertex == null) { // Create a labeled vertex with our starting vertex g. startingVertex = new LabeledVertex(g); @@ -141,16 +141,57 @@ public class DependencyResolver // the graph and only add it if it isn't. We need to // add some code to the graph object to deal with this // automatically. - if (vertices.get(dependencyName) == null) + LabeledVertex dependency = (LabeledVertex)vertices.get(dependencyName); + if (dependency == null) { - LabeledVertex dependency = new LabeledVertex(dependencyName); + dependency = new LabeledVertex(dependencyName); vertices.put(dependencyName, dependency); graph.addVertex(dependency); - - // Create an edge between the starting vertex and - // the dependency. - graph.addEdge(startingVertex, dependency); } + + // Create an edge between the starting vertex and + // the dependency. + graph.addEdge(startingVertex, dependency); + } + } + + public static void main(String[] args) + { + Graph graph = new Graph(true); + + LabeledVertex a = new LabeledVertex("A"); + LabeledVertex b = new LabeledVertex("B"); + LabeledVertex c = new LabeledVertex("C"); + LabeledVertex d = new LabeledVertex("D"); + LabeledVertex e = new LabeledVertex("E"); + LabeledVertex f = new LabeledVertex("F"); + + graph.addVertex(a); + graph.addVertex(b); + graph.addVertex(c); + graph.addVertex(d); + graph.addVertex(e); + graph.addVertex(f); + + graph.addEdge(c,f); + + graph.addEdge(d,a); + graph.addEdge(d,b); + + graph.addEdge(e,b); + graph.addEdge(e,c); + graph.addEdge(e,d); + + graph.addEdge(f,d); + + DependencyVisitor visitor = new DependencyVisitor(); + DFS dfs = new DFS(visitor); + dfs.start(graph,(Vertex)f); + List l = visitor.getSortedDependencies(); + + for (Iterator i = l.iterator(); i.hasNext();) + { + System.out.println(i.next()); } } } diff --git a/src/java/org/apache/commons/graph/visitor/DependencyVisitor.java b/src/java/org/apache/commons/graph/visitor/DependencyVisitor.java index f236fc9..557d9e0 100644 --- a/src/java/org/apache/commons/graph/visitor/DependencyVisitor.java +++ b/src/java/org/apache/commons/graph/visitor/DependencyVisitor.java @@ -54,7 +54,7 @@ package org.apache.commons.graph.visitor; * . */ -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import org.apache.commons.graph.Vertex; @@ -65,7 +65,7 @@ import org.apache.commons.graph.Vertex; * this class (and of course its descendants) may be passed to a DFS * object. * - * @version $Id: DependencyVisitor.java,v 1.1 2001/12/02 18:07:18 jvanzyl Exp $ + * @version $Id: DependencyVisitor.java,v 1.2 2001/12/02 19:23:40 jvanzyl Exp $ * @author M. Dahm * @see DFS */ @@ -78,20 +78,20 @@ public class DependencyVisitor * they must be processed by the mechanism using * the dependency list. */ - List sortedDependencies; + LinkedList sortedDependencies; /** * Default constructor. */ public DependencyVisitor() { - sortedDependencies = new ArrayList(); + sortedDependencies = new LinkedList(); } public void finishVertex(Vertex v) { super.finishVertex(v); - sortedDependencies.add(v); + sortedDependencies.addLast(v); } public List getSortedDependencies() diff --git a/src/test/org/apache/commons/graph/util/TestDependencyResolver.java b/src/test/org/apache/commons/graph/util/TestDependencyResolver.java index 6f24e63..ddb07ca 100644 --- a/src/test/org/apache/commons/graph/util/TestDependencyResolver.java +++ b/src/test/org/apache/commons/graph/util/TestDependencyResolver.java @@ -10,7 +10,7 @@ import java.util.StringTokenizer; /** * @author Jason van Zyl - * @version $Id: TestDependencyResolver.java,v 1.1 2001/12/02 18:07:19 jvanzyl Exp $ + * @version $Id: TestDependencyResolver.java,v 1.2 2001/12/02 19:23:40 jvanzyl Exp $ */ public class TestDependencyResolver extends TestCase @@ -90,8 +90,6 @@ public class TestDependencyResolver d.addGraphable("E", deps("B,C,D")); d.addGraphable("F", deps("D")); - System.out.println(">>> " + d.getVerticesString()); - // Get the dependencies where we exclude the // specified target. assertEquals(compare,getList(d.getSortedDependencies("F"))); @@ -99,6 +97,7 @@ public class TestDependencyResolver } catch( Exception e ) { + e.printStackTrace(); fail(); } }