You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2014/06/28 13:55:24 UTC

[2/7] Squashed the indexer-artifact into indexer-core.

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/a99549a1/indexer-core/src/test/java/org/apache/maven/index/artifact/M1GavCalculatorTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/artifact/M1GavCalculatorTest.java b/indexer-core/src/test/java/org/apache/maven/index/artifact/M1GavCalculatorTest.java
new file mode 100644
index 0000000..458281d
--- /dev/null
+++ b/indexer-core/src/test/java/org/apache/maven/index/artifact/M1GavCalculatorTest.java
@@ -0,0 +1,376 @@
+package org.apache.maven.index.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.apache.maven.index.artifact.Gav;
+import org.apache.maven.index.artifact.M1GavCalculator;
+
+import junit.framework.TestCase;
+
+public class M1GavCalculatorTest
+    extends TestCase
+{
+    private M1GavCalculator gavCalculator;
+
+    private SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+
+    @Override
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        gavCalculator = new M1GavCalculator();
+    }
+
+    protected Long parseTimestamp( String timeStamp )
+        throws ParseException
+    {
+        if ( timeStamp == null )
+        {
+            return null;
+        }
+        else
+        {
+            return Long.valueOf( formatter.parse( timeStamp ).getTime() );
+        }
+    }
+
+    public void testGav()
+        throws Exception
+    {
+        Gav gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0RC1-SNAPSHOT-javadoc.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-SNAPSHOT-javadoc.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        String path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/javadocs/jruby-1.0RC1-SNAPSHOT-javadoc.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-SNAPSHOT.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar.md5" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-SNAPSHOT.jar.md5", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.md5, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar.md5", path );
+
+        gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0-javadoc.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0-javadoc.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/javadocs/jruby-1.0-javadoc.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0-javadoc.jar.sha1" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0-javadoc.jar.sha1", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/javadocs/jruby-1.0-javadoc.jar.sha1", path );
+
+        gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.jruby/jars/jruby-1.0.jar", path );
+
+        gav = gavCalculator.pathToGav( "/maven/jars/dom4j-1.7-20060614.jar" );
+
+        assertEquals( "maven", gav.getGroupId() );
+        assertEquals( "dom4j", gav.getArtifactId() );
+        assertEquals( "1.7-20060614", gav.getVersion() );
+        assertEquals( "1.7-20060614", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "dom4j-1.7-20060614.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/maven/jars/dom4j-1.7-20060614.jar", path );
+
+        gav = gavCalculator.pathToGav( "maven/java-sources/velocity-1.5-SNAPSHOT-sources.jar" );
+
+        assertEquals( "maven", gav.getGroupId() );
+        assertEquals( "velocity", gav.getArtifactId() );
+        assertEquals( "1.5-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.5-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "sources", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "velocity-1.5-SNAPSHOT-sources.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/maven/java-sources/velocity-1.5-SNAPSHOT-sources.jar", path );
+
+        gav = gavCalculator.pathToGav( "castor/jars/castor-0.9.9-xml.jar" );
+
+        assertEquals( "castor", gav.getGroupId() );
+        assertEquals( "castor", gav.getArtifactId() );
+        assertEquals( "0.9.9-xml", gav.getVersion() );
+        assertEquals( "0.9.9-xml", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "castor-0.9.9-xml.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/castor/jars/castor-0.9.9-xml.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org.slf4j/poms/slf4j-log4j12-1.4.3.pom" );
+
+        assertEquals( "org.slf4j", gav.getGroupId() );
+        assertEquals( "slf4j-log4j12", gav.getArtifactId() );
+        assertEquals( "1.4.3", gav.getVersion() );
+        assertEquals( "1.4.3", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "slf4j-log4j12-1.4.3.pom", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org.slf4j/poms/slf4j-log4j12-1.4.3.pom", path );
+
+        // TODO: fix this!
+        /* There is an "Oh" letter at the end, not a zero! */
+        gav = gavCalculator.pathToGav( "/xpp3/poms/xpp3_min-1.1.3.4.O.pom" );
+
+        assertEquals( "xpp3", gav.getGroupId() );
+        assertEquals( "xpp3_min", gav.getArtifactId() );
+        assertEquals( "1.1.3.4.O", gav.getVersion() );
+        assertEquals( "1.1.3.4.O", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "xpp3_min-1.1.3.4.O.pom", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/xpp3/poms/xpp3_min-1.1.3.4.O.pom", path );
+    }
+
+    public void testNEXUS1336()
+        throws Exception
+    {
+        Gav gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar" );
+
+        assertEquals( "castor", gav.getGroupId() );
+        assertEquals( "castor-ejb", gav.getArtifactId() );
+        assertEquals( "1.0.7-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.0.7-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "client", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "castor-ejb-1.0.7-SNAPSHOT-client.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        String path = gavCalculator.gavToPath( gav );
+        assertEquals( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar", path );
+
+        gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7.jar" );
+
+        assertEquals( "castor", gav.getGroupId() );
+        assertEquals( "castor-ejb", gav.getArtifactId() );
+        assertEquals( "1.0.7", gav.getVersion() );
+        assertEquals( "1.0.7", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "castor-ejb-1.0.7.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/castor/jars/castor-ejb-1.0.7.jar", path );
+
+        gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1" );
+
+        assertEquals( "castor", gav.getGroupId() );
+        assertEquals( "castor-ejb", gav.getArtifactId() );
+        assertEquals( "1.0.7-SNAPSHOT", gav.getVersion() );
+        assertEquals( "1.0.7-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "client", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1", path );
+
+        gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-client.jar" );
+
+        assertEquals( "castor", gav.getGroupId() );
+        assertEquals( "castor-ejb", gav.getArtifactId() );
+        assertEquals( "1.0.7", gav.getVersion() );
+        assertEquals( "1.0.7", gav.getBaseVersion() );
+        assertEquals( "client", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "castor-ejb-1.0.7-client.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/castor/ejbs/castor-ejb-1.0.7-client.jar", path );
+    }
+
+    public void testGavExtreme()
+        throws Exception
+    {
+        Gav gav = gavCalculator.pathToGav( "/" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/some/stupid/path" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/some/stupid/path/more/in/it" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/something/that/looks/" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/something/that/like-an-artifact.blah" );
+        assertEquals( null, gav );
+        // assertEquals( false, gav.isChecksum() );
+        // assertEquals( false, gav.isPrimary() );
+        // assertEquals( false, gav.isSnapshot() );
+
+        gav = gavCalculator.pathToGav( "/something/that/like-an-artifact.pom" );
+        assertEquals( null, gav );
+        // assertEquals( false, gav.isChecksum() );
+        // assertEquals( false, gav.isPrimary() );
+        // assertEquals( false, gav.isSnapshot() );
+
+        gav = gavCalculator.pathToGav( "/something/that/maven-metadata.xml" );
+        assertEquals( null, gav );
+        // assertEquals( false, gav.isChecksum() );
+        // assertEquals( false, gav.isPrimary() );
+        // assertEquals( false, gav.isSnapshot() );
+
+        gav = gavCalculator.pathToGav( "/something/that/like-SNAPSHOT/maven-metadata.xml" );
+        assertEquals( null, gav );
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/a99549a1/indexer-core/src/test/java/org/apache/maven/index/artifact/M2GavCalculatorTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/artifact/M2GavCalculatorTest.java b/indexer-core/src/test/java/org/apache/maven/index/artifact/M2GavCalculatorTest.java
new file mode 100644
index 0000000..0881010
--- /dev/null
+++ b/indexer-core/src/test/java/org/apache/maven/index/artifact/M2GavCalculatorTest.java
@@ -0,0 +1,760 @@
+package org.apache.maven.index.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.index.artifact.Gav;
+import org.apache.maven.index.artifact.M2GavCalculator;
+
+public class M2GavCalculatorTest
+    extends TestCase
+{
+    private M2GavCalculator gavCalculator;
+
+    private SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+
+    @Override
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        gavCalculator = new M2GavCalculator();
+    }
+
+    protected Long parseTimestamp( String timeStamp )
+        throws ParseException
+    {
+        if ( timeStamp == null )
+        {
+            return null;
+        }
+        else
+        {
+            return Long.valueOf( formatter.parse( timeStamp ).getTime() );
+        }
+    }
+
+    public void testGav()
+        throws Exception
+    {
+        Gav gav;
+        String path;
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-25-javadoc.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-20070504.160758-25", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 25 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20070504.160758" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-20070504.160758-25-javadoc.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-25-javadoc.jar", path );
+
+        gav =
+            gavCalculator.pathToGav( "/com/sun/xml/ws/jaxws-local-transport/2.1.3/jaxws-local-transport-2.1.3.pom.md5" );
+
+        assertEquals( "com.sun.xml.ws", gav.getGroupId() );
+        assertEquals( "jaxws-local-transport", gav.getArtifactId() );
+        assertEquals( "2.1.3", gav.getVersion() );
+        assertEquals( "2.1.3", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jaxws-local-transport-2.1.3.pom.md5", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.md5, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/com/sun/xml/ws/jaxws-local-transport/2.1.3/jaxws-local-transport-2.1.3.pom.md5", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-20070504.160758-2", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 2 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20070504.160758" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-20070504.160758-2.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar.md5" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-20070504.160758-2", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 2 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20070504.160758" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-20070504.160758-2.jar.md5", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.md5, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar.md5", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-20070504.160758-2", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 2 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20070504.160758" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-20070504.160758-2.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2-sources.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0RC1-20070504.160758-2", gav.getVersion() );
+        assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "sources", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 2 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20070504.160758" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0RC1-20070504.160758-2-sources.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2-sources.jar", path );
+
+        gav =
+            gavCalculator.pathToGav( "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1" );
+
+        assertEquals( "com.stchome.products.dsms.services", gav.getGroupId() );
+        assertEquals( "dsms-intervention-service", gav.getArtifactId() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getVersion() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1" );
+
+        assertEquals( "com.stchome.products.dsms.services", gav.getGroupId() );
+        assertEquals( "dsms-intervention-service", gav.getArtifactId() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getVersion() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar" );
+
+        assertEquals( "com.stchome.products.dsms.services", gav.getGroupId() );
+        assertEquals( "dsms-intervention-service", gav.getArtifactId() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getVersion() );
+        assertEquals( "2.4.2-64-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "dsms-intervention-service-2.4.2-64-SNAPSHOT.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar",
+            path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0-javadoc.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha1" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0-javadoc.jar.sha1", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha1", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0/jruby-1.0.jar" );
+
+        assertEquals( "org.jruby", gav.getGroupId() );
+        assertEquals( "jruby", gav.getArtifactId() );
+        assertEquals( "1.0", gav.getVersion() );
+        assertEquals( "1.0", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "jruby-1.0.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/jruby/jruby/1.0/jruby-1.0.jar", path );
+
+        gav = gavCalculator.pathToGav( "/activemq/activemq-core/1.2/activemq-core-1.2.pom" );
+
+        assertEquals( "activemq", gav.getGroupId() );
+        assertEquals( "activemq-core", gav.getArtifactId() );
+        assertEquals( "1.2", gav.getVersion() );
+        assertEquals( "1.2", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "activemq-core-1.2.pom", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/activemq/activemq-core/1.2/activemq-core-1.2.pom", path );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0/maven-metadata.xml" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/org/jruby/jruby/1.0-SNAPSHOT/maven-metadata.xml" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/junit/junit/3.8/junit-3.8.jar" );
+        assertEquals( "junit", gav.getGroupId() );
+        assertEquals( "junit", gav.getArtifactId() );
+        assertEquals( "3.8", gav.getVersion() );
+        assertEquals( "3.8", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "junit-3.8.jar", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        gav = gavCalculator.pathToGav( "/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT.pom" );
+        assertEquals( "foo1", gav.getGroupId() );
+        assertEquals( "foo1", gav.getArtifactId() );
+        assertEquals( "0.0.1-SNAPSHOT", gav.getVersion() );
+        assertEquals( "0.0.1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "foo1-0.0.1-SNAPSHOT.pom", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT.pom", path );
+
+        // NEXUS-3148
+        gav = gavCalculator.pathToGav( "/foo1/foo1/0.0.1SNAPSHOT/foo1-0.0.1SNAPSHOT.pom" );
+        assertEquals( "foo1", gav.getGroupId() );
+        assertEquals( "foo1", gav.getArtifactId() );
+        assertEquals( "0.0.1SNAPSHOT", gav.getVersion() );
+        assertEquals( "0.0.1SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "foo1-0.0.1SNAPSHOT.pom", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo1/foo1/0.0.1SNAPSHOT/foo1-0.0.1SNAPSHOT.pom", path );
+
+        gav = gavCalculator.pathToGav( "/foo1/foo1/0.0.1.SNAPSHOT/foo1-0.0.1.SNAPSHOT.pom" );
+        assertEquals( "foo1", gav.getGroupId() );
+        assertEquals( "foo1", gav.getArtifactId() );
+        assertEquals( "0.0.1.SNAPSHOT", gav.getVersion() );
+        assertEquals( "0.0.1.SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "foo1-0.0.1.SNAPSHOT.pom", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo1/foo1/0.0.1.SNAPSHOT/foo1-0.0.1.SNAPSHOT.pom", path );
+
+        // NEXUS-3148 ends
+
+        gav = gavCalculator.pathToGav( "/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT-jdk14.jar" );
+        assertEquals( "foo1", gav.getGroupId() );
+        assertEquals( "foo1", gav.getArtifactId() );
+        assertEquals( "0.0.1-SNAPSHOT", gav.getVersion() );
+        assertEquals( "0.0.1-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "jdk14", gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "foo1-0.0.1-SNAPSHOT-jdk14.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT-jdk14.jar", path );
+
+        gav = gavCalculator.pathToGav( "/foo1/foo1/1.0.0-beta-4-SNAPSHOT/foo1-1.0.0-beta-4-20080623.175436-1.jar" );
+        assertEquals( "foo1", gav.getGroupId() );
+        assertEquals( "foo1", gav.getArtifactId() );
+        assertEquals( "1.0.0-beta-4-20080623.175436-1", gav.getVersion() );
+        assertEquals( "1.0.0-beta-4-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 1 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080623.175436" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "foo1-1.0.0-beta-4-20080623.175436-1.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo1/foo1/1.0.0-beta-4-SNAPSHOT/foo1-1.0.0-beta-4-20080623.175436-1.jar", path );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4-SNAPSHOT/nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom" );
+        assertEquals( "org.sonatype.nexus", gav.getGroupId() );
+        assertEquals( "nexus-webapp", gav.getArtifactId() );
+        assertEquals( "1.0.0-beta-4-20080623.203653-349", gav.getVersion() );
+        assertEquals( "1.0.0-beta-4-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( Integer.valueOf( 349 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080623.203653" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4-SNAPSHOT/nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc" );
+        assertEquals( "org.apache.maven.artifact", gav.getGroupId() );
+        assertEquals( "maven-artifact", gav.getArtifactId() );
+        assertEquals( "3.0-20080411.005221-75", gav.getVersion() );
+        assertEquals( "3.0-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( Integer.valueOf( 75 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080411.005221" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "maven-artifact-3.0-20080411.005221-75.pom.asc", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+        assertEquals( true, gav.isSignature() );
+        assertEquals( Gav.SignatureType.gpg, gav.getSignatureType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc.sha1" );
+        assertEquals( "org.apache.maven.artifact", gav.getGroupId() );
+        assertEquals( "maven-artifact", gav.getArtifactId() );
+        assertEquals( "3.0-20080411.005221-75", gav.getVersion() );
+        assertEquals( "3.0-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( Integer.valueOf( 75 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080411.005221" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "maven-artifact-3.0-20080411.005221-75.pom.asc.sha1", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+        assertEquals( true, gav.isSignature() );
+        assertEquals( Gav.SignatureType.gpg, gav.getSignatureType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals(
+            "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc.sha1",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.zip.sha1" );
+        assertEquals( "org.apache.maven", gav.getGroupId() );
+        assertEquals( "maven-core", gav.getArtifactId() );
+        assertEquals( "2.0.9-20080302.032223-6", gav.getVersion() );
+        assertEquals( "2.0.9-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "zip", gav.getExtension() );
+        assertEquals( Integer.valueOf( 6 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080302.032223" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "maven-core-2.0.9-20080302.032223-6-bin.zip.sha1", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( true, gav.isHash() );
+        assertEquals( Gav.HashType.sha1, gav.getHashType() );
+        assertEquals( false, gav.isSignature() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.zip.sha1",
+            path );
+
+        gav =
+            gavCalculator.pathToGav( "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.tar.gz" );
+        assertEquals( "org.apache.maven", gav.getGroupId() );
+        assertEquals( "maven-core", gav.getArtifactId() );
+        assertEquals( "2.0.9-20080302.032223-6", gav.getVersion() );
+        assertEquals( "2.0.9-SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( Integer.valueOf( 6 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080302.032223" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "maven-core-2.0.9-20080302.032223-6-bin.tar.gz", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+        assertEquals( false, gav.isSignature() );
+
+        gav = gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.4.0/nexus-webapp-1.4.0-bundle.tar.gz" );
+        assertEquals( "org.sonatype.nexus", gav.getGroupId() );
+        assertEquals( "nexus-webapp", gav.getArtifactId() );
+        assertEquals( "1.4.0", gav.getVersion() );
+        assertEquals( "1.4.0", gav.getBaseVersion() );
+        assertEquals( "bundle", gav.getClassifier() );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "nexus-webapp-1.4.0-bundle.tar.gz", gav.getName() );
+        assertEquals( false, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+        assertEquals( false, gav.isSignature() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/sonatype/nexus/nexus-webapp/1.4.0/nexus-webapp-1.4.0-bundle.tar.gz", path );
+
+        gav = gavCalculator.pathToGav( "/foo/artifact/SNAPSHOT/artifact-SNAPSHOT.jar" );
+        assertEquals( "foo", gav.getGroupId() );
+        assertEquals( "artifact", gav.getArtifactId() );
+        assertEquals( "SNAPSHOT", gav.getVersion() );
+        assertEquals( "SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( null, gav.getSnapshotBuildNumber() );
+        assertEquals( null, gav.getSnapshotTimeStamp() );
+        assertEquals( "artifact-SNAPSHOT.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo/artifact/SNAPSHOT/artifact-SNAPSHOT.jar", path );
+
+        gav = gavCalculator.pathToGav( "/foo/artifact/SNAPSHOT/artifact-20080623.175436-1.jar" );
+        assertEquals( "foo", gav.getGroupId() );
+        assertEquals( "artifact", gav.getArtifactId() );
+        assertEquals( "20080623.175436-1", gav.getVersion() );
+        assertEquals( "SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( Integer.valueOf( 1 ), gav.getSnapshotBuildNumber() );
+        assertEquals( parseTimestamp( "20080623.175436" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "artifact-20080623.175436-1.jar", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        path = gavCalculator.gavToPath( gav );
+        assertEquals( "/foo/artifact/SNAPSHOT/artifact-20080623.175436-1.jar", path );
+    }
+
+    public void testNegGav()
+        throws Exception
+    {
+        Gav gav;
+
+        // NEXUS-4132
+        gav =
+            gavCalculator.pathToGav( "/com/electrabel/connection-register-ear/1.2-SNAPSHOT/connection-register-ear-1.2-20101214.143755.ear" );
+        assertNull( "Should fail, since the filename lacks the -BBB build number, hence, is not valid snapshot", gav );
+        // NEXUS-4132 END
+    }
+
+    public void testGavExtreme()
+        throws Exception
+    {
+        Gav gav;
+
+        gav = gavCalculator.pathToGav( "/" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/some/stupid/path" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/some/stupid/path/more/in/it" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/something/that/looks/" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/something/that/looks/like-an-artifact.blah" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "/something/that/looks/like-an-artifact.pom" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "org/apache/maven/scm/maven-scm" );
+        assertEquals( null, gav );
+
+        gav = gavCalculator.pathToGav( "org/apache/geronimo/javamail/geronimo-javamail_1.4_mail" );
+        assertEquals( null, gav );
+
+        // this is metadata, will return null
+        gav = gavCalculator.pathToGav( "/something/that/looks/maven-metadata.xml" );
+        assertEquals( null, gav );
+
+        // this is metadata, will return null
+        gav = gavCalculator.pathToGav( "/something/that/looks/like-SNAPSHOT/maven-metadata.xml" );
+        assertEquals( null, gav );
+
+        // this is metadata, will return null
+        gav = gavCalculator.pathToGav( "/org/codehaus/plexus/plexus-container-default/maven-metadata.xml" );
+        assertEquals( null, gav );
+    }
+
+    public void testIssueNexus57()
+        throws Exception
+    {
+        // broken path, baseVersion and version mismatch (2.0-SNAPSHOT vs 2.0-alpha-1...)
+        Gav gav =
+            gavCalculator.pathToGav( "/org/apache/maven/plugins/maven-dependency-plugin/2.0-SNAPSHOT/maven-dependency-plugin-2.0-alpha-1-20070109.165112-13.jar" );
+
+        assertNull( "We expect null since baseVersion and version mismatch in path!", gav );
+    }
+
+    public void testGavExtensionAndClassifier()
+        throws Exception
+    {
+        Gav gav;
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5/nexus-webapp-1.0.0-beta-5.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5/nexus-webapp-1.0.0-beta-5-bundle.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bundle", gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-SNAPSHOT-bin.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "0.3.0-SNAPSHOT", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/codehaus/tycho/tycho-distribution/SNAPSHOT/tycho-distribution-SNAPSHOT-bin.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "SNAPSHOT", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-20080818.153246-33-bin.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "0.3.0-20080818.153246-33", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4.2/nexus-webapp-1.0.0-beta-4.2-javadoc.jar" );
+        assertNotNull( gav );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( "javadoc", gav.getClassifier() );
+        assertEquals( "1.0.0-beta-4.2", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-20080818.153246-33-bin.zip" );
+        assertNotNull( gav );
+        assertEquals( "zip", gav.getExtension() );
+        assertEquals( "bin", gav.getClassifier() );
+        assertEquals( "0.3.0-20080818.153246-33", gav.getVersion() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/tools/nexus-migration-app/1.0.0-beta-6-SNAPSHOT/nexus-migration-app-1.0.0-beta-6-20080809.181715-2-cli.jar" );
+        assertNotNull( gav );
+        assertEquals( "jar", gav.getExtension() );
+        assertEquals( "cli", gav.getClassifier() );
+        assertEquals( "1.0.0-beta-6-20080809.181715-2", gav.getVersion() );
+    }
+
+    public void testGavSnapshotVersion()
+        throws Exception
+    {
+        Gav gav;
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT/nexus-webapp-1.0.0-beta-5-SNAPSHOT.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5-SNAPSHOT", gav.getVersion() );
+        assertTrue( gav.isSnapshot() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT-1234/nexus-webapp-1.0.0-beta-5-SNAPSHOT-1234.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5-SNAPSHOT-1234", gav.getVersion() );
+        assertFalse( gav.isSnapshot() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT/nexus-webapp-1.0.0-beta-5-SNAPSHOT-bundle.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bundle", gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5-SNAPSHOT", gav.getVersion() );
+        assertTrue( gav.isSnapshot() );
+
+        gav =
+            gavCalculator.pathToGav( "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT-1234/nexus-webapp-1.0.0-beta-5-SNAPSHOT-1234-bundle.tar.gz" );
+        assertNotNull( gav );
+        assertEquals( "tar.gz", gav.getExtension() );
+        assertEquals( "bundle", gav.getClassifier() );
+        assertEquals( "1.0.0-beta-5-SNAPSHOT-1234", gav.getVersion() );
+        assertFalse( gav.isSnapshot() );
+    }
+
+    public void testGavLooseStrictedSnapshot()
+        throws Exception
+    {
+        Gav gav;
+
+        gav = gavCalculator.pathToGav( "/org/sonatype/nexus-3148/1.0.SNAPSHOT/nexus-3148-1.0.20100111.064938-1.pom" );
+        assertNotNull( gav );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( "1.0.20100111.064938-1", gav.getVersion() );
+        assertEquals( "1.0.SNAPSHOT", gav.getBaseVersion() );
+        assertEquals( "org.sonatype", gav.getGroupId() );
+        assertEquals( "nexus-3148", gav.getArtifactId() );
+        assertEquals( null, gav.getClassifier() );
+        assertEquals( "pom", gav.getExtension() );
+        assertEquals( new Integer( 1 ), gav.getSnapshotBuildNumber() );
+        // the timestamp is UTC, not EST timezoned!
+        // also, the Gav is it seems TZ sensitive!!!
+        assertEquals( parseTimestamp( "20100111.064938" ), gav.getSnapshotTimeStamp() );
+        assertEquals( "nexus-3148-1.0.20100111.064938-1.pom", gav.getName() );
+        assertEquals( true, gav.isSnapshot() );
+        assertEquals( false, gav.isHash() );
+        assertEquals( null, gav.getHashType() );
+
+        String path = gavCalculator.gavToPath( gav );
+        assertEquals( "/org/sonatype/nexus-3148/1.0.SNAPSHOT/nexus-3148-1.0.20100111.064938-1.pom", path );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/a99549a1/indexer-core/src/test/java/org/apache/maven/index/artifact/MavenArtifactRecognizerTest.java
----------------------------------------------------------------------
diff --git a/indexer-core/src/test/java/org/apache/maven/index/artifact/MavenArtifactRecognizerTest.java b/indexer-core/src/test/java/org/apache/maven/index/artifact/MavenArtifactRecognizerTest.java
new file mode 100644
index 0000000..8fd1691
--- /dev/null
+++ b/indexer-core/src/test/java/org/apache/maven/index/artifact/MavenArtifactRecognizerTest.java
@@ -0,0 +1,69 @@
+package org.apache.maven.index.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.index.artifact.M2ArtifactRecognizer;
+
+import junit.framework.TestCase;
+
+public class MavenArtifactRecognizerTest
+    extends TestCase
+{
+
+    public void testIsPom()
+    {
+        assertEquals( true, M2ArtifactRecognizer.isPom( "aaa.pom" ) );
+        assertEquals( true, M2ArtifactRecognizer.isPom( "zxc-1-2-3.pom" ) );
+        assertEquals( false, M2ArtifactRecognizer.isPom( "aaa.jar" ) );
+        assertEquals( false, M2ArtifactRecognizer.isPom( "aaa.pom-a" ) );
+    }
+
+    public void testIsSnapshot1()
+    {
+        // NEXUS-3148
+        assertEquals( true, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0SNAPSHOT/aid-1.0SNAPSHOT.jar" ) );
+
+        assertEquals( true, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0-SNAPSHOT/aid-1.0-SNAPSHOT.jar" ) );
+        assertEquals( true, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0-SNAPSHOT/aid-1.0-SNAPSHOT.pom" ) );
+        assertEquals( true, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0-SNAPSHOT/aid-1.2.3-.pom" ) );
+        assertEquals( false, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0/xsd-SNAPsHOT.jar" ) );
+        assertEquals( false, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0/xsd-SNAPHOT.pom" ) );
+        assertEquals( false, M2ArtifactRecognizer.isSnapshot( "/org/somewhere/aid/1.0/a/b/c/xsd-1.2.3NAPSHOT.pom" ) );
+        assertEquals( false, M2ArtifactRecognizer.isSnapshot( "/javax/mail/mail/1.4/mail-1.4.jar" ) );
+    }
+
+    public void testIsSnapshot2()
+    {
+        assertEquals(
+            true,
+            M2ArtifactRecognizer.isSnapshot( "/org/somewhere/appassembler-maven-plugin/1.0-SNAPSHOT/appassembler-maven-plugin-1.0-20060714.142547-1.pom" ) );
+        assertEquals(
+            false,
+            M2ArtifactRecognizer.isSnapshot( "/org/somewhere/appassembler-maven-plugin/1.0/appassembler-maven-plugin-1.0-20060714.142547-1.pom" ) );
+    }
+
+    public void testIsMetadata()
+    {
+        assertEquals( true, M2ArtifactRecognizer.isMetadata( "maven-metadata.xml" ) );
+        assertEquals( false, M2ArtifactRecognizer.isMetadata( "aven-metadata.xml" ) );
+        assertEquals( false, M2ArtifactRecognizer.isMetadata( "/javax/mail/mail/1.4/mail-1.4.jar" ) );
+    }
+
+}