You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2019/08/25 20:29:07 UTC

[archiva] branch feature/storage_refactoring updated (232ac43 -> 81be348)

This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a change to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git.


    from 232ac43  Adding generic checksum storage for artifacts
     new 811c445  Changing contract for nullable parameters
     new 8f42ce0  Changing method names and adding javadoc for metarepository
     new 81be348  Switching to list as return values.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../core/repository/AbstractRepositoryPurge.java   |   6 +-
 ...leanupReleasedSnapshotsRepositoryPurgeTest.java |   4 +-
 .../repository/DaysOldRepositoryPurgeTest.java     |   6 +-
 .../repository/RepositoryPurgeConsumerTest.java    |  11 +-
 .../RetentionCountRepositoryPurgeTest.java         |   6 +-
 .../rest/services/DefaultBrowseService.java        |   6 +-
 .../rest/services/DefaultRepositoriesService.java  |   6 +-
 .../webtest/memory/TestMetadataRepository.java     |   7 +-
 .../repository/AbstractMetadataRepository.java     |  47 +-
 .../repository/DefaultMetadataResolver.java        |   4 +-
 .../metadata/repository/MetadataRepository.java    | 603 +++++++++++----------
 .../repository/AbstractMetadataRepositoryTest.java |  26 +-
 .../model/RepositoryWalkingStatisticsProvider.java |   2 +-
 .../cassandra/CassandraMetadataRepository.java     |  75 ++-
 .../repository/file/FileMetadataRepository.java    | 111 ++--
 .../repository/jcr/JcrMetadataRepository.java      |  59 +-
 .../repository/jcr/OakRepositoryFactory.java       |   7 +-
 .../stats/RepositoryStatisticsManagerTest.java     |  16 +-
 18 files changed, 516 insertions(+), 486 deletions(-)


[archiva] 03/03: Switching to list as return values.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git

commit 81be3487966f89c7e5860094f41e8bfa0202b1ea
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Aug 25 22:29:00 2019 +0200

    Switching to list as return values.
---
 .../webtest/memory/TestMetadataRepository.java     |  7 +++--
 .../repository/AbstractMetadataRepository.java     | 20 +++++++--------
 .../metadata/repository/MetadataRepository.java    | 21 ++++++++-------
 .../cassandra/CassandraMetadataRepository.java     | 30 +++++++++++-----------
 .../repository/file/FileMetadataRepository.java    | 24 ++++++++---------
 .../repository/jcr/JcrMetadataRepository.java      | 24 ++++++++---------
 6 files changed, 62 insertions(+), 64 deletions(-)

diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
index 1275200..662d2c2 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
@@ -26,7 +26,6 @@ import org.apache.archiva.metadata.repository.RepositorySession;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -74,7 +73,7 @@ public class TestMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
+    public List<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
     {
         return versions;
     }
@@ -99,8 +98,8 @@ public class TestMetadataRepository
 
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
-                                                      String projectVersion )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
+                                                String projectVersion )
     {
         return artifacts;
     }
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
index db2fc83..5f54ef9 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
@@ -204,44 +204,44 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId,
-                                                   String projectVersion )
+    public List<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId,
+                                             String projectVersion )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
-                                                                     String projectVersion )
+    public List<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
+                                                               String projectVersion )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getRootNamespaces( RepositorySession session, String repoId )
+    public List<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
+    public List<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
+    public List<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
+    public List<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
@@ -294,8 +294,8 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
-                                                      String projectVersion )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
+                                                String projectVersion )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
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 321ed2e..c63420a 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
@@ -29,7 +29,6 @@ import org.apache.archiva.metadata.model.ProjectVersionReference;
 import javax.annotation.Nullable;
 import javax.annotation.ParametersAreNonnullByDefault;
 import java.time.ZonedDateTime;
-import java.util.Collection;
 import java.util.List;
 import java.util.stream.Stream;
 
@@ -589,7 +588,7 @@ public interface MetadataRepository
      * @return A list of version strings, or a empty list if no versions are found, or this is not a snapshot version.
      * @throws MetadataResolutionException if the retrieval of the metadata failed.
      */
-    Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
+    List<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataResolutionException;
 
     /**
@@ -605,8 +604,8 @@ public interface MetadataRepository
      * @return a list of project references
      * @throws MetadataResolutionException if the version could not be found.
      */
-    Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
-                                                              String projectVersion )
+    List<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
+                                                        String projectVersion )
         throws MetadataResolutionException;
 
     /**
@@ -617,7 +616,7 @@ public interface MetadataRepository
      * @return A list of namespace names, or empty list, if no namespace is stored for this repository.
      * @throws MetadataResolutionException If the retrieval failed.
      */
-    Collection<String> getRootNamespaces( RepositorySession session, String repoId )
+    List<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException;
 
     /**
@@ -626,10 +625,10 @@ public interface MetadataRepository
      * @param session   The repository session.
      * @param repoId    The repository id.
      * @param namespace The parent namespace '.'-separated.
-     * @return {@link Collection} of child namespace names, or a empty list, if there are no children for the given parent namespace.
+     * @return {@link List} of child namespace names, or a empty list, if there are no children for the given parent namespace.
      * @throws MetadataResolutionException if the retrieval failed.
      */
-    Collection<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
+    List<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
@@ -641,7 +640,7 @@ public interface MetadataRepository
      * @return The list of project names or empty list if no project exists at the given namespace.
      * @throws MetadataResolutionException if the retrieval failed.
      */
-    Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
+    List<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
@@ -654,7 +653,7 @@ public interface MetadataRepository
      * @return The list of versions or a empty list, if not version was found.
      * @throws MetadataResolutionException if the retrieval failed.
      */
-    Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
+    List<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException;
 
     /**
@@ -682,8 +681,8 @@ public interface MetadataRepository
      * @return The list of artifact metadata objects, or a empty list, if no artifact exists for this version.
      * @throws MetadataResolutionException if the retrieval failed.
      */
