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;
     }


Reply via email to