]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1282] Repository Path Translation consolidation
authorBrett Porter <brett@apache.org>
Wed, 10 Mar 2010 14:35:31 +0000 (14:35 +0000)
committerBrett Porter <brett@apache.org>
Wed, 10 Mar 2010 14:35:31 +0000 (14:35 +0000)
- DefaultPathParser now a shell around RepositoryPathTranslator, for refactoring away

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@921366 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java
archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMappingTest.java
archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/DefaultArtifactMappingProvider.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryPathTranslator.java

index 6f235cc768aa3a5d353b061d395a5d49a202418f..16177da46580cc59ae9eb0adea94c63274e3c28d 100644 (file)
@@ -24,7 +24,6 @@ import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMapp
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 /**
  * ArtifactExtensionMapping
@@ -41,8 +40,6 @@ public class ArtifactExtensionMapping
 
     private static final Map<String, String> typeToExtensionMap;
 
-    private static final Pattern mavenPluginPattern = Pattern.compile( "^(maven-.*-plugin)|(.*-maven-plugin)$" );
-
     // TODO: won't support extensions - need to refactor away this class
     private static final ArtifactMappingProvider mapping = new DefaultArtifactMappingProvider();
 
@@ -79,17 +76,6 @@ public class ArtifactExtensionMapping
         return type;
     }
 
-    /**
-     * Determine if a given artifact Id conforms to the naming scheme for a maven plugin.
-     *
-     * @param artifactId the artifactId to test.
-     * @return true if this artifactId conforms to the naming scheme for a maven plugin.
-     */
-    public static boolean isMavenPlugin( String artifactId )
-    {
-        return mavenPluginPattern.matcher( artifactId ).matches();
-    }
-
     public static String mapExtensionAndClassifierToType( String classifier, String extension )
     {
         return mapExtensionAndClassifierToType( classifier, extension, extension );
index abea4a6b7fd934e8efa588de41834bd793b2f867..1c478f08c1d40fc1536b8f389e09105964c85144 100644 (file)
@@ -24,8 +24,8 @@ import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
 import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider;
 import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
 import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.layout.LayoutException;
 
@@ -71,80 +71,13 @@ public class DefaultPathParser implements PathParser
         artifact.setGroupId( metadata.getNamespace() );
         artifact.setArtifactId( metadata.getProject() );
         artifact.setVersion( metadata.getVersion() );
-
-        // TODO: use Maven facet instead
-        String filename = metadata.getId();
-        FilenameParser parser = new FilenameParser( filename );
-        artifact.setArtifactId( parser.expect( artifact.getArtifactId() ) );
-        if ( artifact.getArtifactId() == null )
-        {
-            throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid, "
-                + "should start with artifactId as stated in path." );
-        }
-        String baseVersion = VersionUtil.getBaseVersion( metadata.getVersion() );
-        artifact.setVersion( parser.expect( baseVersion ) );
-        if ( artifact.getVersion() == null )
+        MavenArtifactFacet facet = (MavenArtifactFacet) metadata.getFacet( MavenArtifactFacet.FACET_ID );
+        if ( facet != null )
         {
-            // We working with a snapshot?
-            if ( VersionUtil.isSnapshot( baseVersion ) )
-            {
-                artifact.setVersion( parser.nextVersion() );
-                if ( !VersionUtil.isUniqueSnapshot( artifact.getVersion() ) )
-                {
-                    throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid,"
-                        + "expected timestamp format in filename." );
-                }
-            }
-            else
-            {
-                throw new LayoutException( INVALID_ARTIFACT_PATH + "filename format is invalid, "
-                    + "expected version as stated in path." );
-            }
+            artifact.setClassifier( facet.getClassifier() );
+            artifact.setType( facet.getType() );
         }