-    Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
-                                               String projectVersion )
+    List<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
+                                         String projectVersion )
         throws MetadataResolutionException;
 
     /**
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
index f3a0fee..7a020ef 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
@@ -459,7 +459,7 @@ public class CassandraMetadataRepository
 
     // FIXME this one need peformance improvement maybe a cache?
     @Override
-    public Collection<String> getRootNamespaces( RepositorySession session, final String repoId )
+    public List<String> getRootNamespaces( RepositorySession session, final String repoId )
         throws MetadataResolutionException
     {
 
@@ -477,12 +477,12 @@ public class CassandraMetadataRepository
             namespaces.add( StringUtils.substringBefore( getStringValue( row.getColumnSlice(), NAME.toString() ), "." ) );
         }
 
-        return namespaces;
+        return new ArrayList<>( namespaces );
     }
 
     // FIXME this one need peformance improvement maybe a cache?
     @Override
-    public Collection<String> getChildNamespaces( RepositorySession session, final String repoId, final String namespaceId )
+    public List<String> getChildNamespaces( RepositorySession session, final String repoId, final String namespaceId )
         throws MetadataResolutionException
     {
 
@@ -577,7 +577,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjects( RepositorySession session, final String repoId, final String namespace )
+    public List<String> getProjects( RepositorySession session, final String repoId, final String namespace )
         throws MetadataResolutionException
     {
 
@@ -596,7 +596,7 @@ public class CassandraMetadataRepository
             projects.add( getStringValue( row.getColumnSlice(), PROJECT_ID.toString() ) );
         }
 
-        return projects;
+        return new ArrayList<>( projects );
     }
 
     @Override
@@ -642,7 +642,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( RepositorySession session, final String repoId, final String namespace, final String projectId )
+    public List<String> getProjectVersions( RepositorySession session, final String repoId, final String namespace, final String projectId )
         throws MetadataResolutionException
     {
 
@@ -669,7 +669,7 @@ public class CassandraMetadataRepository
             versions.add( getStringValue( orderedRows.getColumnSlice(), PROJECT_VERSION.toString() ) );
         }
 
-        return versions;
+        return new ArrayList<>( versions );
 
     }
 
@@ -1500,8 +1500,8 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( RepositorySession session, final String repoId, final String namespace, final String projectId,
-                                                   final String projectVersion )
+    public List<String> getArtifactVersions( RepositorySession session, final String repoId, final String namespace, final String projectId,
+                                             final String projectVersion )
         throws MetadataResolutionException
     {
 
@@ -1522,11 +1522,11 @@ public class CassandraMetadataRepository
             versions.add( getStringValue( row.getColumnSlice(), VERSION.toString() ) );
         }
 
-        return versions;
+        return new ArrayList<>( versions );
 
     }
 
-    /**
+    /*
      * iterate over available facets to remove/add from the artifactMetadata
      *
      * @param facetedMetadata
@@ -2237,8 +2237,8 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
-                                                                     String projectVersion )
+    public List<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
+                                                               String projectVersion )
         throws MetadataResolutionException
     {
         QueryResult<OrderedRows<String, String, String>> result = HFactory //
@@ -2317,8 +2317,8 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, final String repoId, final String namespace,
-                                                      final String projectId, final String projectVersion )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, final String repoId, final String namespace,
+                                                final String projectId, final String projectVersion )
         throws MetadataResolutionException
     {
 
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index e694ec9..a5e63a2 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -498,8 +498,8 @@ public class FileMetadataRepository
 
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts(RepositorySession session, String repoId, String namespace, String projectId,
-                                                     String projectVersion)
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
+                                                String projectVersion)
             throws MetadataResolutionException {
         try {
             Map<String, ArtifactMetadata> artifacts = new HashMap<>();
@@ -567,7 +567,7 @@ public class FileMetadataRepository
                     }
                 }
             }
-            return artifacts.values();
+            return new ArrayList<>(artifacts.values());
         } catch (IOException e) {
             throw new MetadataResolutionException(e.getMessage(), e);
         }
@@ -996,8 +996,8 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions(RepositorySession session, String repoId, String namespace, String projectId,
-                                                  String projectVersion)
+    public List<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId,
+                                             String projectVersion)
             throws MetadataResolutionException {
         try {
             Path directory = getDirectory(repoId).resolve(namespace + "/" + projectId + "/" + projectVersion);
@@ -1011,15 +1011,15 @@ public class FileMetadataRepository
                     versions.add((String) entry.getValue());
                 }
             }
-            return versions;
+            return new ArrayList<>( versions );
         } catch (IOException e) {
             throw new MetadataResolutionException(e.getMessage(), e);
         }
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences(RepositorySession session, String repoId, String namespace, String projectId,
-                                                                    String projectVersion)
+    public List<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
+                                                               String projectVersion)
             throws MetadataResolutionException {
         try {
             Path directory = getDirectory(repoId).resolve(namespace + "/" + projectId + "/" + projectVersion);
@@ -1044,7 +1044,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getRootNamespaces(RepositorySession session, String repoId)
+    public List<String> getRootNamespaces( RepositorySession session, String repoId)
             throws MetadataResolutionException {
         return this.getChildNamespaces(session, repoId, null);
     }
@@ -1076,7 +1076,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getChildNamespaces( RepositorySession session, String repoId, String baseNamespace)
+    public List<String> getChildNamespaces( RepositorySession session, String repoId, String baseNamespace)
             throws MetadataResolutionException {
         try {
             List<String> allNamespaces;
@@ -1110,7 +1110,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjects(RepositorySession session, String repoId, String namespace)
+    public List<String> getProjects( RepositorySession session, String repoId, String namespace)
             throws MetadataResolutionException {
         try {
             List<String> projects;
@@ -1132,7 +1132,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions(RepositorySession session, String repoId, String namespace, String projectId)
+    public List<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId)
             throws MetadataResolutionException {
         try {
             List<String> projectVersions;
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index 2efdf96..b11d560 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -1267,8 +1267,8 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( RepositorySession session, String repositoryId, String namespace, String projectId,
-                                                   String projectVersion )
+    public List<String> getArtifactVersions( RepositorySession session, String repositoryId, String namespace, String projectId,
+                                             String projectVersion )
         throws MetadataResolutionException
     {
         final Session jcrSession;
@@ -1302,12 +1302,12 @@ public class JcrMetadataRepository
             throw new MetadataResolutionException( e.getMessage(), e );
         }
 
-        return versions;
+        return new ArrayList<>( versions );
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repositoryId, String namespace,
-                                                                     String projectId, String projectVersion )
+    public List<ProjectVersionReference> getProjectReferences( RepositorySession session, String repositoryId, String namespace,
+                                                               String projectId, String projectVersion )
         throws MetadataResolutionException
     {
         final Session jcrSession;
@@ -1364,14 +1364,14 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<String> getRootNamespaces( RepositorySession session, String repositoryId )
+    public List<String> getRootNamespaces( RepositorySession session, String repositoryId )
         throws MetadataResolutionException
     {
         return this.getChildNamespaces(session , repositoryId, null );
     }
 
     @Override
-    public Collection<String> getChildNamespaces( RepositorySession session, String repositoryId, String baseNamespace )
+    public List<String> getChildNamespaces( RepositorySession session, String repositoryId, String baseNamespace )
         throws MetadataResolutionException
     {
         String path = baseNamespace != null
@@ -1389,7 +1389,7 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjects( RepositorySession session, String repositoryId, String namespace )
+    public List<String> getProjects( RepositorySession session, String repositoryId, String namespace )
         throws MetadataResolutionException
     {
         try
@@ -1403,7 +1403,7 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( RepositorySession session, String repositoryId, String namespace, String projectId )
+    public List<String> getProjectVersions( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         try
@@ -1561,8 +1561,8 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId, String namespace, String projectId,
-                                                      String projectVersion )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId, String namespace, String projectId,
+                                                String projectVersion )
         throws MetadataResolutionException
     {
         final Session jcrSession;
@@ -1720,7 +1720,7 @@ public class JcrMetadataRepository
         return node.hasProperty( name ) ? node.getProperty( name ).getString() : null;
     }
 
-    private Collection<String> getNodeNames( Session jcrSession, String path, String nodeType )
+    private List<String> getNodeNames( Session jcrSession, String path, String nodeType )
         throws MetadataResolutionException
     {
 


[archiva] 02/03: Changing method names and adding javadoc for metarepository

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git

commit 8f42ce002cc96da7e2fc45321ede494c29961748
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Aug 25 19:55:00 2019 +0200

    Changing method names and adding javadoc for metarepository
---
 .../core/repository/AbstractRepositoryPurge.java   |   6 +-
 ...leanupReleasedSnapshotsRepositoryPurgeTest.java |   4 +-
 .../repository/DaysOldRepositoryPurgeTest.java     |   6 +-
 .../repository/RepositoryPurgeConsumerTest.java    |  11 +-
 .../RetentionCountRepositoryPurgeTest.java         |   6 +-
 .../rest/services/DefaultBrowseService.java        |   6 +-
 .../rest/services/DefaultRepositoriesService.java  |   6 +-
 .../repository/AbstractMetadataRepository.java     |  29 +-
 .../repository/DefaultMetadataResolver.java        |   4 +-
 .../metadata/repository/MetadataRepository.java    | 579 +++++++++++----------
 .../repository/AbstractMetadataRepositoryTest.java |  26 +-
 .../model/RepositoryWalkingStatisticsProvider.java |   2 +-
 .../cassandra/CassandraMetadataRepository.java     |  45 +-
 .../repository/file/FileMetadataRepository.java    |  33 +-
 .../repository/jcr/JcrMetadataRepository.java      |  35 +-
 .../stats/RepositoryStatisticsManagerTest.java     |  16 +-
 16 files changed, 402 insertions(+), 412 deletions(-)

diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
index a8cf4b7..a00e444 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
@@ -259,7 +259,7 @@ public abstract class AbstractRepositoryPurge
                                 }
                                 else
                                 {
-                                    // metadataRepository.removeArtifact( artifactMetadata, baseVersion );
+                                    // metadataRepository.removeTimestampedArtifact( artifactMetadata, baseVersion );
                                     metaRemovalList.put( info, artifactMetadata );
                                 }
                             }
@@ -366,7 +366,7 @@ public abstract class AbstractRepositoryPurge
                     version = artifactInfo.getProjectVersion( );
                 MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet( );
                 mavenArtifactFacetToCompare.setClassifier( artifactInfo.getClassifier( ) );
-                metadataRepository.removeArtifact(repositorySession , repository.getId( ), groupId,
+                metadataRepository.removeFacetFromArtifact(repositorySession , repository.getId( ), groupId,
                     artifactId, version, mavenArtifactFacetToCompare );
                 try {
                     repositorySession.save( );
@@ -377,7 +377,7 @@ public abstract class AbstractRepositoryPurge
         }
         else
         {
-            metadataRepository.removeArtifact(repositorySession , artifactMetadata, artifactInfo.getProjectVersion( ) );
+            metadataRepository.removeTimestampedArtifact(repositorySession , artifactMetadata, artifactInfo.getProjectVersion( ) );
         }
     }
 
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
index 9d44b28..18c3d28 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
@@ -345,8 +345,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.3-SNAPSHOT") );
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.4-SNAPSHOT") );
-        verify(metadataRepository, never()).removeArtifact(eq(repositorySession) , any(ArtifactMetadata.class), any(String.class) );
-        verify(metadataRepository, never()).removeArtifact(eq(repositorySession) , any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class) );
+        verify(metadataRepository, never()).removeTimestampedArtifact(eq(repositorySession) , any(ArtifactMetadata.class), any(String.class) );
+        verify(metadataRepository, never()).removeFacetFromArtifact(eq(repositorySession) , any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class) );
 
 
 
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
index 848d4ed..66651d3 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
@@ -134,7 +134,7 @@ public class DaysOldRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(2)).removeTimestampedArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -229,7 +229,7 @@ public class DaysOldRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(deletedVersions.size())).removeTimestampedArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -337,7 +337,7 @@ public class DaysOldRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(deletedVersions.size())).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
index 3181445..3172a3d 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
@@ -27,7 +27,6 @@ import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.MetadataFacet;
-import org.apache.archiva.mock.MockRepositorySessionFactory;
 import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.custommonkey.xmlunit.XMLAssert;
@@ -210,7 +209,7 @@ public class RepositoryPurgeConsumerTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(2)).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -323,7 +322,7 @@ public class RepositoryPurgeConsumerTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(2)).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         assertTrue( metaL.size( ) > 0 );
         for (ArtifactMetadata meta : metaL) {
@@ -403,8 +402,8 @@ public class RepositoryPurgeConsumerTest
 
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any() );
-        verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any(), any(), any(), any(MetadataFacet.class) );
+        verify(metadataRepository, never()).removeTimestampedArtifact( eq(repositorySession), any(), any() );
+        verify(metadataRepository, never()).removeFacetFromArtifact( eq(repositorySession), any(), any(), any(), any(), any(MetadataFacet.class) );
 
         // check if the snapshot wasn't removed
 
@@ -473,7 +472,7 @@ public class RepositoryPurgeConsumerTest
 
         verify(metadataRepository, times(1)).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any() );
+        verify(metadataRepository, never()).removeTimestampedArtifact( eq(repositorySession), any(), any() );
 
         // check if the snapshot was removed
         assertDeleted( projectRoot + "/2.3-SNAPSHOT" );
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
index e8ffc78..3a06774 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
@@ -137,7 +137,7 @@ public class RetentionCountRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(deletedVersions.size())).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -223,7 +223,7 @@ public class RetentionCountRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(deletedVersions.size())).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -311,7 +311,7 @@ public class RetentionCountRepositoryPurgeTest
         // Verify the metadataRepository invocations
         verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
+        verify(metadataRepository, times(deletedVersions.size())).removeTimestampedArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
index adc2c0a..8012d6b 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
@@ -1019,7 +1019,7 @@ public class DefaultBrowseService
         }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProjectVersionMetadata(repositorySession , key, value, repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProjectVersionFacet(repositorySession , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -1047,7 +1047,7 @@ public class DefaultBrowseService
         }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByMetadata(repositorySession , key, value, repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByAttribute(repositorySession , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -1075,7 +1075,7 @@ public class DefaultBrowseService
         }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProperty(repositorySession , key, value, repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProjectVersionAttribute(repositorySession , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
index faa07e8..fd7ae90 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
@@ -703,7 +703,7 @@ public class DefaultRepositoriesService
 
             for ( ArtifactMetadata artifactMetadata : artifacts )
             {
-                metadataRepository.removeArtifact(repositorySession , artifactMetadata, version );
+                metadataRepository.removeTimestampedArtifact(repositorySession , artifactMetadata, version );
             }
 
             metadataRepository.removeProjectVersion(repositorySession , repositoryId, namespace, projectId, version );
@@ -920,7 +920,7 @@ public class DefaultRepositoriesService
                                 artifact.getVersion();
                             MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet();
                             mavenArtifactFacetToCompare.setClassifier( artifact.getClassifier() );
-                            metadataRepository.removeArtifact(repositorySession , repositoryId, groupId, artifactId,
+                            metadataRepository.removeFacetFromArtifact(repositorySession , repositoryId, groupId, artifactId,
                                 version, mavenArtifactFacetToCompare );
                             repositorySession.save();
                         }
@@ -930,7 +930,7 @@ public class DefaultRepositoriesService
                     {
                         if ( snapshotVersion )
                         {
-                            metadataRepository.removeArtifact(repositorySession ,
+                            metadataRepository.removeTimestampedArtifact(repositorySession ,
                                 artifactMetadata, VersionUtil.getBaseVersion( artifact.getVersion() ) );
                         }
                         else
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
index 248e194..db2fc83 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
@@ -28,8 +28,6 @@ import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionReference;
 import org.apache.commons.collections4.ComparatorUtils;
 
-import javax.annotation.Nonnull;
-import javax.management.Query;
 import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.stream.Stream;
@@ -127,21 +125,21 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionFacet( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
@@ -155,15 +153,15 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeTimestampedArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
-                                MetadataFacet metadataFacet )
+    public void removeFacetFromArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
+                                         MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
@@ -229,7 +227,7 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<String> getNamespaces( RepositorySession session, String repoId, String namespace )
+    public Collection<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
@@ -318,19 +316,6 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public boolean canObtainAccess( Class<?> aClass )
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
-        throws MetadataRepositoryException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
     public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException
     {
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 ba8e0fc..a86696e 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
@@ -249,7 +249,7 @@ public class DefaultMetadataResolver
             Collection<String> namespaces = namespacesCache.get( cacheKey );
             if ( namespaces == null )
             {
-                namespaces = metadataRepository.getNamespaces( session, repoId, namespace );
+                namespaces = metadataRepository.getChildNamespaces( session, repoId, namespace );
                 namespacesCache.put( cacheKey, namespaces );
             }
             Collection<String> exclusions = new ArrayList<>( namespaces );
@@ -302,7 +302,7 @@ public class DefaultMetadataResolver
             Collection<String> namespaces = namespacesCache.get( cacheKey );
             if ( namespaces == null )
             {
-                namespaces = metadataRepository.getNamespaces( session, repoId, namespace );
+                namespaces = metadataRepository.getChildNamespaces( session, repoId, namespace );
                 namespacesCache.put( cacheKey, namespaces );
             }
 
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 bf3d8ba..321ed2e 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
@@ -37,35 +37,35 @@ import java.util.stream.Stream;
  * A Metadata repository provides information about artifact metadata. It does not provide the artifact data itself.
  * It may be possible to use the same backend for metadata and storage, but this depends on the backends and they are
  * provided by different APIs.
- *
+ * <p>
  * The motivation for this API is to provide fast access to the repository metadata and fulltext search. Also dependencies
  * are stored in this repository.
- *
+ * <p>
  * The methods here do not update the artifacts itself. They are only updating the data in the metadata repository.
  * That means, if you want to update some artifact, you should make sure to update the artifact itself and the metadata
  * repository (either directly or by repository scanning).
- *
+ * <p>
  * Currently we are providing JCR, File based and Cassandra as backend for the metadata.
- *
+ * <p>
  * The metadata repository uses sessions for accessing the data. Please make sure to always close the sessions after using it.
  * Best idiom for using the sessions:
  * <code>
  * try(RepositorySession session = sessionFactory.createSession() {
- *     // do your stuff
+ * // do your stuff
  * }
  * </code>
- *
+ * <p>
  * It is implementation dependent, if the sessions are really used by the backend. E.g. the file based implementation ignores
  * the sessions completely.
- *
+ * <p>
  * Sessions should be closed immediately after usage. If it is expensive to open a session for a given backend. The backend
  * should provide a session pool if possible. There are methods for refreshing a session if needed.
- *
- * You should avoid stacking sessions, that means, do not create a new session in the same thread, when a session is opened already.
- *
+ * <p>
+ * You should avoid stacking sessions, which means, you should not create a new session in the same thread, when a session is opened already.
+ * <p>
  * Some backend implementations (JCR) update the metadata in the background, that means update of the metadata is not reflected
  * immediately.
- *
+ * <p>
  * The base metadata coordinates are:
  * <ul>
  *     <li>Repository ID: The identifier of the repository, where the artifact resides</li>
@@ -74,10 +74,10 @@ import java.util.stream.Stream;
  *     <li>Version: Each project may have different versions.</li>
  *     <li>Artifact: Artifacts correspond to files / blob data. Each artifact has additional metadata, like name, version, modification time, ...</li>
  * </ul>
- *
+ * <p>
  * As the repository connects to some backend either locally or remote, the access to the repository may fail. The methods capsule the
  * backend errors into <code>{@link MetadataRepositoryException}</code>.
- *
+ * <p>
  * Facets are the way to provide additional metadata that is not part of the base API. It depends on the repository type (e.g. Maven, NPM,
  * not the metadata backend) what facets are stored in addition to the standard metadata.
  * Facets have a specific facet ID that represents the schema for the data stored. For creating specific objects for a given
@@ -86,154 +86,150 @@ import java.util.stream.Stream;
  * a hierarchical path.
  * The data in each facet instance is stored in properties (key-value pairs). The properties are converted into / from the specific
  * facet object.
- *
+ * <p>
  * Facets can be stored on repository, project, version and artifact level.
- *
+ * <p>
  * For retrieving artifacts there are methods that return lists and streaming based methods. Some implementations (e.g. JCR) use
  * lazy loading for the retrieved objects. So the streaming methods may be faster and use less memory than the list based methods.
  * But for some backends there is no difference.
- *
  */
