summaryrefslogtreecommitdiffstats
path: root/archiva-base
diff options
context:
space:
mode:
authorJoakim Erdfelt <joakime@apache.org>2007-05-17 23:17:48 +0000
committerJoakim Erdfelt <joakime@apache.org>2007-05-17 23:17:48 +0000
commit650c56007ba781442ed781062e0d6727ab535cc8 (patch)
tree2a9bca88b748739374db62cb6fee0116f28c5431 /archiva-base
parent2ae3268ff900a8b649f8cc46fe6a23302978cacc (diff)
downloadarchiva-650c56007ba781442ed781062e0d6727ab535cc8.tar.gz
archiva-650c56007ba781442ed781062e0d6727ab535cc8.zip
[MRM-346]: Show Artifact results in error 500.
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@539163 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-base')
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/pom.xml4
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java48
-rw-r--r--archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java107
-rw-r--r--archiva-base/archiva-model/src/main/mdo/archiva-base.xml2
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java4
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java4
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java13
7 files changed, 172 insertions, 10 deletions
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml b/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
index 419139f2c..7a9207c9c 100644
--- a/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
@@ -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
index 000000000..66c94501b
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/functors/PermanentConsumerPredicate.java
@@ -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;
+ }
+
+}
diff --git a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
index 8ac936639..cc4558d9d 100644
--- a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
+++ b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
@@ -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;
}
}
diff --git a/archiva-base/archiva-model/src/main/mdo/archiva-base.xml b/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
index 17198a828..02089dbad 100644
--- a/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
+++ b/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
@@ -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,
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
index b3ad6bbd6..d152cb702 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
@@ -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
{
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
index b0f34b31a..9d8033f0c 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
@@ -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
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
index e57c633c1..5e5c325e5 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryContentConsumers.java
@@ -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()