You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2007/02/06 01:45:58 UTC
svn commit: r503940 - in /maven/shared/trunk/maven-dependency-tree: ./
src/main/java/org/apache/maven/shared/dependency/tree/
src/test/java/org/apache/maven/shared/dependency/tree/
Author: carlos
Date: Mon Feb 5 16:45:58 2007
New Revision: 503940
URL: http://svn.apache.org/viewvc?view=rev&rev=503940
Log:
Add toString and iterator methods to traverse the dependency tree
Added:
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java (with props)
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java (with props)
maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java (with props)
Modified:
maven/shared/trunk/maven-dependency-tree/pom.xml
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTree.java
Modified: maven/shared/trunk/maven-dependency-tree/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/pom.xml?view=diff&rev=503940&r1=503939&r2=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/pom.xml (original)
+++ maven/shared/trunk/maven-dependency-tree/pom.xml Mon Feb 5 16:45:58 2007
@@ -71,5 +71,11 @@
<artifactId>maven-project</artifactId>
<version>2.0.4</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <version>1.0-beta-1</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java?view=diff&rev=503940&r1=503939&r2=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java (original)
+++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java Mon Feb 5 16:45:58 2007
@@ -20,6 +20,7 @@
*/
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.apache.maven.artifact.Artifact;
@@ -71,5 +72,34 @@
public List getChildren()
{
return children;
+ }
+
+ public String toString()
+ {
+ return toString( 0 );
+ }
+
+ public String toString( int indentDepth )
+ {
+ StringBuffer sb = new StringBuffer();
+
+ for ( int i = 0; i < indentDepth; i++ )
+ {
+ sb.append( " " );
+ }
+
+ sb.append( artifact == null ? null : artifact.toString() );
+ sb.append( "\n" );
+
+ if ( getChildren() != null )
+ {
+ for ( Iterator it = getChildren().iterator(); it.hasNext(); )
+ {
+ DependencyNode dependencyNode = (DependencyNode) it.next();
+ sb.append( dependencyNode.toString( indentDepth + 2 ) );
+ }
+ }
+
+ return sb.toString();
}
}
Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTree.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTree.java?view=diff&rev=503940&r1=503939&r2=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTree.java (original)
+++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTree.java Mon Feb 5 16:45:58 2007
@@ -71,4 +71,33 @@
return artifacts;
}
+
+ public String toString()
+ {
+ return getRootNode().toString();
+ }
+
+ /**
+ * @see #preorderIterator()
+ */
+ public Iterator iterator()
+ {
+ return preorderIterator();
+ }
+
+ /**
+ * @see DependencyTreePreorderIterator
+ */
+ public Iterator preorderIterator()
+ {
+ return new DependencyTreePreorderIterator( getRootNode() );
+ }
+
+ /**
+ * @see DependencyTreeInverseIterator
+ */
+ public Iterator inverseIterator()
+ {
+ return new DependencyTreeInverseIterator( getRootNode() );
+ }
}
Added: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java?view=auto&rev=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java (added)
+++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java Mon Feb 5 16:45:58 2007
@@ -0,0 +1,70 @@
+package org.apache.maven.shared.dependency.tree;
+
+/*
+ * 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 java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Stack;
+
+/**
+ * {@link Iterator} for {@link DependencyTree} implementing a traversal from leaves to root.
+ *
+ * TODO {@link #DependencyTreeInverseIterator(DependencyNode)} is costly,
+ * a better implementation would move the cost to {@link #next()}
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class DependencyTreeInverseIterator
+ implements Iterator
+{
+ private Stack nodesToProcess = new Stack();
+
+ public DependencyTreeInverseIterator( DependencyNode rootNode )
+ {
+ DependencyTreePreorderIterator it = new DependencyTreePreorderIterator( rootNode );
+ while ( it.hasNext() )
+ {
+ nodesToProcess.push( it.next() );
+ }
+ }
+
+ public boolean hasNext()
+ {
+ return !nodesToProcess.isEmpty();
+ }
+
+ public Object next()
+ {
+ if ( !hasNext() )
+ {
+ throw new NoSuchElementException();
+ }
+ return nodesToProcess.pop();
+ }
+
+ /**
+ * @throws UnsupportedOperationException
+ */
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+}
Propchange: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeInverseIterator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java?view=auto&rev=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java (added)
+++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java Mon Feb 5 16:45:58 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.shared.dependency.tree;
+
+/*
+ * 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 java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Stack;
+
+/**
+ * {@link Iterator} for {@link DependencyTree} implementing a preoder traversal.
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class DependencyTreePreorderIterator
+ implements Iterator
+{
+ private Stack nodesToProcess = new Stack();
+
+ public DependencyTreePreorderIterator( DependencyNode rootNode )
+ {
+ nodesToProcess.push( rootNode );
+ }
+
+ public boolean hasNext()
+ {
+ return !nodesToProcess.isEmpty();
+ }
+
+ public Object next()
+ {
+ if ( !hasNext() )
+ {
+ throw new NoSuchElementException();
+ }
+ DependencyNode currentNode = (DependencyNode) nodesToProcess.pop();
+ List children = currentNode.getChildren();
+ if ( children != null )
+ {
+ for ( int i = children.size() - 1; i >= 0; i-- )
+ {
+ nodesToProcess.push( children.get( i ) );
+ }
+ }
+ return currentNode;
+ }
+
+ /**
+ * @throws UnsupportedOperationException
+ */
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+}
Propchange: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreePreorderIterator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java?view=auto&rev=503940
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java (added)
+++ maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java Mon Feb 5 16:45:58 2007
@@ -0,0 +1,169 @@
+package org.apache.maven.shared.dependency.tree;
+
+/*
+ * 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 java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.testing.stubs.ArtifactStub;
+
+/**
+ * Tests for {@link DependencyTree} and {@link DependencyNode}
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class DependencyTreeTest
+ extends TestCase
+{
+ private DependencyTree tree;
+ private DependencyNode node1, node2, node3, node4, node5, node6, node7;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ /*
+ * ------1------
+ * ----2---- 3
+ * 4 5 7
+ * 6
+ */
+
+ node1 = getDependencyNode( 1 );
+ node2 = getDependencyNode( 2 );
+ node3 = getDependencyNode( 3 );
+ node4 = getDependencyNode( 4 );
+ node5 = getDependencyNode( 5 );
+ node6 = getDependencyNode( 6 );
+ node7 = getDependencyNode( 7 );
+
+ node3.children.add( node7 );
+
+ node5.children.add( node6 );
+
+ node1.children.add( node2 );
+ node1.children.add( node3 );
+
+ node2.children.add( node4 );
+ node2.children.add( node5 );
+
+ tree = new DependencyTree( node1, Arrays.asList( new DependencyNode[] {
+ node1,
+ node2,
+ node3,
+ node4,
+ node5,
+ node6,
+ node7 } ) );
+ }
+
+ private void assertNode( Iterator it, DependencyNode node )
+ {
+ assertTrue( it.hasNext() );
+ assertSame( node, it.next() );
+ }
+
+ public void testPreorderIterator()
+ {
+ Iterator it = tree.iterator();
+
+ assertNode( it, node1 );
+ assertNode( it, node2 );
+ assertNode( it, node4 );
+ assertNode( it, node5 );
+ assertNode( it, node6 );
+ assertNode( it, node3 );
+ assertNode( it, node7 );
+ assertFalse( it.hasNext() );
+ }
+
+ public void testInverseIterator()
+ {
+ Iterator it = tree.inverseIterator();
+
+ assertNode( it, node7 );
+ assertNode( it, node3 );
+ assertNode( it, node6 );
+ assertNode( it, node5 );
+ assertNode( it, node4 );
+ assertNode( it, node2 );
+ assertNode( it, node1 );
+ assertFalse( it.hasNext() );
+ }
+
+ public void testToString()
+ throws Exception
+ {
+ System.out.println( node1 );
+
+ BufferedReader reader = new BufferedReader( new StringReader( node1.toString() ) );
+
+ assertLine( reader, 1, 0 );
+ assertLine( reader, 2, 1 );
+ assertLine( reader, 4, 2 );
+ assertLine( reader, 5, 2 );
+ assertLine( reader, 6, 3 );
+ assertLine( reader, 3, 1 );
+ assertLine( reader, 7, 2 );
+ }
+
+ private void assertLine( BufferedReader reader, int i, int depth )
+ throws IOException
+ {
+ String line = reader.readLine();
+ StringBuffer sb = new StringBuffer();
+ for ( int j = 0; j < depth; j++ )
+ {
+ sb.append( " " );
+ }
+ sb.append( "groupId" );
+ sb.append( i );
+ sb.append( ":artifactId" );
+ sb.append( i );
+ sb.append( ":jar:" );
+ sb.append( i );
+ assertEquals( sb.toString(), line );
+ }
+
+ private DependencyNode getDependencyNode( int i )
+ {
+ DependencyNode node = new DependencyNode();
+ node.artifact = getArtifact( i );
+ return node;
+ }
+
+ private Artifact getArtifact( int i )
+ {
+ ArtifactStub artifact = new ArtifactStub();
+ artifact.setGroupId( "groupId" + i );
+ artifact.setArtifactId( "artifactId" + i );
+ artifact.setVersion( new Integer( i ).toString() );
+ artifact.setType( "jar" );
+ return artifact;
+ }
+}
Propchange: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-dependency-tree/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"