+@SuppressWarnings( "NullableProblems" )
 @ParametersAreNonnullByDefault
 public interface MetadataRepository
 {
 
 
-
     /**
      * Update metadata for a particular project in the metadata repository, or create it, if it does not already exist.
      *
-     * @param session The session used for updating.
+     * @param session      The session used for updating.
      * @param repositoryId the repository the project is in
      * @param project      the project metadata to create or update
      * @throws MetadataRepositoryException if the update fails
      */
-    void updateProject(  RepositorySession session,  String repositoryId,  ProjectMetadata project )
+    void updateProject( RepositorySession session, String repositoryId, ProjectMetadata project )
         throws MetadataRepositoryException;
 
     /**
      * Update the metadata of a given artifact. If the artifact, namespace, version, project does not exist in the repository it will be created.
      *
-     * @param session The repository session
-     * @param repositoryId The repository id
-     * @param namespace The namespace ('.' separated)
-     * @param projectId The project id
+     * @param session        The repository session
+     * @param repositoryId   The repository id
+     * @param namespace      The namespace ('.' separated)
+     * @param projectId      The project id
      * @param projectVersion The project version
-     * @param artifactMeta Information about the artifact itself.
+     * @param artifactMeta   Information about the artifact itself.
      * @throws MetadataRepositoryException if something goes wrong during update.
      */
-    void updateArtifact(  RepositorySession session,  String repositoryId,
-                          String namespace,  String projectId,  String projectVersion,
-                          ArtifactMetadata artifactMeta )
+    void updateArtifact( RepositorySession session, String repositoryId,
+                         String namespace, String projectId, String projectVersion,
+                         ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException;
 
     /**
      * Updates the metadata for a specific version of a given project. If the namespace, project, version does not exist,
      * it will be created.
      *
-     * @param session The repository session
-     * @param repositoryId The repository id
-     * @param namespace The namespace ('.' separated)
-     * @param projectId The project id
+     * @param session         The repository session
+     * @param repositoryId    The repository id
+     * @param namespace       The namespace ('.' separated)
+     * @param projectId       The project id
      * @param versionMetadata The metadata for the version
      * @throws MetadataRepositoryException if something goes wrong during update
      */
-    void updateProjectVersion(  RepositorySession session,  String repositoryId,
-                                String namespace,  String projectId,
-                                ProjectVersionMetadata versionMetadata )
+    void updateProjectVersion( RepositorySession session, String repositoryId,
+                               String namespace, String projectId,
+                               ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException;
 
     /**
      * Create the namespace in the repository, if it does not exist.
      * Namespaces do not have specific metadata attached.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param namespace The namespace ('.' separated)
+     * @param namespace    The namespace ('.' separated)
      * @throws MetadataRepositoryException if something goes wrong during update
      */
-    void updateNamespace(  RepositorySession session,  String repositoryId,  String namespace )
+    void updateNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException;
 
     /**
      * Return the facet names stored for the given facet id on the repository level.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param facetId The facet id
+     * @param facetId      The facet id
      * @return The list of facet names, or an empty list, if there are no facets stored on this repository for the given facet id.
      * @throws MetadataRepositoryException if something goes wrong
      */
-    List<String> getMetadataFacets(  RepositorySession session,  String repositoryId,  String facetId )
+    List<String> getMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
 
     /**
-     *
-     * The same as
-     * @see #getMetadataFacetStream(RepositorySession, String, Class, QueryParameter queryParameter)
+     * The same as {@link #getMetadataFacetStream(RepositorySession, String, Class, QueryParameter)}
      * but uses default query parameters.
-     *
+     * <p>
      * There is no limitation of the number of result objects returned, but implementations may have a hard upper bound for
      * the number of results.
      *
-     * @param session
-     * @param repositoryId
-     * @param facetClazz
-     * @param <T>
-     * @return
-     * @throws MetadataRepositoryException
+     * @param session      The repository session.
+     * @param repositoryId The repository id.
+     * @param facetClazz   The facet class
+     * @param <T>          The facet type
+     * @return A stream of facet objects, or a empty stream if no facet was found.
+     * @throws MetadataRepositoryException if the facet retrieval fails.
      * @since 3.0
      */
-    <T extends MetadataFacet> Stream<T> getMetadataFacetStream(  RepositorySession session,
-                                                                 String repositoryId,  Class<T> facetClazz)
+    <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session,
+                                                                String repositoryId, Class<T> facetClazz )
         throws MetadataRepositoryException;
 
     /**
      * Returns a stream of MetadataFacet elements that match the given facet class.
      * Implementations should order the resulting stream by facet name.
      *
-     *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param facetClazz The class of the facet
-     * @param <T> The facet type
-     * @return
-     * @throws MetadataRepositoryException
+     * @param facetClazz   The class of the facet
+     * @param <T>          The facet type
+     * @return A stream of facet objects, or a empty stream if no facet was found.
+     * @throws MetadataRepositoryException if the facet retrieval fails
      * @since 3.0
      */
     <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session,
-                                                                 String repositoryId,   Class<T> facetClazz,
-                                                                 QueryParameter queryParameter)
+                                                                String repositoryId, Class<T> facetClazz,
+                                                                QueryParameter queryParameter )
         throws MetadataRepositoryException;
 
     /**
      * Returns true, if there is facet data stored for the given facet id on the repository on repository level. The facet data itself
      * may be empty. It's just checking if there is an object stored for the given facet id.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param facetId The facet id
+     * @param facetId      The facet id
      * @return true if there is data stored this facetId on repository level.
      * @throws MetadataRepositoryException if something goes wrong
      * @since 1.4-M4
      */
-    boolean hasMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId )
+    boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
     /**
      * Returns the facet data stored on the repository level. The facet instance is identified by the facet id and the
      * facet name. The returned object is a instance created by using <code>{@link org.apache.archiva.metadata.model.MetadataFacetFactory}</code>.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param facetId The facet id
-     * @param name The attribute name
+     * @param facetId      The facet id
+     * @param name         The attribute name
      * @return The facet values
      * @throws MetadataRepositoryException if something goes wrong.
      */
-    MetadataFacet getMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId,
-                                     String name )
+    MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId,
+                                    String name )
         throws MetadataRepositoryException;
 
     /**
@@ -241,231 +237,248 @@ public interface MetadataRepository
      * If the given name does not point to a instance that can be represented by this class, <code>null</code> will be returned.
      * If the facet is not found the method returns <code>null</code>.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The id of the repository
-     * @param clazz The facet object class
-     * @param name The name of the facet (name or path)
-     * @param <T> The type of the facet object
+     * @param clazz        The facet object class
+     * @param name         The name of the facet (name or path)
+     * @param <T>          The type of the facet object
      * @return The facet instance, if it exists.
      * @throws MetadataRepositoryException if the data cannot be retrieved from the backend
      * @since 3.0
      */
-    <T extends MetadataFacet> T getMetadataFacet( RepositorySession session,  String repositoryId,
-                                                  Class<T> clazz,  String name)
-    throws MetadataRepositoryException;
+    <T extends MetadataFacet> T getMetadataFacet( RepositorySession session, String repositoryId,
+                                                  Class<T> clazz, String name )
+        throws MetadataRepositoryException;
 
     /**
      * Adds a facet to the repository level.
      *
-     * @param session The repository session
-     * @param repositoryId The id of the repository
+     * @param session       The repository session
+     * @param repositoryId  The id of the repository
      * @param metadataFacet The facet to add
      * @throws MetadataRepositoryException if the facet cannot be stored.
      */
