You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/06/14 17:25:48 UTC
svn commit: r547277 [3/16] - in /maven/archiva/trunk: archiva-base/
archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/
archiva-base/archiva-dependency-graph/ archiva-base/archiva-depende...
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,81 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.walk.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+
+/**
+ * GraphCopier
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class GraphCopier
+ extends BaseVisitor
+ implements DependencyGraphVisitor
+{
+ protected DependencyGraph copiedGraph;
+
+ public DependencyGraph getGraph()
+ {
+ return copiedGraph;
+ }
+
+ public void setGraph( DependencyGraph graph )
+ {
+ this.copiedGraph = graph;
+ }
+
+ public void discoverNode( DependencyGraphNode node )
+ {
+ if ( copiedGraph == null )
+ {
+ copiedGraph = new DependencyGraph( node );
+ }
+ }
+
+ /**
+ * Be sure to override and NOT call this method in your sub class,
+ * if you want to copy edges based on some kind of criteria.
+ */
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ copyEdge( edge );
+ }
+
+ public void copyEdge( DependencyGraphEdge edge )
+ {
+ DependencyGraphNode nodeFrom = graph.getNode( edge.getNodeFrom() );
+ DependencyGraphNode nodeTo = graph.getNode( edge.getNodeTo() );
+
+ this.copiedGraph.addNode( nodeFrom );
+ this.copiedGraph.addNode( nodeTo );
+ this.copiedGraph.addEdge( edge );
+ }
+
+ public void reset()
+ {
+ this.copiedGraph = null;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/GraphCopier.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.PotentialCyclicEdgeProducer;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+/**
+ * PopulateDependencyManagementTask
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="populate-dependency-management"
+ * instantiation-strategy="per-lookup"
+ */
+public class PopulateDependencyManagementTask
+ implements GraphTask, PotentialCyclicEdgeProducer
+{
+ public void executeTask( DependencyGraph graph )
+ {
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+ DependencyManagementApplier depManApplier = new DependencyManagementApplier();
+ walker.visit( graph, depManApplier );
+ }
+
+ public String getTaskId()
+ {
+ return "populate-dependency-management";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateDependencyManagementTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,92 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphBuilder;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphUtils;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.GraphTaskException;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+/**
+ * PopulateGraphMasterTask - will perform a resolve / depman apply loop until the graph is fully populated.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="populate-graph"
+ * instantiation-strategy="per-lookup"
+ */
+public class PopulateGraphMasterTask
+ implements GraphTask
+{
+ private DependencyGraphBuilder builder;
+
+ private ResolveGraphTask resolveGraphTask = new ResolveGraphTask();
+
+ private DependencyManagementApplier depManApplier = new DependencyManagementApplier();
+
+ public void executeTask( DependencyGraph graph )
+ throws GraphTaskException
+ {
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+
+ boolean done = false;
+ int maxiters = 5;
+
+ while ( !done )
+ {
+ resolveGraphTask.executeTask( graph );
+ walker.visit( graph, depManApplier );
+
+ if ( !depManApplier.hasCreatedNodes() || ( maxiters < 0 ) )
+ {
+ done = true;
+ break;
+ }
+
+ maxiters--;
+ }
+
+ DependencyGraphUtils.cleanupOrphanedNodes( graph );
+ }
+
+ public String getTaskId()
+ {
+ return "populate-graph";
+ }
+
+ public DependencyGraphBuilder getBuilder()
+ {
+ return builder;
+ }
+
+ public void setBuilder( DependencyGraphBuilder builder )
+ {
+ this.builder = builder;
+ this.resolveGraphTask.setBuilder( builder );
+ this.depManApplier.setBuilder( builder );
+ }
+
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/PopulateGraphMasterTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,35 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+import org.apache.commons.collections.functors.TruePredicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+/**
+ * ReduceEnabledEdgesTask
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="reduce-enabled-edges"
+ * instantiation-strategy="per-lookup"
+ */
+public class ReduceEnabledEdgesTask
+ implements GraphTask
+{
+ public void executeTask( DependencyGraph graph )
+ {
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+ walker.setEdgePredicate( TruePredicate.getInstance() );
+ ReduceEnabledEdgesVisitor reduceEnabledEdgesResolver = new ReduceEnabledEdgesVisitor();
+ walker.visit( graph, reduceEnabledEdgesResolver );
+ }
+
+ public String getTaskId()
+ {
+ return "reduce-enabled-edges";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+
+/**
+ * Removes all disabled edges from the graph.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ReduceEnabledEdgesVisitor
+ extends AbstractReduceEdgeVisitor
+ implements DependencyGraphVisitor
+{
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ if ( edge.isDisabled() )
+ {
+ super.graph.removeEdge( edge );
+ }
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceEnabledEdgesVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,50 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+/**
+ * ReduceScopeTask
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="reduce-scope"
+ * instantiation-strategy="per-lookup"
+ */
+public class ReduceScopeTask
+ implements GraphTask
+{
+ private String scope;
+
+ public ReduceScopeTask( String scope )
+ {
+ this.scope = scope;
+ }
+
+ public void executeTask( DependencyGraph graph )
+ {
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+ ReduceScopeVisitor reduceScopeResolver = new ReduceScopeVisitor( this.scope );
+ walker.visit( graph, reduceScopeResolver );
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+
+ public void setScope( String scope )
+ {
+ this.scope = scope;
+ }
+
+ public String getTaskId()
+ {
+ return "reduce-scope";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,51 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.functors.EdgeWithinScopePredicate;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+
+/**
+ * ReduceScopeVisitor
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ReduceScopeVisitor
+ extends AbstractReduceEdgeVisitor
+ implements DependencyGraphVisitor
+{
+ private Predicate scopedPredicate;
+
+ public ReduceScopeVisitor( String scope )
+ {
+ scopedPredicate = new EdgeWithinScopePredicate( scope );
+ }
+
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ if ( !scopedPredicate.evaluate( edge ) )
+ {
+ super.graph.removeEdge( edge );
+ }
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceScopeVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkBreadthFirstSearch;
+
+/**
+ * ReduceTransitiveEdgesTask
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="reduce-transitive-edges"
+ * instantiation-strategy="per-lookup"
+ */
+public class ReduceTransitiveEdgesTask
+ implements GraphTask
+{
+
+ public void executeTask( DependencyGraph graph )
+ {
+ DependencyGraphWalker walker = new WalkBreadthFirstSearch();
+ ReduceTransitiveEdgesVisitor reduceTransitiveEdgesResolver = new ReduceTransitiveEdgesVisitor();
+ walker.visit( graph, reduceTransitiveEdgesResolver );
+ }
+
+ public String getTaskId()
+ {
+ return "reduce-transitive-edges";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,161 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphKeys;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Perform a transitive reduction of the graph.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ReduceTransitiveEdgesVisitor
+ extends AbstractReduceEdgeVisitor
+ implements DependencyGraphVisitor
+{
+ class EdgeInfo
+ {
+ public DependencyGraphEdge edge;
+
+ public int depth = Integer.MAX_VALUE;
+ }
+
+ class EdgeInfoDepthComparator
+ implements Comparator
+ {
+ public int compare( Object obj0, Object obj1 )
+ {
+ EdgeInfo edgeInfo0 = (EdgeInfo) obj0;
+ EdgeInfo edgeInfo1 = (EdgeInfo) obj1;
+
+ return edgeInfo0.depth - edgeInfo1.depth;
+ }
+ }
+
+ /**
+ * A Map of <(Node To) ArtifactReference, Map of <(Node From) ArtifactReference, EdgeInfo>>
+ */
+ private Map /*<ArtifactReference,<ArtifactReference,EdgeInfo>>*/nodeDistanceMap = new HashMap();
+
+ private int currentDepth;
+
+ public void discoverGraph( DependencyGraph graph )
+ {
+ super.discoverGraph( graph );
+ nodeDistanceMap.clear();
+ currentDepth = 0;
+ }
+
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ /* WARNING: it is unwise to remove the edge at this point.
+ * as modifying the graph as it's being walked is dangerous.
+ *
+ * Just record the edge's current depth.
+ */
+
+ String nodeTo = DependencyGraphKeys.toKey( edge.getNodeTo() );
+ String nodeFrom = DependencyGraphKeys.toKey( edge.getNodeFrom() );
+
+ // Get sub-map
+ Map edgeInfoMap = (Map) nodeDistanceMap.get( nodeTo );
+
+ // Create sub-map if not present (yet)
+ if ( edgeInfoMap == null )
+ {
+ edgeInfoMap = new HashMap();
+ nodeDistanceMap.put( nodeTo, edgeInfoMap );
+ }
+
+ // Get sub-map-value.
+ EdgeInfo edgeInfo = (EdgeInfo) edgeInfoMap.get( nodeFrom );
+
+ if ( edgeInfo == null )
+ {
+ // Create a new edgeinfo.
+ edgeInfo = new EdgeInfo();
+ edgeInfo.edge = edge;
+ edgeInfo.depth = currentDepth;
+ edgeInfoMap.put( nodeFrom, edgeInfo );
+ }
+ // test the current depth, if it is less than previous depth, save it
+ else if ( currentDepth < edgeInfo.depth )
+ {
+ edgeInfo.depth = currentDepth;
+ edgeInfoMap.put( nodeFrom, edgeInfo );
+ }
+
+ nodeDistanceMap.put( nodeTo, edgeInfoMap );
+ }
+
+ public void discoverNode( DependencyGraphNode node )
+ {
+ super.discoverNode( node );
+ currentDepth++;
+
+ }
+
+ public void finishNode( DependencyGraphNode node )
+ {
+ super.finishNode( node );
+ currentDepth--;
+ }
+
+ public void finishGraph( DependencyGraph graph )
+ {
+ super.finishGraph( graph );
+
+ // Now we prune/remove the edges that are transitive in nature.
+
+ Comparator edgeInfoDepthComparator = new EdgeInfoDepthComparator();
+
+ Iterator it = nodeDistanceMap.values().iterator();
+ while ( it.hasNext() )
+ {
+ Map edgeInfoMap = (Map) it.next();
+
+ if ( edgeInfoMap.size() > 1 )
+ {
+ List edgeInfos = new ArrayList();
+ edgeInfos.addAll( edgeInfoMap.values() );
+ Collections.sort( edgeInfos, edgeInfoDepthComparator );
+
+ for ( int i = 1; i < edgeInfos.size(); i++ )
+ {
+ EdgeInfo edgeInfo = (EdgeInfo) edgeInfos.get( i );
+ graph.removeEdge( edgeInfo.edge );
+ }
+ }
+ }
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ReduceTransitiveEdgesVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.map.MultiValueMap;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphKeys;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.PotentialCyclicEdgeProducer;
+import org.apache.maven.archiva.dependency.graph.functors.ToArtifactReferenceTransformer;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * RefineConflictsTask
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="refine-conflicts"
+ * instantiation-strategy="per-lookup"
+ */
+public class RefineConflictsTask
+ implements GraphTask, PotentialCyclicEdgeProducer
+{
+
+ public void executeTask( DependencyGraph graph )
+ {
+ Iterator it;
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+ RefineConflictsVisitor refineConflictsVisitor = new RefineConflictsVisitor();
+
+ MultiValueMap depMap = new MultiValueMap();
+
+ // Identify deps that need to be resolved.
+ it = graph.getNodes().iterator();
+ while ( it.hasNext() )
+ {
+ DependencyGraphNode node = (DependencyGraphNode) it.next();
+ String key = DependencyGraphKeys.toManagementKey( node.getArtifact() );
+ // This will add this node to the specified key, not replace a previous one.
+ depMap.put( key, node );
+ }
+
+ // Process those depMap entries with more than 1 value.
+ ToArtifactReferenceTransformer nodeToArtifact = new ToArtifactReferenceTransformer();
+
+ it = depMap.entrySet().iterator();
+ while ( it.hasNext() )
+ {
+ Map.Entry entry = (Entry) it.next();
+ Collection nodes = (Collection) entry.getValue();
+ if ( nodes.size() > 1 )
+ {
+ List conflictingArtifacts = new ArrayList();
+ conflictingArtifacts.addAll( nodes );
+ CollectionUtils.transform( conflictingArtifacts, nodeToArtifact );
+
+ refineConflictsVisitor.resetConflictingArtifacts();
+ refineConflictsVisitor.addAllConflictingArtifacts( conflictingArtifacts );
+ walker.visit( graph, refineConflictsVisitor );
+ }
+ }
+ }
+
+ public String getTaskId()
+ {
+ return "refine-conflicts";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,303 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.comparators.ReverseComparator;
+import org.apache.commons.collections.functors.NotPredicate;
+import org.apache.commons.collections.list.TypedList;
+import org.apache.maven.archiva.common.utils.VersionComparator;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphKeys;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphUtils;
+import org.apache.maven.archiva.dependency.graph.walk.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * RefineConflictsVisitor
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RefineConflictsVisitor
+ extends BaseVisitor
+ implements DependencyGraphVisitor
+{
+ class DepthComparator
+ implements Comparator
+ {
+ public int compare( Object obj0, Object obj1 )
+ {
+ NodeLocation nodeLoc0 = (NodeLocation) obj0;
+ NodeLocation nodeLoc1 = (NodeLocation) obj1;
+
+ return nodeLoc0.depth - nodeLoc1.depth;
+ }
+ }
+
+ class NodeLocation
+ {
+ public ArtifactReference artifact;
+
+ public DependencyGraphEdge edge;
+
+ public int depth;
+
+ public NodeLocation( ArtifactReference artifact, DependencyGraphEdge edge, int depth )
+ {
+ this.artifact = artifact;
+ this.edge = edge;
+ this.depth = depth;
+ }
+ }
+
+ class NodeLocationPredicate
+ implements Predicate
+ {
+ private ArtifactReference artifact;
+
+ public NodeLocationPredicate( ArtifactReference artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ public NodeLocationPredicate( DependencyGraphNode node )
+ {
+ this( node.getArtifact() );
+ }
+
+ public boolean evaluate( Object object )
+ {
+ boolean satisfies = false;
+
+ if ( object instanceof NodeLocation )
+ {
+ NodeLocation nodeloc = (NodeLocation) object;
+ satisfies = nodeloc.artifact.equals( artifact );
+ }
+
+ return satisfies;
+ }
+
+ }
+
+ class NodeLocationVersionComparator
+ implements Comparator
+ {
+ public int compare( Object o1, Object o2 )
+ {
+ if ( o1 == null && o2 == null )
+ {
+ return 0;
+ }
+
+ if ( o1 == null && o2 != null )
+ {
+ return 1;
+ }
+
+ if ( o1 != null && o2 == null )
+ {
+ return -1;
+ }
+
+ if ( ( o1 instanceof NodeLocation ) && ( o2 instanceof NodeLocation ) )
+ {
+ String version1 = ( (NodeLocation) o1 ).artifact.getVersion();
+ String version2 = ( (NodeLocation) o2 ).artifact.getVersion();
+
+ VersionComparator.getInstance().compare( version1, version2 );
+ }
+
+ return 0;
+ }
+ }
+
+ class DistantNodeLocationPredicate
+ implements Predicate
+ {
+ private int cutoff;
+
+ public DistantNodeLocationPredicate( int distantCutoff )
+ {
+ this.cutoff = distantCutoff;
+ }
+
+ public boolean evaluate( Object object )
+ {
+ boolean satisfies = false;
+
+ if ( object instanceof NodeLocation )
+ {
+ NodeLocation nodeloc = (NodeLocation) object;
+ satisfies = ( nodeloc.depth >= this.cutoff );
+ }
+
+ return satisfies;
+ }
+ }
+
+ private List conflictingArtifacts;
+
+ private Map foundNodesMap = new HashMap();
+
+ private int currentDepth = 0;
+
+ private DependencyGraph currentGraph;
+
+ public RefineConflictsVisitor()
+ {
+ conflictingArtifacts = TypedList.decorate( new ArrayList(), ArtifactReference.class );
+ }
+
+ public void discoverGraph( DependencyGraph graph )
+ {
+ super.discoverGraph( graph );
+ this.currentGraph = graph;
+ this.foundNodesMap.clear();
+ }
+
+ public void discoverNode( DependencyGraphNode node )
+ {
+ super.discoverNode( node );
+
+ currentDepth++;
+
+ List edgesFrom = currentGraph.getEdgesFrom( node );
+ Iterator it = edgesFrom.iterator();
+ while ( it.hasNext() )
+ {
+ DependencyGraphEdge edge = (DependencyGraphEdge) it.next();
+ if ( this.conflictingArtifacts.contains( edge.getNodeTo() ) )
+ {
+ String nodeKey = DependencyGraphKeys.toKey( edge.getNodeTo() );
+ // Check for existing NodeLocation with same key
+ NodeLocation nodeloc = (NodeLocation) this.foundNodesMap.get( nodeKey );
+
+ if ( ( nodeloc == null ) || ( currentDepth < nodeloc.depth ) )
+ {
+ nodeloc = new NodeLocation( edge.getNodeTo(), edge, currentDepth );
+ this.foundNodesMap.put( nodeKey, nodeloc );
+ }
+ }
+ }
+ }
+
+ public void finishGraph( DependencyGraph graph )
+ {
+ super.finishGraph( graph );
+
+ if ( MapUtils.isEmpty( this.foundNodesMap ) )
+ {
+ return;
+ }
+
+ // Find winning node.
+ ArtifactReference winningArtifact = findWinningArtifact( this.foundNodesMap.values() );
+ DependencyGraphNode winningNode = graph.getNode( winningArtifact );
+
+ // Gather up Losing Nodes.
+ Set losingNodes = new HashSet();
+ Predicate losersPredicate = NotPredicate.getInstance( new NodeLocationPredicate( winningArtifact ) );
+ CollectionUtils.select( this.foundNodesMap.values(), losersPredicate, losingNodes );
+
+ // Swing losing nodes to winning node.
+ Iterator it = losingNodes.iterator();
+ while ( it.hasNext() )
+ {
+ NodeLocation losingNodeLoc = (NodeLocation) it.next();
+ DependencyGraphNode losingNode = graph.getNode( losingNodeLoc.artifact );
+ DependencyGraphUtils.collapseNodes( graph, losingNode, winningNode );
+ }
+ }
+
+ private ArtifactReference findWinningArtifact( Collection nodes )
+ {
+ List remainingNodes = new ArrayList();
+ remainingNodes.addAll( nodes );
+
+ /* .\ Filter by Depth \.____________________________________________________ */
+
+ // Sort by depth.
+ Collections.sort( remainingNodes, new DepthComparator() );
+
+ // Determine 'closest' node depth.
+ NodeLocation nearestNode = (NodeLocation) remainingNodes.get( 0 );
+ int nearest = nearestNode.depth;
+
+ // Filter out distant nodes.
+ Predicate distantLocations = new DistantNodeLocationPredicate( nearest );
+ CollectionUtils.filter( remainingNodes, distantLocations );
+
+ // Do we have 1 node left?
+ if ( remainingNodes.size() == 1 )
+ {
+ // A winner!
+ NodeLocation nodeloc = (NodeLocation) remainingNodes.get( 0 );
+ return nodeloc.artifact;
+ }
+
+ /* .\ Filter by Newest Version \.___________________________________________ */
+
+ // We have 2 or more nodes that are equal distance from the root.
+ // Determine which one is 'newest' based on version id.
+ Collections.sort( remainingNodes, new ReverseComparator( new NodeLocationVersionComparator() ) );
+
+ NodeLocation nodeloc = (NodeLocation) remainingNodes.get( 0 );
+ return nodeloc.artifact;
+ }
+
+ public void finishNode( DependencyGraphNode node )
+ {
+ super.finishNode( node );
+ currentDepth--;
+ }
+
+ public List getConflictingArtifacts()
+ {
+ return conflictingArtifacts;
+ }
+
+ public void addAllConflictingArtifacts( Collection nodes )
+ {
+ this.conflictingArtifacts.addAll( nodes );
+ }
+
+ public void resetConflictingArtifacts()
+ {
+ this.conflictingArtifacts.clear();
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/RefineConflictsVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,114 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphBuilder;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.PotentialCyclicEdgeProducer;
+import org.apache.maven.archiva.dependency.graph.functors.UnresolvedGraphNodePredicate;
+import org.apache.maven.archiva.model.VersionedReference;
+
+/**
+ * Loop through the unresolved nodes and resolve them, until there
+ * are no more unresolved nodes.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="resolve-graph"
+ * instantiation-strategy="per-lookup"
+ */
+public class ResolveGraphTask
+ implements GraphTask, PotentialCyclicEdgeProducer
+{
+ private DependencyGraphBuilder builder;
+
+ private int resolvedCount = 0;
+
+ private VersionedReference toVersionedReference( DependencyGraphNode node )
+ {
+ VersionedReference ref = new VersionedReference();
+ ref.setGroupId( node.getArtifact().getGroupId() );
+ ref.setArtifactId( node.getArtifact().getArtifactId() );
+ ref.setVersion( node.getArtifact().getVersion() );
+
+ return ref;
+ }
+
+ public void executeTask( DependencyGraph graph )
+ {
+ resolvedCount = 0;
+ VersionedReference rootRef = toVersionedReference( graph.getRootNode() );
+
+ if ( !graph.getRootNode().isResolved() )
+ {
+ builder.resolveNode( graph, graph.getRootNode(), rootRef );
+ resolvedCount++;
+ }
+
+ boolean done = false;
+
+ while ( !done )
+ {
+ DependencyGraphNode node = findUnresolvedNode( graph );
+ if ( node == null )
+ {
+ done = true;
+ break;
+ }
+
+ VersionedReference otherRef = toVersionedReference( node );
+
+ builder.resolveNode( graph, node, otherRef );
+ resolvedCount++;
+ }
+ }
+
+ private DependencyGraphNode findUnresolvedNode( DependencyGraph graph )
+ {
+ return (DependencyGraphNode) CollectionUtils
+ .find( graph.getNodes(), UnresolvedGraphNodePredicate.getInstance() );
+ }
+
+ public DependencyGraphBuilder getBuilder()
+ {
+ return builder;
+ }
+
+ public void setBuilder( DependencyGraphBuilder graphBuilder )
+ {
+ this.builder = graphBuilder;
+ }
+
+ public String getTaskId()
+ {
+ return "resolve-graph";
+ }
+
+ public int getResolvedCount()
+ {
+ return resolvedCount;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/ResolveGraphTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,35 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.GraphTask;
+import org.apache.maven.archiva.dependency.graph.GraphTaskException;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch;
+
+/**
+ * Update the scopes of the edges to what their parent node says.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component
+ * role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ * role-hint="update-scopes"
+ * instantiation-strategy="per-lookup"
+ */
+public class UpdateScopesTask
+ implements GraphTask
+{
+ public void executeTask( DependencyGraph graph )
+ throws GraphTaskException
+ {
+ DependencyGraphWalker walker = new WalkDepthFirstSearch();
+ UpdateScopesVisitor updateScopes = new UpdateScopesVisitor();
+ walker.visit( graph, updateScopes );
+ }
+
+ public String getTaskId()
+ {
+ return "update-scopes";
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesTask.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,82 @@
+package org.apache.maven.archiva.dependency.graph.tasks;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.functors.EdgeFromPredicate;
+import org.apache.maven.archiva.dependency.graph.walk.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+import org.apache.maven.archiva.model.DependencyScope;
+
+import java.util.Stack;
+
+/**
+ * UpdateScopesVisitor
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UpdateScopesVisitor
+ extends BaseVisitor
+ implements DependencyGraphVisitor
+{
+ private Stack scopeStack;
+
+ private Predicate rootEdgePredicate;
+
+ public UpdateScopesVisitor()
+ {
+ scopeStack = new Stack();
+ // Default setting.
+ scopeStack.add( DependencyScope.COMPILE );
+ }
+
+ public void discoverGraph( DependencyGraph graph )
+ {
+ super.discoverGraph( graph );
+ rootEdgePredicate = new EdgeFromPredicate( graph.getRootNode() );
+ }
+
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ super.discoverEdge( edge );
+
+ String scope = edge.getScope();
+
+ if ( !rootEdgePredicate.evaluate( edge ) )
+ {
+ // Not a root edge. Set the scope.
+ scope = (String) scopeStack.peek();
+ edge.setScope( scope );
+ }
+
+ // Push the scope used onto the stack.
+ scopeStack.push( scope );
+ }
+
+ public void finishEdge( DependencyGraphEdge edge )
+ {
+ super.finishEdge( edge );
+
+ scopeStack.pop();
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/UpdateScopesVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.dependency.graph.walk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+
+/**
+ * The Baseline Visitor.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BaseVisitor
+ implements DependencyGraphVisitor
+{
+ private static DependencyGraphVisitor INSTANCE = new BaseVisitor();
+
+ protected DependencyGraph graph;
+
+ public static DependencyGraphVisitor getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public void discoverEdge( DependencyGraphEdge edge )
+ {
+ /* do nothing */
+ }
+
+ public void discoverGraph( DependencyGraph graph )
+ {
+ this.graph = graph;
+ }
+
+ public void discoverNode( DependencyGraphNode node )
+ {
+ /* do nothing */
+ }
+
+ public void finishEdge( DependencyGraphEdge edge )
+ {
+ /* do nothing */
+ }
+
+ public void finishGraph( DependencyGraph graph )
+ {
+ /* do nothing */
+ }
+
+ public void finishNode( DependencyGraphNode node )
+ {
+ /* do nothing */
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/BaseVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,76 @@
+package org.apache.maven.archiva.dependency.graph.walk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+
+/**
+ * Interface for progress during search.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface DependencyGraphVisitor
+{
+ /**
+ * Called once, for when the graph itself is discovered.
+ *
+ * @param graph the graph that was discovered.
+ */
+ public void discoverGraph( DependencyGraph graph );
+
+ /**
+ * Called for each node, when that node is visited.
+ *
+ * @param node the node that is being visited.
+ */
+ public void discoverNode( DependencyGraphNode node );
+
+ /**
+ * Called for each edge, when that edge is visited.
+ *
+ * @param edge the edge that is being visited.
+ */
+ public void discoverEdge( DependencyGraphEdge edge );
+
+ /**
+ * Called for each edge, when that edge has been fully visited.
+ *
+ * @param edge the edge that was finished being visited.
+ */
+ public void finishEdge( DependencyGraphEdge edge );
+
+ /**
+ * Called for each node, when the node has been fully visited.
+ *
+ * @param node the node that was finished being visited.
+ */
+ public void finishNode( DependencyGraphNode node );
+
+ /**
+ * Called once, for when the graph is finished being visited.
+ *
+ * @param graph the graph that finished being visited.
+ */
+ public void finishGraph( DependencyGraph graph );
+
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphVisitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,89 @@
+package org.apache.maven.archiva.dependency.graph.walk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+/**
+ * Walk nodes of the {@link DependencyGraph}.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface DependencyGraphWalker
+{
+ /**
+ * A {@link #getNodeVisitState(ArtifactReference)} for a node not yet seen in the walker.
+ */
+ public static final Integer UNSEEN = new Integer( 0 );
+
+ /**
+ * A {@link #getNodeVisitState(ArtifactReference)} for a node that is actively being processed,
+ * but not yet finished processing.
+ */
+ public static final Integer PROCESSING = new Integer( 1 );
+
+ /**
+ * A {@link #getNodeVisitState(ArtifactReference)} for a node that has been seen, and fully processed.
+ */
+ public static final Integer SEEN = new Integer( 2 );
+
+ /**
+ * For a provided node, get the current node visit state.
+ *
+ * @param node the node that you are interested in.
+ * @return the state of that node. (Can be {@link #UNSEEN}, {@link #PROCESSING}, or {@link #SEEN} )
+ */
+ public Integer getNodeVisitState( ArtifactReference artifact );
+
+ /**
+ * Get the predicate used to determine if the walker should traverse an edge (or not).
+ *
+ * @return the Predicate that returns true for edges that should be traversed.
+ */
+ public Predicate getEdgePredicate();
+
+ /**
+ * Set the predicate used for edge traversal
+ *
+ * @param edgePredicate the Predicate that returns true for edges that should be traversed.
+ */
+ public void setEdgePredicate( Predicate edgePredicate );
+
+ /**
+ * Visit every node and edge in the graph from the startNode.
+ *
+ * @param graph the graph to visit.
+ * @param startNode the node to start the visit on.
+ * @param visitor the visitor object to use during this visit.
+ */
+ public void visit( DependencyGraph graph, DependencyGraphNode startNode, DependencyGraphVisitor visitor );
+
+ /**
+ * Visit every node and edge in the entire graph.
+ *
+ * @param graph the graph to visit.
+ * @param visitor the visitor object to use during this visit.
+ */
+ public void visit( DependencyGraph graph, DependencyGraphVisitor visitor );
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/DependencyGraphWalker.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,157 @@
+package org.apache.maven.archiva.dependency.graph.walk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.functors.NotPredicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.functors.EdgeDisabledPredicate;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * WalkBreadthFirstSearch
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class WalkBreadthFirstSearch
+ implements DependencyGraphWalker
+{
+ private Map nodeVisitStates = new HashMap();
+
+ private Predicate edgePredicate;
+
+ public WalkBreadthFirstSearch()
+ {
+ this.edgePredicate = NotPredicate.getInstance( new EdgeDisabledPredicate() );
+ }
+
+ public Predicate getEdgePredicate()
+ {
+ return this.edgePredicate;
+ }
+
+ public void setEdgePredicate( Predicate edgePredicate )
+ {
+ this.edgePredicate = edgePredicate;
+ }
+
+ public Integer getNodeVisitState( DependencyGraphNode node )
+ {
+ return (Integer) nodeVisitStates.get( node.getArtifact() );
+ }
+
+ public Integer getNodeVisitState( ArtifactReference artifact )
+ {
+ return (Integer) nodeVisitStates.get( artifact );
+ }
+
+ public void setNodeVisitState( DependencyGraphNode node, Integer state )
+ {
+ this.nodeVisitStates.put( node.getArtifact(), state );
+ }
+
+ public void setNodeVisitState( ArtifactReference artifact, Integer state )
+ {
+ this.nodeVisitStates.put( artifact, state );
+ }
+
+ private void visitEdge( DependencyGraph graph, DependencyGraphEdge e, DependencyGraphVisitor visitor )
+ {
+ visitor.discoverEdge( e );
+
+ DependencyGraphNode node = graph.getNode( e.getNodeTo() );
+
+ if ( getNodeVisitState( node ) == UNSEEN )
+ {
+ setNodeVisitState( node, PROCESSING );
+ }
+
+ visitor.finishEdge( e );
+ }
+
+ private void visitNode( DependencyGraph graph, DependencyGraphNode node, DependencyGraphVisitor visitor )
+ {
+ setNodeVisitState( node, PROCESSING );
+
+ visitor.discoverNode( node );
+
+ Iterator edges;
+ // First dive down edges.
+ edges = graph.getEdgesFrom( node ).iterator();
+ while ( edges.hasNext() )
+ {
+ DependencyGraphEdge e = (DependencyGraphEdge) edges.next();
+ if ( this.edgePredicate.evaluate( e ) )
+ {
+ visitEdge( graph, e, visitor );
+ }
+ }
+
+ // Next move down edges.
+ edges = graph.getEdgesFrom( node ).iterator();
+ while ( edges.hasNext() )
+ {
+ DependencyGraphEdge e = (DependencyGraphEdge) edges.next();
+
+ if ( this.edgePredicate.evaluate( e ) )
+ {
+ DependencyGraphNode nodeTo = graph.getNode( e.getNodeTo() );
+ Integer state = getNodeVisitState( nodeTo );
+ if ( ( state == UNSEEN ) || ( state == PROCESSING ) )
+ {
+ visitNode( graph, nodeTo, visitor );
+ }
+ }
+ }
+
+ visitor.finishNode( node );
+
+ setNodeVisitState( node, SEEN );
+ }
+
+ public void visit( DependencyGraph graph, DependencyGraphVisitor visitor )
+ {
+ visit( graph, graph.getRootNode(), visitor );
+ }
+
+ public void visit( DependencyGraph graph, DependencyGraphNode startNode, DependencyGraphVisitor visitor )
+ {
+ nodeVisitStates.clear();
+
+ Iterator nodes = graph.getNodes().iterator();
+ while ( nodes.hasNext() )
+ {
+ setNodeVisitState( (DependencyGraphNode) nodes.next(), UNSEEN );
+ }
+
+ visitor.discoverGraph( graph );
+
+ visitNode( graph, startNode, visitor );
+
+ visitor.finishGraph( graph );
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkBreadthFirstSearch.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,145 @@
+package org.apache.maven.archiva.dependency.graph.walk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.functors.NotPredicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.functors.EdgeDisabledPredicate;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Perform a walk of the graph using the DepthFirstSearch algorithm.
+ *
+ * NOTE: Default edgePredicate is to NOT traverse disabled edges.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class WalkDepthFirstSearch
+ implements DependencyGraphWalker
+{
+ private Map nodeVisitStates = new HashMap();
+
+ private Predicate edgePredicate;
+
+ public WalkDepthFirstSearch()
+ {
+ this.edgePredicate = NotPredicate.getInstance( new EdgeDisabledPredicate() );
+ }
+
+ public Predicate getEdgePredicate()
+ {
+ return this.edgePredicate;
+ }
+
+ public void setEdgePredicate( Predicate edgePredicate )
+ {
+ this.edgePredicate = edgePredicate;
+ }
+
+ public Integer getNodeVisitState( DependencyGraphNode node )
+ {
+ if ( node == null )
+ {
+ return SEEN;
+ }
+
+ return (Integer) nodeVisitStates.get( node.getArtifact() );
+ }
+
+ public Integer getNodeVisitState( ArtifactReference artifact )
+ {
+ return (Integer) nodeVisitStates.get( artifact );
+ }
+
+ public void setNodeVisitState( DependencyGraphNode node, Integer state )
+ {
+ this.nodeVisitStates.put( node.getArtifact(), state );
+ }
+
+ public void setNodeVisitState( ArtifactReference artifact, Integer state )
+ {
+ this.nodeVisitStates.put( artifact, state );
+ }
+
+ private void visitEdge( DependencyGraph graph, DependencyGraphEdge e, DependencyGraphVisitor visitor )
+ {
+ visitor.discoverEdge( e );
+
+ DependencyGraphNode node = graph.getNode( e.getNodeTo() );
+
+ if ( getNodeVisitState( node ) == UNSEEN )
+ {
+ visitNode( graph, node, visitor );
+ }
+
+ visitor.finishEdge( e );
+ }
+
+ private void visitNode( DependencyGraph graph, DependencyGraphNode node, DependencyGraphVisitor visitor )
+ {
+ setNodeVisitState( node, PROCESSING );
+
+ visitor.discoverNode( node );
+
+ Iterator edges = graph.getEdgesFrom( node ).iterator();
+ while ( edges.hasNext() )
+ {
+ DependencyGraphEdge e = (DependencyGraphEdge) edges.next();
+ if ( this.edgePredicate.evaluate( e ) )
+ {
+ visitEdge( graph, e, visitor );
+ }
+ }
+
+ visitor.finishNode( node );
+
+ setNodeVisitState( node, SEEN );
+ }
+
+ public void visit( DependencyGraph graph, DependencyGraphVisitor visitor )
+ {
+ visit( graph, graph.getRootNode(), visitor );
+ }
+
+ public void visit( DependencyGraph graph, DependencyGraphNode startNode, DependencyGraphVisitor visitor )
+ {
+ nodeVisitStates.clear();
+
+ Iterator nodes = graph.getNodes().iterator();
+ while ( nodes.hasNext() )
+ {
+ setNodeVisitState( (DependencyGraphNode) nodes.next(), UNSEEN );
+ }
+
+ visitor.discoverGraph( graph );
+
+ visitNode( graph, startNode, visitor );
+
+ visitor.finishGraph( graph );
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/walk/WalkDepthFirstSearch.java
------------------------------------------------------------------------------
svn:mime-type = text/plain