From d6c33feff12568218e694f0bf9a421fa19cb1914 Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Wed, 10 Mar 2010 16:15:21 +0000 Subject: [PATCH] [MRM-1282] remove use of repository layer in favour of storage API git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@921423 13f79535-47bb-0310-9956-ffa450edef68 --- .../archiva-metadata-consumer/pom.xml | 23 +++++++- .../ArchivaMetadataCreationConsumer.java | 57 +++++-------------- .../storage/StorageMetadataResolver.java | 7 ++- .../Maven2RepositoryMetadataResolver.java | 18 +++++- 4 files changed, 54 insertions(+), 51 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/pom.xml index 1b87b3f0b..c71f87b0e 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/pom.xml +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/pom.xml @@ -18,7 +18,8 @@ ~ under the License. --> - + 4.0.0 archiva-consumers @@ -32,6 +33,14 @@ org.apache.archiva archiva-consumer-api + + org.apache.archiva + archiva-configuration + + + org.apache.archiva + archiva-common + org.apache.archiva metadata-model @@ -41,8 +50,16 @@ metadata-repository-api - org.apache.archiva - archiva-repository-layer + org.slf4j + slf4j-api + + + org.codehaus.plexus + plexus-component-api + + + org.codehaus.plexus.registry + plexus-registry-api diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java index 590135a27..762f79d55 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java @@ -24,7 +24,6 @@ import org.apache.archiva.metadata.model.ProjectMetadata; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.MetadataResolutionException; -import org.apache.archiva.metadata.repository.filter.IncludesFilter; import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver; import org.apache.maven.archiva.common.utils.VersionUtil; import org.apache.maven.archiva.configuration.ArchivaConfiguration; @@ -34,9 +33,6 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer; import org.apache.maven.archiva.consumers.ConsumerException; import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer; -import org.apache.maven.archiva.model.ArtifactReference; -import org.apache.maven.archiva.repository.ManagedRepositoryContent; -import org.apache.maven.archiva.repository.layout.LayoutException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import org.codehaus.plexus.registry.Registry; @@ -44,9 +40,7 @@ import org.codehaus.plexus.registry.RegistryListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.List; @@ -83,11 +77,6 @@ public class ArchivaMetadataCreationConsumer private Date whenGathered; - /** - * @plexus.requirement - */ - private ManagedRepositoryContent repository; - private List includes = new ArrayList(); /** @@ -96,9 +85,7 @@ public class ArchivaMetadataCreationConsumer private MetadataRepository metadataRepository; /** - * FIXME: this needs to be configurable based on storage type, and availability of proxy module - * ... could be a different type since we need methods to modify the storage metadata, which would also allow more - * appropriate methods to pass in the already determined repository configuration, for example, instead of the ID + * FIXME: this needs to be configurable based on storage type * * @plexus.requirement role-hint="maven2" */ @@ -106,6 +93,8 @@ public class ArchivaMetadataCreationConsumer private static final Logger log = LoggerFactory.getLogger( ArchivaMetadataCreationConsumer.class ); + private String repoId; + public String getId() { return this.id; @@ -134,7 +123,7 @@ public class ArchivaMetadataCreationConsumer public void beginScan( ManagedRepositoryConfiguration repo, Date whenGathered ) throws ConsumerException { - this.repository.setRepository( repo ); + repoId = repo.getId(); this.whenGathered = whenGathered; } @@ -144,30 +133,20 @@ public class ArchivaMetadataCreationConsumer // note that we do minimal processing including checksums and POM information for performance of // the initial scan. Any request for this information will be intercepted and populated on-demand // or picked up by subsequent scans - ArtifactReference artifact; - try - { - artifact = repository.toArtifactReference( path ); - } - catch ( LayoutException e ) - { - throw new ConsumerException( e.getMessage(), e ); - } - File file = new File( repository.getRepoRoot(), path ); + ArtifactMetadata artifact = storageResolver.getArtifactForPath( repoId, path ); ProjectMetadata project = new ProjectMetadata(); - project.setNamespace( artifact.getGroupId() ); - project.setId( artifact.getArtifactId() ); + project.setNamespace( artifact.getNamespace() ); + project.setId( artifact.getProject() ); String projectVersion = VersionUtil.getBaseVersion( artifact.getVersion() ); // TODO: maybe not too efficient since it may have already been read and stored for this artifact ProjectVersionMetadata versionMetadata = null; try { - versionMetadata = - storageResolver.getProjectVersion( repository.getId(), artifact.getGroupId(), artifact.getArtifactId(), - projectVersion ); + versionMetadata = storageResolver.getProjectVersion( repoId, artifact.getNamespace(), artifact.getProject(), + projectVersion ); } catch ( MetadataResolutionException e ) { @@ -184,25 +163,15 @@ public class ArchivaMetadataCreationConsumer createVersionMetadata = true; } - // A bit weird to reconstruct the file we already have, but don't want to expose getArtifactFromFile in the - // storage API - IncludesFilter filter = new IncludesFilter( Arrays.asList( file.getName() ) ); - ArtifactMetadata artifactMeta = storageResolver.getArtifacts( repository.getId(), artifact.getGroupId(), - artifact.getArtifactId(), projectVersion, - filter ).iterator().next(); - artifactMeta.setVersion( artifact.getVersion() ); - artifactMeta.setWhenGathered( whenGathered ); - // TODO: transaction // read the metadata and update it if it is newer or doesn't exist - metadataRepository.updateArtifact( repository.getId(), project.getNamespace(), project.getId(), projectVersion, - artifactMeta ); + artifact.setWhenGathered( whenGathered ); + metadataRepository.updateArtifact( repoId, project.getNamespace(), project.getId(), projectVersion, artifact ); if ( createVersionMetadata ) { - metadataRepository.updateProjectVersion( repository.getId(), project.getNamespace(), project.getId(), - versionMetadata ); + metadataRepository.updateProjectVersion( repoId, project.getNamespace(), project.getId(), versionMetadata ); } - metadataRepository.updateProject( repository.getId(), project ); + metadataRepository.updateProject( repoId, project ); } public void completeScan() diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java index 236b97bb3..771bd4266 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java @@ -19,12 +19,12 @@ package org.apache.archiva.metadata.repository.storage; * under the License. */ -import java.util.Collection; - import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.filter.Filter; +import java.util.Collection; + public interface StorageMetadataResolver extends MetadataResolver { @@ -38,4 +38,7 @@ public interface StorageMetadataResolver Collection getArtifacts( String repoId, String namespace, String projectId, String projectVersion, Filter filter ); + + // TODO: reconsider this API, do we want to expose storage format in the form of a path? + ArtifactMetadata getArtifactForPath( String repoId, String path ); } diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java index d712980f0..1fc43012b 100644 --- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java +++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java @@ -497,12 +497,28 @@ public class Maven2RepositoryMetadataResolver return artifacts; } + public ArtifactMetadata getArtifactForPath( String repoId, String path ) + { + ArtifactMetadata metadata = pathTranslator.getArtifactForPath( repoId, path ); + + populateArtifactMetadataFromFile( metadata, new File( getRepositoryBasedir( repoId ), path ) ); + + return metadata; + } + private ArtifactMetadata getArtifactFromFile( String repoId, String namespace, String projectId, String projectVersion, File file ) { ArtifactMetadata metadata = pathTranslator.getArtifactFromId( repoId, namespace, projectId, projectVersion, file.getName() ); + populateArtifactMetadataFromFile( metadata, file ); + + return metadata; + } + + private static void populateArtifactMetadataFromFile( ArtifactMetadata metadata, File file ) + { metadata.setWhenGathered( new Date() ); metadata.setFileLastModified( file.lastModified() ); ChecksummedFile checksummedFile = new ChecksummedFile( file ); @@ -523,8 +539,6 @@ public class Maven2RepositoryMetadataResolver log.error( "Unable to checksum file " + file + ": " + e.getMessage() ); } metadata.setSize( file.length() ); - - return metadata; } private boolean isProject( File dir, Filter filter )