summaryrefslogtreecommitdiffstats
path: root/archiva-core
diff options
context:
space:
mode:
Diffstat (limited to 'archiva-core')
-rw-r--r--archiva-core/pom.xml37
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifact.java76
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifactTypes.java81
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedJavaArtifact.java62
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java97
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java99
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java69
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/conversion/DefaultLegacyRepositoryConverter.java126
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/conversion/LegacyRepositoryConverter.java47
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java39
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java52
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java96
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java14
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java6
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java61
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java192
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutor.java317
-rw-r--r--archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java41
-rw-r--r--archiva-core/src/main/resources/META-INF/plexus/components.xml68
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/AllTests.java (renamed from archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedEjbArtifact.java)29
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/LegacyRepositoryConverterTest.java44
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/repositories/AllTests.java (renamed from archiva-core/src/main/java/org/apache/maven/archiva/scheduler/TaskExecutionException.java)25
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java8
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/AllTests.java (renamed from archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/IndexerTask.java)47
-rw-r--r--archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java (renamed from archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.java)18
-rw-r--r--archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.xml90
-rw-r--r--archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.xml35
27 files changed, 915 insertions, 961 deletions
diff --git a/archiva-core/pom.xml b/archiva-core/pom.xml
index da35be2b9..ed730ec37 100644
--- a/archiva-core/pom.xml
+++ b/archiva-core/pom.xml
@@ -35,10 +35,6 @@
</dependency>
<dependency>
<groupId>org.apache.maven.archiva</groupId>
- <artifactId>archiva-converter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.archiva</groupId>
<artifactId>archiva-discoverer</artifactId>
</dependency>
<dependency>
@@ -78,6 +74,13 @@
<version>1.0-alpha-1</version>
<scope>test</scope>
</dependency>
+ <!-- TEST DEPS -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.7.3.3</version>
+ <scope>test</scope>
+ </dependency>
<!-- needed for PlexusTestCase -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
@@ -88,16 +91,22 @@
<build>
<plugins>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <!-- TODO! add unit tests -->
- <configuration>
- <instrumentation>
- <excludes>
- <exclude>**/**</exclude>
- </excludes>
- </instrumentation>
- </configuration>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifact.java b/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifact.java
deleted file mode 100644
index 940b6bde2..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifact.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.maven.archiva.artifact;
-
-/*
- * 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.maven.artifact.Artifact;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * ManagedArtifact
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedArtifact
-{
- private String repositoryId;
-
- private Artifact artifact;
-
- private String path;
-
- protected Map attached;
-
- public ManagedArtifact( String repoId, Artifact artifact, String path )
- {
- super();
- this.repositoryId = repoId;
- this.artifact = artifact;
- this.path = path;
- this.attached = new HashMap();
- }
-
- public Artifact getArtifact()
- {
- return artifact;
- }
-
- public String getPath()
- {
- return path;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public Map getAttached()
- {
- return attached;
- }
-
- public void setAttached( Map attached )
- {
- this.attached = attached;
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifactTypes.java b/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifactTypes.java
deleted file mode 100644
index 6cccfcd6a..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedArtifactTypes.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.maven.archiva.artifact;
-
-/*
- * 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.lang.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ManagedArtifactTypes - provides place to test an unknown artifact type.
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedArtifactTypes
-{
- public static final int GENERIC = 0;
-
- public static final int JAVA = 1;
-
- public static final int EJB = 2;
-
- private static List javaArtifacts;
-
- private static List ejbArtifacts;
-
- static
- {
- javaArtifacts = new ArrayList();
- javaArtifacts.add( "jar" );
- javaArtifacts.add( "war" );
- javaArtifacts.add( "sar" );
- javaArtifacts.add( "rar" );
- javaArtifacts.add( "ear" );
-
- ejbArtifacts = new ArrayList();
- ejbArtifacts.add( "ejb" );
- ejbArtifacts.add( "ejb-client" );
- }
-
- public static int whichType( String type )
- {
- if ( StringUtils.isBlank( type ) )
- {
- // TODO: is an empty type even possible?
- return GENERIC;
- }
-
- type = type.toLowerCase();
-
- if ( ejbArtifacts.contains( type ) )
- {
- return EJB;
- }
-
- if ( javaArtifacts.contains( type ) )
- {
- return JAVA;
- }
-
- return GENERIC;
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedJavaArtifact.java b/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedJavaArtifact.java
deleted file mode 100644
index babb88420..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedJavaArtifact.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.maven.archiva.artifact;
-
-/*
- * 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.maven.artifact.Artifact;
-
-/**
- * ManagedJavaArtifact - a ManagedArtifact with optional javadoc and source
- * reference jars.
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedJavaArtifact
- extends ManagedArtifact
-{
- public static final String JAVADOC = "javadoc";
-
- public static final String SOURCES = "sources";
-
- public ManagedJavaArtifact( String repoId, Artifact artifact, String path )
- {
- super( repoId, artifact, path );
- }
-
- public String getJavadocPath()
- {
- return (String) super.attached.get( JAVADOC );
- }
-
- public void setJavadocPath( String javadocPath )
- {
- super.attached.put( JAVADOC, javadocPath );
- }
-
- public String getSourcesPath()
- {
- return (String) super.attached.get( SOURCES );
- }
-
- public void setSourcesPath( String sourcesPath )
- {
- super.attached.put( SOURCES, sourcesPath );
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java
new file mode 100644
index 000000000..7b6d15ffb
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java
@@ -0,0 +1,97 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * 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.maven.archiva.common.consumers.GenericArtifactConsumer;
+import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.reporting.database.ArtifactResultsDatabase;
+import org.apache.maven.archiva.reporting.group.ReportGroup;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidArtifactRTException;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+
+import java.util.Collections;
+
+/**
+ * ArtifactHealthConsumer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer"
+ * role-hint="artifact-health"
+ * instantiation-strategy="per-lookup"
+ */
+public class ArtifactHealthConsumer
+ extends GenericArtifactConsumer
+{
+ /**
+ * @plexus.requirement
+ */
+ private ArtifactResultsDatabase database;
+
+ /**
+ * @plexus.requirement role-hint="health"
+ */
+ private ReportGroup health;
+
+ /**
+ * @plexus.requirement
+ */
+ private MavenProjectBuilder projectBuilder;
+
+ public void processArtifact( Artifact artifact, BaseFile file )
+ {
+ Model model = null;
+ try
+ {
+ Artifact pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact
+ .getArtifactId(), artifact.getVersion() );
+ MavenProject project = projectBuilder.buildFromRepository( pomArtifact, Collections.EMPTY_LIST, repository );
+
+ model = project.getModel();
+ }
+ catch ( InvalidArtifactRTException e )
+ {
+ database.addWarning( artifact, null, null, "Invalid artifact [" + artifact + "] : " + e );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ database.addWarning( artifact, null, null, "Error reading project model: " + e );
+ }
+
+ database.remove( artifact );
+ health.processArtifact( artifact, model );
+ }
+
+ public void processFileProblem( BaseFile path, String message )
+ {
+ /* do nothing here (yet) */
+ // TODO: store build failure into database?
+ }
+
+ public String getName()
+ {
+ return "Artifact Health Consumer";
+ }
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java
new file mode 100644
index 000000000..2d7026bb1
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java
@@ -0,0 +1,99 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * 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.maven.archiva.common.consumers.GenericArtifactConsumer;
+import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.io.File;
+
+/**
+ * IndexArtifactConsumer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer"
+ * role-hint="index-artifact"
+ * instantiation-strategy="per-lookup"
+ */
+public class IndexArtifactConsumer
+ extends GenericArtifactConsumer
+{
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryArtifactIndexFactory indexFactory;
+
+ /**
+ * @plexus.requirement role-hint="standard"
+ */
+ private RepositoryIndexRecordFactory recordFactory;
+
+ /**
+ * Configuration store.
+ *
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ private RepositoryArtifactIndex index;
+
+ public boolean init( ArtifactRepository repository )
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+
+ File indexPath = new File( configuration.getIndexPath() );
+
+ index = indexFactory.createStandardIndex( indexPath );
+
+ return super.init( repository );
+ }
+
+ public void processArtifact( Artifact artifact, BaseFile file )
+ {
+ try
+ {
+ index.indexArtifact( artifact, recordFactory );
+ }
+ catch ( RepositoryIndexException e )
+ {
+ getLogger().warn( "Unable to index artifact " + artifact, e );
+ }
+ }
+
+ public void processFileProblem( BaseFile path, String message )
+ {
+
+ }
+
+ public String getName()
+ {
+ return "Index Artifact Consumer";
+ }
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java
new file mode 100644
index 000000000..d858d32cd
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java
@@ -0,0 +1,69 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * 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.maven.archiva.common.consumers.GenericRepositoryMetadataConsumer;
+import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.reporting.database.MetadataResultsDatabase;
+import org.apache.maven.archiva.reporting.group.ReportGroup;
+import org.apache.maven.archiva.reporting.model.MetadataResults;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+
+/**
+ * RepositoryMetadataHealthConsumer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer"
+ * role-hint="metadata-health"
+ * instantiation-strategy="per-lookup"
+ */
+public class RepositoryMetadataHealthConsumer
+ extends GenericRepositoryMetadataConsumer
+{
+ /**
+ * @plexus.requirement
+ */
+ private MetadataResultsDatabase database;
+
+ /**
+ * @plexus.requirement role-hint="health"
+ */
+ private ReportGroup health;
+
+ public void processRepositoryMetadata( RepositoryMetadata metadata, BaseFile file )
+ {
+ MetadataResults results = database.getMetadataResults( metadata );
+ database.clearResults( results );
+
+ health.processMetadata( metadata, repository );
+ }
+
+ public void processFileProblem( BaseFile path, String message )
+ {
+
+ }
+
+ public String getName()
+ {
+ return "RepositoryMetadata Health Consumer";
+ }
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/conversion/DefaultLegacyRepositoryConverter.java b/archiva-core/src/main/java/org/apache/maven/archiva/conversion/DefaultLegacyRepositoryConverter.java
deleted file mode 100644
index 7beb18a99..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/conversion/DefaultLegacyRepositoryConverter.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.apache.maven.archiva.conversion;
-
-/*
- * 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.maven.archiva.converter.RepositoryConversionException;
-import org.apache.maven.archiva.converter.RepositoryConverter;
-import org.apache.maven.archiva.discoverer.ArtifactDiscoverer;
-import org.apache.maven.archiva.discoverer.DiscovererException;
-import org.apache.maven.archiva.discoverer.filter.AcceptAllArtifactFilter;
-import org.apache.maven.archiva.discoverer.filter.SnapshotArtifactFilter;
-import org.apache.maven.archiva.reporting.database.ReportingDatabase;
-import org.apache.maven.archiva.reporting.group.ReportGroup;
-import org.apache.maven.archiva.reporting.store.ReportingStore;
-import org.apache.maven.archiva.reporting.store.ReportingStoreException;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.util.List;
-
-/**
- * @author Jason van Zyl
- * @plexus.component
- * @todo turn this into a general conversion component and hide all this crap here.
- * @todo it should be possible to move this to the converter module without causing it to gain additional dependencies
- */
-public class DefaultLegacyRepositoryConverter
- implements LegacyRepositoryConverter
-{
- /**
- * @plexus.requirement role-hint="legacy"
- */
- private ArtifactDiscoverer artifactDiscoverer;
-
- /**
- * @plexus.requirement role-hint="legacy"
- */
- private ArtifactRepositoryLayout legacyLayout;
-
- /**
- * @plexus.requirement role-hint="default"
- */
- private ArtifactRepositoryLayout defaultLayout;
-
- /**
- * @plexus.requirement
- */
- private ArtifactRepositoryFactory artifactRepositoryFactory;
-
- /**
- * @plexus.requirement
- */
- private RepositoryConverter repositoryConverter;
-
- /**
- * @plexus.requirement
- */
- private ReportingStore reportingStore;
-
- /**
- * @plexus.requirement role-hint="health"
- */
- private ReportGroup reportGroup;
-
- public void convertLegacyRepository( File legacyRepositoryDirectory, File repositoryDirectory,
- List blacklistedPatterns, boolean includeSnapshots )
- throws RepositoryConversionException, DiscovererException
- {
- ArtifactRepository legacyRepository;
-
- ArtifactRepository repository;
-
- try
- {
- legacyRepository = artifactRepositoryFactory.createArtifactRepository( "legacy",
- legacyRepositoryDirectory.toURI().toURL().toString(),
- legacyLayout, null, null );
-
- repository = artifactRepositoryFactory.createArtifactRepository( "default",
- repositoryDirectory.toURI().toURL().toString(),
- defaultLayout, null, null );
- }
- catch ( MalformedURLException e )
- {
- throw new RepositoryConversionException( "Error convering legacy repository.", e );
- }
-
- ArtifactFilter filter =
- includeSnapshots ? new AcceptAllArtifactFilter() : (ArtifactFilter) new SnapshotArtifactFilter();
- List legacyArtifacts = artifactDiscoverer.discoverArtifacts( legacyRepository, blacklistedPatterns, filter );
-
- ReportingDatabase reporter;
- try
- {
- reporter = reportingStore.getReportsFromStore( repository, reportGroup );
-
- repositoryConverter.convert( legacyArtifacts, repository, reporter );
-
- reportingStore.storeReports( reporter, repository );
- }
- catch ( ReportingStoreException e )
- {
- throw new RepositoryConversionException( "Error convering legacy repository.", e );
- }
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/conversion/LegacyRepositoryConverter.java b/archiva-core/src/main/java/org/apache/maven/archiva/conversion/LegacyRepositoryConverter.java
deleted file mode 100644
index 876421475..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/conversion/LegacyRepositoryConverter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.maven.archiva.conversion;
-
-/*
- * 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.maven.archiva.converter.RepositoryConversionException;
-import org.apache.maven.archiva.discoverer.DiscovererException;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * @author Jason van Zyl
- */
-public interface LegacyRepositoryConverter
-{
- String ROLE = LegacyRepositoryConverter.class.getName();
-
- /**
- * Convert a legacy repository to a modern repository. This means a Maven 1.x repository
- * using v3 POMs to a Maven 2.x repository using v4.0.0 POMs.
- *
- * @param legacyRepositoryDirectory
- * @param repositoryDirectory
- * @throws org.apache.maven.archiva.converter.RepositoryConversionException
- *
- */
- void convertLegacyRepository( File legacyRepositoryDirectory, File repositoryDirectory, List blacklistedPatterns,
- boolean includeSnapshots )
- throws RepositoryConversionException, DiscovererException;
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java b/archiva-core/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java
index 554fb3491..0bac31018 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repositories;
* under the License.
*/
-import org.apache.maven.archiva.artifact.ManagedArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedArtifact;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -31,7 +31,7 @@ import java.util.List;
/**
* ActiveManagedRepositories
*
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
*/
public interface ActiveManagedRepositories
@@ -44,12 +44,27 @@ public interface ActiveManagedRepositories
* @param id the ID of the repository.
* @return the ArtifactRepository associated with the provided ID, or null if none found.
*/
- ArtifactRepository getArtifactRepository( String id );
+ public ArtifactRepository getArtifactRepository( String id );
- List getAllArtifactRepositories();
+ /**
+ * Get the List of active managed repositories as a List of {@link ArtifactRepository} objects.
+ *
+ * @return the list of ArtifactRepository objects.
+ */
+ public List /*<ArtifactRepository>*/getAllArtifactRepositories();
RepositoryConfiguration getRepositoryConfiguration( String id );
+ /**
+ * Providing only a groupId, artifactId, and version, return the MavenProject that
+ * is found, in any managed repository.
+ *
+ * @param groupId the groupId to search for
+ * @param artifactId the artifactId to search for
+ * @param version the version to search for
+ * @return the MavenProject from the provided parameters.
+ * @throws ProjectBuildingException if there was a problem building the maven project object.
+ */
MavenProject findProject( String groupId, String artifactId, String version )
throws ProjectBuildingException;
@@ -59,4 +74,20 @@ public interface ActiveManagedRepositories
ManagedArtifact findArtifact( String groupId, String artifactId, String version, String type );
ManagedArtifact findArtifact( Artifact artifact );
+
+ /**
+ * Obtain the last data refresh timestamp for all Managed Repositories.
+ *
+ * @return the last data refresh timestamp.
+ */
+ long getLastDataRefreshTime();
+
+ /**
+ * Tests to see if there needs to be a data refresh performed.
+ *
+ * The only valid scenario is if 1 or more repositories have not had their data refreshed ever.
+ *
+ * @return true if there needs to be a data refresh.
+ */
+ boolean needsDataRefresh();
}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java b/archiva-core/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java
index 128a91d66..6b2504783 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java
@@ -20,14 +20,15 @@ package org.apache.maven.archiva.repositories;
*/
import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.artifact.ManagedArtifact;
-import org.apache.maven.archiva.artifact.ManagedArtifactTypes;
-import org.apache.maven.archiva.artifact.ManagedEjbArtifact;
-import org.apache.maven.archiva.artifact.ManagedJavaArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedArtifactTypes;
+import org.apache.maven.archiva.common.artifact.managed.ManagedEjbArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedJavaArtifact;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.discoverer.DiscovererStatistics;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -49,7 +50,7 @@ import java.util.List;
/**
* DefaultActiveManagedRepositories
*
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
* @plexus.component role="org.apache.maven.archiva.repositories.ActiveManagedRepositories"
*/
@@ -224,6 +225,7 @@ public class DefaultActiveManagedRepositories
repositories = repositoryFactory.createRepositories( this.configuration );
localRepository = repositoryFactory.createLocalRepository( this.configuration );
+
}
private ManagedArtifact createManagedArtifact( ArtifactRepository repository, Artifact artifact, File f )
@@ -283,8 +285,9 @@ public class DefaultActiveManagedRepositories
{
if ( propertyName.startsWith( "repositories" ) || propertyName.startsWith( "localRepository" ) )
{
- getLogger().debug( "Triggering managed repository configuration change with " + propertyName + " set to " +
- propertyValue );
+ getLogger().debug(
+ "Triggering managed repository configuration change with " + propertyName + " set to "
+ + propertyValue );
configureSelf( archivaConfiguration.getConfiguration() );
}
else
@@ -292,4 +295,39 @@ public class DefaultActiveManagedRepositories
getLogger().debug( "Not triggering managed repository configuration change with " + propertyName );
}
}
+
+ public long getLastDataRefreshTime()
+ {
+ long lastDataRefreshTime = 0;
+
+ for ( Iterator i = getAllArtifactRepositories().iterator(); i.hasNext(); )
+ {
+ ArtifactRepository repository = (ArtifactRepository) i.next();
+
+ DiscovererStatistics stats = new DiscovererStatistics( repository );
+ if ( stats.getTimestampFinished() > lastDataRefreshTime )
+ {
+ lastDataRefreshTime = stats.getTimestampFinished();
+ }
+ }
+
+ return lastDataRefreshTime;
+ }
+
+ public boolean needsDataRefresh()
+ {
+ for ( Iterator i = getAllArtifactRepositories().iterator(); i.hasNext(); )
+ {
+ ArtifactRepository repository = (ArtifactRepository) i.next();
+
+ DiscovererStatistics stats = new DiscovererStatistics( repository );
+ if ( stats.getTimestampFinished() <= 0 )
+ {
+ // Found a repository that has NEVER had it's data walked.
+ return true;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java
index 04ab088d4..bae351750 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java
@@ -21,11 +21,8 @@ package org.apache.maven.archiva.scheduler;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.archiva.scheduler.executors.IndexerTaskExecutor;
-import org.apache.maven.archiva.scheduler.task.IndexerTask;
+import org.apache.maven.archiva.repositories.ActiveManagedRepositories;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
import org.apache.maven.archiva.scheduler.task.RepositoryTask;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
@@ -42,7 +39,6 @@ import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
-import java.io.File;
import java.text.ParseException;
/**
@@ -61,28 +57,23 @@ public class DefaultRepositoryTaskScheduler
private Scheduler scheduler;
/**
- * @plexus.requirement role-hint="indexer"
+ * @plexus.requirement role-hint="data-refresh"
*/
- private TaskQueue indexerQueue;
-
- /**
- * @plexus.requirement role="org.codehaus.plexus.taskqueue.execution.TaskExecutor" role-hint="indexer"
- */
- private IndexerTaskExecutor indexerTaskExecutor;
+ private TaskQueue datarefreshQueue;
/**
* @plexus.requirement
*/
private ArchivaConfiguration archivaConfiguration;
-
+
/**
* @plexus.requirement
*/
- private RepositoryArtifactIndexFactory indexFactory;
+ private ActiveManagedRepositories activeRepositories;
private static final String DISCOVERER_GROUP = "DISCOVERER";
- private static final String INDEXER_JOB = "indexerTask";
+ private static final String DATA_REFRESH_JOB = "dataRefreshTask";
public void start()
throws StartingException
@@ -92,11 +83,11 @@ public class DefaultRepositoryTaskScheduler
try
{
- scheduleJobs( configuration.getIndexPath(), configuration.getIndexerCronExpression() );
+ scheduleJobs( configuration.getDataRefreshCronExpression() );
}
catch ( ParseException e )
{
- throw new StartingException( "Invalid configuration: " + configuration.getIndexerCronExpression(), e );
+ throw new StartingException( "Invalid configuration: " + configuration.getDataRefreshCronExpression(), e );
}
catch ( SchedulerException e )
{
@@ -104,29 +95,22 @@ public class DefaultRepositoryTaskScheduler
}
}
- private void scheduleJobs( String indexPath, String indexerCronExpression )
+ private void scheduleJobs( String indexerCronExpression )
throws ParseException, SchedulerException
{
- if ( indexPath != null )
- {
- JobDetail jobDetail = createJobDetail( INDEXER_JOB );
+ JobDetail jobDetail = createJobDetail( DATA_REFRESH_JOB );
- getLogger().info( "Scheduling indexer: " + indexerCronExpression );
- CronTrigger trigger = new CronTrigger( INDEXER_JOB + "Trigger", DISCOVERER_GROUP, indexerCronExpression );
- scheduler.scheduleJob( jobDetail, trigger );
+ getLogger().info( "Scheduling data-refresh: " + indexerCronExpression );
+ CronTrigger trigger = new CronTrigger( DATA_REFRESH_JOB + "Trigger", DISCOVERER_GROUP, indexerCronExpression );
+ scheduler.scheduleJob( jobDetail, trigger );
- try
- {
- queueNowIfNeeded();
- }
- catch ( org.codehaus.plexus.taskqueue.execution.TaskExecutionException e )
- {
- getLogger().error( "Error executing task first time, continuing anyway: " + e.getMessage(), e );
- }
+ try
+ {
+ queueNowIfNeeded();
}
- else
+ catch ( org.codehaus.plexus.taskqueue.execution.TaskExecutionException e )
{
- getLogger().info( "Not scheduling indexer - index path is not configured" );
+ getLogger().error( "Error executing task first time, continuing anyway: " + e.getMessage(), e );
}
}
@@ -135,7 +119,7 @@ public class DefaultRepositoryTaskScheduler
JobDetail jobDetail = new JobDetail( jobName, DISCOVERER_GROUP, RepositoryTaskJob.class );
JobDataMap dataMap = new JobDataMap();
- dataMap.put( RepositoryTaskJob.TASK_QUEUE, indexerQueue );
+ dataMap.put( RepositoryTaskJob.TASK_QUEUE, datarefreshQueue );
dataMap.put( RepositoryTaskJob.TASK_QUEUE_POLICY, RepositoryTask.QUEUE_POLICY_SKIP );
jobDetail.setJobDataMap( dataMap );
@@ -147,7 +131,7 @@ public class DefaultRepositoryTaskScheduler
{
try
{
- scheduler.unscheduleJob( INDEXER_JOB, DISCOVERER_GROUP );
+ scheduler.unscheduleJob( DATA_REFRESH_JOB, DISCOVERER_GROUP );
}
catch ( SchedulerException e )
{
@@ -163,7 +147,7 @@ public class DefaultRepositoryTaskScheduler
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
- if ( "indexPath".equals( propertyName ) || "indexerCronExpression".equals( propertyName ) )
+ if ( "dataRefreshCronExpression".equals( propertyName ) )
{
getLogger().debug( "Restarting task scheduler with new configuration after property change: " +
propertyName + " to " + propertyValue );
@@ -179,7 +163,7 @@ public class DefaultRepositoryTaskScheduler
try
{
Configuration configuration = archivaConfiguration.getConfiguration();
- scheduleJobs( configuration.getIndexPath(), configuration.getIndexerCronExpression() );
+ scheduleJobs( configuration.getDataRefreshCronExpression() );
}
catch ( ParseException e )
{
@@ -199,43 +183,27 @@ public class DefaultRepositoryTaskScheduler
}
}
- public void runIndexer()
- throws org.apache.maven.archiva.scheduler.TaskExecutionException
+ public void runDataRefresh()
+ throws TaskExecutionException
{
- IndexerTask task = new IndexerTask();
- task.setJobName( "INDEX_INIT" );
+ DataRefreshTask task = new DataRefreshTask();
+ task.setJobName( "DATA_REFRESH_INIT" );
try
{
- indexerQueue.put( task );
+ datarefreshQueue.put( task );
}
catch ( TaskQueueException e )
{
- throw new org.apache.maven.archiva.scheduler.TaskExecutionException( e.getMessage(), e );
+ throw new TaskExecutionException( e.getMessage(), e );
}
}
public void queueNowIfNeeded()
- throws org.codehaus.plexus.taskqueue.execution.TaskExecutionException
+ throws TaskExecutionException
{
- Configuration configuration = archivaConfiguration.getConfiguration();
-
- File indexPath = new File( configuration.getIndexPath() );
-
- try
+ if ( activeRepositories.needsDataRefresh() )
{
- RepositoryArtifactIndex artifactIndex = indexFactory.createStandardIndex( indexPath );
- if ( !artifactIndex.exists() )
- {
- runIndexer();
- }
- }
- catch ( RepositoryIndexException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
- }
- catch ( org.apache.maven.archiva.scheduler.TaskExecutionException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
+ runDataRefresh();
}
}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java
index dc3c26ace..06152f244 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.scheduler;
* under the License.
*/
-import org.apache.maven.archiva.scheduler.task.IndexerTask;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
import org.apache.maven.archiva.scheduler.task.RepositoryTask;
import org.codehaus.plexus.scheduler.AbstractJob;
import org.codehaus.plexus.taskqueue.TaskQueue;
@@ -53,27 +53,27 @@ public class RepositoryTaskJob
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
setJobDataMap( dataMap );
- TaskQueue indexerQueue = (TaskQueue) dataMap.get( TASK_QUEUE );
+ TaskQueue taskQueue = (TaskQueue) dataMap.get( TASK_QUEUE );
String queuePolicy = dataMap.get( TASK_QUEUE_POLICY ).toString();
- RepositoryTask task = new IndexerTask();
+ RepositoryTask task = new DataRefreshTask();
task.setJobName( context.getJobDetail().getName() );
try
{
- if ( indexerQueue.getQueueSnapshot().size() == 0 )
+ if ( taskQueue.getQueueSnapshot().size() == 0 )
{
- indexerQueue.put( task );
+ taskQueue.put( task );
}
else
{
if ( RepositoryTask.QUEUE_POLICY_WAIT.equals( queuePolicy ) )
{
- indexerQueue.put( task );
+ taskQueue.put( task );
}
else if ( RepositoryTask.QUEUE_POLICY_SKIP.equals( queuePolicy ) )
{
- //do not queue anymore, policy is to skip
+ // do not queue anymore, policy is to skip
}
}
}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java
index c63556ff5..08e511f3e 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java
@@ -19,6 +19,8 @@ package org.apache.maven.archiva.scheduler;
* under the License.
*/
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+
/**
* The component that takes care of scheduling in the application.
*
@@ -31,7 +33,7 @@ public interface RepositoryTaskScheduler
*/
String ROLE = RepositoryTaskScheduler.class.getName();
- void runIndexer()
+ void runDataRefresh()
throws TaskExecutionException;
-}
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java
new file mode 100644
index 000000000..783a44c27
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java
@@ -0,0 +1,61 @@
+package org.apache.maven.archiva.scheduler.executors;
+
+/*
+ * 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 java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Mutable list of consumer for the Data Refresh.
+ *
+ * NOTE: This class only exists to minimize the requirements of manual component management.
+ * This approach allows for a small and simple component definition in the application.xml
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.scheduler.executors.DataRefreshConsumers"
+ */
+public class DataRefreshConsumers
+{
+ /**
+ * @plexus.configuration
+ */
+ private List consumerNames;
+
+ public List getConsumerNames()
+ {
+ if ( consumerNames == null )
+ {
+ consumerNames = new ArrayList();
+ consumerNames.add( "index-artifact" );
+ consumerNames.add( "artifact-health" );
+ consumerNames.add( "metadata-health" );
+ }
+
+ return consumerNames;
+ }
+
+ public Iterator iterator()
+ {
+ return getConsumerNames().iterator();
+ }
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java
new file mode 100644
index 000000000..939277235
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java
@@ -0,0 +1,192 @@
+package org.apache.maven.archiva.scheduler.executors;
+
+/*
+ * 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.maven.archiva.common.consumers.Consumer;
+import org.apache.maven.archiva.common.consumers.ConsumerException;
+import org.apache.maven.archiva.common.consumers.ConsumerFactory;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.discoverer.Discoverer;
+import org.apache.maven.archiva.discoverer.DiscovererException;
+import org.apache.maven.archiva.discoverer.DiscovererStatistics;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.taskqueue.Task;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * DataRefreshExecutor
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.codehaus.plexus.taskqueue.execution.TaskExecutor"
+ * role-hint="data-refresh"
+ */
+public class DataRefreshExecutor
+ extends AbstractLogEnabled
+ implements TaskExecutor
+{
+ /**
+ * Configuration store.
+ *
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * @plexus.requirement
+ */
+ private ConfiguredRepositoryFactory repoFactory;
+
+ /**
+ * @plexus.requirement
+ */
+ private DataRefreshConsumers consumerNames;
+
+ /**
+ * @plexus.requirement
+ */
+ private Discoverer discoverer;
+
+ /**
+ * @plexus.requirement
+ */
+ private ConsumerFactory consumerFactory;
+
+ public void executeTask( Task task )
+ throws TaskExecutionException
+ {
+ DataRefreshTask indexerTask = (DataRefreshTask) task;
+
+ getLogger().info( "Executing task from queue with job name: " + indexerTask.getJobName() );
+
+ execute();
+ }
+
+ public void execute()
+ throws TaskExecutionException
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+
+ List consumers = new ArrayList();
+
+ for ( Iterator it = consumerNames.iterator(); it.hasNext(); )
+ {
+ String name = (String) it.next();
+ try
+ {
+ Consumer consumer = consumerFactory.createConsumer( name );
+ consumers.add( consumer );
+ }
+ catch ( ConsumerException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ throw new TaskExecutionException( e.getMessage(), e );
+ }
+ }
+
+ long time = System.currentTimeMillis();
+
+ for ( Iterator i = configuration.getRepositories().iterator(); i.hasNext(); )
+ {
+ RepositoryConfiguration repositoryConfiguration = (RepositoryConfiguration) i.next();
+
+ if ( !repositoryConfiguration.isIndexed() )
+ {
+ continue;
+ }
+
+ ArtifactRepository repository = repoFactory.createRepository( repositoryConfiguration );
+
+ List filteredConsumers = filterConsumers( consumers, repository );
+
+ DiscovererStatistics lastRunStats = new DiscovererStatistics( repository );
+ try
+ {
+ lastRunStats.load( ".datarefresh" );
+ }
+ catch ( IOException e )
+ {
+ getLogger().info(
+ "Unable to load last run statistics for repository [" + repository.getId() + "]: "
+ + e.getMessage() );
+ }
+
+ try
+ {
+ DiscovererStatistics stats = discoverer
+ .walkRepository( repository, filteredConsumers, repositoryConfiguration.isIncludeSnapshots(),
+ lastRunStats.getTimestampFinished(), null, null );
+
+ stats.dump( getLogger() );
+ }
+ catch ( DiscovererException e )
+ {
+ getLogger().error(
+ "Unable to run data refresh against repository [" + repository.getId() + "]: "
+ + e.getMessage(), e );
+ }
+ }
+
+ time = System.currentTimeMillis() - time;
+
+ getLogger().info( "Finished data refresh process in " + time + "ms." );
+ }
+
+ /**
+ * Not all consumers work with all repositories.
+ * This will filter out those incompatible consumers based on the provided repository.
+ *
+ * @param consumers the initial list of consumers.
+ * @param repository the repository to test consumer against.
+ * @return the filtered list of consumers.
+ */
+ private List filterConsumers( List consumers, ArtifactRepository repository )
+ {
+ List filtered = new ArrayList();
+
+ for ( Iterator it = consumers.iterator(); it.hasNext(); )
+ {
+ Consumer consumer = (Consumer) it.next();
+ if ( consumer.init( repository ) )
+ {
+ // Approved!
+ filtered.add( consumer );
+ }
+ else
+ {
+ getLogger().info( "Disabling consumer [" + consumer.getName() + "] for repository " + repository );
+ }
+ }
+
+ return filtered;
+ }
+}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutor.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutor.java
deleted file mode 100644
index 25d390592..000000000
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutor.java
+++ /dev/null
@@ -1,317 +0,0 @@
-package org.apache.maven.archiva.scheduler.executors;
-
-/*
- * 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.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.discoverer.ArtifactDiscoverer;
-import org.apache.maven.archiva.discoverer.DiscovererException;
-import org.apache.maven.archiva.discoverer.MetadataDiscoverer;
-import org.apache.maven.archiva.discoverer.filter.MetadataFilter;
-import org.apache.maven.archiva.discoverer.filter.SnapshotArtifactFilter;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.archiva.indexer.record.IndexRecordExistsArtifactFilter;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.archiva.reporting.database.ReportingDatabase;
-import org.apache.maven.archiva.reporting.executor.ReportExecutor;
-import org.apache.maven.archiva.reporting.filter.ReportingMetadataFilter;
-import org.apache.maven.archiva.reporting.group.ReportGroup;
-import org.apache.maven.archiva.reporting.store.ReportingStoreException;
-import org.apache.maven.archiva.scheduler.task.IndexerTask;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.taskqueue.Task;
-import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
-import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Edwin Punzalan
- * @plexus.component role="org.codehaus.plexus.taskqueue.execution.TaskExecutor" role-hint="indexer"
- */
-public class IndexerTaskExecutor
- extends AbstractLogEnabled
- implements TaskExecutor
-{
- /**
- * Configuration store.
- *
- * @plexus.requirement
- */
- private ArchivaConfiguration archivaConfiguration;
-
- /**
- * @plexus.requirement
- */
- private RepositoryArtifactIndexFactory indexFactory;
-
- /**
- * @plexus.requirement
- */
- private ConfiguredRepositoryFactory repoFactory;
-
- /**
- * @plexus.requirement role="org.apache.maven.archiva.discoverer.ArtifactDiscoverer"
- */
- private Map artifactDiscoverers;
-
- /**
- * @plexus.requirement role="org.apache.maven.archiva.discoverer.MetadataDiscoverer"
- */
- private Map metadataDiscoverers;
-
- /**
- * @plexus.requirement role-hint="standard"
- */
- private RepositoryIndexRecordFactory recordFactory;
-
- /**
- * @plexus.requirement
- */
- private ReportExecutor reportExecutor;
-
- /**
- * @plexus.requirement role-hint="health"
- */
- private ReportGroup reportGroup;
-
- private long lastIndexingTime = 0;
-
- private static final int ARTIFACT_BUFFER_SIZE = 1000;
-
- public long getLastIndexingTime()
- {
- return lastIndexingTime;
- }
-
- public void executeTask( Task task )
- throws TaskExecutionException
- {
- IndexerTask indexerTask = (IndexerTask) task;
-
- getLogger().info( "Executing task from queue with job name: " + indexerTask.getJobName() );
-
- execute();
- }
-
- public void execute()
- throws TaskExecutionException
- {
- Configuration configuration = archivaConfiguration.getConfiguration();
-
- File indexPath = new File( configuration.getIndexPath() );
-
- execute( configuration, indexPath );
- }
-
- public void executeNowIfNeeded()
- throws TaskExecutionException
- {
- Configuration configuration = archivaConfiguration.getConfiguration();
-
- File indexPath = new File( configuration.getIndexPath() );
-
- try
- {
- RepositoryArtifactIndex artifactIndex = indexFactory.createStandardIndex( indexPath );
- if ( !artifactIndex.exists() )
- {
- execute( configuration, indexPath );
- }
- }
- catch ( RepositoryIndexException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
- }
- }
-
- private void execute( Configuration configuration, File indexPath )
- throws TaskExecutionException
- {
- long time = System.currentTimeMillis();
- getLogger().info( "Starting repository indexing process" );
-
- RepositoryArtifactIndex index = indexFactory.createStandardIndex( indexPath );
-
- try
- {
- Collection keys;
- if ( index.exists() )
- {
- keys = index.getAllRecordKeys();
- }
- else
- {
- keys = Collections.EMPTY_LIST;
- }
-
- for ( Iterator i = configuration.getRepositories().iterator(); i.hasNext(); )
- {
- RepositoryConfiguration repositoryConfiguration = (RepositoryConfiguration) i.next();
-
- if ( repositoryConfiguration.isIndexed() )
- {
- List blacklistedPatterns = new ArrayList();
- if ( repositoryConfiguration.getBlackListPatterns() != null )
- {
- blacklistedPatterns.addAll( repositoryConfiguration.getBlackListPatterns() );
- }
- if ( configuration.getGlobalBlackListPatterns() != null )
- {
- blacklistedPatterns.addAll( configuration.getGlobalBlackListPatterns() );
- }
- boolean includeSnapshots = repositoryConfiguration.isIncludeSnapshots();
-
- ArtifactRepository repository = repoFactory.createRepository( repositoryConfiguration );
- ReportingDatabase reporter = reportExecutor.getReportDatabase( repository, reportGroup );
-
- // keep original value in case there is another process under way
- long origStartTime = reporter.getStartTime();
- reporter.setStartTime( System.currentTimeMillis() );
-
- // Discovery process
- String layoutProperty = repositoryConfiguration.getLayout();
- ArtifactDiscoverer discoverer = (ArtifactDiscoverer) artifactDiscoverers.get( layoutProperty );
- AndArtifactFilter filter = new AndArtifactFilter();
- filter.add( new IndexRecordExistsArtifactFilter( keys ) );
- if ( !includeSnapshots )
- {
- filter.add( new SnapshotArtifactFilter() );
- }
-
- // Save some memory by not tracking paths we won't use
- // TODO: Plexus CDC should be able to inject this configuration
- discoverer.setTrackOmittedPaths( false );
-
- getLogger().info( "Searching repository " + repositoryConfiguration.getName() );
- List artifacts = discoverer.discoverArtifacts( repository, blacklistedPatterns, filter );
-
- if ( !artifacts.isEmpty() )
- {
- getLogger().info( "Discovered " + artifacts.size() + " unindexed artifacts" );
-
- // Work through these in batches, then flush the project cache.
- for ( int j = 0; j < artifacts.size(); j += ARTIFACT_BUFFER_SIZE )
- {
- int end = j + ARTIFACT_BUFFER_SIZE;
- List currentArtifacts =
- artifacts.subList( j, end > artifacts.size() ? artifacts.size() : end );
-
- // TODO: proper queueing of this in case it was triggered externally (not harmful to do so at present, but not optimal)
-
- // run the reports. Done intermittently to avoid losing track of what is indexed since
- // that is what the filter is based on.
- reportExecutor.runArtifactReports( reportGroup, currentArtifacts, repository );
-
- index.indexArtifacts( currentArtifacts, recordFactory );
-
- // MRM-142 - the project builder retains a lot of objects in its inflexible cache. This is a hack
- // around that. TODO: remove when it is configurable
- flushProjectBuilderCacheHack();
- }
- }
-
- MetadataFilter metadataFilter = new ReportingMetadataFilter( reporter );
-
- MetadataDiscoverer metadataDiscoverer = (MetadataDiscoverer) metadataDiscoverers
- .get( layoutProperty );
- List metadata =
- metadataDiscoverer.discoverMetadata( repository, blacklistedPatterns, metadataFilter );
-
- if ( !metadata.isEmpty() )
- {
- getLogger().info( "Discovered " + metadata.size() + " unprocessed metadata files" );
-
- // run the reports
- reportExecutor.runMetadataReports( reportGroup, metadata, repository );
- }
-
- reporter.setStartTime( origStartTime );
- }
- }
- }
- catch ( RepositoryIndexException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
- }
- catch ( DiscovererException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
- }
- catch ( ReportingStoreException e )
- {
- throw new TaskExecutionException( e.getMessage(), e );
- }
-
- time = System.currentTimeMillis() - time;
- lastIndexingTime = System.currentTimeMillis();
- getLogger().info( "Finished repository indexing process in " + time + "ms" );
- }
-
- /**
- * @todo remove when no longer needed (MRM-142)
- * @plexus.requirement
- */
- private MavenProjectBuilder projectBuilder;
-
- private void flushProjectBuilderCacheHack()
- {
- try
- {
- if ( projectBuilder != null )
- {
- getLogger().info( "projectBuilder is type " + projectBuilder.getClass().getName() );
-
- java.lang.reflect.Field f = projectBuilder.getClass().getDeclaredField( "rawProjectCache" );
- f.setAccessible( true );
- Map cache = (Map) f.get( projectBuilder );
- getLogger().info( "projectBuilder.raw is type " + cache.getClass().getName() );
- cache.clear();
-
- f = projectBuilder.getClass().getDeclaredField( "processedProjectCache" );
- f.setAccessible( true );
- cache = (Map) f.get( projectBuilder );
- getLogger().info( "projectBuilder.processed is type " + cache.getClass().getName() );
- cache.clear();
- }
- }
- catch ( NoSuchFieldException e )
- {
- throw new RuntimeException( e );
- }
- catch ( IllegalAccessException e )
- {
- throw new RuntimeException( e );
- }
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java
new file mode 100644
index 000000000..57d4b683e
--- /dev/null
+++ b/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java
@@ -0,0 +1,41 @@
+package org.apache.maven.archiva.scheduler.task;
+
+/**
+ * DataRefreshTask - task for discovering changes in the repository
+ * and updating all associated data.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DataRefreshTask
+ implements RepositoryTask
+{
+ private String jobName;
+
+ private String policy;
+
+ public String getJobName()
+ {
+ return jobName;
+ }
+
+ public String getQueuePolicy()
+ {
+ return policy;
+ }
+
+ public void setJobName( String jobName )
+ {
+ this.jobName = jobName;
+ }
+
+ public void setQueuePolicy( String policy )
+ {
+ this.policy = policy;
+ }
+
+ public long getMaxExecutionTime()
+ {
+ return 0;
+ }
+}
diff --git a/archiva-core/src/main/resources/META-INF/plexus/components.xml b/archiva-core/src/main/resources/META-INF/plexus/components.xml
index 1fe09e4ff..cbf418cb4 100644
--- a/archiva-core/src/main/resources/META-INF/plexus/components.xml
+++ b/archiva-core/src/main/resources/META-INF/plexus/components.xml
@@ -21,9 +21,67 @@
<component-set>
<components>
+ <!-- TODO: Remove once CDC can handle correct cross-module descriptor creation. -->
+
+ <!-- SNIP:START -->
+
+ <component>
+ <role>org.apache.maven.archiva.common.consumers.Consumer</role>
+ <role-hint>index-artifact</role-hint>
+ <implementation>org.apache.maven.archiva.consumers.IndexArtifactConsumer</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ <field-name>artifactFactory</field-name>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.apache.maven.archiva.common.consumers.Consumer</role>
+ <role-hint>artifact-health</role-hint>
+ <implementation>org.apache.maven.archiva.consumers.ArtifactHealthConsumer</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ <field-name>artifactFactory</field-name>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.apache.maven.archiva.common.consumers.Consumer</role>
+ <role-hint>metadata-health</role-hint>
+ <implementation>org.apache.maven.archiva.consumers.RepositoryMetadataHealthConsumer</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ <field-name>artifactFactory</field-name>
+ </requirement>
+ </requirements>
+ </component>
+
+ <!-- SNIP:END -->
+
+ <component>
+ <role>org.apache.maven.archiva.scheduler.executors.DataRefreshConsumers</role>
+ <implementation>org.apache.maven.archiva.scheduler.executors.DataRefreshConsumers</implementation>
+ <description>Mutable list of consumer for the Data Refresh.</description>
+ <configuration>
+ <consumer-names>
+ <consumer-name>index-artifact</consumer-name>
+ <consumer-name>artifact-health</consumer-name>
+ <consumer-name>metadata-health</consumer-name>
+ </consumer-names>
+ </configuration>
+ </component>
+
<component>
<role>org.codehaus.plexus.taskqueue.TaskQueue</role>
- <role-hint>indexer</role-hint>
+ <role-hint>data-refresh</role-hint>
<implementation>org.codehaus.plexus.taskqueue.DefaultTaskQueue</implementation>
<lifecycle-handler>plexus-configurable</lifecycle-handler>
<configuration>
@@ -38,20 +96,20 @@
<component>
<role>org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor</role>
- <role-hint>indexer</role-hint>
+ <role-hint>data-refresh</role-hint>
<implementation>org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor</implementation>
<requirements>
<requirement>
<role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
- <role-hint>indexer</role-hint>
+ <role-hint>data-refresh</role-hint>
</requirement>
<requirement>
<role>org.codehaus.plexus.taskqueue.TaskQueue</role>
- <role-hint>indexer</role-hint>
+ <role-hint>data-refresh</role-hint>
</requirement>
</requirements>
<configuration>
- <name>indexer</name>
+ <name>data-refresh</name>
</configuration>
</component>
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedEjbArtifact.java b/archiva-core/src/test/java/org/apache/maven/archiva/AllTests.java
index eacf1cbdf..e037e09c3 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/artifact/ManagedEjbArtifact.java
+++ b/archiva-core/src/test/java/org/apache/maven/archiva/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.artifact;
+package org.apache.maven.archiva;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,31 +19,26 @@ package org.apache.maven.archiva.artifact;
* under the License.
*/
-import org.apache.maven.artifact.Artifact;
+import junit.framework.Test;
+import junit.framework.TestSuite;
/**
- * ManagedEjbArtifact - adds the ability to reference the ejb-client jar too.
+ * AllTests - added to allow IDE users to pull all tests into their tool.
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
-public class ManagedEjbArtifact
- extends ManagedJavaArtifact
+public class AllTests
{
- public static final String CLIENT = "client";
- public ManagedEjbArtifact( String repoId, Artifact artifact, String path )
+ public static Test suite()
{
- super( repoId, artifact, path );
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva" );
+ //$JUnit-BEGIN$
+ suite.addTest( org.apache.maven.archiva.repositories.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.scheduler.executors.AllTests.suite() );
+ //$JUnit-END$
+ return suite;
}
- public String getClientPath()
- {
- return (String) super.attached.get( CLIENT );
- }
-
- public void setClientPath( String clientPath )
- {
- super.attached.put( CLIENT, clientPath );
- }
}
diff --git a/archiva-core/src/test/java/org/apache/maven/archiva/LegacyRepositoryConverterTest.java b/archiva-core/src/test/java/org/apache/maven/archiva/LegacyRepositoryConverterTest.java
deleted file mode 100644
index bd13a7deb..000000000
--- a/archiva-core/src/test/java/org/apache/maven/archiva/LegacyRepositoryConverterTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.maven.archiva;
-
-/*
- * 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.maven.archiva.conversion.LegacyRepositoryConverter;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-
-/**
- * @author Jason van Zyl
- */
-public class LegacyRepositoryConverterTest
- extends PlexusTestCase
-{
- public void testLegacyRepositoryConversion()
- throws Exception
- {
- File legacyRepositoryDirectory = getTestFile( "src/test/maven-1.x-repository" );
-
- File repositoryDirectory = getTestFile( "target/maven-2.x-repository" );
-
- LegacyRepositoryConverter rm = (LegacyRepositoryConverter) lookup( LegacyRepositoryConverter.ROLE );
-
- rm.convertLegacyRepository( legacyRepositoryDirectory, repositoryDirectory, null, true );
- }
-}
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/TaskExecutionException.java b/archiva-core/src/test/java/org/apache/maven/archiva/repositories/AllTests.java
index 51643445a..0b82640b9 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/TaskExecutionException.java
+++ b/archiva-core/src/test/java/org/apache/maven/archiva/repositories/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.scheduler;
+package org.apache.maven.archiva.repositories;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -9,7 +9,7 @@ package org.apache.maven.archiva.scheduler;
* "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
+ * 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
@@ -19,16 +19,25 @@ package org.apache.maven.archiva.scheduler;
* under the License.
*/
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
/**
- * Exception occurring during task execution.
+ * AllTests
*
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
*/
-public class TaskExecutionException
- extends Exception
+public class AllTests
{
- public TaskExecutionException( String message, Throwable t )
+
+ public static Test suite()
{
- super( message, t );
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repositories" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( DefaultActiveManagedRepositoriesTest.class );
+ //$JUnit-END$
+ return suite;
}
+
}
diff --git a/archiva-core/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java b/archiva-core/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java
index a535307e2..f4e89eadf 100644
--- a/archiva-core/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java
+++ b/archiva-core/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java
@@ -19,15 +19,15 @@ package org.apache.maven.archiva.repositories;
* under the License.
*/
-import org.apache.maven.archiva.artifact.ManagedArtifact;
-import org.apache.maven.archiva.artifact.ManagedEjbArtifact;
-import org.apache.maven.archiva.artifact.ManagedJavaArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedEjbArtifact;
+import org.apache.maven.archiva.common.artifact.managed.ManagedJavaArtifact;
import org.codehaus.plexus.PlexusTestCase;
/**
* DefaultActiveManagedRepositoriesTest
*
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
*/
public class DefaultActiveManagedRepositoriesTest
diff --git a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/IndexerTask.java b/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/AllTests.java
index a4cd2f612..9fdfcc15b 100644
--- a/archiva-core/src/main/java/org/apache/maven/archiva/scheduler/task/IndexerTask.java
+++ b/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.scheduler.task;
+package org.apache.maven.archiva.scheduler.executors;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -9,7 +9,7 @@ package org.apache.maven.archiva.scheduler.task;
* "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
+ * 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
@@ -19,42 +19,25 @@ package org.apache.maven.archiva.scheduler.task;
* under the License.
*/
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
/**
- * Task for discovering changes in the repository and updating the index accordingly.
+ * AllTests
*
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
*/
-public class IndexerTask
- implements RepositoryTask
+public class AllTests
{
- private String jobName;
-
- private String policy;
-
- public long getMaxExecutionTime()
- {
- return 0;
- }
-
- public String getJobName()
- {
- return jobName;
- }
- public String getQueuePolicy()
+ public static Test suite()
{
- return policy;
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.scheduler.executors" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( DataRefreshExecutorTest.class );
+ //$JUnit-END$
+ return suite;
}
- public void setQueuePolicy( String policy )
- {
- this.policy = policy;
- }
-
- public void setJobName( String jobName )
- {
- this.jobName = jobName;
- }
-
-
}
diff --git a/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.java b/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java
index 8729e0ccb..ad9900795 100644
--- a/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.java
+++ b/archiva-core/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java
@@ -22,7 +22,7 @@ package org.apache.maven.archiva.scheduler.executors;
import org.apache.commons.io.FileUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.scheduler.task.IndexerTask;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
@@ -32,10 +32,10 @@ import java.io.File;
/**
* IndexerTaskExecutorTest
*
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
*/
-public class IndexerTaskExecutorTest
+public class DataRefreshExecutorTest
extends PlexusTestCase
{
private TaskExecutor taskExecutor;
@@ -45,7 +45,7 @@ public class IndexerTaskExecutorTest
{
super.setUp();
- taskExecutor = (TaskExecutor) lookup( "org.codehaus.plexus.taskqueue.execution.TaskExecutor", "indexer" );
+ taskExecutor = (TaskExecutor) lookup( "org.codehaus.plexus.taskqueue.execution.TaskExecutor", "data-refresh" );
ArchivaConfiguration archivaConfiguration =
(ArchivaConfiguration) lookup( ArchivaConfiguration.class.getName() );
@@ -58,18 +58,18 @@ public class IndexerTaskExecutorTest
}
}
- public void testIndexer()
+ public void testExecutor()
throws TaskExecutionException
{
- taskExecutor.executeTask( new TestIndexerTask() );
+ taskExecutor.executeTask( new TestDataRefreshTask() );
}
- class TestIndexerTask
- extends IndexerTask
+ class TestDataRefreshTask
+ extends DataRefreshTask
{
public String getJobName()
{
- return "TestIndexer";
+ return "TestDataRefresh";
}
}
}
diff --git a/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.xml b/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.xml
new file mode 100644
index 000000000..5a7d8101b
--- /dev/null
+++ b/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ~ 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.
+ -->
+
+<component-set>
+ <components>
+ <component>
+ <role>org.codehaus.plexus.registry.Registry</role>
+ <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+ <role-hint>commons-configuration</role-hint>
+ <configuration>
+ <properties>
+ <xml fileName="${basedir}/src/test/conf/archiva.xml"
+ config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+ </properties>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.codehaus.plexus.jdo.JdoFactory</role>
+ <role-hint>archiva</role-hint>
+ <implementation>org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory</implementation>
+
+ <configuration>
+ <!-- Database Configuration -->
+ <driverName>org.hsqldb.jdbcDriver</driverName>
+ <url>jdbc:hsqldb:mem:TESTDB</url>
+ <userName>sa</userName>
+ <password></password>
+
+ <!-- JPOX and JDO configuration -->
+ <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
+ <otherProperties>
+ <property>
+ <name>javax.jdo.PersistenceManagerFactoryClass</name>
+ <value>org.jpox.PersistenceManagerFactoryImpl</value>
+ </property>
+ <property>
+ <name>org.jpox.autoCreateSchema</name>
+ <value>true</value>
+ </property>
+ <property>
+ <name>org.jpox.validateTables</name>
+ <value>false</value>
+ </property>
+ <property>
+ <name>org.jpox.validateConstraints</name>
+ <value>false</value>
+ </property>
+ <property>
+ <name>org.jpox.validateColumns</name>
+ <value>false</value>
+ </property>
+ <property>
+ <name>org.jpox.autoStartMechanism</name>
+ <value>None</value>
+ </property>
+ <property>
+ <name>org.jpox.transactionIsolation</name>
+ <value>READ_UNCOMMITTED</value>
+ </property>
+ <property>
+ <name>org.jpox.poid.transactionIsolation</name>
+ <value>READ_UNCOMMITTED</value>
+ </property>
+ <property>
+ <name>org.jpox.rdbms.dateTimezone</name>
+ <value>JDK_DEFAULT_TIMEZONE</value>
+ </property>
+ </otherProperties>
+ </configuration>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.xml b/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.xml
deleted file mode 100644
index 34d15023a..000000000
--- a/archiva-core/src/test/resources/org/apache/maven/archiva/scheduler/executors/IndexerTaskExecutorTest.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ 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.
- -->
-
-<component-set>
- <components>
- <component>
- <role>org.codehaus.plexus.registry.Registry</role>
- <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
- <role-hint>commons-configuration</role-hint>
- <configuration>
- <properties>
- <xml fileName="${basedir}/src/test/conf/archiva.xml"
- config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
- </properties>
- </configuration>
- </component>
- </components>
-</component-set>