-    void addMetadataFacet(  RepositorySession session,  String repositoryId,
-                            MetadataFacet metadataFacet )
+    void addMetadataFacet( RepositorySession session, String repositoryId,
+                           MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
     /**
      * Removes all facets with the given facetId from the repository level.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The id of the repository
-     * @param facetId The facet id
+     * @param facetId      The facet id
      * @throws MetadataRepositoryException if the removal fails
      */
-    void removeMetadataFacets(  RepositorySession session,  String repositoryId,  String facetId )
+    void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
     /**
      * Removes the given facet from the repository level, if it exists.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The id of the repository
-     * @param facetId The facet id
-     * @param name The facet name or path
+     * @param facetId      The facet id
+     * @param name         The facet name or path
      */
-    void removeMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId,  String name )
+    void removeMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException;
 
 
     /**
      * Is the same as {@link #getArtifactsByDateRange(RepositorySession, String, ZonedDateTime, ZonedDateTime, QueryParameter)}, but
      * uses default query parameters.
-     *
      */
-    List<ArtifactMetadata> getArtifactsByDateRange(  RepositorySession session,  String repositoryId,
+    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repositoryId,
                                                     @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
     /**
-     *
      * Searches for artifacts where the 'whenGathered' attribute value is between the given start and end time.
      * If start or end time or both are <code>null</code>, the time range for the search is unbounded for this parameter.
      *
-     *
-     * @param session The repository session
-     * @param repositoryId The repository id
-     * @param startTime    The start time/date as zoned date, can be <code>null</code>
-     * @param endTime      The end time/date as zoned date, can be <code>null</code>
+     * @param session        The repository session
+     * @param repositoryId   The repository id
+     * @param startTime      The start time/date as zoned date, can be <code>null</code>
+     * @param endTime        The end time/date as zoned date, can be <code>null</code>
      * @param queryParameter Additional parameters for the query that affect ordering and returned results
      * @return The list of metadata objects for the found instances.
      * @throws MetadataRepositoryException if the query fails.
      * @since 3.0
      */
-    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session,  String repositoryId,
-                                                   @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime,
+    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repositoryId,
+                                                    @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime,
                                                     QueryParameter queryParameter )
-            throws MetadataRepositoryException;
+        throws MetadataRepositoryException;
 
 
     /**
      * Returns all the artifacts who's 'whenGathered' attribute value is inside the given time range (inclusive) as stream of objects.
-     *
+     * <p>
      * Implementations should return a stream of sorted objects. The objects should be sorted by the 'whenGathered' date in ascending order.
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
-     * @param startTime The start time, can be <code>null</code>
-     * @param endTime The end time, can be <code>null</code>
-     * @return A stream of artifact metadata objects.
-     * @throws MetadataRepositoryException
+     * @param startTime    The start time, can be <code>null</code>
+     * @param endTime      The end time, can be <code>null</code>
+     * @return A stream of artifact metadata objects, or a empty stream if no artifact was found.
+     * @throws MetadataRepositoryException if the artifact retrieval fails.
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactByDateRangeStream(  RepositorySession session,  String repositoryId,
+    Stream<ArtifactMetadata> getArtifactByDateRangeStream( RepositorySession session, String repositoryId,
                                                            @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
     /**
      * Returns all the artifacts who's 'whenGathered' attribute value is inside the given time range (inclusive) as stream of objects.
-     *
+     * <p>
      * If no sort attributes are given by the queryParameter, the result is sorted by the 'whenGathered' date.
      *
-     * @param session The repository session
-     * @param repositoryId The repository id
-     * @param startTime The start time, can be <code>null</code>
-     * @param endTime The end time, can be <code>null</code>
+     * @param session        The repository session
+     * @param repositoryId   The repository id
+     * @param startTime      The start time, can be <code>null</code>
+     * @param endTime        The end time, can be <code>null</code>
      * @param queryParameter Additional parameters for the query that affect ordering and number of returned results.
      * @return A stream of artifact metadata objects.
-     * @throws MetadataRepositoryException
+     * @throws MetadataRepositoryException if the artifact retrieval fails.
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactByDateRangeStream(  RepositorySession session,  String repositoryId,
+    Stream<ArtifactMetadata> getArtifactByDateRangeStream( RepositorySession session, String repositoryId,
                                                            @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime,
-                                                            QueryParameter queryParameter)
+                                                           QueryParameter queryParameter )
         throws MetadataRepositoryException;
 
 
     /**
      * Returns the artifacts that match the given checksum. All checksum types are searched.
      *
-     * @param session The repository session
-     * @param repositoryId  The repository id
-     * @param checksum The checksum as string of numbers
+     * @param session      The repository session
+     * @param repositoryId The repository id
+     * @param checksum     The checksum as string of numbers
      * @return The list of artifacts that match the given checksum.
-     * @throws MetadataRepositoryException
+     * @throws MetadataRepositoryException if the artifact retrieval fails
      */
-    List<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session,  String repositoryId,  String checksum )
+    List<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
         throws MetadataRepositoryException;
 
     /**
      * Get artifacts with a project version metadata key that matches the passed value.
-     *  
      *
-     * @param session
-     * @param key
-     * @param value
-     * @param repositoryId can be null, meaning search in all repositories
-     * @return a list of artifacts
-     * @throws MetadataRepositoryException
+     * @param session      The repository session
+     * @param key          The attribute key to search
+     * @param value        The attribute value used for search
+     * @param repositoryId can be <code>null</code>, meaning search in all repositories
+     * @return a list of artifacts. A empty list, if no artifact was found.
+     * @throws MetadataRepositoryException if the artifact retrieval fails.
      */
-    List<ArtifactMetadata> getArtifactsByProjectVersionMetadata(  RepositorySession session,  String key,  String value,
-                                                                 @Nullable String repositoryId )
+    List<ArtifactMetadata> getArtifactsByProjectVersionFacet( RepositorySession session, String key, String value,
+                                                              @Nullable String repositoryId )
         throws MetadataRepositoryException;
 
     /**
      * Get artifacts with an artifact metadata key that matches the passed value.
-     *  
+     * <code>key</code> ist the string representation of one of the metadata attributes. Only artifacts are returned where
+     * the attribute value matches exactly the given search value.
      *
-     * @param session
-     * @param key
-     * @param value
-     * @param repositoryId can be null, meaning search in all repositories
-     * @return a list of artifacts
-     * @throws MetadataRepositoryException
+     * @param session      The repository session.
+     * @param key          The string representation of the artifact metadata attribute.
+     * @param value        The search value.
+     * @param repositoryId can be <code>null</code>, meaning search in all repositories
+     * @return a list of artifact objects for each artifact that matches the search string
+     * @throws MetadataRepositoryException if the artifact retrieval fails.
      */
-    List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
+    List<ArtifactMetadata> getArtifactsByAttribute( RepositorySession session, String key, String value, @Nullable String repositoryId )
         throws MetadataRepositoryException;
 
     /**
-     * Get artifacts with a property key that matches the passed value.
+     * Get artifacts with a attribute on project version level that matches the passed value.
      * Possible keys are 'scm.url', 'org.name', 'url', 'mailingList.0.name', 'license.0.name',...
-     *  
      *
-     * @param session
-     * @param key
-     * @param value
-     * @param repositoryId can be null, meaning search in all repositories
-     * @return a list of artifacts
-     * @throws MetadataRepositoryException
+     * @param session      the repository session.
+     * @param key          The name of the attribute (may be nested like scm.url, mailinglist.0.name)
+     * @param value        The value to search for
+     * @param repositoryId can be <code>null</code>, which means to search in all repositories
+     * @return a list of artifacts or a empty list, if no artifact was found
+     * @throws MetadataRepositoryException if the artifact retrieval fails
      */
-    List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
+    List<ArtifactMetadata> getArtifactsByProjectVersionAttribute( RepositorySession session, String key, String value, @Nullable String repositoryId )
         throws MetadataRepositoryException;
 
+    /**
+     * Removes the data for the artifact with the given coordinates from the metadata repository. This will not remove the artifact itself
+     * from the storage. It will only remove the metadata.
+     *
+     * @param session      The repository session
+     * @param repositoryId The repository id
+     * @param namespace    The namespace of the project
+     * @param project      The project name
+     * @param version      The project version
+     * @param id           The artifact id
+     * @throws MetadataRepositoryException if the artifact retrieval fails, or if the artifact cannot be found.
+     */
     void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version, String id )
         throws MetadataRepositoryException;
 
     /**
-     * used for deleting timestamped version of SNAPSHOT artifacts
-     *
+     * Remove timestamped version of artifact. This removes a snapshot artifact by giving the artifact metadata
+     * and the base version of the project.
      *
-     * @param session
+     * @param session          The repository session
      * @param artifactMetadata the artifactMetadata with the timestamped version (2.0-20120618.214135-2)
      * @param baseVersion      the base version of the snapshot (2.0-SNAPSHOT)
-     * @throws MetadataRepositoryException
+     * @throws MetadataRepositoryException if the removal fails.
      * @since 1.4-M3
      */
-    void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
+    void removeTimestampedArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException;
 
     /**
      * FIXME need a unit test!!!
-     * Only remove {@link MetadataFacet} for the artifact
-     *
-     *
-     * @param session
-     * @param repositoryId
-     * @param namespace
-     * @param project
-     * @param version
-     * @param metadataFacet
-     * @throws MetadataRepositoryException
+     * Removes the {@link MetadataFacet} of the given artifact.
+     *
+     * @param session       The repository session
+     * @param repositoryId  The repository id.
+     * @param namespace     The namespace
+     * @param project       The project name
+     * @param version       The project version
+     * @param metadataFacet The facet data
+     * @throws MetadataRepositoryException if the removal failed
      * @since 1.4-M3
      */
