]> source.dussan.org Git - archiva.git/commitdiff
[MRM-560] Dependency Tree causes an Exception.
authorJoakim Erdfelt <joakime@apache.org>
Sat, 27 Oct 2007 00:00:04 +0000 (00:00 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Sat, 27 Oct 2007 00:00:04 +0000 (00:00 +0000)
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/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTree.java
archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DependencyTreeTag.java

index 95b88d7e9ba1cc08b1ef98cc0acf5b3827b123c7..512f4055ef8cde38ad87347873e3ec4aec94898f 100644 (file)
@@ -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<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 @@ public class DependencyTree
     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 @@ 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 );
         }
     }
 
index dd6e238e115512d2b55f4e8c0ac024647cb09395..05393904dd1297355d7bf13143ef750bc06f309c 100644 (file)
@@ -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<TreeEntry> 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( "<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;
     }