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 2020/03/08 14:58:24 UTC

[archiva] 04/04: Fixing path matching for repository content

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

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

commit c7a924305a643f6c495aa950838252acc26d5e49
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Mar 8 13:20:51 2020 +0100

    Fixing path matching for repository content
---
 .../archiva/repository/ManagedRepositoryContent.java  | 12 ++++++++++++
 .../repository/mock/ManagedRepositoryContentMock.java |  6 ++++++
 .../scanner/mock/ManagedRepositoryContentMock.java    | 18 ++++++++++++++++++
 .../repository/mock/ManagedRepositoryContentMock.java |  6 ++++++
 .../content/AbstractDefaultRepositoryContent.java     |  5 +++++
 .../content/ManagedDefaultRepositoryContent.java      | 19 +++++++++++++++++--
 6 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
index a4565c4..09e7621 100644
--- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
+++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
@@ -58,6 +58,18 @@ public interface ManagedRepositoryContent extends RepositoryContent
      */
     void deleteItem( ContentItem item) throws ItemNotFoundException, ContentAccessException;
 
+
+    /**
+     * Returns a item for the given selector. The type of the returned item depends on the
+     * selector.
+     *
+     * @param selector the item selector
+     * @return the content item that matches the given selector
+     * @throws ContentAccessException if an error occured while accessing the backend
+     * @throws IllegalArgumentException if the selector does not select a valid content item
+     */
+    ContentItem getItem(ItemSelector selector) throws ContentAccessException, IllegalArgumentException;
+
     /**
      * Returns the namespace for the given selected coordinates. The selector must specify a namespace. All other
      * coordinates are ignored.
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index c719d38..ac14445 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -82,6 +82,12 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent
     }
 
     @Override
+    public ContentItem getItem( ItemSelector selector ) throws ContentAccessException, IllegalArgumentException
+    {
+        return null;
+    }
+
+    @Override
     public Namespace getNamespace( ItemSelector namespaceSelector ) throws ContentAccessException, IllegalArgumentException
     {
         return null;
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
index 09794b7..66ab810 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
@@ -98,6 +98,12 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent
     }
 
     @Override
+    public ContentItem getItem( ItemSelector selector ) throws ContentAccessException, IllegalArgumentException
+    {
+        return null;
+    }
+
+    @Override
     public Namespace getNamespace( ItemSelector namespaceSelector ) throws ContentAccessException, IllegalArgumentException
     {
         return null;
@@ -182,6 +188,18 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent
     }
 
     @Override
+    public ContentItem toItem( String path ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public ContentItem toItem( StorageAsset assetPath ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
     public void deleteVersion( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException
     {
 
diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index bc1a16f..d06ccd2 100644
--- a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -102,6 +102,12 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent
     }
 
     @Override
+    public ContentItem getItem( ItemSelector selector ) throws ContentAccessException, IllegalArgumentException
+    {
+        return null;
+    }
+
+    @Override
     public Namespace getNamespace( ItemSelector namespaceSelector ) throws ContentAccessException, IllegalArgumentException
     {
         return null;
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContent.java
index e2532e1..d33843f 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContent.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContent.java
@@ -58,6 +58,11 @@ public abstract class AbstractDefaultRepositoryContent implements RepositoryCont
     private PathParser defaultPathParser = new DefaultPathParser();
 
 
+    PathParser getPathParser() {
+        return defaultPathParser;
+    }
+
+
 
     /**
      *
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
index c5d371e..dfc0f04 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java
@@ -200,6 +200,20 @@ public class ManagedDefaultRepositoryContent
     }
 
     @Override
+    public ContentItem getItem( ItemSelector selector ) throws ContentAccessException, IllegalArgumentException
+    {
+        if (selector.hasVersion() && selector.hasArtifactId()) {
+            return getArtifact( selector );
+        } else if (selector.hasProjectId() && selector.hasVersion()) {
+            return getVersion( selector );
+        } else if (selector.hasProjectId()) {
+            return getProject( selector );
+        } else {
+            return getNamespace( selector );
+        }
+    }
+
+    @Override
     public Namespace getNamespace( final ItemSelector namespaceSelector ) throws ContentAccessException, IllegalArgumentException
     {
         return namespaceMap.computeIfAbsent( namespaceSelector.getNamespace(),
@@ -620,13 +634,14 @@ public class ManagedDefaultRepositoryContent
     @Override
     public ContentItem toItem( String path ) throws LayoutException
     {
-        return getItemFromPath( getAssetByPath( path ) );
+        ItemSelector selector = getPathParser( ).toItemSelector( path );
+        return getItem( selector );
     }
 
     @Override
     public ContentItem toItem( StorageAsset assetPath ) throws LayoutException
     {
-        return getItemFromPath( assetPath );
+        return toItem( assetPath.getPath( ) );
     }
 
     /// ************* End of new generation interface ******************