-    void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
-                         MetadataFacet metadataFacet )
+    void removeFacetFromArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
+                                  MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
     /**
-     * Delete a repository's metadata. This includes all associated metadata facets.
+     * Deletes all metadata of the given repository. This includes artifact metadata and all associated metadata facets.
      *
-     * @param session
+     * @param session      The repository session
      * @param repositoryId the repository to delete
+     * @throws MetadataRepositoryException if the removal failed
      */
     void removeRepository( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException;
 
     /**
+     * Removes the given namespace and its contents from the metadata repository.
      *
-     * @param session
-     * @param repositoryId
-     * @param namespace    (groupId for maven )
-     * @throws MetadataRepositoryException
+     * @param session      The repository session
+     * @param repositoryId The repository id
+     * @param namespace    The namespace '.' separated  ( it's the groupId for maven )
+     * @throws MetadataRepositoryException if the removal failed
      * @since 1.4-M3
      */
     void removeNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException;
 
+    /**
+     * Returns the metadata for all artifacts of the given repository.
+     *
+     * @param session      The repository session
+     * @param repositoryId The repository id
+     * @return a list of artifact metadata objects. A empty list if no artifacts where found.
+     * @throws MetadataRepositoryException if the retrieval failed.
+     */
     List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException;
 
@@ -477,12 +490,12 @@ public interface MetadataRepository
      * If there are no <code>sortFields</code> defined in the query parameter, the order of elements in the stream is undefined and depends
      * on the implementation.
      *
-     * @param session
-     * @param repositoryId
+     * @param session      The repository session.
+     * @param repositoryId The repository id.
      * @return A stream of artifact metadata objects for each artifact found in the repository.
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repositoryId,  QueryParameter queryParameter )
+    Stream<ArtifactMetadata> getArtifactStream( RepositorySession session, String repositoryId, QueryParameter queryParameter )
         throws MetadataResolutionException;
 
     /**
@@ -490,68 +503,92 @@ public interface MetadataRepository
      * The order of the artifacts returned in the stream depends on the implementation.
      * The number of elements in the stream is unlimited, but there may be some implementations that have to put a hard
      * limit on the elements returned.
-     * For further information see {@link #getArtifactStream(RepositorySession, String, QueryParameter)} 
+     * For further information see {@link #getArtifactStream(RepositorySession, String, QueryParameter)}
      *
-     * @param session The repository session
+     * @param session      The repository session
      * @param repositoryId The repository id
      * @return A (unlimited) stream of artifact metadata elements that are found in this repository
-     * @since 3.0
      * @see #getArtifactStream(RepositorySession, String, QueryParameter)
+     * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repositoryId)
+    Stream<ArtifactMetadata> getArtifactStream( RepositorySession session, String repositoryId )
         throws MetadataResolutionException;
 
     /**
      * Returns a stream of artifacts found for the given artifact coordinates and using the <code>queryParameter</code>
      *
-     * @param session The repository session. May not be <code>null</code>.
-     * @param repoId The repository id. May not be <code>null</code>.
-     * @param namespace The namespace. May not be <code>null</code>.
-     * @param projectId The project id. May not be <code>null</code>.
+     * @param session        The repository session. May not be <code>null</code>.
+     * @param repoId         The repository id. May not be <code>null</code>.
+     * @param namespace      The namespace. May not be <code>null</code>.
+     * @param projectId      The project id. May not be <code>null</code>.
      * @param projectVersion The project version. May not be <code>null</code>.
      * @return A stream of artifact metadata object. Order and number of elements returned, depends on the <code>queryParameter</code>.
-     * @since 3.0
      * @throws MetadataResolutionException if there are no elements for the given artifact coordinates.
+     * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repoId,
-                                                 String namespace,  String projectId,
-                                                 String projectVersion,  QueryParameter queryParameter )
+    Stream<ArtifactMetadata> getArtifactStream( RepositorySession session, String repoId,
+                                                String namespace, String projectId,
+                                                String projectVersion, QueryParameter queryParameter )
         throws MetadataResolutionException;
 
     /**
      * Returns a stream of artifacts found for the given artifact coordinates. The order of elements returned, depends on the
      * implementation.
      *
-     * @param session The repository session. May not be <code>null</code>.
-     * @param repoId The repository id. May not be <code>null</code>.
-     * @param namespace The namespace. May not be <code>null</code>.
-     * @param projectId The project id. May not be <code>null</code>.
+     * @param session        The repository session. May not be <code>null</code>.
+     * @param repoId         The repository id. May not be <code>null</code>.
+     * @param namespace      The namespace. May not be <code>null</code>.
+     * @param projectId      The project id. May not be <code>null</code>.
      * @param projectVersion The project version. May not be <code>null</code>.
      * @return A stream of artifact metadata object. Order and number of elements returned, depends on the <code>queryParameter</code>.
-     * @since 3.0
      * @throws MetadataResolutionException if there are no elements for the given artifact coordinates.
+     * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repoId,
-                                                 String namespace,  String projectId,
-                                            String projectVersion)
+    Stream<ArtifactMetadata> getArtifactStream( RepositorySession session, String repoId,
+                                                String namespace, String projectId,
+                                                String projectVersion )
         throws MetadataResolutionException;
+
     /**
-     * basically just checking it exists not complete data returned
+     * Returns the metadata for the given project. If there are no custom properties stored on the project, it will
+     * just return a <code>ProjectMetadata</code> object with the data provided by parameters.
      *
-     *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @param projectId
-     * @return
-     * @throws MetadataResolutionException
+     * @param session   The session id
+     * @param repoId    The repository id
+     * @param namespace The namespace '.'-separated.
+     * @param projectId The project name
+     * @return The project metadata or <code>null</code> if not found.
+     * @throws MetadataResolutionException if the metadata retrieval failed
      */
     ProjectMetadata getProject( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException;
 
+    /**
+     * Returns the metadata for the project version.
+     *
+     * @param session        The repository session.
+     * @param repoId         The repository id.
+     * @param namespace      The namespace '.'-separated
+     * @param projectId      The project name
+     * @param projectVersion The project version
+     * @return The version metadata object, or <code>null</code>, if not found.
+     * @throws MetadataResolutionException if the retrieval of the metadata failed.
+     */
     ProjectVersionMetadata getProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataResolutionException;
 
+    /**
+     * Returns all artifact version strings for a given project version. This is for snapshot versions and returns the timestamped
+     * versions, if available.
+     *
+     * @param session        The repository session.
+     * @param repoId         The repository id.
+     * @param namespace      The namespace '.'-separated
+     * @param projectId      The project name.
+     * @param projectVersion The project version.
+     * @return A list of version strings, or a empty list if no versions are found, or this is not a snapshot version.
+     * @throws MetadataResolutionException if the retrieval of the metadata failed.
+     */
     Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataResolutionException;
 
@@ -560,131 +597,145 @@ public interface MetadataRepository
      * a project version as a reference may be present (due to reverse-lookup of dependencies) before the actual
      * project is, and we want to avoid adding a stub model to the content repository.
      *
-     *
-     * @param session
-     * @param repoId         the repository ID to look within
-     * @param namespace      the namespace of the project to get references to
-     * @param projectId      the identifier of the project to get references to
-     * @param projectVersion the version of the project to get references to
+     * @param session        The repository session.
+     * @param repoId         The repository ID to look within
+     * @param namespace      The namespace of the project to get references to
+     * @param projectId      The identifier of the project to get references to
+     * @param projectVersion The version of the project to get references to
      * @return a list of project references
+     * @throws MetadataResolutionException if the version could not be found.
      */
     Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
                                                               String projectVersion )
         throws MetadataResolutionException;
 
+    /**
+     * Returns the names of the root namespaces stored for this repository.
+     *
+     * @param session The repository session.
+     * @param repoId  The repository id.
+     * @return A list of namespace names, or empty list, if no namespace is stored for this repository.
+     * @throws MetadataResolutionException If the retrieval failed.
+     */
     Collection<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException;
 
     /**
+     * Returns the list of namespace names that are children of the given namespace. It does not descend recursively.
      *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @return {@link Collection} of child namespaces of the namespace argument
-     * @throws MetadataResolutionException
+     * @param session   The repository session.
+     * @param repoId    The repository id.
+     * @param namespace The parent namespace '.'-separated.
+     * @return {@link Collection} of child namespace names, or a empty list, if there are no children for the given parent namespace.
+     * @throws MetadataResolutionException if the retrieval failed.
      */
-    Collection<String> getNamespaces( RepositorySession session, String repoId, String namespace )
+    Collection<String> getChildNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
+     * Return the project names that of all projects stored under the given namespace.
      *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @return
-     * @throws MetadataResolutionException
+     * @param session   The repository session.
+     * @param repoId    The repository id.
+     * @param namespace The namespace '.'-separated.
+     * @return The list of project names or empty list if no project exists at the given namespace.
+     * @throws MetadataResolutionException if the retrieval failed.
      */
     Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
+     * Returns the names of all versions stored under the given project.
      *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @param projectId
-     * @return
-     * @throws MetadataResolutionException
+     * @param session   The repository session.
+     * @param repoId    The repository id.
+     * @param namespace The namespace '.'-separated.
+     * @param projectId The project name.
+     * @return The list of versions or a empty list, if not version was found.
+     * @throws MetadataResolutionException if the retrieval failed.
      */
     Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException;
 
     /**
+     * Removes a project version and all its artifact and facet metadata under it.
      *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @param projectId
-     * @param projectVersion
-     * @throws MetadataRepositoryException
+     * @param session        The repository session.
+     * @param repoId         The repository id.
+     * @param namespace      The namespace '.'-separated.
+     * @param projectId      The project name
+     * @param projectVersion The project version.
+     * @throws MetadataRepositoryException if the removal failed.
      * @since 1.4-M4
      */
     void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataRepositoryException;
 
     /**
+     * Returns the metadata of all artifacts stored for the given project version.
      *
-     * @param session
-     * @param repoId
-     * @param namespace
-     * @param projectId
-     * @param projectVersion
-     * @return
-     * @throws MetadataResolutionException
+     * @param session        The repository session.
+     * @param repoId         The repository id.
+     * @param namespace      The namespace '.'-separated.
+     * @param projectId      The project name.
+     * @param projectVersion The project version.
+     * @return The list of artifact metadata objects, or a empty list, if no artifact exists for this version.
+     * @throws MetadataResolutionException if the retrieval failed.
      */
     Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
                                                String projectVersion )
         throws MetadataResolutionException;
 
     /**
-     * remove a project
-     *
+     * Removes the project metadata and metadata for all stored versions, artifacts and facets of this project.
      *
-     * @param session
-     * @param repositoryId
-     * @param namespace
-     * @param projectId
-     * @throws MetadataRepositoryException
+     * @param session      The repository session.
+     * @param repositoryId The repository id.
+     * @param namespace    The namespace '.'-separated.
+     * @param projectId    The project name.
+     * @throws MetadataRepositoryException if the removal failed.
      * @since 1.4-M4
      */
     void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException;
 
-
-    void close()
+    /**
+     * Closes the repository.
+     * Repositories are normally opened during startup and closed on shutdown. The closing of a repository stops all
+     * invalidates all connections to it.
+     * Sessions that are open are invalidated too. The repository will throw exceptions if it is used after closing.
+     *
+     * @throws MetadataRepositoryException if the something went wrong or if the repository was closed already.
+     */
+    void close( )
         throws MetadataRepositoryException;
 
 
-    boolean canObtainAccess( Class<?> aClass );
-
-    <T> T obtainAccess( RepositorySession session,  Class<T> aClass )
-        throws MetadataRepositoryException;
-
     /**
-     * Full text artifacts search.
-     *  
+     * Full text artifacts search. Searches for the given string in all metadata and returns artifacts where the
+     * text was found.
      *
-     * @param session
-     * @param repositoryId can be null to search in all repositories
-     * @param text
-     * @param exact running an exact search, the value must exactly match the text.
-     * @return a list of artifacts
-     * @throws MetadataRepositoryException
+     * @param session      The repository session.
+     * @param repositoryId can be <code>null</code> to search in all repositories
+     * @param text         The search text
+     * @param exact        if true, the value must exactly match the text.
+     * @return a list of artifacts or empty list if no results where found.
+     * @throws MetadataRepositoryException if the retrieval failed.
      */
     List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException;
 
     /**
-     * Full text artifacts search inside the specified key.
-     *  
+     * Full text artifacts search inside the specified key. Searches for the given text in all attributes with the given
+     * name.
      *
-     * @param session
-     * @param repositoryId can be null to search in all repositories
-     * @param key search only inside this key
-     * @param text
-     * @param exact running an exact search, the value must exactly match the text.
-     * @return a list of artifacts
-     * @throws MetadataRepositoryException
+     * @param session      The repository session.
+     * @param repositoryId can be <code>null</code> to search in all repositories
+     * @param key          search only inside this attribute.
+     * @param text         The search string.
+     * @param exact        if true, the value must exactly match the text.
+     * @return a list of artifacts or empty list if no results were found.
+     * @throws MetadataRepositoryException if the retrieval failed.
      */
     List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
         throws MetadataRepositoryException;
