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 [2/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/GraphTaskException.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/GraphTaskException.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/GraphTaskException.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/GraphTaskException.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.dependency.graph;
+
+/*
+ * 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.common.ArchivaException;
+
+/**
+ * GraphTaskException 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class GraphTaskException
+    extends ArchivaException
+{
+    public GraphTaskException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public GraphTaskException( String message )
+    {
+        super( message );
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/GraphTaskException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/GraphTaskException.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/GraphTaskException.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,31 @@
+package org.apache.maven.archiva.dependency.graph;
+
+/*
+ * 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.
+ */
+
+/**
+ * A tag for a {@link GraphTask} that has the potential to produce a cyclic edge.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface PotentialCyclicEdgeProducer
+{
+    /* no interface, just a tag */
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/PotentialCyclicEdgeProducer.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/PotentialCyclicEdgeProducer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,55 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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;
+
+/**
+ * EdgeCyclicPredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeCyclicPredicate
+    implements Predicate
+{
+    private static Predicate INSTANCE = new EdgeCyclicPredicate();
+
+    public static Predicate getInstance()
+    {
+        return INSTANCE;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = ( edge.isDisabled() && ( edge.getDisabledType() == DependencyGraph.DISABLED_CYCLIC ) );
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeCyclicPredicate.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/functors/EdgeCyclicPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,48 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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;
+
+/**
+ * EdgeDisabledPredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeDisabledPredicate
+    implements Predicate
+{
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = edge.isDisabled();
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeDisabledPredicate.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/functors/EdgeDisabledPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,71 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.lang.StringUtils;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.model.DependencyScope;
+
+/**
+ * EdgeExactScopePredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeExactScopePredicate
+    implements Predicate
+{
+    private String scope;
+
+    public EdgeExactScopePredicate( String scope )
+    {
+        this.scope = scope;
+    }
+
+    public EdgeExactScopePredicate()
+    {
+        // The universal default for scope.
+        this.scope = DependencyScope.COMPILE;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = StringUtils.equals( edge.getScope(), scope );
+        }
+
+        return satisfies;
+    }
+
+    public String getScope()
+    {
+        return scope;
+    }
+
+    public void setScope( String scope )
+    {
+        this.scope = scope;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExactScopePredicate.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/functors/EdgeExactScopePredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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;
+
+/**
+ * EdgeExcludedPredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeExcludedPredicate
+    implements Predicate
+{
+    private static Predicate INSTANCE = new EdgeExcludedPredicate();
+
+    public static Predicate getInstance()
+    {
+        return INSTANCE;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = ( edge.isDisabled() && ( edge.getDisabledType() == DependencyGraph.DISABLED_EXCLUDED ) );
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeExcludedPredicate.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/functors/EdgeExcludedPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,62 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.DependencyGraphNode;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+/**
+ * Predicate returns true on any DependencyGraphEdge which has a
+ * specific FROM node.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeFromPredicate
+    implements Predicate
+{
+    private ArtifactReference nodeRef;
+
+    public EdgeFromPredicate( ArtifactReference ref )
+    {
+        this.nodeRef = ref;
+    }
+
+    public EdgeFromPredicate( DependencyGraphNode node )
+    {
+        this( node.getArtifact() );
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = edge.getNodeFrom().equals( nodeRef );
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeFromPredicate.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/functors/EdgeFromPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,49 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.Closure;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+
+/**
+ * Closure to set the edge scope.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeScopeClosure
+    implements Closure
+{
+    private String scope;
+
+    public EdgeScopeClosure( String scope )
+    {
+        this.scope = scope;
+    }
+
+    public void execute( Object input )
+    {
+        if ( input instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) input;
+            edge.setScope( scope );
+        }
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeScopeClosure.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/functors/EdgeScopeClosure.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,55 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.model.ArtifactReference;
+
+/**
+ * EdgeToPredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeToPredicate
+    implements Predicate
+{
+    private ArtifactReference nodeRef;
+
+    public EdgeToPredicate( ArtifactReference ref )
+    {
+        this.nodeRef = ref;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = edge.getNodeTo().equals( nodeRef );
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeToPredicate.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/functors/EdgeToPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.model.DependencyScope;
+
+/**
+ * EdgeWithinScopePredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class EdgeWithinScopePredicate
+    implements Predicate
+{
+    private String scope;
+
+    public EdgeWithinScopePredicate( String scope )
+    {
+        this.scope = scope;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = DependencyScope.isWithinScope( edge.getScope(), scope );
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/EdgeWithinScopePredicate.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/functors/EdgeWithinScopePredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,46 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.DependencyGraphNode;
+
+/**
+ * Predicate for nodes that are flagged as from parent pom reference. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class NodeFromParentPredicate
+    implements Predicate
+{
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+        if ( object instanceof DependencyGraphNode )
+        {
+            DependencyGraphNode node = (DependencyGraphNode) object;
+            satisfies = node.isFromParent();
+        }
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeFromParentPredicate.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/functors/NodeFromParentPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.model.ArtifactReference;
+
+/**
+ * NodeInEdgePredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class NodeInEdgePredicate
+    implements Predicate
+{
+    private ArtifactReference nodeRef;
+
+    public NodeInEdgePredicate( ArtifactReference ref )
+    {
+        this.nodeRef = ref;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphEdge )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) object;
+            satisfies = ( edge.getNodeFrom().equals( nodeRef ) || edge.getNodeTo().equals( nodeRef ) );
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodeInEdgePredicate.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/functors/NodeInEdgePredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,59 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.DependencyGraphNode;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+/**
+ * NodePredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class NodePredicate
+    implements Predicate
+{
+    private ArtifactReference ref;
+
+    public NodePredicate( ArtifactReference ref )
+    {
+        this.ref = ref;
+    }
+
+    public NodePredicate( DependencyGraphNode node )
+    {
+        this( node.getArtifact() );
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphNode )
+        {
+            DependencyGraphNode node = (DependencyGraphNode) object;
+            satisfies = ref.equals( node.getArtifact() );
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/NodePredicate.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/functors/NodePredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,56 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.Predicate;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+
+/**
+ * OrphanedNodePredicate 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class OrphanedNodePredicate
+    implements Predicate
+{
+    private DependencyGraph graph;
+
+    public OrphanedNodePredicate( DependencyGraph graph )
+    {
+        this.graph = graph;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphNode )
+        {
+            DependencyGraphNode node = (DependencyGraphNode) object;
+            satisfies = CollectionUtils.isEmpty( graph.getEdgesTo( node ) );
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/OrphanedNodePredicate.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/functors/OrphanedNodePredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,43 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.Transformer;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+
+/**
+ * Transform some common dependency graph objects into their
+ * ArtifactReference form.
+ */
+public class ToArtifactReferenceTransformer
+    implements Transformer
+{
+    public Object transform( Object input )
+    {
+        if ( input instanceof DependencyGraphNode )
+        {
+            return ( (DependencyGraphNode) input ).getArtifact();
+        }
+
+        // TODO: Add more objects to transform here.
+
+        return input;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/ToArtifactReferenceTransformer.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/functors/ToArtifactReferenceTransformer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.dependency.graph.functors;
+
+/*
+ * 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.DependencyGraphNode;
+
+/**
+ * Predicate for unresolved {@link DependencyGraphNode} objects. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UnresolvedGraphNodePredicate
+    implements Predicate
+{
+    private static UnresolvedGraphNodePredicate INSTANCE = new UnresolvedGraphNodePredicate();
+
+    public static Predicate getInstance()
+    {
+        return INSTANCE;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof DependencyGraphNode )
+        {
+            DependencyGraphNode node = (DependencyGraphNode) object;
+            satisfies = !( node.isResolved() );
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/functors/UnresolvedGraphNodePredicate.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/functors/UnresolvedGraphNodePredicate.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/AbstractReduceEdgeVisitor.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/AbstractReduceEdgeVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/AbstractReduceEdgeVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/AbstractReduceEdgeVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,43 @@
+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.DependencyGraphUtils;
+import org.apache.maven.archiva.dependency.graph.walk.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+
+/**
+ * AbstractReduceEdgeVisitor 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractReduceEdgeVisitor
+    extends BaseVisitor
+    implements DependencyGraphVisitor
+{
+    public void finishGraph( DependencyGraph graph )
+    {
+        super.finishGraph( graph );
+        
+        DependencyGraphUtils.cleanupOrphanedNodes( graph );
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/AbstractReduceEdgeVisitor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/AbstractReduceEdgeVisitor.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/AbstractReduceEdgeVisitor.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/DependencyManagementApplier.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/DependencyManagementApplier.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementApplier.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementApplier.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,218 @@
+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.lang.StringUtils;
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphBuilder;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphEdge;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphUtils;
+import org.apache.maven.archiva.dependency.graph.tasks.DependencyManagementStack.Rules;
+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 org.apache.maven.archiva.model.VersionedReference;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Takes a stack of DependencyManagement objects and applies them to the node in question.
+ * This merely sets the version / scope / and exclusions on the nodes, as defined by DependencyManagement.
+ * 
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DependencyManagementApplier
+    extends BaseVisitor
+    implements DependencyGraphVisitor
+{
+    private DependencyManagementStack depStack = new DependencyManagementStack();
+
+    private DependencyGraphBuilder builder;
+
+    /**
+     * Map of changes to node versions (that will likely cause a reorganization of
+     * the graph), this is tracked until the walk is complete, at which point the
+     * changes are applied to the graph.
+     * 
+     * Performing graph changes of this scope during a walk of graph is hazardous,
+     * as you will be moving nodes around, mergeing nodes, dropping edges, etc.
+     */
+    private Map nodeVersionChanges = new HashMap();
+
+    private int nodesAdded = 0;
+
+    public void discoverGraph( DependencyGraph graph )
+    {
+        super.discoverGraph( graph );
+        nodeVersionChanges.clear();
+        depStack.reset();
+        nodesAdded = 0;
+    }
+
+    public void discoverNode( DependencyGraphNode node )
+    {
+        super.discoverNode( node );
+
+        depStack.push( node );
+
+        List edgesFrom = graph.getEdgesFrom( node );
+        Iterator it = edgesFrom.iterator();
+        while ( it.hasNext() )
+        {
+            DependencyGraphEdge edge = (DependencyGraphEdge) it.next();
+            Rules rules = depStack.getRules( edge );
+
+            if ( rules == null )
+            {
+                // No rules for edge, skip it.
+                continue;
+            }
+
+            DependencyGraphNode subnode = graph.getNode( edge.getNodeTo() );
+
+            /* There are 3 steps to processing the DependencyManagement. */
+
+            /* 1) Add exclusions to node ________________________________________________ */
+            node.getExcludes().addAll( rules.exclusions );
+
+            /* 2) Track version changes to node _________________________________________ */
+
+            // This is the version as specified by the rules.
+            String specifiedVersion = rules.artifact.getVersion();
+
+            // This is the version as being tracked by the nodeVersionChanges map.
+            String trackedVersion = (String) nodeVersionChanges.get( edge.getNodeTo() );
+
+            // This is the version of the subnode. 
+            String nodeVersion = subnode.getArtifact().getVersion();
+
+            // This is the actual version as determined by tracked and subnode
+            String actualVersion = StringUtils.defaultString( trackedVersion, nodeVersion );
+
+            // If the specified version changes the actual version ...
+            if ( !StringUtils.equals( specifiedVersion, actualVersion ) )
+            {
+                // ... save this new value to be track ( for processing in #finishedGraph )
+                nodeVersionChanges.put( edge.getNodeTo(), specifiedVersion );
+            }
+
+            /* 3) Update scope to edge __________________________________________________ */
+
+            if ( StringUtils.isNotBlank( rules.scope ) )
+            {
+                edge.setScope( rules.scope );
+            }
+        }
+    }
+
+    public void finishNode( DependencyGraphNode node )
+    {
+        super.finishNode( node );
+
+        depStack.pop();
+    }
+
+    public void finishGraph( DependencyGraph graph )
+    {
+        super.finishGraph( graph );
+
+        Iterator it = this.nodeVersionChanges.keySet().iterator();
+        while ( it.hasNext() )
+        {
+            ArtifactReference ref = (ArtifactReference) it.next();
+            String toVersion = (String) this.nodeVersionChanges.get( ref );
+
+            collapseVersions( graph, ref, ref.getVersion(), toVersion );
+        }
+    }
+
+    /**
+     * Collapses Versions of nodes.
+     * 
+     * Takes two nodes, with differing versions.
+     * 
+     * 1) Removes the FROM edges connected to the FROM node
+     * 2) Moves the TO edges connected to the FROM node to the TO node.
+     * 3) Removes the FROM node (which is now orphaned)  
+     *  
+     * @param graph the graph to perform operation on
+     * @param fromRef the artifact reference of the FROM node.
+     * @param fromVersion the version of the FROM node
+     * @param toVersion the version of the TO node
+     */
+    private void collapseVersions( DependencyGraph graph, ArtifactReference fromRef, String fromVersion,
+                                   String toVersion )
+    {
+        if ( StringUtils.equals( fromVersion, toVersion ) )
+        {
+            // No point in doing anything.  nothing has changed.
+            return;
+        }
+
+        ArtifactReference toRef = new ArtifactReference();
+        toRef.setGroupId( fromRef.getGroupId() );
+        toRef.setArtifactId( fromRef.getArtifactId() );
+        toRef.setVersion( toVersion );
+        toRef.setClassifier( fromRef.getClassifier() );
+        toRef.setType( fromRef.getType() );
+
+        DependencyGraphNode nodeFROM = graph.getNode( fromRef );
+        DependencyGraphNode nodeTO = graph.getNode( toRef );
+
+        if ( nodeTO == null )
+        {
+            // new node doesn't exist in graph (yet)
+            nodeTO = new DependencyGraphNode( toRef );
+            nodeTO.setResolved( false );
+
+            graph.addNode( nodeTO );
+
+            VersionedReference projectRef = new VersionedReference();
+            projectRef.setGroupId( toRef.getGroupId() );
+            projectRef.setArtifactId( toRef.getArtifactId() );
+            projectRef.setVersion( toRef.getVersion() );
+
+            builder.resolveNode( graph, nodeTO, projectRef );
+            nodesAdded++;
+        }
+
+        DependencyGraphUtils.collapseNodes( graph, nodeFROM, nodeTO );
+    }
+
+    public DependencyGraphBuilder getBuilder()
+    {
+        return builder;
+    }
+
+    public void setBuilder( DependencyGraphBuilder builder )
+    {
+        this.builder = builder;
+    }
+
+    public boolean hasCreatedNodes()
+    {
+        return ( nodesAdded > 0 );
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementApplier.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementApplier.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/DependencyManagementApplier.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/DependencyManagementStack.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/DependencyManagementStack.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementStack.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementStack.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,152 @@
+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.iterators.ReverseListIterator;
+import org.apache.commons.lang.StringUtils;
+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.model.ArtifactReference;
+import org.apache.maven.archiva.model.Dependency;
+import org.apache.maven.archiva.model.Exclusion;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+/**
+ * DependencyManagementStack 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DependencyManagementStack
+{
+    public class Rules
+    {
+        public ArtifactReference artifact;
+
+        public String scope;
+
+        public Set exclusions = new HashSet();
+
+        public void addAllExclusions( List depExclusions )
+        {
+            Iterator it = depExclusions.iterator();
+            while ( it.hasNext() )
+            {
+                Exclusion ref = (Exclusion) it.next();
+                String key = DependencyGraphKeys.toManagementKey( ref );
+                exclusions.add( key );
+            }
+        }
+    }
+
+    private Stack depmanStack = new Stack();
+
+    private Map depMap = new HashMap();
+
+    private void generateDepMap()
+    {
+        depMap.clear();
+
+        // Using a reverse iterator to ensure that we read the
+        // stack from last in to first in
+        ReverseListIterator it = new ReverseListIterator( depmanStack );
+        while ( it.hasNext() )
+        {
+            DependencyGraphNode node = (DependencyGraphNode) it.next();
+
+            addDependencies( node.getDependencyManagement() );
+        }
+    }
+
+    private void addDependencies( List dependencies )
+    {
+        Iterator it = dependencies.iterator();
+        while ( it.hasNext() )
+        {
+            Dependency dep = (Dependency) it.next();
+            String key = DependencyGraphKeys.toManagementKey( dep );
+
+            Rules merged = (Rules) depMap.get( key );
+            if ( merged == null )
+            {
+                // New map entry.
+                merged = new Rules();
+                merged.artifact = new ArtifactReference();
+                merged.artifact.setGroupId( dep.getGroupId() );
+                merged.artifact.setArtifactId( dep.getArtifactId() );
+                merged.artifact.setClassifier( dep.getClassifier() );
+                merged.artifact.setType( dep.getType() );
+            }
+
+            merged.artifact.setVersion( dep.getVersion() );
+            if ( StringUtils.isNotBlank( dep.getScope() ) )
+            {
+                merged.scope = dep.getScope();
+            }
+
+            merged.addAllExclusions( dep.getExclusions() );
+
+            depMap.put( key, merged );
+        }
+    }
+
+    public Rules getRules( DependencyGraphEdge edge )
+    {
+        return getRules( edge.getNodeTo() );
+    }
+
+    public Rules getRules( DependencyGraphNode node )
+    {
+        return getRules( node.getArtifact() );
+    }
+
+    public Rules getRules( ArtifactReference ref )
+    {
+        String key = DependencyGraphKeys.toManagementKey( ref );
+        return (Rules) depMap.get( key );
+    }
+
+    public void push( DependencyGraphNode node )
+    {
+        depmanStack.push( node );
+        generateDepMap();
+    }
+
+    public DependencyGraphNode pop()
+    {
+        DependencyGraphNode node = (DependencyGraphNode) depmanStack.pop();
+        generateDepMap();
+        return node;
+    }
+
+    public void reset()
+    {
+        depmanStack.clear();
+        depMap.clear();
+    }
+}
\ No newline at end of file

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementStack.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/DependencyManagementStack.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/DependencyManagementStack.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/FlagCyclicEdgesTask.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/FlagCyclicEdgesTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,34 @@
+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;
+
+/**
+ * FlagCyclicEdgesTask 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component 
+ *      role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ *      role-hint="flag-cyclic-edges"
+ *      instantiation-strategy="per-lookup"
+ */
+public class FlagCyclicEdgesTask
+    implements GraphTask
+{
+
+    public void executeTask( DependencyGraph graph )
+    {
+        DependencyGraphWalker walker = new WalkDepthFirstSearch();
+        FlagExcludedEdgesVisitor excludedEdgeResolver = new FlagExcludedEdgesVisitor();
+        walker.visit( graph, excludedEdgeResolver );
+    }
+
+    public String getTaskId()
+    {
+        return "flag-cyclic-edges";
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesTask.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesTask.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/FlagCyclicEdgesTask.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/FlagCyclicEdgesVisitor.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/FlagCyclicEdgesVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,70 @@
+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.walk.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphWalker;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * FlagCyclicEdgesVisitor 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FlagCyclicEdgesVisitor
+    extends BaseVisitor
+    implements DependencyGraphVisitor
+{
+    private DependencyGraphWalker walker;
+
+    private Set cyclicEdges = new HashSet();
+
+    public FlagCyclicEdgesVisitor( DependencyGraphWalker walker )
+    {
+        this.walker = walker;
+    }
+
+    public void discoverEdge( DependencyGraphEdge edge )
+    {
+        ArtifactReference artifact = edge.getNodeTo();
+
+        // Process for cyclic edges.
+        if ( walker.getNodeVisitState( artifact ) == DependencyGraphWalker.PROCESSING )
+        {
+            edge.setDisabled( true );
+            edge.setDisabledType( DependencyGraph.DISABLED_CYCLIC );
+            edge.setDisabledReason( "Cycle detected" );
+            // TODO: insert into reason the path for the cycle that was detected.
+            cyclicEdges.add( edge );
+        }
+    }
+
+    public Set getCyclicEdges()
+    {
+        return cyclicEdges;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesVisitor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagCyclicEdgesVisitor.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/FlagCyclicEdgesVisitor.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/FlagExcludedEdgesTask.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/FlagExcludedEdgesTask.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesTask.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesTask.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,52 @@
+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.WalkDepthFirstSearch;
+
+/**
+ * FlagExcludedEdgesTask 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component 
+ *      role="org.apache.maven.archiva.dependency.graph.GraphTask"
+ *      role-hint="flag-excluded-edges"
+ *      instantiation-strategy="per-lookup"
+ */
+public class FlagExcludedEdgesTask
+    implements GraphTask
+{
+    public void executeTask( DependencyGraph graph )
+    {
+        DependencyGraphWalker walker = new WalkDepthFirstSearch();
+        FlagExcludedEdgesVisitor excludedEdgeResolver = new FlagExcludedEdgesVisitor();
+        walker.visit( graph, excludedEdgeResolver );
+    }
+
+    public String getTaskId()
+    {
+        return "flag-excluded-edges";
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesTask.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesTask.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/FlagExcludedEdgesTask.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/FlagExcludedEdgesVisitor.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/FlagExcludedEdgesVisitor.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesVisitor.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesVisitor.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,86 @@
+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.BaseVisitor;
+import org.apache.maven.archiva.dependency.graph.walk.DependencyGraphVisitor;
+import org.apache.maven.archiva.model.ArtifactReference;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+/**
+ * FlagExcludedEdgesVisitor 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FlagExcludedEdgesVisitor
+    extends BaseVisitor
+    implements DependencyGraphVisitor
+{
+    private Stack nodePath = new Stack();
+
+    public void discoverEdge( DependencyGraphEdge edge )
+    {
+        ArtifactReference artifact = edge.getNodeTo(); 
+        
+        // Process for excluded edges.
+        String toKey = DependencyGraphKeys.toManagementKey( artifact );
+        Iterator it = this.nodePath.iterator();
+        while ( it.hasNext() )
+        {
+            DependencyGraphNode pathNode = (DependencyGraphNode) it.next();
+        
+            // Process dependency declared exclusions.
+            if ( pathNode.getExcludes().contains( toKey ) )
+            {
+                edge.setDisabled( true );
+                edge.setDisabledType( DependencyGraph.DISABLED_EXCLUDED );
+                String whoExcluded = DependencyGraphKeys.toKey( pathNode );
+                edge.setDisabledReason( "Specifically Excluded by " + whoExcluded );
+                break;
+            }
+        }
+    }
+
+    public void discoverNode( DependencyGraphNode node )
+    {
+        super.discoverNode( node );
+        nodePath.push( node );
+    }
+
+    public void finishNode( DependencyGraphNode node )
+    {
+        super.finishNode( node );
+        DependencyGraphNode pathNode = (DependencyGraphNode) nodePath.pop();
+        if ( !node.equals( pathNode ) )
+        {
+            String pathNodeKey = ArtifactReference.toKey( pathNode.getArtifact() );
+            String finishNodeKey = ArtifactReference.toKey( node.getArtifact() );
+            throw new IllegalStateException( "Encountered bad visitor state.  Expected finish on node " + pathNodeKey
+                + ", but instead got notified of node " + finishNodeKey );
+        }
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesVisitor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-dependency-graph/src/main/java/org/apache/maven/archiva/dependency/graph/tasks/FlagExcludedEdgesVisitor.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/FlagExcludedEdgesVisitor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain