You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/05/18 01:17:50 UTC

svn commit: r539163 - in /maven/archiva/trunk: archiva-base/archiva-consumers/archiva-consumer-api/ archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/ archiva-base/archiva-consumers/archiva-da...

Author: joakime
Date: Thu May 17 16:17:48 2007
New Revision: 539163

URL: http://svn.apache.org/viewvc?view=rev&rev=539163
Log:
[MRM-346]: Show Artifact results in error 500.

Added:
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java   (with props)
Modified:
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
    maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
    maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
    maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
    maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
    maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java
    maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml Thu May 17 16:17:48 2007
@@ -34,5 +34,9 @@
       <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-model</artifactId>
     </dependency>
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+    </dependency>
   </dependencies>
 </project>

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java?view=auto&rev=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java Thu May 17 16:17:48 2007
@@ -0,0 +1,48 @@
+package org.apache.maven.archiva.consumers.functors;
+
+/*
+ * 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 org.apache.commons.collections.Predicate;
+import org.apache.maven.archiva.consumers.BaseConsumer;
+
+/**
+ * Selects Consumers that are flaged as 'permanent'. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class PermanentConsumerPredicate
+    implements Predicate
+{
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof BaseConsumer )
+        {
+            BaseConsumer consumer = (BaseConsumer) object;
+            satisfies = consumer.isPermanent();
+        }
+
+        return satisfies;
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java Thu May 17 16:17:48 2007
@@ -19,11 +19,25 @@
  * under the License.
  */
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.maven.archiva.consumers.ConsumerException;
 import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.RepositoryURL;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.project.ProjectModelException;
+import org.apache.maven.archiva.repository.project.ProjectModelReader;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -50,6 +64,39 @@
      */
     private String description;
 
+    /**
+     * @plexus.requirement role-hint="jdo"
+     */
+    private ArchivaDAO dao;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaConfiguration archivaConfiguration;
+
+    /**
+     * @plexus.requirement
+     */
+    private BidirectionalRepositoryLayoutFactory layoutFactory;
+
+    /**
+     * @plexus.requirement role-hint="model400"
+     */
+    private ProjectModelReader project400Reader;
+
+    /**
+     * @plexus.requirement role-hint="model300"
+     */
+    private ProjectModelReader project300Reader;
+
+    private List includes;
+
+    public ProjectModelToDatabaseConsumer()
+    {
+        includes = new ArrayList();
+        includes.add( "pom" );
+    }
+
     public void beginScan()
     {
         // TODO Auto-generated method stub
@@ -64,15 +111,65 @@
 
     public List getIncludedTypes()
     {
-        // TODO Auto-generated method stub
-        return null;
+        return includes;
     }
 
     public void processArchivaArtifact( ArchivaArtifact artifact )
         throws ConsumerException
     {
-        // TODO Auto-generated method stub
-
+        if ( !StringUtils.equals( "pom", artifact.getType() ) )
+        {
+            return;
+        }
+
+        File artifactFile = toFile( artifact );
+        RepositoryConfiguration repo = getRepository( artifact );
+
+        if ( StringUtils.equals( "default", repo.getLayout() ) )
+        {
+            try
+            {
+                ArchivaProjectModel model = project400Reader.read( artifactFile );
+                dao.getProjectModelDAO().saveProjectModel( model );
+            }
+            catch ( ProjectModelException e )
+            {
+                getLogger().warn( "Unable to read project model " + artifactFile + " : " + e.getMessage(), e );
+            }
+            catch ( ArchivaDatabaseException e )
+            {
+                getLogger().warn(
+                                  "Unable to save project model " + artifactFile + " to the database : "
+                                      + e.getMessage(), e );
+            }
+        }
+    }
+
+    private RepositoryConfiguration getRepository( ArchivaArtifact artifact )
+    {
+        String repoId = artifact.getModel().getRepositoryId();
+        return archivaConfiguration.getConfiguration().findRepositoryById( repoId );
+    }
+
+    private File toFile( ArchivaArtifact artifact )
+    {
+        RepositoryConfiguration repoConfig = getRepository( artifact );
+
+        BidirectionalRepositoryLayout layout = null;
+
+        try
+        {
+            layout = layoutFactory.getLayout( artifact );
+        }
+        catch ( LayoutException e )
+        {
+            getLogger().warn( "Unable to determine layout of " + artifact + ": " + e.getMessage(), e );
+            return null;
+        }
+
+        String path = layout.toPath( artifact );
+        RepositoryURL url = new RepositoryURL( repoConfig.getUrl() );
+        return new File( url.getPath(), path );
     }
 
     public String getDescription()
@@ -87,7 +184,7 @@
 
     public boolean isPermanent()
     {
-        return false;
+        return true;
     }
 
 }

