+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArtifactReference;
-import org.apache.maven.archiva.model.VersionedReference;
-import org.apache.maven.archiva.repository.ManagedRepositoryContent;
-import org.apache.maven.archiva.repository.RemoteRepositoryContent;
-import org.apache.maven.archiva.repository.RepositoryContentFactory;
-import org.apache.maven.archiva.repository.content.RepositoryRequest;
-
-/**
- * BidirectionalRepositoryLayout - Similar in scope to ArtifactRepositoryLayout, but does
- * the both the Path to Artifact, and Artifact to Path conversions.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- *
- * @deprecated use {@link RepositoryContentFactory} instead.
- */
-public interface BidirectionalRepositoryLayout
-{
- /**
- * Get the identifier for this layout.
- *
- * @return the identifier for this layout.
- *
- * @deprecated use {@link ManagedRepositoryContent#getId()} or {@link RemoteRepositoryContent#getId()} instead.
- */
- public String getId();
-
- /**
- * Given a repository relative path, return <code>true</code> if the path is valid
- * according to the repository layout.
- *
- * @deprecated use {@link RepositoryRequest#toArtifactReference(String)} instead.
- */
- public boolean isValidPath( String path );
-
- /**
- * Given an ArchivaArtifact, return the relative path to the artifact.
- *
- * @param artifact the artifact to use.
- * @return the relative path to the artifact.
- *
- * @deprecated use {@link ManagedRepositoryContent#toPath(ArchivaArtifact)} instead.
- */
- public String toPath( ArchivaArtifact artifact );
-
- /**
- * Given an ArtifactReference, return the relative path to the artifact.
- *
- * @param reference the artifact reference to use.
- * @return the relative path to the artifact.
- *
- * @deprecated use {@link ManagedRepositoryContent#toPath(ArtifactReference))} or
- * {@link RemoteRepositoryContent#toPath(ArtifactReference)} instead.
- */
- public String toPath( ArtifactReference reference );
-
- /**
- * Given a repository relative path to a filename, return the {@link ArchivaArtifact} object suitable for the path.
- *
- * @param path the path relative to the repository base dir for the artifact.
- * @return the {@link ArchivaArtifact} representing the path. (or null if path cannot be converted to
- * an {@link ArchivaArtifact})
- * @throws LayoutException if there was a problem converting the path to an artifact.
- *
- * @deprecated use {@link ManagedRepositoryContent#toArtifactReference(String))} or
- * {@link RemoteRepositoryContent#toArtifactReference(String)} instead.
- */
- public ArchivaArtifact toArtifact( String path )
- throws LayoutException;
-
- /**
- * Given a repository relative path to a filename, return the {@link VersionedReference} object suitable for the path.
- *
- * @param path the path relative to the repository base dir for the artifact.
- * @return the {@link ArtifactReference} representing the path. (or null if path cannot be converted to
- * a {@link ArtifactReference})
- * @throws LayoutException if there was a problem converting the path to an artifact.
- *
- * @deprecated use {@link ManagedRepositoryContent#toArtifactReference(String))} or
- * {@link RemoteRepositoryContent#toArtifactReference(String)} instead.
- */
- public ArtifactReference toArtifactReference( String path )
- throws LayoutException;
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.commons.lang.StringUtils;
-import org.apache.maven.archiva.configuration.AbstractRepositoryConfiguration;
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.ConfigurationNames;
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.repository.RepositoryContentFactory;
-import org.apache.maven.archiva.repository.content.RepositoryRequest;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-import org.codehaus.plexus.registry.Registry;
-import org.codehaus.plexus.registry.RegistryListener;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * BidirectionalRepositoryLayoutFactory
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- *
- * @deprecated use {@link RepositoryContentFactory} instead.
- *
- * @plexus.component role="org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory"
- */
-public class BidirectionalRepositoryLayoutFactory
- extends AbstractLogEnabled
- implements RegistryListener, Initializable
-{
- /**
- * @plexus.requirement role="org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout"
- */
- private Map layouts;
-
- /**
- * @plexus.requirement
- */
- private ArchivaConfiguration configuration;
-
- private Map repositoryMap = new HashMap();
-
- /**
- * @deprecated use {@link RepositoryContentFactory#getManagedRepositoryContent(String)} or
- * {@link RepositoryContentFactory#getRemoteRepositoryContent(String)} instead.
- */
- public BidirectionalRepositoryLayout getLayout( String type )
- throws LayoutException
- {
- if ( !layouts.containsKey( type ) )
- {
- throw new LayoutException(
- "Layout type [" + type + "] does not exist. " + "Available types [" + layouts.keySet() + "]" );
- }
-
- return (BidirectionalRepositoryLayout) layouts.get( type );
- }
-
- /**
- * @deprecated use {@link RepositoryRequest#toArtifactReference(String)} instead.
- */
- public BidirectionalRepositoryLayout getLayoutForPath( String path )
- throws LayoutException
- {
- for ( Iterator iter = layouts.values().iterator(); iter.hasNext(); )
- {
- BidirectionalRepositoryLayout layout = (BidirectionalRepositoryLayout) iter.next();
- if ( layout.isValidPath( path ) )
- {
- return layout;
- }
- }
- throw new LayoutException( "No valid layout was found for path [" + path + "]" );
- }
-
-
- /**
- * @deprecated use {@link RepositoryContentFactory#getManagedRepositoryContent(String)} or
- * {@link RepositoryContentFactory#getRemoteRepositoryContent(String)} instead.
- */
- public BidirectionalRepositoryLayout getLayout( ArchivaArtifact artifact )
- throws LayoutException
- {
- if ( artifact == null )
- {
- throw new LayoutException( "Cannot determine layout using a null artifact." );
- }
-
- String repoId = artifact.getModel().getRepositoryId();
- if ( StringUtils.isBlank( repoId ) )
- {
- throw new LayoutException( "Cannot determine layout using artifact with no repository id: " + artifact );
- }
-
- AbstractRepositoryConfiguration repo = (AbstractRepositoryConfiguration) this.repositoryMap.get( repoId );
- return getLayout( repo.getLayout() );
- }
-
- public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
- {
- if ( ConfigurationNames.isManagedRepositories( propertyName ) )
- {
- initRepositoryMap();
- }
- }
-
- public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
- {
- /* do nothing */
- }
-
- private void initRepositoryMap()
- {
- synchronized ( this.repositoryMap )
- {
- this.repositoryMap.clear();
- this.repositoryMap.putAll( configuration.getConfiguration().getManagedRepositoriesAsMap() );
- }
- }
-
- public void initialize()
- throws InitializationException
- {
- initRepositoryMap();
- configuration.addChangeListener( this );
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.commons.lang.StringUtils;
-import org.apache.maven.archiva.common.utils.VersionUtil;
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArtifactReference;
-import org.apache.maven.archiva.repository.ManagedRepositoryContent;
-import org.apache.maven.archiva.repository.RemoteRepositoryContent;
-import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
-
-/**
- * DefaultBidirectionalRepositoryLayout - the layout mechanism for use by Maven 2.x repositories.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- * @plexus.component role-hint="default"
- * @deprecated to not use directly. Use {@link ManagedRepositoryContent} or {@link RemoteRepositoryContent} instead.
- */
-public class DefaultBidirectionalRepositoryLayout
- implements BidirectionalRepositoryLayout
-{
- class PathReferences
- {
- public String groupId;
-
- public String artifactId;
-
- public String baseVersion;
-
- public String type;
-
- public FilenameParts fileParts;
-
- public void appendGroupId( String part )
- {
- if ( groupId == null )
- {
- groupId = part;
- return;
- }
-
- groupId += "." + part;
- }
- }
-
- private static final char PATH_SEPARATOR = '/';
-
- private static final char GROUP_SEPARATOR = '.';
-
- private static final char ARTIFACT_SEPARATOR = '-';
-
- public String getId()
- {
- return "default";
- }
-
- public ArchivaArtifact toArtifact( String path )
- throws LayoutException
- {
- PathReferences pathrefs = toPathReferences( path );
-
- ArchivaArtifact artifact = new ArchivaArtifact( pathrefs.groupId, pathrefs.artifactId,
- pathrefs.fileParts.version, pathrefs.fileParts.classifier,
- pathrefs.type );
-
- return artifact;
- }
-
- public ArtifactReference toArtifactReference( String path )
- throws LayoutException
- {
- PathReferences pathrefs = toPathReferences( path );
-
- ArtifactReference reference = new ArtifactReference();
- reference.setGroupId( pathrefs.groupId );
- reference.setArtifactId( pathrefs.artifactId );
- reference.setVersion( pathrefs.fileParts.version );
- reference.setClassifier( pathrefs.fileParts.classifier );
- reference.setType( pathrefs.type );
-
- return reference;
- }
-
- public String toPath( ArchivaArtifact artifact )
- {
- if ( artifact == null )
- {
- throw new IllegalArgumentException( "Artifact cannot be null" );
- }
-
- return toPath( artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion(), artifact
- .getVersion(), artifact.getClassifier(), artifact.getType() );
- }
-
- public String toPath( ArtifactReference reference )
- {
- if ( reference == null )
- {
- throw new IllegalArgumentException( "Artifact reference cannot be null" );
- }
-
- String baseVersion = VersionUtil.getBaseVersion( reference.getVersion() );
- return toPath( reference.getGroupId(), reference.getArtifactId(), baseVersion, reference.getVersion(),
- reference.getClassifier(), reference.getType() );
- }
-
- private String formatAsDirectory( String directory )
- {
- return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
- }
-
- private String toPath( String groupId, String artifactId, String baseVersion, String version, String classifier,
- String type )
- {
- StringBuffer path = new StringBuffer();
-
- path.append( formatAsDirectory( groupId ) ).append( PATH_SEPARATOR );
- path.append( artifactId ).append( PATH_SEPARATOR );
-
- if ( baseVersion != null )
- {
- path.append( baseVersion ).append( PATH_SEPARATOR );
- if ( ( version != null ) && ( type != null ) )
- {
- path.append( artifactId ).append( ARTIFACT_SEPARATOR ).append( version );
-
- if ( StringUtils.isNotBlank( classifier ) )
- {
- path.append( ARTIFACT_SEPARATOR ).append( classifier );
- }
-
- path.append( GROUP_SEPARATOR ).append( ArtifactExtensionMapping.getExtension( type ) );
- }
- }
-
- return path.toString();
- }
-
- public boolean isValidPath( String path )
- {
- try
- {
- toPathReferences( path );
- return true;
- }
- catch ( LayoutException e )
- {
- return false;
- }
- }
-
- private PathReferences toPathReferences( String path )
- throws LayoutException
- {
- if ( StringUtils.isBlank( path ) )
- {
- throw new LayoutException( "Unable to convert blank path." );
- }
-
- PathReferences prefs = new PathReferences();
-
- String normalizedPath = StringUtils.replace( path, "\\", "/" );
- String pathParts[] = StringUtils.split( normalizedPath, '/' );
-
- /* Minimum parts.
- *
- * path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar"
- * path[0] = "commons-lang"; // The Group ID
- * path[1] = "commons-lang"; // The Artifact ID
- * path[2] = "2.1"; // The Version
- * path[3] = "commons-lang-2.1.jar" // The filename.
- */
-
- if ( pathParts.length < 4 )
- {
- // Illegal Path Parts Length.
- throw new LayoutException( "Not enough parts to the path [" + path
- + "] to construct an ArchivaArtifact from. (Requires at least 4 parts)" );
- }
-
- // 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[baseVersionPos];
-
- // Third to last is the artifact Id.
- prefs.artifactId = pathParts[artifactIdPos];
-
- // Remaining pieces are the groupId.
- for ( int i = 0; i <= groupIdPos; i++ )
- {
- prefs.appendGroupId( pathParts[i] );
- }
-
- try
- {
- // Last part is the filename
- String filename = pathParts[filenamePos];
-
- // Now we need to parse the filename to get the artifact version Id.
- prefs.fileParts = RepositoryLayoutUtils.splitFilename( filename, prefs.artifactId, prefs.baseVersion );
-
- /* If classifier is discovered, see if it deserves to be.
- *
- * Filenames like "comm-3.0-u1.jar" might be identified as having a version of "3.0"
- * and a classifier of "u1".
- *
- * This routine will take the version + classifier and compare it to the prefs.baseVersion and
- * move the classifierensure that
- *
- * javax/comm/3.0-u1/comm-3.0-u1.jar
- */
- if ( StringUtils.isNotBlank( prefs.fileParts.classifier ) )
- {
- String conjoinedVersion = prefs.fileParts.version + "-" + prefs.fileParts.classifier;
-
- if( StringUtils.equals( prefs.baseVersion, conjoinedVersion ) )
- {
- prefs.fileParts.version = conjoinedVersion;
- prefs.fileParts.classifier = null;
- }
- }
-
- prefs.type = ArtifactExtensionMapping.guessTypeFromFilename( filename );
- }
- catch ( LayoutException e )
- {
- throw e;
- }
-
- // Sanity Checks.
- if ( prefs.fileParts != null )
- {
- /* Compare artifact version to path baseversion.
- *
- * Version naming in the wild can be strange at times.
- * Sometimes what is seen as a classifier is actually part of the version id.
- *
- * To compensate for this, the path is checked against the artifact.version and
- * the concatenation of the artifact.version + "-" + artifact.classifier
- */
- String pathVersion = prefs.baseVersion;
- String artifactVersion = prefs.fileParts.version;
-
- // Do we have a snapshot version?
- if ( VersionUtil.isSnapshot( artifactVersion ) )
- {
- // Rules are different for SNAPSHOTS
- if ( !VersionUtil.isGenericSnapshot( pathVersion ) )
- {
- String baseVersion = VersionUtil.getBaseVersion( prefs.fileParts.version );
- throw new LayoutException( "Invalid snapshot artifact location, version directory should be "
- + baseVersion );
- }
- }
- else
- {
- // Non SNAPSHOT rules.
- // Do we pass the simple test?
- if ( !StringUtils.equals( pathVersion, artifactVersion ) )
- {
- // Do we have a classifier? If so, test the conjoined case.
- if ( StringUtils.isNotBlank( prefs.fileParts.classifier ) )
- {
- String artifactLongVersion = artifactVersion + "-" + prefs.fileParts.classifier;
- if ( !StringUtils.equals( pathVersion, artifactLongVersion ) )
- {
- throw new LayoutException( "Invalid artifact: version declared in directory path does"
- + " not match what was found in the artifact filename." );
- }
- }
- else
- {
- throw new LayoutException( "Invalid artifact: version declared in directory path does"
- + " not match what was found in the artifact filename." );
- }
- }
- }
-
- // Test if the artifactId present on the directory path is the same as the artifactId filename.
- if ( !prefs.artifactId.equals( prefs.fileParts.artifactId ) )
- {
- throw new LayoutException( "Invalid artifact Id" );
- }
- }
-
- return prefs;
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-import org.apache.maven.archiva.repository.ManagedRepositoryContent;
-import org.apache.maven.archiva.repository.RemoteRepositoryContent;
-
-/*
- * 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.
- */
-
-/**
- * FilenameParts - data object for {@link RepositoryLayoutUtils#splitFilename(String, String)} method.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- * @deprecated to not use directly. Use {@link ManagedRepositoryContent} or {@link RemoteRepositoryContent} instead.
- */
-public class FilenameParts
-{
- public String artifactId;
-
- public String version;
-
- public String classifier;
-
- public String extension;
-
- public String toFilename()
- {
- StringBuffer sb = new StringBuffer();
-
- if ( artifactId != null )
- {
- sb.append( artifactId );
- }
-
- if ( classifier != null )
- {
- sb.append( "-" ).append( classifier );
- }
-
- if ( version != null )
- {
- sb.append( "-" ).append( version );
- }
-
- if ( extension != null )
- {
- sb.append( "." ).append( extension );
- }
-
- return sb.toString();
- }
-
- public void appendArtifactId( String piece )
- {
- if ( artifactId == null )
- {
- artifactId = piece;
- }
- else
- {
- artifactId += "-" + piece;
- }
- }
-
- public void appendVersion( String piece )
- {
- if ( version == null )
- {
- version = piece;
- }
- else
- {
- version += "-" + piece;
- }
- }
-
- public void appendClassifier( String piece )
- {
- if ( classifier == null )
- {
- classifier = piece;
- }
- else
- {
- classifier += "-" + piece;
- }
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.commons.lang.StringUtils;
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArtifactReference;
-import org.apache.maven.archiva.repository.ManagedRepositoryContent;
-import org.apache.maven.archiva.repository.RemoteRepositoryContent;
-import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * LegacyBidirectionalRepositoryLayout - the layout mechanism for use by Maven 1.x repositories.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- * @plexus.component role-hint="legacy"
- *
- * @deprecated to not use directly. Use {@link ManagedRepositoryContent} or {@link RemoteRepositoryContent} instead.
- */
-public class LegacyBidirectionalRepositoryLayout
- implements BidirectionalRepositoryLayout
-{
- private static final String DIR_JAVADOC = "javadoc.jars";
-
- private static final String DIR_JAVA_SOURCE = "java-sources";
-
- private static final String PATH_SEPARATOR = "/";
-
- private Map typeToDirectoryMap;
-
- public LegacyBidirectionalRepositoryLayout()
- {
- typeToDirectoryMap = new HashMap();
- typeToDirectoryMap.put( "ejb-client", "ejb" );
- typeToDirectoryMap.put( "distribution-tgz", "distribution" );
- typeToDirectoryMap.put( "distribution-zip", "distribution" );
- }
-
- public String getId()
- {
- return "legacy";
- }
-
- public String toPath( ArchivaArtifact artifact )
- {
- return toPath( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
- artifact.getClassifier(), artifact.getType() );
- }
-
- public String toPath( ArtifactReference reference )
- {
- 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 )
- {
- StringBuffer path = new StringBuffer();
-
- path.append( groupId ).append( PATH_SEPARATOR );
- path.append( getDirectory( classifier, type ) ).append( PATH_SEPARATOR );
-
- if ( version != null )
- {
- path.append( artifactId ).append( '-' ).append( version );
-
- if ( StringUtils.isNotBlank( classifier ) )
- {
- path.append( '-' ).append( classifier );
- }
-
- path.append( '.' ).append( ArtifactExtensionMapping.getExtension( type ) );
- }
-
- return path.toString();
- }
-
- private String getDirectory( String classifier, String type )
- {
- // Special Cases involving type + classifier
- if ( "jar".equals( type ) && StringUtils.isNotBlank( classifier ) )
- {
- if ( "sources".equals( classifier ) )
- {
- return DIR_JAVA_SOURCE;
- }
-
- if ( "javadoc".equals( classifier ) )
- {
- return DIR_JAVADOC;
- }
- }
-
- // Special Cases involving only type.
- String dirname = (String) typeToDirectoryMap.get( type );
-
- if ( dirname != null )
- {
- return dirname + "s";
- }
-
- // Default process.
- return type + "s";
- }
-
- class PathReferences
- {
- public String groupId;
-
- public String pathType;
-
- public String type;
-
- public FilenameParts fileParts;
- }
-
- private PathReferences toPathReferences( String path )
- throws LayoutException
- {
- PathReferences prefs = new PathReferences();
-
- String normalizedPath = StringUtils.replace( path, "\\", "/" );
-
- String pathParts[] = StringUtils.split( normalizedPath, '/' );
-
- /* Always 3 parts. (Never more or less)
- *
- * path = "commons-lang/jars/commons-lang-2.1.jar"
- * path[0] = "commons-lang"; // The Group ID
- * path[1] = "jars"; // The Directory Type
- * path[2] = "commons-lang-2.1.jar"; // The Filename.
- */
-
- if ( pathParts.length != 3 )
- {
- // Illegal Path Parts Length.
- throw new LayoutException( "Invalid number of parts to the path [" + path
- + "] to construct an ArchivaArtifact from. (Required to be 3 parts)" );
- }
-
- // The Group ID.
- prefs.groupId = pathParts[0];
-
- // The Expected Type.
- prefs.pathType = pathParts[1];
-
- // The Filename.
- String filename = pathParts[2];
-
- prefs.fileParts = RepositoryLayoutUtils.splitFilename( filename, null );
-
- String trimPathType = prefs.pathType.substring( 0, prefs.pathType.length() - 1 );
- prefs.type = ArtifactExtensionMapping.guessTypeFromFilename( filename );
-
- // Sanity Check: does it have an extension?
- if ( StringUtils.isEmpty( prefs.fileParts.extension ) )
- {
- throw new LayoutException( "Invalid artifact, no extension." );
- }
-
- // Sanity Check: pathType should end in "s".
- if ( !prefs.pathType.toLowerCase().endsWith( "s" ) )
- {
- throw new LayoutException( "Invalid path, the type specified in the path <" + prefs.pathType
- + "> does not end in the letter <s>." );
- }
-
- // Sanity Check: does extension match pathType on path?
- String expectedExtension = ArtifactExtensionMapping.getExtension( trimPathType );
- String actualExtension = prefs.fileParts.extension;
-
- if ( !expectedExtension.equals( actualExtension ) )
- {
- throw new LayoutException( "Invalid artifact, mismatch on extension <" + prefs.fileParts.extension
- + "> and layout specified type <" + prefs.pathType + "> (which maps to extension: <"
- + expectedExtension + ">) on path <" + path + ">" );
- }
-
- return prefs;
- }
-
- public boolean isValidPath( String path )
- {
- try
- {
- toPathReferences( path );
- return true;
- }
- catch ( LayoutException e )
- {
- return false;
- }
- }
-
- public ArchivaArtifact toArtifact( String path )
- throws LayoutException
- {
- PathReferences pathrefs = toPathReferences( path );
-
- ArchivaArtifact artifact = new ArchivaArtifact( pathrefs.groupId, pathrefs.fileParts.artifactId,
- pathrefs.fileParts.version, pathrefs.fileParts.classifier,
- pathrefs.type );
-
- return artifact;
- }
-
- public ArtifactReference toArtifactReference( String path )
- throws LayoutException
- {
- PathReferences pathrefs = toPathReferences( path );
-
- 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;
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.commons.lang.StringUtils;
-import org.apache.maven.archiva.common.utils.VersionUtil;
-import org.apache.maven.archiva.repository.ManagedRepositoryContent;
-import org.apache.maven.archiva.repository.RemoteRepositoryContent;
-import org.apache.maven.archiva.repository.RepositoryContentFactory;
-
-/**
- * RepositoryLayoutUtils - utility methods common for most BidirectionalRepositoryLayout implementation.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- *
- * @deprecated use {@link RepositoryContentFactory} and {@link ManagedRepositoryContent}
- * or {@link RemoteRepositoryContent} instead.
- */
-public class RepositoryLayoutUtils
-{
- /**
- * Complex 2+ part extensions.
- * Do not include initial "." character in extension names here.
- */
- private static final String ComplexExtensions[] = new String[] { "tar.gz", "tar.bz2" };
-
- /**
- * Filename Parsing Mode - Artifact Id.
- */
- private static final int ARTIFACTID = 1;
-
- /**
- * Filename Parsing Mode - Version.
- */
- private static final int VERSION = 2;
-
- /**
- * Filename Parsing Mode - Classifier.
- */
- private static final int CLASSIFIER = 3;
-
- /**
- * Split the provided filename into 4 String parts. Simply delegate to
- * splitFilename( filename, possibleArtifactId, possibleVersion ) with no possibleVersion
- * proposal.
- *
- * @param filename the filename to split.
- * @param possibleArtifactId the optional artifactId to aide in splitting the filename.
- * (null to allow algorithm to calculate one)
- * @return the parts of the filename.
- * @throws LayoutException
- * @deprecated to not use directly. Use {@link ManagedRepositoryContent} or {@link RemoteRepositoryContent} instead.
- */
- public static FilenameParts splitFilename( String filename, String possibleArtifactId ) throws LayoutException
- {
- return splitFilename( filename, possibleArtifactId, null );
- }
-
- /**
- * Split the provided filename into 4 String parts.
- *
- * <pre>
- * String part[] = splitFilename( filename );
- * artifactId = part[0];
- * version = part[1];
- * classifier = part[2];
- * extension = part[3];
- * </pre>
- *
- * @param filename the filename to split.
- * @param possibleArtifactId the optional artifactId to aide in splitting the filename.
- * (null to allow algorithm to calculate one)
- * @param possibleVersion the optional version to aide in splitting the filename.
- * (null to allow algorithm to calculate one)
- * @return the parts of the filename.
- * @throws LayoutException
- * @deprecated to not use directly. Use {@link ManagedRepositoryContent} or {@link RemoteRepositoryContent} instead.
- */
- public static FilenameParts splitFilename( String filename, String possibleArtifactId,
- String possibleVersion ) throws LayoutException
- {
- if ( StringUtils.isBlank( filename ) )
- {
- throw new IllegalArgumentException( "Unable to split blank filename." );
- }
-
- String filestring = filename.trim();
-
- FilenameParts parts = new FilenameParts();
- // I like working backwards.
-
- // Find the extension.
-
- // Work on multipart extensions first.
- boolean found = false;
-
- String lowercaseFilename = filestring.toLowerCase();
- for ( int i = 0; i < ComplexExtensions.length && !found; i++ )
- {
- if ( lowercaseFilename.endsWith( "." + ComplexExtensions[i] ) )
- {
- parts.extension = ComplexExtensions[i];
- filestring = filestring.substring( 0, filestring.length() - ComplexExtensions[i].length() - 1 );
- found = true;
- }
- }
-
- if ( !found )
- {
- // Default to 1 part extension.
-
- int index = filestring.lastIndexOf( '.' );
- if ( index <= 0 )
- {
- // Bad Filename - No Extension
- throw new LayoutException( "Unable to determine extension from filename " + filename );
- }
- parts.extension = filestring.substring( index + 1 );
- filestring = filestring.substring( 0, index );
- }
-
- // Work on version string.
- int mode = ARTIFACTID;
-
- if ( startsWith( filename, possibleArtifactId ) )
- {
- parts.artifactId = possibleArtifactId;
- filestring = filestring.substring( possibleArtifactId.length() + 1 );
- mode = VERSION;
- }
-
- if ( startsWith( filestring, possibleVersion ) )
- {
- if ( filestring.length() > possibleVersion.length() )
- {
- filestring = filestring.substring( possibleVersion.length() );
- }
- else
- {
- filestring = "";
- }
- parts.version = possibleVersion;
- mode = CLASSIFIER;
- }
-
- String fileParts[] = StringUtils.split( filestring, '-' );
-
- int versionStart = -1;
- int versionEnd = -1;
- for ( int i = 0; i < fileParts.length; i++ )
- {
- String part = fileParts[i];
-
- if ( VersionUtil.isSimpleVersionKeyword( part ) )
- {
- // It is a potential version part.
- if ( versionStart < 0 )
- {
- versionStart = i;
- }
-
- versionEnd = i;
- }
- }
-
- if ( versionStart < 0 && parts.version == null )
- {
- // Assume rest of string is the version Id.
-
- if ( fileParts.length > 0 )
- {
- versionStart = 0;
- versionEnd = fileParts.length;
- }
- else
- {
- throw new LayoutException( "Unable to determine version from filename " + filename );
- }
- }
-
- // Gather up the ArtifactID - Version - Classifier pieces found.
-
- for ( int i = 0; i < fileParts.length; i++ )
- {
- String part = fileParts[i];
-
- if ( ( mode == ARTIFACTID ) && ( i >= versionStart ) )
- {
- if ( StringUtils.isBlank( parts.artifactId ) )
- {
- throw new LayoutException( "No Artifact Id detected." );
- }
- mode = VERSION;
- }
-
- switch ( mode )
- {
- case ARTIFACTID:
- parts.appendArtifactId( part );
- break;
- case VERSION:
- parts.appendVersion( part );
- break;
- case CLASSIFIER:
- parts.appendClassifier( part );
- break;
- }
-
- if ( i >= versionEnd )
- {
- mode = CLASSIFIER;
- }
- }
-
- return parts;
- }
-
- /**
- * Check if the string starts with the proposed token, with no more char
- * expeect the '-' separator.
- * @param string string to test
- * @param possible proposed startOf
- * @return true if the possible matches
- */
- private static boolean startsWith( String string, String possible )
- {
- if (possible == null)
- {
- return false;
- }
- int length = possible.length();
- return string.startsWith( possible ) && ( string.length() == length || string.charAt( length ) == '-' );
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.commons.lang.StringUtils;
-import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
-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.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-
-/**
- * AbstractBidirectionalRepositoryLayoutTestCase
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public abstract class AbstractBidirectionalRepositoryLayoutTestCase
- extends PlexusTestCase
-{
- protected ManagedRepositoryConfiguration repository;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- repository = createTestRepository();
- }
-
- protected ManagedRepositoryConfiguration createTestRepository()
- {
- File targetDir = new File( getBasedir(), "target" );
- File testRepo = new File( targetDir, "test-repo" );
-
- if ( !testRepo.exists() )
- {
- testRepo.mkdirs();
- }
-
- ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration();
- repo.setId( "testRepo" );
- repo.setName( "Test Repository" );
- repo.setLocation( testRepo.getAbsolutePath() );
- return repo;
- }
-
- protected ArchivaArtifact createArtifact( String groupId, String artifactId, String version, String classifier,
- String type )
- {
- ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, classifier, type );
- assertNotNull( artifact );
- artifact.getModel().setRepositoryId( repository.getId() );
- return artifact;
- }
-
- protected void assertArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version,
- String classifier, String type )
- {
- String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
-
- assertNotNull( expectedId + " - Should not be null.", actualArtifact );
-
- assertEquals( expectedId + " - Group ID", groupId, actualArtifact.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualArtifact.getArtifactId() );
- if ( StringUtils.isNotBlank( classifier ) )
- {
- assertEquals( expectedId + " - Classifier", classifier, actualArtifact.getClassifier() );
- }
- assertEquals( expectedId + " - Version ID", version, actualArtifact.getVersion() );
- assertEquals( expectedId + " - Type", type, actualArtifact.getType() );
- }
-
- protected void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
- String version, String classifier, String type )
- {
- String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + classifier
- + ":" + type;
-
- assertNotNull( expectedId + " - Should not be null.", actualReference );
-
- assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
- if ( StringUtils.isNotBlank( classifier ) )
- {
- assertEquals( expectedId + " - Classifier", classifier, actualReference.getClassifier() );
- }
- assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
- assertEquals( expectedId + " - Type", type, actualReference.getType() );
- }
-
- protected void assertVersionedReference( VersionedReference actualReference, String groupId, String artifactId,
- String version )
- {
- String expectedId = "VersionedReference - " + groupId + ":" + artifactId + ":" + version;
-
- assertNotNull( expectedId + " - Should not be null.", actualReference );
- assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
- assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
- }
-
- protected void assertProjectReference( ProjectReference actualReference, String groupId, String artifactId )
- {
- String expectedId = "ProjectReference - " + groupId + ":" + artifactId;
-
- assertNotNull( expectedId + " - Should not be null.", actualReference );
- assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
- }
-
- protected void assertSnapshotArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId,
- String version, String classifier, String type )
- {
- String expectedId = groupId + ":" + artifactId + ":" + version + ":" + classifier + ":" + type;
-
- assertNotNull( expectedId + " - Should not be null.", actualArtifact );
-
- assertEquals( expectedId + " - Group ID", actualArtifact.getGroupId(), groupId );
- assertEquals( expectedId + " - Artifact ID", actualArtifact.getArtifactId(), artifactId );
- assertEquals( expectedId + " - Version ID", actualArtifact.getVersion(), version );
- assertEquals( expectedId + " - Classifier", actualArtifact.getClassifier(), classifier );
- assertEquals( expectedId + " - Type", actualArtifact.getType(), type );
- assertTrue( expectedId + " - Snapshot", actualArtifact.isSnapshot() );
- }
-
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.archiva.model.ArchivaArtifact;
-
-/**
- * BidirectionalRepositoryLayoutFactoryTest
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class BidirectionalRepositoryLayoutFactoryTest
- extends AbstractBidirectionalRepositoryLayoutTestCase
-{
- private BidirectionalRepositoryLayoutFactory factory;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- factory = (BidirectionalRepositoryLayoutFactory) lookup( BidirectionalRepositoryLayoutFactory.class.getName() );
- }
-
- public void testLayoutDefault()
- throws LayoutException
- {
- BidirectionalRepositoryLayout layout = factory.getLayout( "default" );
- assertNotNull( "Layout should not be null", layout );
-
- ArchivaArtifact artifact = createArtifact( "com.foo", "foo-tool", "1.0", "", "jar" );
-
- assertEquals( "com/foo/foo-tool/1.0/foo-tool-1.0.jar", layout.toPath( artifact ) );
- }
-
- public void testLayoutLegacy()
- throws LayoutException
- {
- BidirectionalRepositoryLayout layout = factory.getLayout( "legacy" );
- assertNotNull( "Layout should not be null", layout );
-
- ArchivaArtifact artifact = createArtifact( "com.foo", "foo-tool", "1.0", "", "jar" );
-
- assertEquals( "com.foo/jars/foo-tool-1.0.jar", layout.toPath( artifact ) );
- }
-
- public void testLayoutInvalid()
- {
- try
- {
- factory.getLayout( "-invalid-" );
- fail( "Should have thrown a LayoutException due to missing layout type." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testFindLayoutForPath()
- throws LayoutException
- {
- BidirectionalRepositoryLayout layout =
- factory.getLayoutForPath( "javax/servlet/servlet-api/2.3/servlet-api-2.3.jar" );
- assertEquals( "default", layout.getId() );
-
- layout = factory.getLayoutForPath( "javax.servlet/jars/servlet-api-2.3.jar" );
- assertEquals( "legacy", layout.getId() );
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArtifactReference;
-
-/**
- * DefaultBidirectionalRepositoryLayoutTest
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class DefaultBidirectionalRepositoryLayoutTest
- extends AbstractBidirectionalRepositoryLayoutTestCase
-{
- private BidirectionalRepositoryLayout layout;
-
- public void testBadPathMissingType()
- {
- assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
- }
-
- public void testBadPathReleaseInSnapshotDir()
- {
- assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", "non snapshot artifact inside of a snapshot dir" );
- }
-
- public void testBadPathTimestampedSnapshotNotInSnapshotDir()
- {
- assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar",
- "Timestamped Snapshot artifact not inside of an Snapshot dir" );
- }
-
- public void testBadPathTooShort()
- {
- assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
- }
-
- public void testBadPathVersionMismatchA()
- {
- assertBadPath( "invalid/invalid/1.0/invalid-2.0.jar", "version mismatch between path and artifact" );
- }
-
- public void testBadPathVersionMismatchB()
- {
- assertBadPath( "invalid/invalid/1.0/invalid-1.0b.jar", "version mismatch between path and artifact" );
- }
-
- public void testBadPathWrongArtifactId()
- {
- assertBadPath( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar",
- "wrong artifact id" );
- }
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- public void testGoodButOddVersionSpecGanymedSsh2()
- throws LayoutException
- {
- String groupId = "ch.ethz.ganymed";
- String artifactId = "ganymed-ssh2";
- String version = "build210";
- String classifier = null;
- String type = "jar";
- String path = "ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- public void testGoodButOddVersionSpecJavaxComm()
- throws LayoutException
- {
- String groupId = "javax";
- String artifactId = "comm";
- String version = "3.0-u1";
- String classifier = null;
- String type = "jar";
- String path = "javax/comm/3.0-u1/comm-3.0-u1.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- public void testGoodButOddVersionSpecJavaxPersistence()
- throws LayoutException
- {
- String groupId = "javax.persistence";
- String artifactId = "ejb";
- String version = "3.0-public_review";
- String classifier = null;
- String type = "jar";
- String path = "javax/persistence/ejb/3.0-public_review/ejb-3.0-public_review.jar";
-
- /*
- * The version id of "public_review" can cause problems. is it part of
- * the version spec? or the classifier?
- * Since the path spec below shows it in the path, then it is really
- * part of the version spec.
- */
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * [MRM-519] version identifiers within filename cause misidentification of version.
- * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
- */
- public void testGoodVersionKeywordInArtifactId()
- throws LayoutException
- {
- String groupId = "maven";
- String artifactId = "maven-test-plugin";
- String version = "1.8.2";
- String classifier = null;
- String type = "pom";
- String path = "maven/maven-test-plugin/1.8.2/maven-test-plugin-1.8.2.pom";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * [MRM-486] Can not deploy artifact test.maven-arch:test-arch due to "No ArtifactID Detected"
- */
- public void testGoodDashedArtifactId()
- throws LayoutException
- {
- String groupId = "test.maven-arch";
- String artifactId = "test-arch";
- String version = "2.0.3-SNAPSHOT";
- String classifier = null;
- String type = "pom";
- String path = "test/maven-arch/test-arch/2.0.3-SNAPSHOT/test-arch-2.0.3-SNAPSHOT.pom";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * It may seem odd, but this is a valid artifact.
- */
- public void testGoodDotNotationArtifactId()
- throws LayoutException
- {
- String groupId = "com.company.department";
- String artifactId = "com.company.department";
- String version = "0.2";
- String classifier = null;
- String type = "pom";
- String path = "com/company/department/com.company.department/0.2/com.company.department-0.2.pom";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * It may seem odd, but this is a valid artifact.
- */
- public void testGoodDotNotationSameGroupIdAndArtifactId()
- throws LayoutException
- {
- String groupId = "com.company.department";
- String artifactId = "com.company.department.project";
- String version = "0.3";
- String classifier = null;
- String type = "pom";
- String path = "com/company/department/com.company.department.project/0.3/com.company.department.project-0.3.pom";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- public void testGoodComFooTool()
- throws LayoutException
- {
- String groupId = "com.foo";
- String artifactId = "foo-tool";
- String version = "1.0";
- String classifier = null;
- String type = "jar";
- String path = "com/foo/foo-tool/1.0/foo-tool-1.0.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- public void testGoodCommonsLang()
- throws LayoutException
- {
- String groupId = "commons-lang";
- String artifactId = "commons-lang";
- String version = "2.1";
- String classifier = null;
- String type = "jar";
- String path = "commons-lang/commons-lang/2.1/commons-lang-2.1.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * Test the ejb-client type spec.
- * Type specs are not a 1 to 1 map to the extension.
- * This tests that effect.
- * @throws LayoutException
- */
- /* TODO: Re-enabled in the future.
- public void testGoodFooEjbClient()
- throws LayoutException
- {
- String groupId = "com.foo";
- String artifactId = "foo-client";
- String version = "1.0";
- String classifier = null;
- String type = "ejb-client"; // oddball type-spec (should result in jar extension)
- String path = "com/foo/foo-client/1.0/foo-client-1.0.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
- */
-
- /**
- * Test the classifier, and java-source type spec.
- * @throws LayoutException
- */
- public void testGoodFooLibSources()
- throws LayoutException
- {
- String groupId = "com.foo.lib";
- String artifactId = "foo-lib";
- String version = "2.1-alpha-1";
- String classifier = "sources";
- String type = "java-source"; // oddball type-spec (should result in jar extension)
- String path = "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- /**
- * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
- * @throws LayoutException
- */
- public void testGoodSnapshotMavenTest()
- throws LayoutException
- {
- String groupId = "org.apache.archiva.test";
- String artifactId = "redonkulous";
- String version = "3.1-beta-1-20050831.101112-42";
- String classifier = null;
- String type = "jar";
- String path = "org/apache/archiva/test/redonkulous/3.1-beta-1-SNAPSHOT/redonkulous-3.1-beta-1-20050831.101112-42.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
-
- public void testToArtifactOnEmptyPath()
- {
- try
- {
- layout.toArtifact( "" );
- fail( "Should have failed due to empty path." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testToArtifactOnNullPath()
- {
- try
- {
- layout.toArtifact( null );
- fail( "Should have failed due to null path." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testToArtifactReferenceOnEmptyPath()
- {
- try
- {
- layout.toArtifactReference( "" );
- fail( "Should have failed due to empty path." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testToArtifactReferenceOnNullPath()
- {
- try
- {
- layout.toArtifactReference( null );
- fail( "Should have failed due to null path." );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- public void testToPathOnNullArtifactReference()
- {
- try
- {
- ArtifactReference reference = null;
- layout.toPath( reference );
- fail( "Should have failed due to null artifact reference." );
- }
- catch ( IllegalArgumentException e )
- {
- /* expected path */
- }
- }
-
- public void testToPathOnNullArtifact()
- {
- try
- {
- ArchivaArtifact artifact = null;
- layout.toPath( artifact );
- fail( "Should have failed due to null artifact." );
- }
- catch ( IllegalArgumentException e )
- {
- /* expected path */
- }
- }
-
- protected void assertBadPath( String path, String reason )
- {
- try
- {
- layout.toArtifact( path );
- fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- /**
- * Perform a roundtrip through the layout routines to determine success.
- */
- private void assertLayout( String path, String groupId, String artifactId, String version, String classifier,
- String type )
- throws LayoutException
- {
- ArchivaArtifact expectedArtifact = createArtifact( groupId, artifactId, version, classifier, type );
-
- // --- Artifact Tests.
- // Artifact to Path
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( expectedArtifact ) );
-
- // Path to Artifact.
- ArchivaArtifact testArtifact = layout.toArtifact( path );
- assertArtifact( testArtifact, groupId, artifactId, version, classifier, type );
-
- // And back again, using test Artifact from previous step.
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testArtifact ) );
-
- // --- Artifact Reference Tests
-
- // Path to Artifact Reference.
- ArtifactReference testReference = layout.toArtifactReference( path );
- assertArtifactReference( testReference, groupId, artifactId, version, classifier, type );
-
- // And back again, using test Reference from previous step.
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testReference ) );
- }
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- layout = (BidirectionalRepositoryLayout) lookup( BidirectionalRepositoryLayout.class.getName(), "default" );
- }
-}
+++ /dev/null
-package org.apache.maven.archiva.repository.layout;
-
-/*
- * 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.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.ArtifactReference;
-
-/**
- * LegacyBidirectionalRepositoryLayoutTest
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class LegacyBidirectionalRepositoryLayoutTest
- extends AbstractBidirectionalRepositoryLayoutTestCase
-{
- private BidirectionalRepositoryLayout layout;
-
- public void testBadPathArtifactIdMissingA()
- {
- assertBadPath( "groupId/jars/-1.0.jar", "artifactId is missing" );
- }
-
- public void testBadPathArtifactIdMissingB()
- {
- assertBadPath( "groupId/jars/1.0.jar", "artifactId is missing" );
- }
-
- public void testBadPathMissingType()
- {
- assertBadPath( "invalid/invalid/1/invalid-1", "missing type" );
- }
-
- public void testBadPathTooShort()
- {
- // NEW
- assertBadPath( "invalid/invalid-1.0.jar", "path is too short" );
- }
-
- public void testBadPathWrongPackageExtension()
- {
- assertBadPath( "org.apache.maven.test/jars/artifactId-1.0.war", "wrong package extension" );
- }
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- /*
- public void testGoodButOddVersionSpecGanymedSsh2()
- throws LayoutException
- {
- String groupId = "ch.ethz.ganymed";
- String artifactId = "ganymed-ssh2";
- String version = "build210";
- String type = "jar";
- String path = "ch.ethz.ganymed/jars/ganymed-ssh2-build210.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- /*
- public void testGoodButOddVersionSpecJavaxComm()
- throws LayoutException
- {
- String groupId = "javax";
- String artifactId = "comm";
- String version = "3.0-u1";
- String type = "jar";
- String path = "javax/jars/comm-3.0-u1.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- /**
- * [MRM-432] Oddball version spec.
- * Example of an oddball / unusual version spec.
- * @throws LayoutException
- */
- /*
- public void testGoodButOddVersionSpecJavaxPersistence()
- throws LayoutException
- {
- String groupId = "javax.persistence";
- String artifactId = "ejb";
- String version = "3.0-public_review";
- String type = "jar";
- String path = "javax.persistence/jars/ejb-3.0-public_review.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- /**
- * [MRM-519] version identifiers within filename cause misidentification of version.
- * Example uses "test" in artifact Id, which is also part of the versionKeyword list.
- */
- /*
- public void testGoodVersionKeywordInArtifactId()
- throws LayoutException
- {
- String groupId = "maven";
- String artifactId = "maven-test-plugin";
- String version = "1.8.2";
- String type = "jar";
-
- String path = "maven/jars/maven-test-plugin-1.8.2.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- public void testGoodCommonsLang()
- throws LayoutException
- {
- String groupId = "commons-lang";
- String artifactId = "commons-lang";
- String version = "2.1";
- String type = "jar";
- String path = "commons-lang/jars/commons-lang-2.1.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- public void testGoodDerby()
- throws LayoutException
- {
- String groupId = "org.apache.derby";
- String artifactId = "derby";
- String version = "10.2.2.0";
- String type = "jar";
- String path = "org.apache.derby/jars/derby-10.2.2.0.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- /**
- * Test the ejb-client type spec.
- * Type specs are not a 1 to 1 map to the extension.
- * This tests that effect.
- * @throws LayoutException
- */
- /* TODO: Re-enabled in the future.
- public void testGoodFooEjbClient()
- throws LayoutException
- {
- String groupId = "com.foo";
- String artifactId = "foo-client";
- String version = "1.0";
- String type = "ejb"; // oddball type-spec (should result in jar extension)
- String path = "com.foo/ejbs/foo-client-1.0.jar";
-
- assertLayout( path, groupId, artifactId, version, classifier, type );
- }
- */
-
- /**
- * Test the classifier.
- * @throws LayoutException
- */
- /*
- public void testGoodFooLibJavadoc()
- throws LayoutException
- {
- String groupId = "com.foo.lib";
- String artifactId = "foo-lib";
- String version = "2.1-alpha-1-javadoc";
- String type = "javadoc.jar";
- String path = "com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-javadoc.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- /**
- * Test the classifier, and java-source type spec.
- * @throws LayoutException
- */
- /*
- public void testGoodFooLibSources()
- throws LayoutException
- {
- String groupId = "com.foo.lib";
- String artifactId = "foo-lib";
- String version = "2.1-alpha-1-sources";
- String type = "java-source"; // oddball type-spec (should result in jar extension)
- String path = "com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
- */
-
- public void testGoodFooTool()
- throws LayoutException
- {
- String groupId = "com.foo";
- String artifactId = "foo-tool";
- String version = "1.0";
- String type = "jar";
- String path = "com.foo/jars/foo-tool-1.0.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- public void testGoodGeronimoEjbSpec()
- throws LayoutException
- {
- String groupId = "org.apache.geronimo.specs";
- String artifactId = "geronimo-ejb_2.1_spec";
- String version = "1.0.1";
- String type = "jar";
- String path = "org.apache.geronimo.specs/jars/geronimo-ejb_2.1_spec-1.0.1.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- public void testGoodLdapClientsPom()
- throws LayoutException
- {
- String groupId = "directory-clients";
- String artifactId = "ldap-clients";
- String version = "0.9.1-SNAPSHOT";
- String type = "pom";
- String path = "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- /**
- * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
- * @throws LayoutException
- */
- public void testGoodSnapshotMavenTest()
- throws LayoutException
- {
- String groupId = "org.apache.archiva.test";
- String artifactId = "redonkulous";
- String version = "3.1-beta-1-20050831.101112-42";
- String type = "jar";
- String path = "org.apache.archiva.test/jars/redonkulous-3.1-beta-1-20050831.101112-42.jar";
-
- assertLayout( path, groupId, artifactId, version, type );
- }
-
- /**
- * Perform a roundtrip through the layout routines to determine success.
- */
- private void assertLayout( String path, String groupId, String artifactId, String version, String type )
- throws LayoutException
- {
- ArchivaArtifact expectedArtifact = createArtifact( groupId, artifactId, version, type );
-
- // --- Artifact Tests.
- // Artifact to Path
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( expectedArtifact ) );
-
- // Path to Artifact.
- ArchivaArtifact testArtifact = layout.toArtifact( path );
- assertArtifact( testArtifact, groupId, artifactId, version, type );
-
- // And back again, using test Artifact from previous step.
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testArtifact ) );
-
- // --- Artifact Reference Tests
-
- // Path to Artifact Reference.
- ArtifactReference testReference = layout.toArtifactReference( path );
- assertArtifactReference( testReference, groupId, artifactId, version, type );
-
- // And back again, using test Reference from previous step.
- assertEquals( "Artifact <" + expectedArtifact + "> to path:", path, layout.toPath( testReference ) );
- }
-
- protected ArchivaArtifact createArtifact( String groupId, String artifactId, String version, String type )
- {
- ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, null, type );
- assertNotNull( artifact );
- artifact.getModel().setRepositoryId( repository.getId() );
- return artifact;
- }
-
- protected void assertArtifact( ArchivaArtifact actualArtifact, String groupId, String artifactId, String version,
- String type )
- {
- String expectedId = groupId + ":" + artifactId + ":" + version + ":" + type;
-
- assertNotNull( expectedId + " - Should not be null.", actualArtifact );
-
- assertEquals( expectedId + " - Group ID", groupId, actualArtifact.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualArtifact.getArtifactId() );
- assertEquals( expectedId + " - Version ID", version, actualArtifact.getVersion() );
- assertEquals( expectedId + " - Type", type, actualArtifact.getType() );
- }
-
- protected void assertArtifactReference( ArtifactReference actualReference, String groupId, String artifactId,
- String version, String type )
- {
- String expectedId = "ArtifactReference - " + groupId + ":" + artifactId + ":" + version + ":" + type;
-
- assertNotNull( expectedId + " - Should not be null.", actualReference );
-
- assertEquals( expectedId + " - Group ID", groupId, actualReference.getGroupId() );
- assertEquals( expectedId + " - Artifact ID", artifactId, actualReference.getArtifactId() );
- assertEquals( expectedId + " - Version ID", version, actualReference.getVersion() );
- assertEquals( expectedId + " - Type", type, actualReference.getType() );
- }
-
- protected void assertBadPath( String path, String reason )
- {
- try
- {
- layout.toArtifact( path );
- fail( "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" );
- }
- catch ( LayoutException e )
- {
- /* expected path */
- }
- }
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- layout = (BidirectionalRepositoryLayout) lookup( BidirectionalRepositoryLayout.class.getName(), "legacy" );
- }
-
-}