From 1b44cd6cc14f893bf1469350be32bb8fb00764ab Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Sat, 27 Oct 2007 00:00:04 +0000 Subject: [PATCH] [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. git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@588808 13f79535-47bb-0310-9956-ffa450edef68 --- .../archiva/web/tags/DependencyTree.java | 47 +++++++++++++------ .../archiva/web/tags/DependencyTreeTag.java | 39 ++++++++++----- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java index 95b88d7e9..512f4055e 100644 --- a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java +++ b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java @@ -20,6 +20,7 @@ package org.apache.maven.archiva.web.tags; */ 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.DependencyGraphWalker; 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.ArrayList; import java.util.List; import java.util.Stack; -import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; /** @@ -113,22 +114,38 @@ public class DependencyTree } } - public List gatherTreeList( String groupId, String artifactId, String modelVersion, String nodevar, - PageContext pageContext ) - throws JspException + public List 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 @@ public class DependencyTree class TreeListVisitor extends BaseVisitor { - private List list; + private List list; private int walkDepth; private int outputDepth; - private Stack entryStack = new Stack(); + private Stack entryStack = new Stack(); private TreeEntry currentEntry; public TreeListVisitor() { - this.list = new ArrayList(); + this.list = new ArrayList(); } - public List getList() + public List getList() { return this.list; } @@ -214,6 +231,7 @@ public class DependencyTree } 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 @@ public class DependencyTree 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 ); } } diff --git a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java index dd6e238e1..05393904d 100644 --- a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java +++ b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java @@ -20,11 +20,14 @@ package org.apache.maven.archiva.web.tags; */ 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 @@ public class DependencyTreeTag private Iterator treeIterator; - private List tree; + private List tree; private TreeEntry currentTreeEntry; @@ -125,21 +128,31 @@ public class DependencyTreeTag nodevar = "node"; } - this.tree = deptree.gatherTreeList( groupId, artifactId, modelVersion, nodevar, pageContext ); - - if ( CollectionUtils.isEmpty( this.tree ) ) + out( "
" ); + 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("
");
+            e.printStackTrace( new PrintWriter( pageContext.getOut() ) );
+            out("
"); } - treeIterator = tree.iterator(); - - out( "
" ); - - currentTreeEntry = (TreeEntry) treeIterator.next(); - out( currentTreeEntry.getPre() ); - exposeVariables(); - return EVAL_BODY_INCLUDE; } -- 2.39.5