Author: joakime Date: Fri Oct 26 17:00:04 2007 New Revision: 588808 URL: http://svn.apache.org/viewvc?rev=588808&view=rev Log: [MRM-560] Dependency Tree causes an Exception. Prevented complete collapse of DependencyTree tab when an exception occurs. Provide more details if there was a problem creating the graph.
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java?rev=588808&r1=588807&r2=588808&view=diff ============================================================================== --- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java (original) +++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java Fri Oct 26 17:00:04 2007 @@ -20,6 +20,7 @@ */ import org.apache.commons.lang.StringUtils; +import org.apache.maven.archiva.common.ArchivaException; import org.apache.maven.archiva.dependency.DependencyGraphFactory; import org.apache.maven.archiva.dependency.graph.DependencyGraph; import org.apache.maven.archiva.dependency.graph.DependencyGraphBuilder; @@ -31,6 +32,7 @@ import org.apache.maven.archiva.dependency.graph.walk.WalkDepthFirstSearch; import org.apache.maven.archiva.model.ArtifactReference; import org.apache.maven.archiva.model.DependencyScope; +import org.apache.maven.archiva.model.Keys; import org.apache.maven.archiva.model.VersionedReference; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; @@ -40,7 +42,6 @@ import java.util.List; import java.util.Stack; -import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; /** @@ -113,22 +114,38 @@ } } - public List gatherTreeList( String groupId, String artifactId, String modelVersion, String nodevar, - PageContext pageContext ) - throws JspException + public List<TreeEntry> gatherTreeList( String groupId, String artifactId, String modelVersion, String nodevar, + PageContext pageContext ) throws ArchivaException { if ( StringUtils.isBlank( groupId ) ) { - String emsg = "Error generating dependency tree: groupId is blank."; + String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion ) + + "]: groupId is blank."; getLogger().error( emsg ); - throw new JspException( emsg ); + throw new ArchivaException( emsg ); + } + + if ( StringUtils.isBlank( artifactId ) ) + { + String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion ) + + "]: artifactId is blank."; + getLogger().error( emsg ); + throw new ArchivaException( emsg ); + } + + if ( StringUtils.isBlank( modelVersion ) ) + { + String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion ) + + "]: version is blank."; + getLogger().error( emsg ); + throw new ArchivaException( emsg ); } DependencyGraph graph = fetchGraph( groupId, artifactId, modelVersion ); if ( graph == null ) { - throw new JspException( "Graph is null." ); + throw new ArchivaException( "Graph is unexpectedly null." ); } TreeListVisitor treeListVisitor = new TreeListVisitor(); @@ -141,22 +158,22 @@ class TreeListVisitor extends BaseVisitor { - private List list; + private List<TreeEntry> list; private int walkDepth; private int outputDepth; - private Stack entryStack = new Stack(); + private Stack<TreeEntry> entryStack = new Stack<TreeEntry>(); private TreeEntry currentEntry; public TreeListVisitor() { - this.list = new ArrayList(); + this.list = new ArrayList<TreeEntry>(); } - public List getList() + public List<TreeEntry> getList() { return this.list; } @@ -214,6 +231,7 @@ } private DependencyGraph fetchGraph( String groupId, String artifactId, String modelVersion ) + throws ArchivaException { // TODO Cache the results to disk, in XML format, in the same place as the artifact is located. @@ -225,13 +243,14 @@ try { DependencyGraph depGraph = graphFactory.getGraph( projectRef ); - + return depGraph; } catch ( GraphTaskException e ) { - getLogger().warn( "Unable to get Graph: " + e.getMessage(), e ); - return null; + String emsg = "Unable to generate graph for [" + Keys.toKey( projectRef ) + "] : " + e.getMessage(); + getLogger().warn( emsg, e ); + throw new ArchivaException( emsg, e ); } } Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java?rev=588808&r1=588807&r2=588808&view=diff ============================================================================== --- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java (original) +++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java Fri Oct 26 17:00:04 2007 @@ -20,11 +20,14 @@ */ import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.IteratorUtils; import org.apache.commons.lang.StringUtils; +import org.apache.maven.archiva.common.ArchivaException; import org.apache.maven.archiva.web.tags.DependencyTree.TreeEntry; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import java.io.IOException; +import java.io.PrintWriter; import java.util.Iterator; import java.util.List; @@ -64,7 +67,7 @@ private Iterator treeIterator; - private List tree; + private List<TreeEntry> tree; private TreeEntry currentTreeEntry; @@ -125,20 +128,30 @@ nodevar = "node"; } - this.tree = deptree.gatherTreeList( groupId, artifactId, modelVersion, nodevar, pageContext ); - - if ( CollectionUtils.isEmpty( this.tree ) ) + out( "<div class=\"dependency-graph\">" ); + try + { + this.tree = deptree.gatherTreeList( groupId, artifactId, modelVersion, nodevar, pageContext ); + + if ( CollectionUtils.isEmpty( this.tree ) ) + { + return SKIP_BODY; + } + + treeIterator = tree.iterator(); + + currentTreeEntry = (TreeEntry) treeIterator.next(); + out( currentTreeEntry.getPre() ); + exposeVariables(); + } + catch ( ArchivaException e ) { - return SKIP_BODY; + treeIterator = IteratorUtils.EMPTY_LIST_ITERATOR; + + out("<pre>"); + e.printStackTrace( new PrintWriter( pageContext.getOut() ) ); + out("</pre>"); } - - treeIterator = tree.iterator(); - - out( "<div class=\"dependency-graph\">" ); - - currentTreeEntry = (TreeEntry) treeIterator.next(); - out( currentTreeEntry.getPre() ); - exposeVariables(); return EVAL_BODY_INCLUDE; }