]> source.dussan.org Git - archiva.git/commitdiff
[MRM-346]: Show Artifact results in error 500.
authorJoakim Erdfelt <joakime@apache.org>
Thu, 17 May 2007 23:17:48 +0000 (23:17 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Thu, 17 May 2007 23:17:48 +0000 (23:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@539163 13f79535-47bb-0310-9956-ffa450edef68

archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java [new file with mode: 0644]
archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
archiva-base/archiva-model/src/main/mdo/archiva-base.xml
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
archiva-database/src/main/java/org/apache/maven/archiva/database/updater/DatabaseConsumers.java
archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java

index 419139f2c509150630f9d9bf8778b07a61cfd1e0..7a9207c9c91ad09ce141e065bcab85787002e635 100644 (file)
@@ -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>
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
new file mode 100644 (file)
index 0000000..66c9450
--- /dev/null
@@ -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;
+    }
+
+}
index 8ac93663983dd1ffba97467a5546ce12de79fba5..cc4558d9dd6f776e35fb60f9088f36b7a4e208a2 100644 (file)
@@ -19,11 +19,25 @@ package org.apache.maven.archiva.consumers.database;
  * 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 @@ public class ProjectModelToDatabaseConsumer
      */
     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 class ProjectModelToDatabaseConsumer
 
     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 class ProjectModelToDatabaseConsumer
 
     public boolean isPermanent()
     {
-        return false;
+        return true;
     }
 
 }
index 17198a828f119182b568b5e41134145164f20621..02089dbad089d7e96bcea3338a4dbcff5f5cde8f 100644 (file)
           <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,
index b3ad6bbd6ea0564799b1a416327488439b586e46..d152cb7026c7eeae202b7ec5add03394d68e9d13 100644 (file)
@@ -30,6 +30,10 @@ import java.io.File;
  *
  * @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
 {
index b0f34b31ab9e48104876bb073143880a9c5ad541..9d8033f0c64de4d082b76321ab409bb4798a0122 100644 (file)
@@ -52,6 +52,10 @@ import java.util.Properties;
  *
  * @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
index e57c633c12996d1597c0436fd34916098cf90902..5e5c325e5328b4beece372e15d31d307980eb8fe 100644 (file)
@@ -23,11 +23,13 @@ import org.apache.commons.collections.Closure;
 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 @@ public class RepositoryContentConsumers
      */
     private List availableInvalidConsumers;
 
-    private SelectedKnownRepoConsumersPredicate selectedKnownPredicate;
+    private Predicate selectedKnownPredicate;
 
-    private SelectedInvalidRepoConsumersPredicate selectedInvalidPredicate;
+    private Predicate selectedInvalidPredicate;
 
     class SelectedKnownRepoConsumersPredicate
         implements Predicate
@@ -131,8 +133,11 @@ public class RepositoryContentConsumers
     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()
index 6c4f65ffb4d36087e8edbf898f59a799d98ae3c5..7b17528f4ff47a850d97c895b2dd8fc49df3d28a 100644 (file)
@@ -21,10 +21,12 @@ package org.apache.maven.archiva.database.updater;
 
 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 @@ public class DatabaseConsumers
      */
     private List availableCleanupConsumers;
 
-    private SelectedCleanupConsumersPredicate selectedCleanupConsumers;
+    private Predicate selectedCleanupConsumers;
 
-    private SelectedUnprocessedConsumersPredicate selectedUnprocessedConsumers;
+    private Predicate selectedUnprocessedConsumers;
 
     class SelectedUnprocessedConsumersPredicate
         implements Predicate
@@ -103,8 +105,10 @@ public class DatabaseConsumers
     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 @@ public class DatabaseConsumers
         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 @@ public class DatabaseConsumers
     {
         return Collections.unmodifiableList( this.availableUnprocessedConsumers );
     }
-    
+
     /**
      * Get the complete {@link List} of {@link DatabaseCleanupConsumer} objects
      * that are available in the system, regardless of configuration.
index 5b8a9dbe780c58107651b8d27193f9a6a295fb75..1c759087e9bbfc3392d881696203f129839d7256 100644 (file)
@@ -19,27 +19,17 @@ package org.apache.maven.archiva.web.action;
  * 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 @@ import java.util.Set;
  */
 public class ShowArtifactAction
     extends PlexusActionSupport
+    implements Validateable
 {
     /* .\ Not Exposed \._____________________________________________ */
     
@@ -90,12 +81,7 @@ public class ShowArtifactAction
     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 class ShowArtifactAction
     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 class ShowArtifactAction
     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 class ShowArtifactAction
     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 class ShowArtifactAction
     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 class ShowArtifactAction
     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()