diff --git a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
index e24f456..668f45c 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
@@ -177,7 +177,7 @@ public abstract class AbstractMetadataRepositoryTest
             }
         } );
 
-        // for the getArtifactsByProjectVersionMetadata tests
+        // for the getArtifactsByProjectVersionFacet tests
         factories.add( new GenericMetadataFacetFactory( ) );
 
         return factories;
@@ -1540,13 +1540,13 @@ public abstract class AbstractMetadataRepositoryTest
 
                 assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "org" );
 
-                namespaces = getRepository( ).getNamespaces( session, TEST_REPO_ID, "org" );
+                namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org" );
                 assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "apache" );
 
-                namespaces = getRepository( ).getNamespaces( session, TEST_REPO_ID, "org.apache" );
+                namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org.apache" );
                 assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "maven" );
 
-                namespaces = getRepository( ).getNamespaces( session, TEST_REPO_ID, "org.apache.maven" );
+                namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org.apache.maven" );
                 assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "shared" );
 
             } );
@@ -1566,7 +1566,7 @@ public abstract class AbstractMetadataRepositoryTest
             metadata.setId( TEST_PROJECT_VERSION );
             getRepository( ).updateProjectVersion( session, TEST_REPO_ID, namespace, TEST_PROJECT, metadata );
 
-            Collection<String> namespaces = getRepository( ).getNamespaces( session, TEST_REPO_ID, namespace );
+            Collection<String> namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, namespace );
 
             assertThat( namespaces ).isNotNull( ).isEmpty( );
 
@@ -1754,7 +1754,7 @@ public abstract class AbstractMetadataRepositoryTest
 
             tryAssert( ( ) -> {
                 Collection<ArtifactMetadata> artifactsByMetadata =
-                    getRepository( ).getArtifactsByProjectVersionMetadata( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID );
+                    getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID );
 
                 assertThat( artifactsByMetadata ).hasSize( 1 );
                 ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator( ).next( );
@@ -1775,7 +1775,7 @@ public abstract class AbstractMetadataRepositoryTest
             tryAssert( ( ) -> {
 
                 Collection<ArtifactMetadata> artifactsByMetadata =
-                    getRepository( ).getArtifactsByProjectVersionMetadata( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
+                    getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
                 assertThat( artifactsByMetadata ).hasSize( 1 );
                 assertThat( artifactsByMetadata.iterator( ).next( ).getRepositoryId( ) ).isNotNull( ).isNotEmpty( );
             } );
@@ -1792,7 +1792,7 @@ public abstract class AbstractMetadataRepositoryTest
             tryAssert( ( ) -> {
 
                 Collection<ArtifactMetadata> artifactsByMetadata =
-                    getRepository( ).getArtifactsByProjectVersionMetadata( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
+                    getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
                 assertThat( artifactsByMetadata ).hasSize( 1 );
             } );
         }
@@ -1807,7 +1807,7 @@ public abstract class AbstractMetadataRepositoryTest
             createArtifactWithMavenArtifactFacet( session );
             tryAssert( ( ) -> {
                 Collection<ArtifactMetadata> artifactsByMetadata =
-                    getRepository( ).getArtifactsByMetadata( session, "foo", TEST_METADATA_VALUE, null );
+                    getRepository( ).getArtifactsByAttribute( session, "foo", TEST_METADATA_VALUE, null );
                 assertThat( artifactsByMetadata ).hasSize( 1 );
                 ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator( ).next( );
                 assertThat( artifactMetadata.getId( ) ).isEqualTo( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
@@ -1828,10 +1828,10 @@ public abstract class AbstractMetadataRepositoryTest
         {
             createArtifactWithData( session );
             // only works on JCR implementation
-            // Collection<ArtifactMetadata> artifactsByProperty = getRepository().getArtifactsByProperty( "org.name", TEST_ORGANIZATION.getName(), TEST_REPO_ID );
+            // Collection<ArtifactMetadata> artifactsByProperty = getRepository().getArtifactsByProjectVersionAttribute( "org.name", TEST_ORGANIZATION.getName(), TEST_REPO_ID );
             tryAssert( ( ) -> {
 
-                Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).getArtifactsByProperty( session, "url", TEST_URL, TEST_REPO_ID );
+                Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).getArtifactsByProjectVersionAttribute( session, "url", TEST_URL, TEST_REPO_ID );
                 assertThat( artifactsByProperty ).hasSize( 1 );
                 ArtifactMetadata artifactMetadata = artifactsByProperty.iterator( ).next( );
                 assertThat( artifactMetadata.getId( ) ).isEqualTo( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
@@ -2046,13 +2046,13 @@ public abstract class AbstractMetadataRepositoryTest
 
             log.info( "artifactMetadatas: {}", artifactMetadatas );
 
-            getRepository( ).removeArtifact( session, artifactOne, "2.0-SNAPSHOT" );
+            getRepository( ).removeTimestampedArtifact( session, artifactOne, "2.0-SNAPSHOT" );
 
             artifactMetadatas = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
 
             assertThat( artifactMetadatas ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
 
-            getRepository( ).removeArtifact( session, artifactTwo, "2.0-SNAPSHOT" );
+            getRepository( ).removeTimestampedArtifact( session, artifactTwo, "2.0-SNAPSHOT" );
 
             artifactMetadatas = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
 
diff --git a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
index 7cc7528..4f06928 100644
--- a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
+++ b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
@@ -73,7 +73,7 @@ public class RepositoryWalkingStatisticsProvider implements RepositoryStatistics
                                  String ns )
         throws MetadataResolutionException
     {
-        for ( String namespace : metadataRepository.getNamespaces( repositorySession , repositoryId, ns ) )
+        for ( String namespace : metadataRepository.getChildNamespaces( repositorySession , repositoryId, ns ) )
         {
             walkRepository( repositorySession, metadataRepository, stats, repositoryId, ns + "." + namespace );
         }
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
index 1b6646a..f3a0fee 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
@@ -482,7 +482,7 @@ public class CassandraMetadataRepository
 
     // FIXME this one need peformance improvement maybe a cache?
     @Override
-    public Collection<String> getNamespaces( RepositorySession session, final String repoId, final String namespaceId )
+    public Collection<String> getChildNamespaces( RepositorySession session, final String repoId, final String namespaceId )
         throws MetadataResolutionException
     {
 
@@ -2032,17 +2032,17 @@ public class CassandraMetadataRepository
 
     /**
      * Project version and artifact level metadata are stored in the same place, no distinctions in Cassandra
-     * implementation, just calls {@link MetadataRepository#getArtifactsByMetadata(RepositorySession, String, String, String)}
+     * implementation, just calls {@link MetadataRepository#getArtifactsByAttribute(RepositorySession, String, String, String)}
      */
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionFacet( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
-        return getArtifactsByMetadata( session, key, value, repositoryId );
+        return this.getArtifactsByAttribute( session, key, value, repositoryId );
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         RangeSlicesQuery<String, String, String> query =
@@ -2101,7 +2101,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         QueryResult<OrderedRows<String, String, String>> result =
@@ -2146,7 +2146,7 @@ public class CassandraMetadataRepository
                                 final String version, final String id )
         throws MetadataRepositoryException
     {
-        logger.debug( "removeArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",
+        logger.debug( "removeTimestampedArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",
                       repositoryId, namespace, project, version, id );
         String key =
             new ArtifactMetadataModel.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespace ).withId(
@@ -2166,10 +2166,10 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeTimestampedArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
-        logger.debug( "removeArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",
+        logger.debug( "removeTimestampedArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",
                       artifactMetadata.getRepositoryId(), artifactMetadata.getNamespace(),
                       artifactMetadata.getProject(), baseVersion, artifactMetadata.getId() );
         String key =
@@ -2182,8 +2182,8 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, final String repositoryId, final String namespace, final String project,
-                                final String version, final MetadataFacet metadataFacet )
+    public void removeFacetFromArtifact( RepositorySession session, final String repositoryId, final String namespace, final String project,
+                                         final String version, final MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
 
@@ -2447,21 +2447,6 @@ public class CassandraMetadataRepository
     }
 
 
-    @Override
-    public boolean canObtainAccess( Class<?> aClass )
-    {
-        return false;
-    }
-
-    @Override
-    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
-        throws MetadataRepositoryException
-    {
-        throw new IllegalArgumentException(
-            "Access using " + aClass + " is not supported on the cassandra metadata storage" );
-    }
-
-
     private static class ModelMapperHolder
     {
         private static ModelMapper MODEL_MAPPER = new ModelMapper();
@@ -2473,7 +2458,7 @@ public class CassandraMetadataRepository
     }
 
     /**
-     * This implementation just calls getArtifactsByMetadata( null, text, repositoryId ). We can't search artifacts by
+     * This implementation just calls getArtifactsByAttribute( null, text, repositoryId ). We can't search artifacts by
      * any property.
      */
     @Override
@@ -2481,7 +2466,7 @@ public class CassandraMetadataRepository
                                                    final String text, final boolean exact )
         throws MetadataRepositoryException
     {
-        return getArtifactsByMetadata( session, null, text, repositoryId );
+        return this.getArtifactsByAttribute( session, null, text, repositoryId );
     }
 
     /**
@@ -2494,8 +2479,8 @@ public class CassandraMetadataRepository
     {
         // TODO optimize
         List<ArtifactMetadata> artifacts = new LinkedList<ArtifactMetadata>();
-        artifacts.addAll( getArtifactsByMetadata( session, key, text, repositoryId ) );
-        artifacts.addAll( getArtifactsByProperty( session, key, text, repositoryId ) );
+        artifacts.addAll( this.getArtifactsByAttribute( session, key, text, repositoryId ) );
+        artifacts.addAll( this.getArtifactsByProjectVersionAttribute( session, key, text, repositoryId ) );
         return artifacts;
     }
 
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index aa4e25a..e694ec9 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -476,7 +476,7 @@ public class FileMetadataRepository
                                          ZonedDateTime endTime)
             throws MetadataRepositoryException {
         try {
-            for (String namespace : getNamespaces(session, repoId, ns)) {
+            for (String namespace : this.getChildNamespaces(session, repoId, ns)) {
                 getArtifactsByDateRange(session, artifacts, repoId, ns + "." + namespace, startTime, endTime);
             }
 
@@ -580,17 +580,6 @@ public class FileMetadataRepository
     }
 
 
-    @Override
-    public boolean canObtainAccess(Class<?> aClass) {
-        return false;
-    }
-
-    @Override
-    public <T> T obtainAccess(RepositorySession session, Class<T> aClass) {
-        throw new IllegalArgumentException(
-                "Access using " + aClass + " is not supported on the file metadata storage");
-    }
-
     private void updateArtifactFacets(ArtifactMetadata artifact, Properties properties) {
         String propertyPrefix = "artifact:facet:" + artifact.getId() + ":";
         for (MetadataFacet facet : artifact.getFacetList()) {
@@ -634,7 +623,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeArtifact(RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion)
+    public void removeTimestampedArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion)
             throws MetadataRepositoryException {
 
         try {
@@ -712,8 +701,8 @@ public class FileMetadataRepository
      * @throws MetadataRepositoryException
      */
     @Override
-    public void removeArtifact(RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
-                               MetadataFacet metadataFacet)
+    public void removeFacetFromArtifact( RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
+                                         MetadataFacet metadataFacet)
             throws MetadataRepositoryException {
         throw new UnsupportedOperationException("not implemented");
     }
@@ -731,21 +720,21 @@ public class FileMetadataRepository
 
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata(RepositorySession session, String key, String value, String repositoryId)
+    public List<ArtifactMetadata> getArtifactsByProjectVersionFacet( RepositorySession session, String key, String value, String repositoryId)
             throws MetadataRepositoryException {
         throw new UnsupportedOperationException("not yet implemented in File backend");
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata(RepositorySession session, String key, String value, String repositoryId)
+    public List<ArtifactMetadata> getArtifactsByAttribute( RepositorySession session, String key, String value, String repositoryId)
             throws MetadataRepositoryException {
         throw new UnsupportedOperationException("not yet implemented in File backend");
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty(RepositorySession session, String key, String value, String repositoryId)
+    public List<ArtifactMetadata> getArtifactsByProjectVersionAttribute( RepositorySession session, String key, String value, String repositoryId)
             throws MetadataRepositoryException {
-        throw new UnsupportedOperationException("getArtifactsByProperty not yet implemented in File backend");
+        throw new UnsupportedOperationException("getArtifactsByProjectVersionAttribute not yet implemented in File backend");
     }
 
     private Path getMetadataDirectory(String repoId, String facetId)
@@ -1057,7 +1046,7 @@ public class FileMetadataRepository
     @Override
     public Collection<String> getRootNamespaces(RepositorySession session, String repoId)
             throws MetadataResolutionException {
-        return getNamespaces(session, repoId, null);
+        return this.getChildNamespaces(session, repoId, null);
     }
 
     private Stream<String> getAllNamespacesStream(RepositorySession session, String repoId) {
@@ -1087,7 +1076,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getNamespaces(RepositorySession session, String repoId, String baseNamespace)
+    public Collection<String> getChildNamespaces( RepositorySession session, String repoId, String baseNamespace)
             throws MetadataResolutionException {
         try {
             List<String> allNamespaces;
@@ -1305,7 +1294,7 @@ public class FileMetadataRepository
 
     private void getArtifacts(RepositorySession session, List<ArtifactMetadata> artifacts, String repoId, String ns)
             throws MetadataResolutionException {
-        for (String namespace : getNamespaces(session, repoId, ns)) {
+        for (String namespace : this.getChildNamespaces(session, repoId, ns)) {
             getArtifacts(session, artifacts, repoId, ns + "." + namespace);
         }
 
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index 07ef40c..2efdf96 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -963,7 +963,7 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionFacet( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         final Session jcrSession = getSession( session );
@@ -973,7 +973,7 @@ public class JcrMetadataRepository
 
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         final Session jcrSession = getSession( session );
@@ -983,7 +983,7 @@ public class JcrMetadataRepository
 
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionAttribute( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         final Session jcrSession = getSession( session );
@@ -1367,11 +1367,11 @@ public class JcrMetadataRepository
     public Collection<String> getRootNamespaces( RepositorySession session, String repositoryId )
         throws MetadataResolutionException
     {
-        return getNamespaces(session , repositoryId, null );
+        return this.getChildNamespaces(session , repositoryId, null );
     }
 
     @Override
-    public Collection<String> getNamespaces( RepositorySession session, String repositoryId, String baseNamespace )
+    public Collection<String> getChildNamespaces( RepositorySession session, String repositoryId, String baseNamespace )
         throws MetadataResolutionException
     {
         String path = baseNamespace != null
@@ -1417,7 +1417,7 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeTimestampedArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
         final Session jcrSession = getSession( session );
@@ -1525,8 +1525,8 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
-                                MetadataFacet metadataFacet )
+    public void removeFacetFromArtifact( RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
+                                         MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
         final Session jcrSession = getSession( session );
@@ -1604,25 +1604,6 @@ public class JcrMetadataRepository
 
 
     @Override
-    public boolean canObtainAccess( Class<?> aClass )
-    {
-        return aClass == Session.class;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    @Override
-    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
-        throws MetadataRepositoryException
-    {
-        if ( aClass == Session.class )
-        {
-            return (T) getSession( session );
-        }
-        throw new IllegalArgumentException(
-            "Access using " + aClass + " is not supported on the JCR metadata storage" );
-    }
-
-    @Override
     public void close()
         throws MetadataRepositoryException
     {
diff --git a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
index f888f1f..8d7f92e 100644
--- a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
+++ b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
@@ -628,9 +628,9 @@ public class RepositoryStatisticsManagerTest
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "com" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "com" ) ).andReturn( Arrays.asList( "example" ) );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "com" ) ).andReturn( Arrays.asList( "example" ) );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "com.example" ) ).andReturn(
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "com.example" ) ).andReturn(
                 Arrays.<String>asList() );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "com.example" ) ).andReturn(
@@ -650,14 +650,14 @@ public class RepositoryStatisticsManagerTest
                                createArtifact( "com.example", "example-project", "1.1", "pom" ) ) );
 
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org" ) ).andReturn( Arrays.asList( "apache", "codehaus" ) );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org" ) ).andReturn( Arrays.asList( "apache", "codehaus" ) );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.asList( "archiva", "maven" )  );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.asList( "archiva", "maven" )  );
 
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.<String>asList() );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.asList( "metadata-repository-api", "metadata-model" ) );
 
@@ -685,7 +685,7 @@ public class RepositoryStatisticsManagerTest
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "metadata-model", "1.3", "jar" ),
                                            createArtifact( "org.apache.archiva", "metadata-model", "1.3", "pom" ) ) );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org.apache.maven" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org.apache.maven" ) ).andReturn( Arrays.<String>asList() );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org.apache.maven" ) )
                 .andReturn( Arrays.asList( "maven-model" )  );
@@ -697,14 +697,14 @@ public class RepositoryStatisticsManagerTest
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "maven-model", "2.2.1", "jar" ),
                                            createArtifact( "org.apache.archiva", "maven-model", "2.2.1", "pom" ) ) );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org.codehaus" ) ).andReturn( Arrays.asList( "plexus" ) );
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org.codehaus" ) ).andReturn( Arrays.asList( "plexus" ) );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org" ) ).andReturn( Arrays.<String>asList(  ) );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org.codehaus" ) )
                 .andReturn( Arrays.<String>asList(  ) );
 
