]> source.dussan.org Git - archiva.git/commitdiff
Fixing path matching for repository content
authorMartin Stockhammer <martin_s@apache.org>
Sun, 8 Mar 2020 12:20:51 +0000 (13:20 +0100)
committerMartin Stockhammer <martin_s@apache.org>
Sun, 8 Mar 2020 12:20:51 +0000 (13:20 +0100)
archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContent.java
archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java

index a4565c4d40c74bdd8fb1df3cf74b7f0598e32a8c..09e7621e6a188059779609e945ec15bee05d36ba 100644 (file)
@@ -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.
index c719d38713f6d7383fcaebf69120d92a84b6a875..ac14445433508e6a08cb9e203ec63b2da38209cc 100644 (file)
@@ -81,6 +81,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
     {
index 09794b757db4ccc6f49b8e10ef9d31cf6f2bf8c1..66ab810ad19adc088a6912817bf2f65d8edf8a36 100644 (file)
@@ -97,6 +97,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
     {
@@ -181,6 +187,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
     {
index bc1a16f1e71be64d781baf237764389c57462254..d06ccd20540a8424574df66e1b9bc7f4b06b7605 100644 (file)
@@ -101,6 +101,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
     {
index e2532e1599698d41de174ce6d4e217dcba2945a5..d33843f7005303a4907327da8ac39a065e59f5fa 100644 (file)
@@ -58,6 +58,11 @@ public abstract class AbstractDefaultRepositoryContent implements RepositoryCont
     private PathParser defaultPathParser = new DefaultPathParser();
 
 
+    PathParser getPathParser() {
+        return defaultPathParser;
+    }
+
+
 
     /**
      *
index c5d371e5d984e93e13bd2e4d711b082534ac9397..dfc0f04d550b6d4903d09593127359ce6060cbba 100644 (file)
@@ -199,6 +199,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
     {
@@ -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 ******************