Modified: maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml Thu May 17 16:17:48 2007
@@ -1601,7 +1601,7 @@
           <name>classifier</name>
           <version>1.0.0+</version>
           <type>String</type>
-          <required>true</required>
+          <required>false</required>
           <description><![CDATA[
             The classifier of the dependency. This allows distinguishing two artifacts that belong to the same POM but
             were built differently, and is appended to the filename after the version. For example,

Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java Thu May 17 16:17:48 2007
@@ -30,6 +30,10 @@
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
+ * 
+ * @plexus.component 
+ *      role="org.apache.maven.archiva.repository.project.ProjectModelReader"
+ *      role-hint="model300"
  */
 public class ProjectModel300Reader implements ProjectModelReader
 {

Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java Thu May 17 16:17:48 2007
@@ -52,6 +52,10 @@
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
+ * 
+ * @plexus.component 
+ *      role="org.apache.maven.archiva.repository.project.ProjectModelReader"
+ *      role-hint="model400"
  */
 public class ProjectModel400Reader
     implements ProjectModelReader

Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java Thu May 17 16:17:48 2007
@@ -23,11 +23,13 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.Predicate;
 import org.apache.commons.collections.functors.IfClosure;
+import org.apache.commons.collections.functors.OrPredicate;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration;
 import org.apache.maven.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.consumers.functors.PermanentConsumerPredicate;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
@@ -64,9 +66,9 @@
      */
     private List availableInvalidConsumers;
 
-    private SelectedKnownRepoConsumersPredicate selectedKnownPredicate;
+    private Predicate selectedKnownPredicate;
 
-    private SelectedInvalidRepoConsumersPredicate selectedInvalidPredicate;
+    private Predicate selectedInvalidPredicate;
 
     class SelectedKnownRepoConsumersPredicate
         implements Predicate
@@ -131,8 +133,11 @@
     public void initialize()
         throws InitializationException
     {
-        this.selectedKnownPredicate = new SelectedKnownRepoConsumersPredicate();
-        this.selectedInvalidPredicate = new SelectedInvalidRepoConsumersPredicate();
+        Predicate permanentConsumers = new PermanentConsumerPredicate();
+
+        this.selectedKnownPredicate = new OrPredicate( permanentConsumers, new SelectedKnownRepoConsumersPredicate() );
+        this.selectedInvalidPredicate = new OrPredicate( permanentConsumers,
+                                                         new SelectedInvalidRepoConsumersPredicate() );
     }
 
     public List getSelectedKnownConsumerIds()

Modified: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java (original)
+++ maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java Thu May 17 16:17:48 2007
@@ -21,10 +21,12 @@
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.functors.OrPredicate;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.DatabaseScanningConfiguration;
 import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
 import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.consumers.functors.PermanentConsumerPredicate;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 
@@ -58,9 +60,9 @@
      */
     private List availableCleanupConsumers;
 
-    private SelectedCleanupConsumersPredicate selectedCleanupConsumers;
+    private Predicate selectedCleanupConsumers;
 
-    private SelectedUnprocessedConsumersPredicate selectedUnprocessedConsumers;
+    private Predicate selectedUnprocessedConsumers;
 
     class SelectedUnprocessedConsumersPredicate
         implements Predicate
@@ -103,8 +105,10 @@
     public void initialize()
         throws InitializationException
     {
-        selectedCleanupConsumers = new SelectedCleanupConsumersPredicate();
-        selectedUnprocessedConsumers = new SelectedUnprocessedConsumersPredicate();
+        Predicate permanentConsumers = new PermanentConsumerPredicate();
+
+        selectedCleanupConsumers = new OrPredicate( permanentConsumers, new SelectedCleanupConsumersPredicate() );
+        selectedUnprocessedConsumers = new OrPredicate( permanentConsumers, new SelectedUnprocessedConsumersPredicate() );
     }
 
     /**
@@ -132,7 +136,7 @@
         ret.addAll( CollectionUtils.select( availableCleanupConsumers, selectedCleanupConsumers ) );
         return ret;
     }
-    
+
     /**
      * Get the complete {@link List} of {@link DatabaseUnprocessedArtifactConsumer} objects
      * that are available in the system, regardless of configuration.
@@ -143,7 +147,7 @@
     {
         return Collections.unmodifiableList( this.availableUnprocessedConsumers );
     }
-    
+
     /**
      * Get the complete {@link List} of {@link DatabaseCleanupConsumer} objects
      * that are available in the system, regardless of configuration.

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?view=diff&rev=539163&r1=539162&r2=539163
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java Thu May 17 16:17:48 2007
@@ -19,27 +19,17 @@
  * under the License.
  */
 
+import com.opensymphony.xwork.Validateable;
+
 import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.database.ArchivaDAO;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
-import org.apache.maven.archiva.web.util.VersionMerger;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 
 /**
  * Browse the repository.
@@ -49,6 +39,7 @@
  */
 public class ShowArtifactAction
     extends PlexusActionSupport
+    implements Validateable
 {
     /* .\ Not Exposed \._____________________________________________ */
     
@@ -90,12 +81,7 @@
     public String artifact()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
-        this.model = readProject();
+        this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
 
         return SUCCESS;
     }
@@ -106,12 +92,7 @@
     public String dependencies()
     throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
-        this.model = readProject();
+        this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
 
         // TODO: should this be the whole set of artifacts, and be more like the maven dependencies report?
         // this.dependencies = VersionMerger.wrap( project.getModel().getDependencies() );
@@ -125,12 +106,7 @@
     public String mailingLists()
     throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
-        this.model = readProject();
+        this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
 
         return SUCCESS;
     }
@@ -141,11 +117,6 @@
     public String reports()
     throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
         System.out.println("#### In reports.");
         // TODO: hook up reports on project - this.reports = artifactsDatabase.findArtifactResults( groupId, artifactId, version );
         System.out.println("#### Found " + reports.size() + " reports.");
@@ -159,12 +130,7 @@
     public String dependees()
     throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
-        this.model = readProject();
+        this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
 
         // TODO: create depends on collector.
         this.dependees = Collections.EMPTY_LIST;
@@ -178,47 +144,27 @@
     public String dependencyTree()
     throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        if ( !checkParameters() )
-        {
-            return ERROR;
-        }
-
-        this.model = readProject();
+        this.model = repoBrowsing.selectVersion( groupId, artifactId, version );
 
         return SUCCESS;
     }
 
-    private ArchivaProjectModel readProject()
-        throws ArchivaDatabaseException
+    public void validate()
     {
-        return repoBrowsing.selectVersion( groupId, artifactId, version );
-    }
-
-    private boolean checkParameters()
-    {
-        boolean result = true;
-
-        if ( StringUtils.isEmpty( groupId ) )
+        if ( StringUtils.isBlank( groupId ) )
         {
-            // TODO: i18n
             addActionError( "You must specify a group ID to browse" );
-            result = false;
         }
 
-        else if ( StringUtils.isEmpty( artifactId ) )
+        if ( StringUtils.isBlank( artifactId ) )
         {
-            // TODO: i18n
             addActionError( "You must specify a artifact ID to browse" );
-            result = false;
         }
 
-        else if ( StringUtils.isEmpty( version ) )
+        if ( StringUtils.isBlank( version ) )
         {
-            // TODO: i18n
             addActionError( "You must specify a version to browse" );
-            result = false;
         }
-        return result;
     }
 
     public ArchivaProjectModel getModel()