-            expect( metadataRepository.getNamespaces(session , TEST_REPO_ID, "org.codehaus.plexus" ) )
+            expect( metadataRepository.getChildNamespaces(session , TEST_REPO_ID, "org.codehaus.plexus" ) )
                 .andReturn( Arrays.<String>asList(  ) );
 
             expect( metadataRepository.getProjects(session , TEST_REPO_ID, "org.codehaus.plexus" ) )


[archiva] 01/03: Changing contract for nullable parameters

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git

commit 811c445f04c90293b4ff30fbbc8f36a5e174d2e7
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Aug 25 13:50:55 2019 +0200

    Changing contract for nullable parameters
---
 .../metadata/repository/MetadataRepository.java    | 81 +++++++++++-----------
 .../cassandra/CassandraMetadataRepository.java     |  2 +
 .../repository/file/FileMetadataRepository.java    | 56 ++++++++++++---
 .../repository/jcr/JcrMetadataRepository.java      |  2 +
 .../repository/jcr/OakRepositoryFactory.java       |  7 +-
 5 files changed, 95 insertions(+), 53 deletions(-)

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 c267b36..bf3d8ba 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
@@ -26,8 +26,8 @@ import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionReference;
 
-import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.annotation.ParametersAreNonnullByDefault;
 import java.time.ZonedDateTime;
 import java.util.Collection;
 import java.util.List;
@@ -94,6 +94,7 @@ import java.util.stream.Stream;
  * But for some backends there is no difference.
  *
  */
