diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
index 509e29338..fde5da7e3 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
@@ -29,7 +29,6 @@ import java.util.Map;
* @version $Id$
*/
public abstract class AbstractArtifactExtensionMapping
- implements ArtifactExtensionMapping
{
protected final Map typeToExtensionMap;
@@ -41,6 +40,8 @@ public abstract class AbstractArtifactExtensionMapping
typeToExtensionMap.put( "distribution-tgz", "tar.gz" );
typeToExtensionMap.put( "distribution-zip", "zip" );
typeToExtensionMap.put( "java-source", "jar" );
+ typeToExtensionMap.put( "javadoc.jar", "jar" );
+ typeToExtensionMap.put( "javadoc", "jar" );
typeToExtensionMap.put( "aspect", "jar" );
typeToExtensionMap.put( "uberjar", "jar" );
typeToExtensionMap.put( "maven-plugin", "jar" );
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
deleted file mode 100644
index c2088377f..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.maven.archiva.repository.content;
-
-/*
- * 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.
- */
-
-/**
- * ArtifactExtensionMapping - Utility to provide the mapping between an Artifact's extension and it's type and
- * vice versa.
- *
- * @author Joakim Erdfelt
- * @version $Id$
- */
-public interface ArtifactExtensionMapping
-{
- public String getExtension( String type );
-
- public String getType( String filename );
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
index 70f036259..56bfeae60 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultArtifactExtensionMapping.java
@@ -26,12 +26,8 @@ import org.apache.commons.lang.StringUtils;
*
* @author Joakim Erdfelt
* @version $Id$
- *
- * @plexus.component role="org.apache.maven.archiva.repository.content.ArtifactExtensionMapping"
- * role-hint="default"
*/
public class DefaultArtifactExtensionMapping extends AbstractArtifactExtensionMapping
- implements ArtifactExtensionMapping
{
public DefaultArtifactExtensionMapping()
{
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
index 10fd815c8..84c3af024 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyArtifactExtensionMapping.java
@@ -26,23 +26,20 @@ import org.apache.commons.lang.StringUtils;
*
* @author Joakim Erdfelt
* @version $Id$
- *
- * @plexus.component role="org.apache.maven.archiva.repository.content.ArtifactExtensionMapping"
- * role-hint="legacy"
*/
-public class LegacyArtifactExtensionMapping extends AbstractArtifactExtensionMapping
- implements ArtifactExtensionMapping
+public class LegacyArtifactExtensionMapping
+ extends AbstractArtifactExtensionMapping
{
public LegacyArtifactExtensionMapping()
{
super();
}
- public String getType( String filename )
+ public String getType( String pathType, String filename )
{
if ( StringUtils.isBlank( filename ) )
{
- return null;
+ return pathType;
}
String normalizedName = filename.toLowerCase().trim();
@@ -57,20 +54,15 @@ public class LegacyArtifactExtensionMapping extends AbstractArtifactExtensionMap
}
else if ( normalizedName.endsWith( "-sources.jar" ) )
{
- return "java-source";
+ return "jar";
+ }
+ else if ( normalizedName.endsWith( "-javadoc.jar" ) )
+ {
+ return "jar";
}
- // TODO: handle type for -javadoc.jar ?
else
{
- int index = normalizedName.lastIndexOf( '.' );
- if ( index >= 0 )
- {
- return normalizedName.substring( index + 1 );
- }
- else
- {
- throw new IllegalArgumentException( "Filename " + filename + " does not have an extension." );
- }
+ return pathType;
}
}
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
index 771297177..ae309dd52 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
@@ -25,7 +25,6 @@ import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
import org.apache.maven.archiva.model.VersionedReference;
-import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMapping;
/**
@@ -39,6 +38,8 @@ import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMappi
public class DefaultBidirectionalRepositoryLayout
implements BidirectionalRepositoryLayout
{
+ private static final String MAVEN_METADATA = "maven-metadata.xml";
+
class PathReferences
{
public String groupId;
@@ -69,7 +70,7 @@ public class DefaultBidirectionalRepositoryLayout
private static final char ARTIFACT_SEPARATOR = '-';
- private ArtifactExtensionMapping extensionMapper = new DefaultArtifactExtensionMapping();
+ private DefaultArtifactExtensionMapping extensionMapper = new DefaultArtifactExtensionMapping();
public String getId()
{
@@ -118,17 +119,36 @@ public class DefaultBidirectionalRepositoryLayout
public String toPath( ProjectReference reference )
{
- return toPath( reference.getGroupId(), reference.getArtifactId(), null, null, null, null );
+ StringBuffer path = new StringBuffer();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
}
public String toPath( VersionedReference reference )
{
- return toPath( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(), null, null, null );
+ StringBuffer path = new StringBuffer();
+
+ path.append( formatAsDirectory( reference.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( reference.getArtifactId() ).append( PATH_SEPARATOR );
+ path.append( VersionUtil.getBaseVersion( reference.getVersion() ) ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
}
public ProjectReference toProjectReference( String path )
throws LayoutException
{
+ if ( !path.endsWith( "/maven-metadata.xml" ) )
+ {
+ throw new LayoutException( "Only paths ending in '/maven-metadata.xml' can be "
+ + "converted to a ProjectReference." );
+ }
+
PathReferences pathrefs = toPathReferences( path, false );
ProjectReference reference = new ProjectReference();
reference.setGroupId( pathrefs.groupId );
@@ -140,6 +160,12 @@ public class DefaultBidirectionalRepositoryLayout
public VersionedReference toVersionedReference( String path )
throws LayoutException
{
+ if ( !path.endsWith( "/maven-metadata.xml" ) )
+ {
+ throw new LayoutException( "Only paths ending in '/maven-metadata.xml' can be "
+ + "converted to a VersionedReference." );
+ }
+
PathReferences pathrefs = toPathReferences( path, false );
VersionedReference reference = new VersionedReference();
@@ -209,15 +235,30 @@ public class DefaultBidirectionalRepositoryLayout
// Maven 2.x path.
int partCount = pathParts.length;
+ int filenamePos = partCount - 1;
+ int baseVersionPos = partCount - 2;
+ int artifactIdPos = partCount - 3;
+ int groupIdPos = partCount - 4;
// Second to last is the baseVersion (the directory version)
- prefs.baseVersion = pathParts[partCount - 2];
+ prefs.baseVersion = pathParts[baseVersionPos];
+
+ if ( "maven-metadata.xml".equals( pathParts[filenamePos] ) )
+ {
+ if( !VersionUtil.isVersion( prefs.baseVersion ) )
+ {
+ // We have a simple path without a version identifier.
+ prefs.baseVersion = null;
+ artifactIdPos++;
+ groupIdPos++;
+ }
+ }
// Third to last is the artifact Id.
- prefs.artifactId = pathParts[partCount - 3];
+ prefs.artifactId = pathParts[artifactIdPos];
// Remaining pieces are the groupId.
- for ( int i = 0; i <= partCount - 4; i++ )
+ for ( int i = 0; i <= groupIdPos; i++ )
{
prefs.appendGroupId( pathParts[i] );
}
@@ -225,7 +266,7 @@ public class DefaultBidirectionalRepositoryLayout
try
{
// Last part is the filename
- String filename = pathParts[partCount - 1];
+ String filename = pathParts[filenamePos];
// Now we need to parse the filename to get the artifact version Id.
prefs.fileParts = RepositoryLayoutUtils.splitFilename( filename, prefs.artifactId );
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
index efa98e08c..6bc332366 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
@@ -24,7 +24,6 @@ import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
import org.apache.maven.archiva.model.VersionedReference;
-import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
import org.apache.maven.archiva.repository.content.LegacyArtifactExtensionMapping;
import java.util.HashMap;
@@ -41,9 +40,11 @@ import java.util.Map;
public class LegacyBidirectionalRepositoryLayout
implements BidirectionalRepositoryLayout
{
+ private static final String MAVEN_METADATA = "maven-metadata.xml";
+
private static final String PATH_SEPARATOR = "/";
- private ArtifactExtensionMapping extensionMapper = new LegacyArtifactExtensionMapping();
+ private LegacyArtifactExtensionMapping extensionMapper = new LegacyArtifactExtensionMapping();
private Map typeToDirectoryMap;
@@ -62,25 +63,37 @@ public class LegacyBidirectionalRepositoryLayout
public String toPath( ArchivaArtifact artifact )
{
- return toPath( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact
- .getClassifier(), artifact.getType() );
+ return toPath( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
+ artifact.getClassifier(), artifact.getType() );
}
public String toPath( ProjectReference reference )
{
- // TODO: Verify type
- return toPath( reference.getGroupId(), reference.getArtifactId(), null, null, "metadata-xml" );
+ StringBuffer path = new StringBuffer();
+
+ path.append( reference.getGroupId() ).append( PATH_SEPARATOR );
+ path.append( getDirectory( null, "jar" ) ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
}
public String toPath( VersionedReference reference )
{
- return toPath( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(), null, "metadata-xml" );
+ // NOTE: A legacy repository cannot contain a versioned reference to the metadata.
+ StringBuffer path = new StringBuffer();
+
+ path.append( reference.getGroupId() ).append( PATH_SEPARATOR );
+ path.append( getDirectory( null, "jar" ) ).append( PATH_SEPARATOR );
+ path.append( MAVEN_METADATA );
+
+ return path.toString();
}
public String toPath( ArtifactReference reference )
{
- return toPath( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(),
- reference.getClassifier(), reference.getType() );
+ return toPath( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(), reference
+ .getClassifier(), reference.getType() );
}
private String toPath( String groupId, String artifactId, String version, String classifier, String type )
@@ -107,10 +120,18 @@ public class LegacyBidirectionalRepositoryLayout
private String getDirectory( String classifier, String type )
{
- // Special Cases involving classifiers and type.
- if ( "jar".equals( type ) && "sources".equals( classifier ) )
+ // Special Cases involving type + classifier
+ if ( "jar".equals( type ) && StringUtils.isNotBlank( classifier ) )
{
- return "javadoc.jars";
+ if ( "sources".equals( classifier ) )
+ {
+ return "source.jars";
+ }
+
+ if ( "javadoc".equals( classifier ) )
+ {
+ return "javadoc.jars";
+ }
}
// Special Cases involving only type.
@@ -173,7 +194,20 @@ public class LegacyBidirectionalRepositoryLayout
prefs.fileParts = RepositoryLayoutUtils.splitFilename( filename, null );
- prefs.type = extensionMapper.getType( filename );
+ prefs.type = extensionMapper.getType( prefs.pathType, filename );
+
+ // Sanity Checks.
+ if ( StringUtils.isEmpty( prefs.fileParts.extension ) )
+ {
+ throw new LayoutException( "Invalid artifact, no extension." );
+ }
+
+ if ( !prefs.type.equals( prefs.fileParts.extension ) )
+ {
+ throw new LayoutException( "Invalid artifact, mismatch on extension <" + prefs.fileParts.extension
+ + "> and expected layout specified type <" + prefs.type
+ + "> (mapped from actual path provided type <" + prefs.pathType + ">)" );
+ }
}
return prefs;
@@ -194,32 +228,28 @@ public class LegacyBidirectionalRepositoryLayout
pathrefs.fileParts.version, pathrefs.fileParts.classifier,
pathrefs.type );
- // Sanity Checks.
- if ( StringUtils.isEmpty( pathrefs.fileParts.extension ) )
- {
- throw new LayoutException( "Invalid artifact, no extension." );
- }
-
- if ( !pathrefs.pathType.equals( pathrefs.fileParts.extension + "s" ) )
- {
- throw new LayoutException( "Invalid artifact, mismatch on extension <" + pathrefs.fileParts.extension
- + "> and layout specified type<" + pathrefs.pathType + ">." );
- }
-
return artifact;
}
public ArtifactReference toArtifactReference( String path )
throws LayoutException
{
- // TODO Auto-generated method stub
- return null;
+ PathReferences pathrefs = toPathReferences( path, true );
+
+ ArtifactReference reference = new ArtifactReference();
+
+ reference.setGroupId( pathrefs.groupId );
+ reference.setArtifactId( pathrefs.fileParts.artifactId );
+ reference.setVersion( pathrefs.fileParts.version );
+ reference.setClassifier( pathrefs.fileParts.classifier );
+ reference.setType( pathrefs.type );
+
+ return reference;
}
public VersionedReference toVersionedReference( String path )
throws LayoutException
{
- // TODO Auto-generated method stub
return null;
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
index e9d28e933..da75099a0 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
@@ -20,9 +20,7 @@ package org.apache.maven.archiva.repository.layout;
*/
import org.apache.commons.lang.StringUtils;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import org.apache.maven.archiva.common.utils.VersionUtil;
/**
* RepositoryLayoutUtils - utility methods common for most BidirectionalRepositoryLayout implementation.
@@ -38,18 +36,6 @@ public class RepositoryLayoutUtils
*/
private static final String ComplexExtensions[] = new String[] { "tar.gz", "tar.bz2" };
- /**
- * These are the version patterns found in the filenames of the various artifact's versions IDs.
- * These patterns are all tackling lowercase version IDs.
- */
- private static final String VersionPatterns[] =
- new String[] { "(snapshot)", "([0-9][_.0-9a-z]*)", "(g?[_.0-9ab]*(pre|rc|g|m)[_.0-9]*)", "(dev[_.0-9]*)",
- "(alpha[_.0-9]*)", "(beta[_.0-9]*)", "(rc[_.0-9]*)", "(test[_.0-9]*)", "(debug[_.0-9]*)",
- "(unofficial[_.0-9]*)", "(current)", "(latest)", "(fcs)", "(release[_.0-9]*)", "(nightly)", "(final)",
- "(incubating)", "(incubator)", "([ab][_.0-9]*)" };
-
- private static final String VersionMegaPattern = StringUtils.join( VersionPatterns, '|' );
-
/**
* Filename Parsing Mode - Artifact Id.
*/
@@ -137,17 +123,13 @@ public class RepositoryLayoutUtils
int versionStart = -1;
int versionEnd = -1;
- Pattern pat = Pattern.compile( VersionMegaPattern, Pattern.CASE_INSENSITIVE );
- Matcher mat;
-
for ( int i = 0; i < fileParts.length; i++ )
{
String part = fileParts[i];
- mat = pat.matcher( part );
-
- if ( mat.matches() )
+
+ if ( VersionUtil.isSimpleVersionKeyword( part ) )
{
- // It is a potential verion part.
+ // It is a potential version part.
if ( versionStart < 0 )
{
versionStart = i;
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
index ec3ae2a7c..07c68c67c 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
@@ -19,19 +19,15 @@ package org.apache.maven.archiva.repository.layout;
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
import org.apache.maven.archiva.model.VersionedReference;
-import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
-import org.apache.maven.archiva.repository.layout.LayoutException;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
/**
* DefaultBidirectionalRepositoryLayoutTest
@@ -54,7 +50,11 @@ public class DefaultBidirectionalRepositoryLayoutTest
public String type;
- public String path;
+ public String pathArtifact;
+
+ public String pathVersiond;
+
+ public String pathProjectd;
public LayoutExample( String groupId, String artifactId, String version, String classifier, String type )
{
@@ -66,6 +66,30 @@ public class DefaultBidirectionalRepositoryLayoutTest
this.type = type;
}
+ public void setDelimitedPath( String delimPath )
+ {
+ // Silly Test Writer! Don't end the path with a slash!
+ if ( delimPath.endsWith( "/" ) )
+ {
+ delimPath = delimPath.substring( 0, delimPath.length() - 1 );
+ }
+
+ String parts[] = StringUtils.split( delimPath, '|' );
+ switch ( parts.length )
+ {
+ case 3:
+ this.pathArtifact = parts[0] + "/" + parts[1] + "/" + parts[2];
+ case 2:
+ this.pathVersiond = parts[0] + "/" + parts[1] + "/maven-metadata.xml";
+ case 1:
+ this.pathProjectd = parts[0] + "/maven-metadata.xml";
+ break;
+ default:
+ fail( "Unknown number of path pieces, expected between 1 and 3, got <" + parts.length + "> on <"
+ + delimPath + ">" );
+ }
+ }
+
public boolean isSuitableForArtifactTest()
{
return ( this.type != null ) && ( this.classifier != null ) && ( this.version != null );
@@ -108,58 +132,65 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example;
// Artifact References
- example = new LayoutExample( "com.foo", "foo-tool", "1.0", "", "jar" );
- example.path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
+ example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, "jar" );
+ example.setDelimitedPath( "com/foo/foo-tool|1.0|foo-tool-1.0.jar" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-client", "1.0", "", "ejb-client" );
- example.path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
+ example = new LayoutExample( "com.foo", "foo-client", "1.0", null, "ejb-client" );
+ example.setDelimitedPath( "com/foo/foo-client|1.0|foo-client-1.0.jar" );
ret.add( example );
example = new LayoutExample( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "java-source" );
- example.path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
+ example.setDelimitedPath( "com/foo/lib/foo-lib|2.1-alpha-1|foo-lib-2.1-alpha-1-sources.jar" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
- example.path = "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar";
+ example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", null, "jar" );
+ example.setDelimitedPath( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" );
ret.add( example );
- example = new LayoutExample( "org.apache.maven.test", "get-metadata-snapshot", "1.0-20050831.101112-1", "",
+ example = new LayoutExample( "org.apache.maven.test", "get-metadata-snapshot", "1.0-20050831.101112-1", null,
"jar" );
- example.path = "org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar";
+ example
+ .setDelimitedPath( "org/apache/maven/test/get-metadata-snapshot|1.0-SNAPSHOT|get-metadata-snapshot-1.0-20050831.101112-1.jar" );
ret.add( example );
- example = new LayoutExample( "commons-lang", "commons-lang", "2.1", "", "jar" );
- example.path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
+ example = new LayoutExample( "commons-lang", "commons-lang", "2.1", null, "jar" );
+ example.setDelimitedPath( "commons-lang/commons-lang|2.1|commons-lang-2.1.jar" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-tool", "1.0", "", "jar" );
- example.path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
+ example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, "jar" );
+ example.setDelimitedPath( "com/foo/foo-tool|1.0|foo-tool-1.0.jar" );
ret.add( example );
// Versioned References (done here by setting classifier and type to null)
example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, null );
- example.path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
+ example.setDelimitedPath( "com/foo/foo-tool|1.0" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, null );
- example.path = "com/foo/foo-tool/1.0/";
- ret.add( example );
-
- example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, null );
- example.path = "com/foo/foo-tool/1.0";
+ example = new LayoutExample( "net.i.have.a.really.long.path.just.for.the.hell.of.it", "a", "1.1-alpha-1", null,
+ null );
+ example.setDelimitedPath( "net/i/have/a/really/long/path/just/for/the/hell/of/it/a|1.1-alpha-1" );
ret.add( example );
example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", null, null );
- example.path = "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar";
+ example.setDelimitedPath( "com/foo/foo-connector|2.1-SNAPSHOT" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", null, null );
- example.path = "com/foo/foo-connector/2.1-SNAPSHOT/";
+ example = new LayoutExample( "com.foo", "foo-connector", "2.1-SNAPSHOT", null, null );
+ example.setDelimitedPath( "com/foo/foo-connector|2.1-SNAPSHOT" );
ret.add( example );
- example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", null, null );
- example.path = "com/foo/foo-connector/2.1-SNAPSHOT";
+ // Project References (done here by setting version, classifier, and type to null)
+ example = new LayoutExample( "com.foo", "foo-tool", null, null, null );
+ example.setDelimitedPath( "com/foo/foo-tool/" );
+ ret.add( example );
+
+ example = new LayoutExample( "net.i.have.a.really.long.path.just.for.the.hell.of.it", "a", null, null, null );
+ example.setDelimitedPath( "net/i/have/a/really/long/path/just/for/the/hell/of/it/a/" );
+ ret.add( example );
+
+ example = new LayoutExample( "com.foo", "foo-connector", null, null, null );
+ example.setDelimitedPath( "com/foo/foo-connector" );
ret.add( example );
return ret;
@@ -209,7 +240,7 @@ public class DefaultBidirectionalRepositoryLayoutTest
{
ArchivaArtifact artifact = createArtifact( example.groupId, example.artifactId, example.version,
example.classifier, example.type );
- assertEquals( "Artifact <" + artifact + "> to path:", example.path, layout.toPath( artifact ) );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, layout.toPath( artifact ) );
}
}
}
@@ -229,7 +260,8 @@ public class DefaultBidirectionalRepositoryLayoutTest
reference.setClassifier( example.classifier );
reference.setType( example.type );
- assertEquals( "ArtifactReference <" + reference + "> to path:", example.path, layout.toPath( reference ) );
+ assertEquals( "ArtifactReference <" + reference + "> to path:", example.pathArtifact, layout
+ .toPath( reference ) );
}
}
}
@@ -240,14 +272,14 @@ public class DefaultBidirectionalRepositoryLayoutTest
while ( it.hasNext() )
{
LayoutExample example = (LayoutExample) it.next();
- if ( example.isSuitableForVersionedTest() && example.isSuitableForArtifactTest() )
+ if ( example.isSuitableForVersionedTest() || example.isSuitableForArtifactTest() )
{
VersionedReference reference = new VersionedReference();
reference.setGroupId( example.groupId );
reference.setArtifactId( example.artifactId );
reference.setVersion( example.version );
- assertEquals( "VersionedReference <" + reference + "> to path:", example.path, layout
+ assertEquals( "VersionedReference <" + reference + "> to path:", example.pathVersiond, layout
.toPath( reference ) );
}
}
@@ -259,14 +291,15 @@ public class DefaultBidirectionalRepositoryLayoutTest
while ( it.hasNext() )
{
LayoutExample example = (LayoutExample) it.next();
- if ( example.isSuitableForProjectTest() && example.isSuitableForVersionedTest()
- && example.isSuitableForArtifactTest() )
+ if ( example.isSuitableForProjectTest() || example.isSuitableForVersionedTest()
+ || example.isSuitableForArtifactTest() )
{
ProjectReference reference = new ProjectReference();
reference.setGroupId( example.groupId );
reference.setArtifactId( example.artifactId );
- assertEquals( "ProjectReference <" + reference + "> to path:", example.path, layout.toPath( reference ) );
+ assertEquals( "ProjectReference <" + reference + "> to path:", example.pathProjectd, layout
+ .toPath( reference ) );
}
}
}
@@ -366,14 +399,13 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example = (LayoutExample) it.next();
if ( example.isSuitableForArtifactTest() )
{
- ArchivaArtifact artifact = layout.toArtifact( example.path );
+ ArchivaArtifact artifact = layout.toArtifact( example.pathArtifact );
assertArtifact( artifact, example.groupId, example.artifactId, example.version, example.classifier,
example.type );
}
}
}
- /* TODO: Fix layout object to pass test.
public void testPathToArtifactReference()
throws LayoutException
{
@@ -383,15 +415,13 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example = (LayoutExample) it.next();
if ( example.isSuitableForArtifactTest() )
{
- ArtifactReference reference = layout.toArtifactReference( example.path );
+ ArtifactReference reference = layout.toArtifactReference( example.pathArtifact );
assertArtifactReference( reference, example.groupId, example.artifactId, example.version,
example.classifier, example.type );
}
}
}
- */
- /* TODO: Fix layout object to pass test.
public void testPathToVersionedReference()
throws LayoutException
{
@@ -401,13 +431,14 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example = (LayoutExample) it.next();
if ( example.isSuitableForVersionedTest() )
{
- VersionedReference reference = layout.toVersionedReference( example.path );
+ VersionedReference reference = layout.toVersionedReference( example.pathVersiond );
+
+ String baseVersion = reference.getVersion();
- assertVersionedReference( reference, example.groupId, example.artifactId, example.version );
+ assertVersionedReference( reference, example.groupId, example.artifactId, baseVersion );
}
}
}
- */
public void testPathToProjectReference()
throws LayoutException
@@ -418,7 +449,7 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example = (LayoutExample) it.next();
if ( example.isSuitableForProjectTest() )
{
- ProjectReference reference = layout.toProjectReference( example.path );
+ ProjectReference reference = layout.toProjectReference( example.pathProjectd );
assertProjectReference( reference, example.groupId, example.artifactId );
}
@@ -437,7 +468,7 @@ public class DefaultBidirectionalRepositoryLayoutTest
ArchivaArtifact artifact = createArtifact( example.groupId, example.artifactId, example.version,
example.classifier, example.type );
String testPath = layout.toPath( artifact );
- assertEquals( "Artifact <" + artifact + "> to path:", example.path, testPath );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, testPath );
ArchivaArtifact testArtifact = layout.toArtifact( testPath );
assertArtifact( testArtifact, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
artifact.getClassifier(), artifact.getType() );
@@ -454,11 +485,11 @@ public class DefaultBidirectionalRepositoryLayoutTest
LayoutExample example = (LayoutExample) it.next();
if ( example.isSuitableForArtifactTest() )
{
- ArchivaArtifact artifact = layout.toArtifact( example.path );
+ ArchivaArtifact artifact = layout.toArtifact( example.pathArtifact );
assertArtifact( artifact, example.groupId, example.artifactId, example.version, example.classifier,
example.type );
String testPath = layout.toPath( artifact );
- assertEquals( "Artifact <" + artifact + "> to path:", example.path, testPath );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, testPath );
}
}
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
index 169ec3e53..66a33f410 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
@@ -19,8 +19,15 @@ package org.apache.maven.archiva.repository.layout;
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.ProjectReference;
+import org.apache.maven.archiva.model.VersionedReference;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
/**
* LegacyBidirectionalRepositoryLayoutTest
@@ -28,129 +35,477 @@ import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
* @author Joakim Erdfelt
* @version $Id$
*/
-public class LegacyBidirectionalRepositoryLayoutTest extends AbstractBidirectionalRepositoryLayoutTestCase
+public class LegacyBidirectionalRepositoryLayoutTest
+ extends AbstractBidirectionalRepositoryLayoutTestCase
{
+ class LayoutExample
+ {
+ public String groupId;
+
+ public String artifactId;
+
+ public String version;
+
+ public String classifier;
+
+ public String type;
+
+ public String pathArtifact;
+
+ public String pathVersiond;
+
+ public String pathProjectd;
+
+ public LayoutExample( String groupId, String artifactId, String version, String classifier, String type )
+ {
+ super();
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ this.classifier = classifier;
+ this.type = type;
+ }
+
+ public void setDelimitedPath( String delimPath )
+ {
+ // Silly Test Writer! Don't end the path with a slash!
+ if ( delimPath.endsWith( "/" ) )
+ {
+ delimPath = delimPath.substring( 0, delimPath.length() - 1 );
+ }
+
+ String parts[] = StringUtils.split( delimPath, '|' );
+ switch ( parts.length )
+ {
+ case 3:
+ this.pathArtifact = parts[0] + "/" + parts[1] + "/" + parts[2];
+ case 2:
+ this.pathVersiond = parts[0] + "/jars/maven-metadata.xml";
+ case 1:
+ this.pathProjectd = parts[0] + "/jars/maven-metadata.xml";
+ break;
+ default:
+ fail( "Unknown number of path pieces, expected between 1 and 3, got <" + parts.length + "> on <"
+ + delimPath + ">" );
+ }
+ }
+
+ public boolean isSuitableForArtifactTest()
+ {
+ return ( this.type != null ) && ( this.classifier != null ) && ( this.version != null );
+ }
+
+ public boolean isSuitableForVersionedTest()
+ {
+ return ( this.type == null ) && ( this.classifier == null ) && ( this.version != null );
+ }
+
+ public boolean isSuitableForProjectTest()
+ {
+ return ( this.type == null ) && ( this.classifier == null ) && ( this.version == null );
+ }
+ }
+
+ class InvalidExample
+ {
+ public String path;
+
+ public String reason;
+
+ public boolean suitableForArtifactTests = true;
+ public boolean suitableForVersionedTests = false;
+ public boolean suitableForProjectTests = false;
+
+ public InvalidExample( String path, String reason )
+ {
+ super();
+ this.path = path;
+ this.reason = reason;
+ }
+ }
+
private BidirectionalRepositoryLayout layout;
- protected void setUp() throws Exception
+ protected void setUp()
+ throws Exception
{
super.setUp();
layout = (BidirectionalRepositoryLayout) lookup( BidirectionalRepositoryLayout.class.getName(), "legacy" );
}
- public void testToPathBasic()
+ public List /**/getGoodExamples()
{
- ArchivaArtifact artifact = createArtifact( "com.foo", "foo-tool", "1.0", "", "jar" );
+ List ret = new ArrayList();
- assertEquals( "com.foo/jars/foo-tool-1.0.jar", layout.toPath( artifact ) );
- }
+ LayoutExample example;
- public void testToPathEjbClient()
- {
- ArchivaArtifact artifact = createArtifact( "com.foo", "foo-client", "1.0", "", "ejb-client" );
+ // Artifact References
+ example = new LayoutExample( "com.foo", "foo-tool", "1.0", null, "jar" );
+ example.setDelimitedPath( "com.foo|jars|foo-tool-1.0.jar" );
+ ret.add( example );
- assertEquals( "com.foo/ejbs/foo-client-1.0.jar", layout.toPath( artifact ) );
- }
+ example = new LayoutExample( "com.foo", "foo-client", "1.0", null, "ejb-client" );
+ example.setDelimitedPath( "com.foo|ejbs|foo-client-1.0.jar" );
+ ret.add( example );
- public void testToPathWithClassifier()
- {
- ArchivaArtifact artifact = createArtifact( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+ example = new LayoutExample( "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "jar" );
+ example.setDelimitedPath( "com.foo.lib|source.jars|foo-lib-2.1-alpha-1-sources.jar" );
+ ret.add( example );
- assertEquals( "com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-sources.jar", layout.toPath( artifact ) );
- }
-
- public void testToPathUsingUniqueSnapshot()
- {
- ArchivaArtifact artifact = createArtifact( "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
-
- assertEquals( "com.foo/jars/foo-connector-2.1-20060822.123456-35.jar", layout.toPath( artifact ) );
- }
-
- public void testToArtifactBasicSimpleGroupId() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "commons-lang/jars/commons-lang-2.1.jar" );
- assertArtifact( artifact, "commons-lang", "commons-lang", "2.1", "", "jar" );
- }
-
- public void testToArtifactBasicLongGroupId() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "org.apache.derby/jars/derby-10.2.2.0.jar" );
- assertArtifact( artifact, "org.apache.derby", "derby", "10.2.2.0", "", "jar" );
- }
-
- public void testToArtifactLongGroupId() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar" );
- assertArtifact( artifact, "org.apache.geronimo.specs", "geronimo-ejb_2.1_spec", "1.0.1", "", "jar" );
- }
-
- public void testToArtifactEjbClient() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "org.apache.beehive/jars/beehive-ejb-control-1.0.1.jar" );
- // The type is correct. as we cannot possibly know this is an ejb client without parsing the pom
- assertArtifact( artifact, "org.apache.beehive", "beehive-ejb-control", "1.0.1", "", "jar" );
- }
-
- public void testToArtifactWithClassifier() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "commons-lang/jars/commons-lang-2.3-sources.jar" );
- // The 'java-source' type is correct. You might be thinking of extension, which we are not testing here.
- assertArtifact( artifact, "commons-lang", "commons-lang", "2.3", "sources", "java-source" );
- }
-
- public void testToArtifactSnapshot() throws LayoutException
- {
- ArchivaArtifact artifact = layout.toArtifact( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom" );
- assertSnapshotArtifact( artifact, "directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", "", "pom" );
- }
-
- public void testInvalidNoType()
- {
- try
- {
- layout.toArtifact( "invalid/invalid/1/invalid-1" );
- fail( "Should have detected no type." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testInvalidArtifactPackaging()
- {
- try
- {
- layout.toArtifact( "org.apache.maven.test/jars/artifactId-1.0.jar.md5" );
- fail( "Should have detected wrong package extension." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testInvalidNoArtifactId()
- {
- try
- {
- layout.toArtifact( "groupId/jars/-1.0.jar" );
- fail( "Should have detected artifactId is missing" );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
+ example = new LayoutExample( "com.foo.lib", "foo-lib", "2.1-alpha-1", "javadoc", "jar" );
+ example.setDelimitedPath( "com.foo.lib|javadoc.jars|foo-lib-2.1-alpha-1-javadoc.jar" );
+ ret.add( example );
- try
+ example = new LayoutExample( "com.foo", "foo-connector", "2.1-20060822.123456-35", null, "jar" );
+ example.setDelimitedPath( "com.foo|jars|foo-connector-2.1-20060822.123456-35.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "org.apache.maven.test", "get-metadata-snapshot", "1.0-20050831.101112-1", null,
+ "jar" );
+ example.setDelimitedPath( "org.apache.maven.test|jars|get-metadata-snapshot-1.0-20050831.101112-1.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "commons-lang", "commons-lang", "2.1", null, "jar" );
+ example.setDelimitedPath( "commons-lang|jars|commons-lang-2.1.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "org.apache.derby", "derby", "10.2.2.0", null, "jar" );
+ example.setDelimitedPath( "org.apache.derby|jars|derby-10.2.2.0.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "org.apache.geronimo.specs", "geronimo-ejb_2.1_spec", "1.0.1", null, "jar" );
+ example.setDelimitedPath( "org.apache.geronimo.specs|jars|geronimo-ejb_2.1_spec-1.0.1.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "org.apache.beehive", "beehive-ejb-control", "1.0.1", null, "jar" );
+ example.setDelimitedPath( "org.apache.beehive|jars|beehive-ejb-control-1.0.1.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "commons-lang", "commons-lang", "2.3", "sources", "jar" );
+ example.setDelimitedPath( "commons-lang|source.jars|commons-lang-2.3-sources.jar" );
+ ret.add( example );
+
+ example = new LayoutExample( "directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", null, "pom" );
+ example.setDelimitedPath( "directory-clients|poms|ldap-clients-0.9.1-SNAPSHOT.pom" );
+ ret.add( example );
+
+ // Versioned References (done here by setting classifier and type to null)
+
+ // TODO: Not sure how to represent a VersionedReference as a legacy path.
+
+ // Project References (done here by setting version, classifier, and type to null)
+
+ // TODO: Not sure how to represent a ProjectReference as a legacy path.
+
+ return ret;
+ }
+
+ public List /**/getInvalidPaths()
+ {
+ List ret = new ArrayList();
+
+ InvalidExample example;
+
+ example = new InvalidExample( "invalid/invalid/1/invalid-1", "missing type" );
+ example.suitableForArtifactTests = true;
+ example.suitableForVersionedTests = false;
+ example.suitableForProjectTests = true;
+ ret.add( example );
+
+ example = new InvalidExample( "org.apache.maven.test/jars/artifactId-1.0.jar.md5", "wrong package extension" );
+ example.suitableForArtifactTests = true;
+ example.suitableForVersionedTests = false;
+ example.suitableForProjectTests = false;
+ ret.add( example );
+
+ example = new InvalidExample( "groupId/jars/-1.0.jar", "artifactId is missing" );
+ example.suitableForArtifactTests = true;
+ example.suitableForVersionedTests = false;
+ example.suitableForProjectTests = true;
+ ret.add( example );
+
+ example = new InvalidExample( "groupId/jars/1.0.jar", "artifactId is missing" );
+ example.suitableForArtifactTests = true;
+ example.suitableForVersionedTests = false;
+ example.suitableForProjectTests = true;
+ ret.add( example );
+
+ return ret;
+ }
+
+ public void testArtifactToPath()
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
{
- layout.toArtifact( "groupId/jars/1.0.jar" );
- fail( "Should have detected artifactId is missing" );
- }
- catch ( LayoutException e )
- {
- /* expected path */
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArchivaArtifact artifact = createArtifact( example.groupId, example.artifactId, example.version,
+ example.classifier, example.type );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, layout.toPath( artifact ) );
+ }
}
}
+
+ public void testArtifactReferenceToPath()
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArtifactReference reference = new ArtifactReference();
+ reference.setGroupId( example.groupId );
+ reference.setArtifactId( example.artifactId );
+ reference.setVersion( example.version );
+ reference.setClassifier( example.classifier );
+ reference.setType( example.type );
+
+ assertEquals( "ArtifactReference <" + reference + "> to path:", example.pathArtifact, layout
+ .toPath( reference ) );
+ }
+ }
+ }
+
+ public void testVersionedReferenceToPath()
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForVersionedTest() || example.isSuitableForArtifactTest() )
+ {
+ VersionedReference reference = new VersionedReference();
+ reference.setGroupId( example.groupId );
+ reference.setArtifactId( example.artifactId );
+ reference.setVersion( example.version );
+
+ assertEquals( "VersionedReference <" + reference + "> to path:", example.pathVersiond, layout
+ .toPath( reference ) );
+ }
+ }
+ }
+
+ public void testProjectReferenceToPath()
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForProjectTest() || example.isSuitableForVersionedTest()
+ || example.isSuitableForArtifactTest() )
+ {
+ ProjectReference reference = new ProjectReference();
+ reference.setGroupId( example.groupId );
+ reference.setArtifactId( example.artifactId );
+
+ assertEquals( "ProjectReference <" + reference + "> to path:", example.pathProjectd, layout
+ .toPath( reference ) );
+ }
+ }
+ }
+
+ public void testInvalidPathToArtifact()
+ {
+ Iterator it = getInvalidPaths().iterator();
+ while ( it.hasNext() )
+ {
+ InvalidExample example = (InvalidExample) it.next();
+
+ try
+ {
+ layout.toArtifact( example.path );
+ fail( "Should have thrown a LayoutException on the invalid path [" + example.path + "] because of ["
+ + example.reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+ }
+
+ public void testInvalidPathToArtifactReference()
+ {
+ Iterator it = getInvalidPaths().iterator();
+ while ( it.hasNext() )
+ {
+ InvalidExample example = (InvalidExample) it.next();
+
+ if( !example.suitableForArtifactTests )
+ {
+ continue;
+ }
+
+ try
+ {
+ layout.toArtifactReference( example.path );
+ fail( "Should have thrown a LayoutException on the invalid path [" + example.path + "] because of ["
+ + example.reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+ }
+
+ public void testInvalidPathToVersionedReference()
+ {
+ Iterator it = getInvalidPaths().iterator();
+ while ( it.hasNext() )
+ {
+ InvalidExample example = (InvalidExample) it.next();
+
+ if( !example.suitableForVersionedTests )
+ {
+ continue;
+ }
+
+ try
+ {
+ layout.toVersionedReference( example.path );
+ fail( "Should have thrown a LayoutException on the invalid path [" + example.path
+ + "] because of [" + example.reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+ }
+
+ public void testInvalidPathToProjectReference()
+ {
+ Iterator it = getInvalidPaths().iterator();
+ while ( it.hasNext() )
+ {
+ InvalidExample example = (InvalidExample) it.next();
+
+ if( !example.suitableForProjectTests )
+ {
+ continue;
+ }
+
+ try
+ {
+ layout.toProjectReference( example.path );
+ fail( "Should have thrown a LayoutException on the invalid path [" + example.path
+ + "] because of [" + example.reason + "]" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+ }
+
+ public void testPathToArtifact()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArchivaArtifact artifact = layout.toArtifact( example.pathArtifact );
+ assertArtifact( artifact, example.groupId, example.artifactId, example.version, example.classifier,
+ example.type );
+ }
+ }
+ }
+
+ public void testPathToArtifactReference()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArtifactReference reference = layout.toArtifactReference( example.pathArtifact );
+ assertArtifactReference( reference, example.groupId, example.artifactId, example.version,
+ example.classifier, example.type );
+ }
+ }
+ }
+
+ public void testPathToVersionedReference()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForVersionedTest() )
+ {
+ VersionedReference reference = layout.toVersionedReference( example.pathVersiond );
+
+ String baseVersion = reference.getVersion();
+
+ assertVersionedReference( reference, example.groupId, example.artifactId, baseVersion );
+ }
+ }
+ }
+
+ public void testPathToProjectReference()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForProjectTest() )
+ {
+ ProjectReference reference = layout.toProjectReference( example.pathProjectd );
+
+ assertProjectReference( reference, example.groupId, example.artifactId );
+ }
+ }
+ }
+
+ public void testRoundtripArtifactToPathToArtifact()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArchivaArtifact artifact = createArtifact( example.groupId, example.artifactId, example.version,
+ example.classifier, example.type );
+ String testPath = layout.toPath( artifact );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, testPath );
+ ArchivaArtifact testArtifact = layout.toArtifact( testPath );
+ assertArtifact( testArtifact, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
+ artifact.getClassifier(), artifact.getType() );
+ }
+ }
+ }
+
+ public void testRoundtripPathToArtifactToPath()
+ throws LayoutException
+ {
+ Iterator it = getGoodExamples().iterator();
+ while ( it.hasNext() )
+ {
+ LayoutExample example = (LayoutExample) it.next();
+ if ( example.isSuitableForArtifactTest() )
+ {
+ ArchivaArtifact artifact = layout.toArtifact( example.pathArtifact );
+ assertArtifact( artifact, example.groupId, example.artifactId, example.version, example.classifier,
+ example.type );
+ String testPath = layout.toPath( artifact );
+ assertEquals( "Artifact <" + artifact + "> to path:", example.pathArtifact, testPath );
+ }
+ }
+ }
+
+
}