-        switch(parser.seperator())
-        {
-            case '-':
-                // Definately a classifier.
-                artifact.setClassifier( parser.remaining() );
-
-                // Set the type.
-                artifact.setType( ArtifactExtensionMapping.mapExtensionAndClassifierToType( artifact.getClassifier(), parser.getExtension() ) );
-                break;
-            case '.':
-                // We have an dual extension possibility.
-                String extension = parser.remaining() + '.' + parser.getExtension();
-                artifact.setType( extension );
-                break;
-            case 0:
-                // End of the filename, only a simple extension left. - Set the type.
-                String type = ArtifactExtensionMapping.mapExtensionToType( parser.getExtension() );
-                if ( type == null )
-                {
-                    throw new LayoutException( "Invalid artifact: no type was specified" );
-                }
-                artifact.setType( type );
-                break;
-        }
-        if ( StringUtils.equals( "jar", artifact.getType() ) &&
-             ArtifactExtensionMapping.isMavenPlugin( artifact.getArtifactId() ) )
-        {
-            artifact.setType( ArtifactExtensionMapping.MAVEN_PLUGIN );
-        }
-
-        // Sanity Checks.
-
-        // Do we have a snapshot version?
-        if ( VersionUtil.isSnapshot( artifact.getVersion() ) )
-        {
-            // Rules are different for SNAPSHOTS
-            if ( !VersionUtil.isGenericSnapshot( baseVersion ) )
-            {
-                String filenameBaseVersion = VersionUtil.getBaseVersion( artifact.getVersion() );
-                throw new LayoutException( "Invalid snapshot artifact location, version directory should be "
-                    + filenameBaseVersion );
-            }
-        }
-
+        
         return artifact;
     }
 
index b8de803eb61bac7cfd554668dbb6adfb4a8f5997..3201b48333df92fcd92031498f2730f21c5fd8a0 100644 (file)
@@ -19,39 +19,57 @@ package org.apache.maven.archiva.repository.content;
  * under the License.
  */
 
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
+import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
 import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
 
+import java.util.Collections;
+
 /**
- * ArtifactExtensionMappingTest 
+ * ArtifactExtensionMappingTest
  *
  * @version $Id$
  */
 public class ArtifactExtensionMappingTest
-extends AbstractRepositoryLayerTestCase
+    extends AbstractRepositoryLayerTestCase
 {
+    private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator(
+        Collections.<ArtifactMappingProvider>emptyList() );
+
     public void testIsMavenPlugin()
     {
-        assertMavenPlugin( "maven-test-plugin"  );
-        assertMavenPlugin( "maven-clean-plugin"  );
-        assertMavenPlugin( "cobertura-maven-plugin"  );
-        assertMavenPlugin( "maven-project-info-reports-plugin"  );
-        assertMavenPlugin( "silly-name-for-a-maven-plugin"  );
-        
-        assertNotMavenPlugin( "maven-plugin-api"  );
-        assertNotMavenPlugin( "foo-lib"  );
-        assertNotMavenPlugin( "another-maven-plugin-api"  );
-        assertNotMavenPlugin( "secret-maven-plugin-2"  );
+        assertMavenPlugin( "maven-test-plugin" );
+        assertMavenPlugin( "maven-clean-plugin" );
+        assertMavenPlugin( "cobertura-maven-plugin" );
+        assertMavenPlugin( "maven-project-info-reports-plugin" );
+        assertMavenPlugin( "silly-name-for-a-maven-plugin" );
+
+        assertNotMavenPlugin( "maven-plugin-api" );
+        assertNotMavenPlugin( "foo-lib" );
+        assertNotMavenPlugin( "another-maven-plugin-api" );
+        assertNotMavenPlugin( "secret-maven-plugin-2" );
     }
-    
+
     private void assertMavenPlugin( String artifactId )
     {
-        assertTrue( "Should be detected as maven plugin: <" + artifactId + ">", 
-                    ArtifactExtensionMapping.isMavenPlugin( artifactId ) );
+        assertEquals( "Should be detected as maven plugin: <" + artifactId + ">", "maven-plugin", getTypeFromArtifactId(
+            artifactId ) );
     }
-    
+
+    private String getTypeFromArtifactId( String artifactId )
+    {
+        ArtifactMetadata artifact = pathTranslator.getArtifactFromId( null, "groupId", artifactId, "1.0",
+                                                                      artifactId + "-1.0.jar" );
+        MavenArtifactFacet facet = (MavenArtifactFacet) artifact.getFacet( MavenArtifactFacet.FACET_ID );
+        return facet.getType();
+    }
+
     private void assertNotMavenPlugin( String artifactId )
     {
-        assertFalse( "Should NOT be detected as maven plugin: <" + artifactId + ">", 
-                    ArtifactExtensionMapping.isMavenPlugin( artifactId ) );
+        assertFalse( "Should NOT be detected as maven plugin: <" + artifactId + ">", "maven-plugin".equals(
+            getTypeFromArtifactId( artifactId ) ) );
     }
 }