+@ParametersAreNonnullByDefault
 public interface MetadataRepository
 {
 
@@ -107,7 +108,7 @@ public interface MetadataRepository
      * @param project      the project metadata to create or update
      * @throws MetadataRepositoryException if the update fails
      */
-    void updateProject( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull ProjectMetadata project )
+    void updateProject(  RepositorySession session,  String repositoryId,  ProjectMetadata project )
         throws MetadataRepositoryException;
 
     /**
@@ -121,9 +122,9 @@ public interface MetadataRepository
      * @param artifactMeta Information about the artifact itself.
      * @throws MetadataRepositoryException if something goes wrong during update.
      */
-    void updateArtifact( @Nonnull RepositorySession session, @Nonnull String repositoryId,
-                         @Nonnull String namespace, @Nonnull String projectId, @Nonnull String projectVersion,
-                         @Nonnull ArtifactMetadata artifactMeta )
+    void updateArtifact(  RepositorySession session,  String repositoryId,
+                          String namespace,  String projectId,  String projectVersion,
+                          ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException;
 
     /**
@@ -137,9 +138,9 @@ public interface MetadataRepository
      * @param versionMetadata The metadata for the version
      * @throws MetadataRepositoryException if something goes wrong during update
      */
-    void updateProjectVersion( @Nonnull RepositorySession session, @Nonnull String repositoryId,
-                               @Nonnull String namespace, @Nonnull String projectId,
-                               @Nonnull ProjectVersionMetadata versionMetadata )
+    void updateProjectVersion(  RepositorySession session,  String repositoryId,
+                                String namespace,  String projectId,
+                                ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException;
 
     /**
@@ -151,7 +152,7 @@ public interface MetadataRepository
      * @param namespace The namespace ('.' separated)
      * @throws MetadataRepositoryException if something goes wrong during update
      */
-    void updateNamespace( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String namespace )
+    void updateNamespace(  RepositorySession session,  String repositoryId,  String namespace )
         throws MetadataRepositoryException;
 
     /**
@@ -163,7 +164,7 @@ public interface MetadataRepository
      * @return The list of facet names, or an empty list, if there are no facets stored on this repository for the given facet id.
      * @throws MetadataRepositoryException if something goes wrong
      */
-    List<String> getMetadataFacets( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String facetId )
+    List<String> getMetadataFacets(  RepositorySession session,  String repositoryId,  String facetId )
         throws MetadataRepositoryException;
 
 
@@ -184,8 +185,8 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 3.0
      */
-    <T extends MetadataFacet> Stream<T> getMetadataFacetStream( @Nonnull RepositorySession session,
-                                                                @Nonnull String repositoryId, @Nonnull Class<T> facetClazz)
+    <T extends MetadataFacet> Stream<T> getMetadataFacetStream(  RepositorySession session,
+                                                                 String repositoryId,  Class<T> facetClazz)
         throws MetadataRepositoryException;
 
     /**
@@ -201,9 +202,9 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 3.0
      */
-    <T extends MetadataFacet> Stream<T> getMetadataFacetStream(@Nonnull RepositorySession session,
-                                                                @Nonnull String repositoryId,  @Nonnull Class<T> facetClazz,
-                                                                @Nonnull QueryParameter queryParameter)
+    <T extends MetadataFacet> Stream<T> getMetadataFacetStream( RepositorySession session,
+                                                                 String repositoryId,   Class<T> facetClazz,
+                                                                 QueryParameter queryParameter)
         throws MetadataRepositoryException;
 
     /**
@@ -217,7 +218,7 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException if something goes wrong
      * @since 1.4-M4
      */
-    boolean hasMetadataFacet( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String facetId )
+    boolean hasMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId )
         throws MetadataRepositoryException;
 
     /**
@@ -231,8 +232,8 @@ public interface MetadataRepository
      * @return The facet values
      * @throws MetadataRepositoryException if something goes wrong.
      */
-    MetadataFacet getMetadataFacet( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String facetId,
-                                    @Nonnull String name )
+    MetadataFacet getMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId,
+                                     String name )
         throws MetadataRepositoryException;
 
     /**
@@ -249,8 +250,8 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException if the data cannot be retrieved from the backend
      * @since 3.0
      */
-    <T extends MetadataFacet> T getMetadataFacet(@Nonnull RepositorySession session, @Nonnull String repositoryId,
-                                                 @Nonnull Class<T> clazz, @Nonnull String name)
+    <T extends MetadataFacet> T getMetadataFacet( RepositorySession session,  String repositoryId,
+                                                  Class<T> clazz,  String name)
     throws MetadataRepositoryException;
 
     /**
@@ -261,8 +262,8 @@ public interface MetadataRepository
      * @param metadataFacet The facet to add
      * @throws MetadataRepositoryException if the facet cannot be stored.
      */
-    void addMetadataFacet( @Nonnull RepositorySession session, @Nonnull String repositoryId,
-                           @Nonnull MetadataFacet metadataFacet )
+    void addMetadataFacet(  RepositorySession session,  String repositoryId,
+                            MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
     /**
@@ -273,7 +274,7 @@ public interface MetadataRepository
      * @param facetId The facet id
      * @throws MetadataRepositoryException if the removal fails
      */
-    void removeMetadataFacets( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String facetId )
+    void removeMetadataFacets(  RepositorySession session,  String repositoryId,  String facetId )
         throws MetadataRepositoryException;
 
     /**
@@ -284,7 +285,7 @@ public interface MetadataRepository
      * @param facetId The facet id
      * @param name The facet name or path
      */
-    void removeMetadataFacet( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String facetId, @Nonnull String name )
+    void removeMetadataFacet(  RepositorySession session,  String repositoryId,  String facetId,  String name )
         throws MetadataRepositoryException;
 
 
@@ -293,7 +294,7 @@ public interface MetadataRepository
      * uses default query parameters.
      *
      */
-    List<ArtifactMetadata> getArtifactsByDateRange( @Nonnull RepositorySession session, @Nonnull String repositoryId,
+    List<ArtifactMetadata> getArtifactsByDateRange(  RepositorySession session,  String repositoryId,
                                                     @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
@@ -312,9 +313,9 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException if the query fails.
      * @since 3.0
      */
-    List<ArtifactMetadata> getArtifactsByDateRange(@Nonnull RepositorySession session, @Nonnull String repositoryId,
+    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session,  String repositoryId,
                                                    @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime,
-                                                   @Nonnull QueryParameter queryParameter )
+                                                    QueryParameter queryParameter )
             throws MetadataRepositoryException;
 
 
@@ -331,7 +332,7 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactByDateRangeStream( @Nonnull RepositorySession session, @Nonnull String repositoryId,
+    Stream<ArtifactMetadata> getArtifactByDateRangeStream(  RepositorySession session,  String repositoryId,
                                                            @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime )
         throws MetadataRepositoryException;
 
@@ -349,9 +350,9 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactByDateRangeStream( @Nonnull RepositorySession session, @Nonnull String repositoryId,
+    Stream<ArtifactMetadata> getArtifactByDateRangeStream(  RepositorySession session,  String repositoryId,
                                                            @Nullable ZonedDateTime startTime, @Nullable ZonedDateTime endTime,
-                                                           @Nonnull QueryParameter queryParameter)
+                                                            QueryParameter queryParameter)
         throws MetadataRepositoryException;
 
 
@@ -364,7 +365,7 @@ public interface MetadataRepository
      * @return The list of artifacts that match the given checksum.
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByChecksum(@Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull String checksum )
+    List<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session,  String repositoryId,  String checksum )
         throws MetadataRepositoryException;
 
     /**
@@ -378,7 +379,7 @@ public interface MetadataRepository
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( @Nonnull RepositorySession session, @Nonnull String key, @Nonnull String value,
+    List<ArtifactMetadata> getArtifactsByProjectVersionMetadata(  RepositorySession session,  String key,  String value,
                                                                  @Nullable String repositoryId )
         throws MetadataRepositoryException;
 
@@ -481,7 +482,7 @@ public interface MetadataRepository
      * @return A stream of artifact metadata objects for each artifact found in the repository.
      * @since 3.0
      */
-    Stream<ArtifactMetadata> getArtifactStream( @Nonnull RepositorySession session, @Nonnull String repositoryId, @Nonnull QueryParameter queryParameter )
+    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repositoryId,  QueryParameter queryParameter )
         throws MetadataResolutionException;
 
     /**
@@ -497,7 +498,7 @@ public interface MetadataRepository
      * @since 3.0
      * @see #getArtifactStream(RepositorySession, String, QueryParameter)
      */
-    Stream<ArtifactMetadata> getArtifactStream( @Nonnull RepositorySession session, @Nonnull String repositoryId)
+    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repositoryId)
         throws MetadataResolutionException;
 
     /**
@@ -512,9 +513,9 @@ public interface MetadataRepository
      * @since 3.0
      * @throws MetadataResolutionException if there are no elements for the given artifact coordinates.
      */
-    Stream<ArtifactMetadata> getArtifactStream( @Nonnull RepositorySession session, @Nonnull String repoId,
-                                                @Nonnull String namespace, @Nonnull String projectId,
-                                                @Nonnull String projectVersion, @Nonnull QueryParameter queryParameter )
+    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repoId,
+                                                 String namespace,  String projectId,
+                                                 String projectVersion,  QueryParameter queryParameter )
         throws MetadataResolutionException;
 
     /**
@@ -530,9 +531,9 @@ public interface MetadataRepository
      * @since 3.0
      * @throws MetadataResolutionException if there are no elements for the given artifact coordinates.
      */
-    Stream<ArtifactMetadata> getArtifactStream( @Nonnull RepositorySession session, @Nonnull String repoId,
-                                                @Nonnull String namespace, @Nonnull String projectId,
-                                           @Nonnull String projectVersion)
+    Stream<ArtifactMetadata> getArtifactStream(  RepositorySession session,  String repoId,
+                                                 String namespace,  String projectId,
+                                            String projectVersion)
         throws MetadataResolutionException;
     /**
      * basically just checking it exists not complete data returned
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
index 7637135..1b6646a 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
@@ -71,6 +71,7 @@ import org.modelmapper.ModelMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.ParametersAreNonnullByDefault;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.*;
@@ -88,6 +89,7 @@ import static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames
  * @author Olivier Lamy
  * @since 2.0.0
  */
+@ParametersAreNonnullByDefault
 public class CassandraMetadataRepository
     extends AbstractMetadataRepository implements MetadataRepository
 {
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index 4719d92..aa4e25a 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -23,26 +23,66 @@ import org.apache.archiva.checksum.ChecksumAlgorithm;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.metadata.QueryParameter;
-import org.apache.archiva.metadata.model.*;
-import org.apache.archiva.metadata.repository.*;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.CiManagement;
+import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.IssueManagement;
+import org.apache.archiva.metadata.model.License;
+import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.MetadataFacet;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.apache.archiva.metadata.model.Organization;
+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.model.Scm;
+import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.MetadataResolutionException;
+import org.apache.archiva.metadata.repository.MetadataService;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import javax.annotation.ParametersAreNonnullByDefault;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.nio.file.*;
+import java.nio.file.FileVisitOption;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+/**
+ * File implementation of the metadata repository. It uses property files in a separate directory tree.
+ * The implementation has no fulltext index. So fulltext queries are not supported.
+ *
+ * Some retrieval methods may not be very efficient.
+ */
+@ParametersAreNonnullByDefault
 public class FileMetadataRepository
         extends AbstractMetadataRepository implements MetadataRepository {
 
@@ -1213,8 +1253,8 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Stream<ArtifactMetadata> getArtifactStream( @Nonnull final RepositorySession session, @Nonnull final String repositoryId,
-                                                       @Nonnull QueryParameter queryParameter ) throws MetadataResolutionException
+    public Stream<ArtifactMetadata> getArtifactStream(  final RepositorySession session,  final String repositoryId,
+                                                        QueryParameter queryParameter ) throws MetadataResolutionException
     {
 
         return getAllNamespacesStream( session, repositoryId ).filter( Objects::nonNull ).flatMap( ns ->
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index a9d0a85..07ef40c 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -41,6 +41,7 @@ import org.apache.jackrabbit.commons.cnd.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.ParametersAreNonnullByDefault;
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
@@ -76,6 +77,7 @@ import static org.apache.archiva.metadata.repository.jcr.JcrConstants.*;
  * TODO below: revise storage format for project version metadata
  * TODO revise reference storage
  */
+@ParametersAreNonnullByDefault
 public class JcrMetadataRepository
     extends AbstractMetadataRepository implements MetadataRepository, RepositoryStatisticsProvider
 {
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/OakRepositoryFactory.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/OakRepositoryFactory.java
index d303048..1db4fd1 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/OakRepositoryFactory.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/OakRepositoryFactory.java
@@ -75,7 +75,6 @@ import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nonnull;
 import javax.jcr.Repository;
 import java.io.Closeable;
 import java.io.IOException;
@@ -90,14 +89,12 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.archiva.metadata.repository.jcr.JcrConstants.*;
 import static org.apache.archiva.metadata.repository.jcr.OakRepositoryFactory.StoreType.IN_MEMORY_TYPE;
 import static org.apache.archiva.metadata.repository.jcr.OakRepositoryFactory.StoreType.SEGMENT_FILE_TYPE;
 import static org.apache.commons.io.FileUtils.ONE_MB;
 import static org.apache.jackrabbit.JcrConstants.*;
 import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.archiva.metadata.repository.jcr.JcrConstants.*;
-import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
-import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
 
 /**
  * Created by martin on 14.06.17.
@@ -430,7 +427,7 @@ public class OakRepositoryFactory
             }
 
             @Override
-            public void initialize( @Nonnull NodeBuilder root )
+            public void initialize(  NodeBuilder root )
             {
                 NodeBuilder namespaces;
                 if ( !root.hasChildNode( NamespaceConstants.REP_NAMESPACES ) )