From 3d61eecdc490f6a75784502d289e0989dc36d53f Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Sat, 28 Nov 2009 14:28:30 +0000 Subject: [PATCH] [MRM-1283] improve performance of on-demand resolution from storage. Still could be improved. git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@885095 13f79535-47bb-0310-9956-ffa450edef68 --- .../repository/DefaultMetadataResolver.java | 80 ++++++---- .../repository/MetadataRepository.java | 3 + .../metadata/repository/MetadataResolver.java | 3 +- .../metadata/repository/filter/AllFilter.java | 29 ++++ .../repository/filter/ExcludesFilter.java | 38 +++++ .../metadata/repository/filter/Filter.java | 25 ++++ .../storage/StorageMetadataResolver.java | 37 +++++ .../Maven2RepositoryMetadataResolver.java | 137 ++++++++++++------ .../Maven2RepositoryMetadataResolverTest.java | 4 +- .../file/FileMetadataRepository.java | 21 ++- 10 files changed, 298 insertions(+), 79 deletions(-) create mode 100644 archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/AllFilter.java create mode 100644 archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/ExcludesFilter.java create mode 100644 archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/Filter.java create mode 100644 archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java index 09b3fd93f..5ba2b79de 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java @@ -19,12 +19,15 @@ package org.apache.archiva.metadata.repository; * under the License. */ +import java.util.ArrayList; import java.util.Collection; import org.apache.archiva.metadata.model.Dependency; import org.apache.archiva.metadata.model.ProjectMetadata; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.model.ProjectVersionReference; +import org.apache.archiva.metadata.repository.filter.ExcludesFilter; +import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver; /** * @plexus.component role="org.apache.archiva.metadata.repository.MetadataResolver" @@ -44,7 +47,7 @@ public class DefaultMetadataResolver * * @plexus.requirement role-hint="maven2" */ - private MetadataResolver storageResolver; + private StorageMetadataResolver storageResolver; public ProjectMetadata getProject( String repoId, String namespace, String projectId ) { @@ -104,56 +107,79 @@ public class DefaultMetadataResolver public Collection getRootNamespaces( String repoId ) { - Collection rootNamespaces = metadataRepository.getRootNamespaces( repoId ); - - // TODO: may want caching on this - Collection storageRootNamespaces = storageResolver.getRootNamespaces( repoId ); - if ( storageRootNamespaces != null && !storageRootNamespaces.equals( rootNamespaces ) ) + Collection namespaces = metadataRepository.getRootNamespaces( repoId ); + Collection storageNamespaces = + storageResolver.getRootNamespaces( repoId, new ExcludesFilter( namespaces ) ); + if ( storageNamespaces != null && !storageNamespaces.isEmpty() ) { - // TODO: update the metadata repository - rootNamespaces = storageRootNamespaces; + for ( String n : storageNamespaces ) + { + metadataRepository.updateNamespace( repoId, n ); + } + namespaces = new ArrayList( namespaces ); + namespaces.addAll( storageNamespaces ); } - - return rootNamespaces; + return namespaces; } public Collection getNamespaces( String repoId, String namespace ) { Collection namespaces = metadataRepository.getNamespaces( repoId, namespace ); - // TODO: may want caching on this - Collection storageNamespaces = storageResolver.getNamespaces( repoId, namespace ); - if ( storageNamespaces != null && !storageNamespaces.equals( namespaces ) ) + Collection storageNamespaces = + storageResolver.getNamespaces( repoId, namespace, new ExcludesFilter( namespaces ) ); + if ( storageNamespaces != null && !storageNamespaces.isEmpty() ) { - // TODO: update the metadata repository - namespaces = storageNamespaces; + for ( String n : storageNamespaces ) + { + metadataRepository.updateNamespace( repoId, namespace + "." + n ); + } + namespaces = new ArrayList( namespaces ); + namespaces.addAll( storageNamespaces ); } - return namespaces; } public Collection getProjects( String repoId, String namespace ) { Collection projects = metadataRepository.getProjects( repoId, namespace ); - // TODO: may want caching on this - Collection storageProjects = storageResolver.getProjects( repoId, namespace ); - if ( storageProjects != null && !storageProjects.equals( projects ) ) + Collection storageProjects = + storageResolver.getProjects( repoId, namespace, new ExcludesFilter( projects ) ); + if ( storageProjects != null && !storageProjects.isEmpty() ) { - // TODO: update the metadata repository - projects = storageProjects; + for ( String projectId : storageProjects ) + { + ProjectMetadata projectMetadata = storageResolver.getProject( repoId, namespace, projectId ); + if ( projectMetadata != null ) + { + metadataRepository.updateProject( repoId, projectMetadata ); + } + } + projects = new ArrayList( projects ); + projects.addAll( storageProjects ); } - return projects; } public Collection getProjectVersions( String repoId, String namespace, String projectId ) + throws MetadataResolverException { Collection projectVersions = metadataRepository.getProjectVersions( repoId, namespace, projectId ); - // TODO: may want caching on this - Collection storageProjectVersions = storageResolver.getProjectVersions( repoId, namespace, projectId ); - if ( storageProjectVersions != null && !storageProjectVersions.equals( projectVersions ) ) + Collection storageProjectVersions = storageResolver.getProjectVersions( repoId, namespace, projectId, + new ExcludesFilter( + projectVersions ) ); + if ( storageProjectVersions != null && !storageProjectVersions.isEmpty() ) { - // TODO: update the metadata repository - projectVersions = storageProjectVersions; + for ( String projectVersion : storageProjectVersions ) + { + ProjectVersionMetadata versionMetadata = + storageResolver.getProjectVersion( repoId, namespace, projectId, projectVersion ); + if ( versionMetadata != null ) + { + metadataRepository.updateProjectVersion( repoId, namespace, projectId, versionMetadata ); + } + } + projectVersions = new ArrayList( projectVersions ); + projectVersions.addAll( storageProjectVersions ); } return projectVersions; } diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java index a41016be3..3428320f9 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java @@ -30,6 +30,7 @@ public interface MetadataRepository /** * Update metadata for a particular project in the metadata repository, or create it if it does not already exist. * + * @param repoId the repository the project is in * @param project the project metadata to create or update */ void updateProject( String repoId, ProjectMetadata project ); @@ -42,4 +43,6 @@ public interface MetadataRepository void updateProjectReference( String repoId, String namespace, String projectId, String projectVersion, ProjectVersionReference reference ); + + void updateNamespace( String repoId, String namespace ); } diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java index 2f957c813..d804b60fc 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java @@ -54,5 +54,6 @@ public interface MetadataResolver Collection getProjects( String repoId, String namespace ); - Collection getProjectVersions( String repoId, String namespace, String projectId ); + Collection getProjectVersions( String repoId, String namespace, String projectId ) + throws MetadataResolverException; } diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/AllFilter.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/AllFilter.java new file mode 100644 index 000000000..f3f571f2f --- /dev/null +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/AllFilter.java @@ -0,0 +1,29 @@ +package org.apache.archiva.metadata.repository.filter; + +/* + * 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. + */ + +public class AllFilter + implements Filter +{ + public boolean accept( T value ) + { + return true; + } +} \ No newline at end of file diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/ExcludesFilter.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/ExcludesFilter.java new file mode 100644 index 000000000..d97c4ed99 --- /dev/null +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/ExcludesFilter.java @@ -0,0 +1,38 @@ +package org.apache.archiva.metadata.repository.filter; + +/* + * 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.Collection; + +public class ExcludesFilter + implements Filter +{ + private Collection excludes; + + public ExcludesFilter( Collection excludes ) + { + this.excludes = excludes; + } + + public boolean accept( T value ) + { + return !excludes.contains( value ); + } +} diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/Filter.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/Filter.java new file mode 100644 index 000000000..88344e8b3 --- /dev/null +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/filter/Filter.java @@ -0,0 +1,25 @@ +package org.apache.archiva.metadata.repository.filter; + +/* + * 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. + */ + +public interface Filter +{ + boolean accept( T value ); +} 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 new file mode 100644 index 000000000..a83bb9ca1 --- /dev/null +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/StorageMetadataResolver.java @@ -0,0 +1,37 @@ +package org.apache.archiva.metadata.repository.storage; + +import java.util.Collection; + +import org.apache.archiva.metadata.repository.MetadataResolver; +import org.apache.archiva.metadata.repository.filter.Filter; + +/* + * 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. + */ + +public interface StorageMetadataResolver + extends MetadataResolver +{ + Collection getRootNamespaces( String repoId, Filter filter ); + + Collection getNamespaces( String repoId, String namespace, Filter filter ); + + Collection getProjects( String repoId, String namespace, Filter filter ); + + Collection getProjectVersions( String repoId, String namespace, String projectId, Filter filter ); +} 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 d7dac2985..8fb326104 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 @@ -30,9 +30,11 @@ import java.util.List; import org.apache.archiva.metadata.model.ProjectMetadata; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.model.ProjectVersionReference; -import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.MetadataResolverException; +import org.apache.archiva.metadata.repository.filter.AllFilter; +import org.apache.archiva.metadata.repository.filter.Filter; import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; +import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver; import org.apache.maven.archiva.common.utils.VersionUtil; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; @@ -53,10 +55,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * @plexus.component role="org.apache.archiva.metadata.repository.MetadataResolver" role-hint="maven2" + * @plexus.component role="org.apache.archiva.metadata.repository.storage.StorageMetadataResolver" role-hint="maven2" */ public class Maven2RepositoryMetadataResolver - implements MetadataResolver + implements StorageMetadataResolver { /** * @plexus.requirement @@ -77,25 +79,12 @@ public class Maven2RepositoryMetadataResolver private static final String METADATA_FILENAME = "maven-metadata.xml"; - private static final FilenameFilter DIRECTORY_FILTER = new FilenameFilter() - { - public boolean accept( File dir, String name ) - { - if ( name.startsWith( "." ) ) - { - return false; - } - else if ( !new File( dir, name ).isDirectory() ) - { - return false; - } - return true; - } - }; + private static final Filter ALL = new AllFilter(); public ProjectMetadata getProject( String repoId, String namespace, String projectId ) { - throw new UnsupportedOperationException(); + // TODO: could natively implement the "shared model" concept from the browse action to avoid needing it there? + return null; } public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, @@ -291,24 +280,30 @@ public class Maven2RepositoryMetadataResolver return ci; } - // TODO: evidence that storage and resolver != repository API - split the interface up public Collection getArtifactVersions( String repoId, String namespace, String projectId, String projectVersion ) { + // TODO: useful, but not implemented yet, not called from DefaultMetadataResolver throw new UnsupportedOperationException(); } public Collection getProjectReferences( String repoId, String namespace, String projectId, String projectVersion ) { + // Can't be determined on a Maven 2 repository throw new UnsupportedOperationException(); } public Collection getRootNamespaces( String repoId ) + { + return getRootNamespaces( repoId, ALL ); + } + + public Collection getRootNamespaces( String repoId, Filter filter ) { File dir = getRepositoryBasedir( repoId ); - String[] files = dir.list( DIRECTORY_FILTER ); + String[] files = dir.list( new DirectoryFilter( filter ) ); return files != null ? Arrays.asList( files ) : Collections.emptyList(); } @@ -321,17 +316,22 @@ public class Maven2RepositoryMetadataResolver } public Collection getNamespaces( String repoId, String namespace ) + { + return getNamespaces( repoId, namespace, ALL ); + } + + public Collection getNamespaces( String repoId, String namespace, Filter filter ) { File dir = pathTranslator.toFile( getRepositoryBasedir( repoId ), namespace ); // scan all the directories which are potential namespaces. Any directories known to be projects are excluded Collection namespaces = new ArrayList(); - File[] files = dir.listFiles( DIRECTORY_FILTER ); + File[] files = dir.listFiles( new DirectoryFilter( filter ) ); if ( files != null ) { for ( File file : files ) { - if ( !isProject( file ) ) + if ( !isProject( file, filter ) ) { namespaces.add( file.getName() ); } @@ -341,17 +341,22 @@ public class Maven2RepositoryMetadataResolver } public Collection getProjects( String repoId, String namespace ) + { + return getProjects( repoId, namespace, ALL ); + } + + public Collection getProjects( String repoId, String namespace, Filter filter ) { File dir = pathTranslator.toFile( getRepositoryBasedir( repoId ), namespace ); // scan all directories in the namespace, and only include those that are known to be projects Collection projects = new ArrayList(); - File[] files = dir.listFiles( DIRECTORY_FILTER ); + File[] files = dir.listFiles( new DirectoryFilter( filter ) ); if ( files != null ) { for ( File file : files ) { - if ( isProject( file ) ) + if ( isProject( file, filter ) ) { projects.add( file.getName() ); } @@ -361,27 +366,24 @@ public class Maven2RepositoryMetadataResolver } public Collection getProjectVersions( String repoId, String namespace, String projectId ) + { + return getProjectVersions( repoId, namespace, projectId, ALL ); + } + + public Collection getProjectVersions( String repoId, String namespace, String projectId, + Filter filter ) { File dir = pathTranslator.toFile( getRepositoryBasedir( repoId ), namespace, projectId ); // all directories in a project directory can be considered a version - Collection projectVersions = new ArrayList(); - String[] files = dir.list( DIRECTORY_FILTER ); + String[] files = dir.list( new DirectoryFilter( filter ) ); return files != null ? Arrays.asList( files ) : Collections.emptyList(); } - private boolean isProject( File dir ) + private boolean isProject( File dir, Filter filter ) { - // if a metadata file is present, check if this is the "artifactId" directory, marking it as a project - MavenRepositoryMetadata metadata = readMetadata( dir ); - if ( metadata != null && dir.getName().equals( metadata.getArtifactId() ) ) - { - return true; - } - - // if metadata is missing, scan directories for a valid project version subdirectory, meaning this must be a - // project directory - File[] files = dir.listFiles( DIRECTORY_FILTER ); + // scan directories for a valid project version subdirectory, meaning this must be a project directory + File[] files = dir.listFiles( new DirectoryFilter( filter ) ); if ( files != null ) { for ( File file : files ) @@ -392,6 +394,14 @@ public class Maven2RepositoryMetadataResolver } } } + + // if a metadata file is present, check if this is the "artifactId" directory, marking it as a project + MavenRepositoryMetadata metadata = readMetadata( dir ); + if ( metadata != null && dir.getName().equals( metadata.getArtifactId() ) ) + { + return true; + } + return false; } @@ -400,14 +410,7 @@ public class Maven2RepositoryMetadataResolver final String artifactId = dir.getParentFile().getName(); final String projectVersion = dir.getName(); - // if a metadata file is present, check if this is the "version" directory, marking it as a project version - MavenRepositoryMetadata metadata = readMetadata( dir ); - if ( metadata != null && projectVersion.equals( metadata.getVersion() ) ) - { - return true; - } - - // if metadata is missing, check if there is a POM artifact file to ensure it is a version directory + // check if there is a POM artifact file to ensure it is a version directory File[] files; if ( VersionUtil.isSnapshot( projectVersion ) ) { @@ -439,7 +442,19 @@ public class Maven2RepositoryMetadataResolver } } ); } - return files != null && files.length > 0; + if ( files != null && files.length > 0 ) + { + return true; + } + + // if a metadata file is present, check if this is the "version" directory, marking it as a project version + MavenRepositoryMetadata metadata = readMetadata( dir ); + if ( metadata != null && projectVersion.equals( metadata.getVersion() ) ) + { + return true; + } + + return false; } private MavenRepositoryMetadata readMetadata( File directory ) @@ -459,4 +474,32 @@ public class Maven2RepositoryMetadataResolver } return metadata; } + + private static class DirectoryFilter + implements FilenameFilter + { + private final Filter filter; + + public DirectoryFilter( Filter filter ) + { + this.filter = filter; + } + + public boolean accept( File dir, String name ) + { + if ( !filter.accept( name ) ) + { + return false; + } + else if ( name.startsWith( "." ) ) + { + return false; + } + else if ( !new File( dir, name ).isDirectory() ) + { + return false; + } + return true; + } + } } diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java index 3d1414141..ea3a53379 100644 --- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java +++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java @@ -28,8 +28,8 @@ import org.apache.archiva.metadata.model.Dependency; import org.apache.archiva.metadata.model.License; import org.apache.archiva.metadata.model.MailingList; import org.apache.archiva.metadata.model.ProjectVersionMetadata; -import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.MetadataResolverException; +import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; @@ -61,7 +61,7 @@ public class Maven2RepositoryMetadataResolverTest c.addManagedRepository( testRepo ); configuration.save( c ); - resolver = (Maven2RepositoryMetadataResolver) lookup( MetadataResolver.class, "maven2" ); + resolver = (Maven2RepositoryMetadataResolver) lookup( StorageMetadataResolver.class, "maven2" ); } public void testGetProjectVersionMetadata() diff --git a/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java index 04fdf6915..7ed6ca38e 100644 --- a/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java +++ b/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java @@ -86,13 +86,13 @@ public class FileMetadataRepository private void updateProject( String repoId, String namespace, String id ) { // TODO: this is a more braindead implementation than we would normally expect, for prototyping purposes + updateNamespace( repoId, namespace ); + try { File namespaceDirectory = new File( this.directory, repoId + "/" + namespace ); Properties properties = new Properties(); properties.setProperty( "namespace", namespace ); - writeProperties( properties, namespaceDirectory, NAMESPACE_METADATA_KEY ); - properties.setProperty( "id", id ); writeProperties( properties, new File( namespaceDirectory, id ), PROJECT_METADATA_KEY ); @@ -217,6 +217,23 @@ public class FileMetadataRepository } } + public void updateNamespace( String repoId, String namespace ) + { + try + { + File namespaceDirectory = new File( this.directory, repoId + "/" + namespace ); + Properties properties = new Properties(); + properties.setProperty( "namespace", namespace ); + writeProperties( properties, namespaceDirectory, NAMESPACE_METADATA_KEY ); + + } + catch ( IOException e ) + { + // TODO! + e.printStackTrace(); + } + } + private String join( Collection ids ) { if ( !ids.isEmpty() ) -- 2.39.5