index bb8fcbd38ad3f6d0ff0f87b8d8f39732ebf9ee2e..97a50418ef57eafd24a97541969ecf71fc870662 100644 (file)
@@ -36,6 +36,7 @@ public class DefaultPathParserTest
 
     public void testBadPathMissingType()
     {
+        // TODO: should we allow this instead?
         assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
     }
 
index 88048e9b85a48ece7d9f43606d716ac1b306d0f5..d4eb546acaa4183b2fab3cf23ee235fd91d7f46d 100644 (file)
@@ -28,11 +28,11 @@ import java.util.Map;
 public class DefaultArtifactMappingProvider
     implements ArtifactMappingProvider
 {
-    private final Map<String,String> classifierAndExtensionToTypeMap;
+    private final Map<String, String> classifierAndExtensionToTypeMap;
 
     public DefaultArtifactMappingProvider()
     {
-        classifierAndExtensionToTypeMap = new HashMap<String,String>();
+        classifierAndExtensionToTypeMap = new HashMap<String, String>();
 
         // Maven 2.2.1 supplied types (excluding defaults where extension == type and no classifier)
         classifierAndExtensionToTypeMap.put( "client:jar", "ejb-client" );
@@ -43,8 +43,14 @@ public class DefaultArtifactMappingProvider
 
     public String mapClassifierAndExtensionToType( String classifier, String ext )
     {
-        classifier = classifier != null ? classifier : "";
-        ext = ext != null ? ext : "";
+        if ( classifier == null )
+        {
+            classifier = "";
+        }
+        if ( ext == null )
+        {
+            ext = "";
+        }
         return classifierAndExtensionToTypeMap.get( classifier + ":" + ext );
     }
 }
index 5a255c2747c1dd27f3607c079222783c2bd3f49b..440457360f7b3ad50df85379a5dc57e7ad07d8aa 100644 (file)
@@ -280,10 +280,35 @@ public class Maven2RepositoryPathTranslator
             }
         }
 
+        // TODO: this is cheating! We should check the POM metadata instead
+        if ( type == null && "jar".equals( ext ) && isArtifactIdValidMavenPlugin( projectId ) )
+        {
+            type = "maven-plugin";
+        }
+
         // use extension as default
-        facet.setType( type != null ? type : ext );
+        if ( type == null )
+        {
+            type = ext;
+        }
+
+        // TODO: should we allow this instead?
+        if ( type == null )
+        {
+            throw new IllegalArgumentException(
+                "Not a valid artifact path in a Maven 2 repository, filename '" + id + "' does not have a type" );
+        }
+
+        facet.setType( type );
         metadata.addFacet( facet );
 
         return metadata;
     }
+
+    private static final Pattern MAVEN_PLUGIN_PATTERN = Pattern.compile( "^(maven-.*-plugin)|(.*-maven-plugin)$" );
+
+    public boolean isArtifactIdValidMavenPlugin( String artifactId )
+    {
+        return MAVEN_PLUGIN_PATTERN.matcher( artifactId ).matches();
+    }
 }