fixed errors reported by Checkstyle

git-svn-id: https://svn.apache.org/repos/asf/maven/maven-3/trunk@813604 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Herve Boutemy 2009-09-10 21:49:53 +00:00
parent 4e37cb1a45
commit 388fcd100e
22 changed files with 1141 additions and 847 deletions

View File

@ -78,14 +78,14 @@ public class DefaultArtifact
private List<ArtifactVersion> availableVersions;
private Map<Object,ArtifactMetadata> metadataMap;
private boolean optional;
public DefaultArtifact( String groupId, String artifactId, String version, String scope, String type, String classifier, ArtifactHandler artifactHandler )
{
this( groupId, artifactId, VersionRange.createFromVersion( version ), scope, type, classifier, artifactHandler, false );
}
public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type, String classifier, ArtifactHandler artifactHandler )
{
this( groupId, artifactId, versionRange, scope, type, classifier, artifactHandler, false );
@ -263,7 +263,8 @@ public void addMetadata( ArtifactMetadata metadata )
public Collection<ArtifactMetadata> getMetadataList()
{
if (metadataMap == null) {
if ( metadataMap == null )
{
return Collections.emptyList();
}
@ -385,7 +386,7 @@ public void setBaseVersion( String baseVersion )
protected void setBaseVersionInternal( String baseVersion )
{
Matcher m = VERSION_FILE_PATTERN.matcher( baseVersion );
if ( m.matches() )
{
this.baseVersion = m.group( 1 ) + "-" + SNAPSHOT_VERSION;
@ -528,7 +529,8 @@ public void setArtifactId( String artifactId )
public boolean isSnapshot()
{
return getBaseVersion() != null && (getBaseVersion().endsWith(SNAPSHOT_VERSION) || getBaseVersion().equals(LATEST_VERSION));
return getBaseVersion() != null
&& ( getBaseVersion().endsWith( SNAPSHOT_VERSION ) || getBaseVersion().equals( LATEST_VERSION ) );
}
public void setResolved( boolean resolved )

View File

@ -82,16 +82,18 @@ public void setEnabled( boolean enabled )
public void setUpdatePolicy( String updatePolicy )
{
if(updatePolicy != null) {
this.updatePolicy = updatePolicy;
if ( updatePolicy != null )
{
this.updatePolicy = updatePolicy;
}
}
public void setChecksumPolicy( String checksumPolicy )
{
if(checksumPolicy != null) {
this.checksumPolicy = checksumPolicy;
}
if ( checksumPolicy != null )
{
this.checksumPolicy = checksumPolicy;
}
}
public boolean isEnabled()
@ -135,7 +137,7 @@ else if ( UPDATE_POLICY_DAILY.equals( updatePolicy ) )
else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
{
String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
int minutes = Integer.valueOf(s);
int minutes = Integer.valueOf( s );
Calendar cal = Calendar.getInstance();
cal.add( Calendar.MINUTE, -minutes );
if ( cal.getTime().after( lastModified ) )

View File

@ -86,15 +86,15 @@ public void updateScopeCurrentPom( Artifact artifact,
String ignoredScope )
{
logger.debug(
indent + artifact + " (not setting artifactScope to: " + ignoredScope + "; local artifactScope " + artifact.getScope() +
" wins)" );
indent + artifact + " (not setting artifactScope to: " + ignoredScope + "; local artifactScope " + artifact.getScope()
+ " wins)" );
// TODO: better way than static? this might hide messages in a reactor
if ( !ignoredArtifacts.contains( artifact ) )
{
logger.warn( "\n\tArtifact " + artifact + " retains local artifactScope '" + artifact.getScope() +
"' overriding broader artifactScope '" + ignoredScope + "'\n" +
"\tgiven by a dependency. If this is not intended, modify or remove the local artifactScope.\n" );
logger.warn( "\n\tArtifact " + artifact + " retains local artifactScope '" + artifact.getScope()
+ "' overriding broader artifactScope '" + ignoredScope + "'\n"
+ "\tgiven by a dependency. If this is not intended, modify or remove the local artifactScope.\n" );
ignoredArtifacts.add( artifact );
}
}
@ -107,16 +107,16 @@ public void updateScope( Artifact artifact,
public void selectVersionFromRange( Artifact artifact )
{
logger.debug( indent + artifact + " (setting version to: " + artifact.getVersion() + " from range: " +
artifact.getVersionRange() + ")" );
logger.debug( indent + artifact + " (setting version to: " + artifact.getVersion() + " from range: "
+ artifact.getVersionRange() + ")" );
}
public void restrictRange( Artifact artifact,
Artifact replacement,
VersionRange newRange )
{
logger.debug( indent + artifact + " (range restricted from: " + artifact.getVersionRange() + " and: " +
replacement.getVersionRange() + " to: " + newRange + " )" );
logger.debug( indent + artifact + " (range restricted from: " + artifact.getVersionRange() + " and: "
+ replacement.getVersionRange() + " to: " + newRange + " )" );
}
/**

View File

@ -90,13 +90,13 @@ private static String constructMessage( List<Artifact> artifacts )
int counter = 0;
for (Artifact artifact : artifacts) {
String message = (++counter) + ") " + artifact.getId();
for ( Artifact artifact : artifacts )
{
String message = ( ++counter ) + ") " + artifact.getId();
buffer.append(constructMissingArtifactMessage(message, " ", artifact.getGroupId(), artifact
.getArtifactId(), artifact.getVersion(), artifact.getType(), artifact.getClassifier(),
artifact.getDownloadUrl(), artifact
.getDependencyTrail()));
buffer.append( constructMissingArtifactMessage( message, " ", artifact.getGroupId(),
artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), artifact.getClassifier(),
artifact.getDownloadUrl(), artifact.getDependencyTrail() ) );
}
buffer.append( "----------\n" );

View File

@ -279,8 +279,8 @@ public VersionRange restrict( VersionRange restriction )
version = recommendedVersion;
found = true;
}
else if ( version == null && restriction.getRecommendedVersion() != null &&
r.containsVersion( restriction.getRecommendedVersion() ) )
else if ( version == null && restriction.getRecommendedVersion() != null
&& r.containsVersion( restriction.getRecommendedVersion() ) )
{
// use this if we can, but prefer the original if possible
version = restriction.getRecommendedVersion();
@ -320,11 +320,11 @@ private List<Restriction> intersection( List<Restriction> r1, List<Restriction>
boolean done = false;
while ( !done )
{
if ( res1.getLowerBound() == null || res2.getUpperBound() == null ||
res1.getLowerBound().compareTo( res2.getUpperBound() ) <= 0 )
if ( res1.getLowerBound() == null || res2.getUpperBound() == null
|| res1.getLowerBound().compareTo( res2.getUpperBound() ) <= 0 )
{
if ( res1.getUpperBound() == null || res2.getLowerBound() == null ||
res1.getUpperBound().compareTo( res2.getLowerBound() ) >= 0 )
if ( res1.getUpperBound() == null || res2.getLowerBound() == null
|| res1.getUpperBound().compareTo( res2.getLowerBound() ) >= 0 )
{
ArtifactVersion lower;
ArtifactVersion upper;
@ -525,10 +525,13 @@ public ArtifactVersion matchVersion( List<ArtifactVersion> versions )
// TODO: could be more efficient by sorting the list and then moving along the restrictions in order?
ArtifactVersion matched = null;
for (ArtifactVersion version : versions) {
if (containsVersion(version)) {
for ( ArtifactVersion version : versions )
{
if ( containsVersion( version ) )
{
// valid - check if it is greater than the currently matched version
if (matched == null || version.compareTo(matched) > 0) {
if ( matched == null || version.compareTo( matched ) > 0 )
{
matched = version;
}
}
@ -538,8 +541,10 @@ public ArtifactVersion matchVersion( List<ArtifactVersion> versions )
public boolean containsVersion( ArtifactVersion version )
{
for (Restriction restriction : restrictions) {
if (restriction.containsVersion(version)) {
for ( Restriction restriction : restrictions )
{
if ( restriction.containsVersion( version ) )
{
return true;
}
}
@ -553,21 +558,22 @@ public boolean hasRestrictions()
public boolean equals( Object obj )
{
if (this == obj){
if ( this == obj )
{
return true;
}
if (!(obj instanceof VersionRange ))
if ( !( obj instanceof VersionRange ) )
{
return false;
}
VersionRange other = (VersionRange) obj;
boolean equals =
recommendedVersion == other.recommendedVersion ||
( ( recommendedVersion != null ) && recommendedVersion.equals( other.recommendedVersion ) );
recommendedVersion == other.recommendedVersion
|| ( ( recommendedVersion != null ) && recommendedVersion.equals( other.recommendedVersion ) );
equals &=
restrictions == other.restrictions ||
( ( restrictions != null ) && restrictions.equals( other.restrictions ) );
restrictions == other.restrictions
|| ( ( restrictions != null ) && restrictions.equals( other.restrictions ) );
return equals;
}

View File

@ -28,7 +28,6 @@
import org.apache.maven.profiles.activation.ProfileActivationException;
import org.codehaus.plexus.MutablePlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.logging.Logger;
@ -44,7 +43,7 @@
public class DefaultProfileManager
implements ProfileManager
{
@Requirement
private Logger logger;
@ -67,7 +66,7 @@ public class DefaultProfileManager
*/
public DefaultProfileManager( PlexusContainer container )
{
this( container, null);
this( container, null );
}
/**
@ -89,7 +88,8 @@ public DefaultProfileManager( PlexusContainer container, Properties props )
this.requestProperties = props;
}
public Properties getRequestProperties() {
public Properties getRequestProperties()
{
return requestProperties;
}
@ -108,8 +108,8 @@ public void addProfile( Profile profile )
Profile existing = (Profile) profilesById.get( profileId );
if ( existing != null )
{
logger.warn( "Overriding profile: \'" + profileId + "\' (source: " + existing.getSource() +
") with new instance from source: " + profile.getSource() );
logger.warn( "Overriding profile: \'" + profileId + "\' (source: " + existing.getSource()
+ ") with new instance from source: " + profile.getSource() );
}
profilesById.put( profile.getId(), profile );

View File

@ -97,8 +97,8 @@ public static void mergePluginLists( PluginContainer childContainer, PluginConta
// 1. we're not processing the plugins in an inheritance-based merge
// 2. the parent's <inherited/> flag is not set
// 3. the parent's <inherited/> flag is set to true
if ( !handleAsInheritance || ( parentInherited == null ) ||
Boolean.valueOf( parentInherited ).booleanValue() )
if ( !handleAsInheritance || ( parentInherited == null )
|| Boolean.valueOf( parentInherited ).booleanValue() )
{
Plugin childPlugin = (Plugin) childPlugins.get( parentPlugin.getKey() );

View File

@ -155,8 +155,8 @@ private void assembleScmInheritance( Model child, Model parent, String childPath
appendPath( parentScm.getConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
if ( StringUtils.isEmpty( childScm.getDeveloperConnection() ) &&
!StringUtils.isEmpty( parentScm.getDeveloperConnection() ) )
if ( StringUtils.isEmpty( childScm.getDeveloperConnection() )
&& !StringUtils.isEmpty( parentScm.getDeveloperConnection() ) )
{
childScm
.setDeveloperConnection( appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(),
@ -388,8 +388,8 @@ private static void mergeReportPluginLists( Reporting child, Reporting parent, b
String parentInherited = parentPlugin.getInherited();
if ( !handleAsInheritance || ( parentInherited == null ) ||
Boolean.valueOf( parentInherited ).booleanValue() )
if ( !handleAsInheritance || ( parentInherited == null )
|| Boolean.valueOf( parentInherited ).booleanValue() )
{
ReportPlugin assembledPlugin = parentPlugin;
@ -545,9 +545,8 @@ private void assembleDependencyInheritance( Model child, Model parent )
if ( deps != null )
{
for ( Iterator<Dependency> it = deps.iterator(); it.hasNext(); )
for ( Dependency dependency : deps )
{
Dependency dependency = it.next();
depsMap.put( dependency.getManagementKey(), dependency );
}
}
@ -556,9 +555,8 @@ private void assembleDependencyInheritance( Model child, Model parent )
if ( deps != null )
{
for ( Iterator<Dependency> it = deps.iterator(); it.hasNext(); )
for ( Dependency dependency : deps )
{
Dependency dependency = it.next();
depsMap.put( dependency.getManagementKey(), dependency );
}
}
@ -753,9 +751,8 @@ else if ( token.equals( ".." ) )
private static void mergeExtensionLists( Build childBuild, Build parentBuild )
{
for ( Iterator i = parentBuild.getExtensions().iterator(); i.hasNext(); )
for ( Extension e : parentBuild.getExtensions() )
{
Extension e = (Extension) i.next();
if ( !childBuild.getExtensions().contains( e ) )
{
childBuild.addExtension( e );

View File

@ -73,7 +73,7 @@ public boolean isUpdateRequired( Artifact artifact, ArtifactRepository repositor
// we can safely assume that we're calculating based on the snapshot policy here if we've made it past the
// release-artifact short circuit above.
ArtifactRepositoryPolicy policy = repository.getSnapshots();
return isUpdateRequired( artifact, repository, policy );
}
@ -194,8 +194,8 @@ private void writeLastUpdated( File touchfile, String key )
{
if ( !touchfile.getParentFile().exists() && !touchfile.getParentFile().mkdirs() )
{
getLogger().debug( "Failed to create directory: " + touchfile.getParent() +
" for tracking artifact metadata resolution." );
getLogger().debug( "Failed to create directory: " + touchfile.getParent()
+ " for tracking artifact metadata resolution." );
return;
}
@ -237,8 +237,8 @@ private void writeLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Failed to record lastUpdated information for resolution.\nFile: " +
touchfile.toString() + "; key: " + key, e );
getLogger().debug( "Failed to record lastUpdated information for resolution.\nFile: "
+ touchfile.toString() + "; key: " + key, e );
}
finally
{
@ -250,8 +250,8 @@ private void writeLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Error releasing exclusive lock for resolution tracking file: " +
touchfile, e );
getLogger().debug( "Error releasing exclusive lock for resolution tracking file: "
+ touchfile, e );
}
}
@ -263,8 +263,8 @@ private void writeLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Error closing FileChannel for resolution tracking file: " +
touchfile, e );
getLogger().debug( "Error closing FileChannel for resolution tracking file: "
+ touchfile, e );
}
}
}
@ -314,8 +314,8 @@ public Date readLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Failed to read lastUpdated information.\nFile: " +
touchfile.toString() + "; key: " + key, e );
getLogger().debug( "Failed to read lastUpdated information.\nFile: "
+ touchfile.toString() + "; key: " + key, e );
}
finally
{
@ -327,8 +327,8 @@ public Date readLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Error releasing shared lock for resolution tracking file: " +
touchfile, e );
getLogger().debug( "Error releasing shared lock for resolution tracking file: "
+ touchfile, e );
}
}
@ -340,8 +340,8 @@ public Date readLastUpdated( File touchfile, String key )
}
catch ( IOException e )
{
getLogger().debug( "Error closing FileChannel for resolution tracking file: " +
touchfile, e );
getLogger().debug( "Error closing FileChannel for resolution tracking file: "
+ touchfile, e );
}
}
}

View File

@ -25,17 +25,18 @@
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
public interface UpdateCheckManager {
public interface UpdateCheckManager
{
String ROLE = UpdateCheckManager.class.getName();
String ROLE = UpdateCheckManager.class.getName();
boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository );
boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository );
void touch( Artifact artifact, ArtifactRepository repository );
void touch( Artifact artifact, ArtifactRepository repository );
boolean isUpdateRequired( RepositoryMetadata metadata, ArtifactRepository repository, File file );
void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file );
void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file );
boolean isPomUpdateRequired( Artifact artifact, ArtifactRepository repository );

View File

@ -55,7 +55,8 @@ public void transformForResolve( Artifact artifact,
ArtifactRepository localRepository )
throws ArtifactResolutionException, ArtifactNotFoundException
{
for (ArtifactTransformation transform : artifactTransformations) {
for ( ArtifactTransformation transform : artifactTransformations )
{
transform.transformForResolve( artifact, remoteRepositories, localRepository );
}
}
@ -64,7 +65,8 @@ public void transformForInstall( Artifact artifact,
ArtifactRepository localRepository )
throws ArtifactInstallationException
{
for (ArtifactTransformation transform : artifactTransformations) {
for ( ArtifactTransformation transform : artifactTransformations )
{
transform.transformForInstall( artifact, localRepository );
}
}
@ -74,7 +76,8 @@ public void transformForDeployment( Artifact artifact,
ArtifactRepository localRepository )
throws ArtifactDeploymentException
{
for (ArtifactTransformation transform : artifactTransformations) {
for ( ArtifactTransformation transform : artifactTransformations )
{
transform.transformForDeployment( artifact, remoteRepository, localRepository );
}
}

View File

@ -46,7 +46,7 @@
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id$
*/
@Component(role=ArtifactTransformation.class, hint="snapshot")
@Component(role=ArtifactTransformation.class, hint="snapshot")
public class SnapshotTransformation
extends AbstractVersionTransformation
{
@ -105,7 +105,7 @@ public void transformForDeployment( Artifact artifact,
if ( artifact.isSnapshot() )
{
Snapshot snapshot = new Snapshot();
snapshot.setTimestamp( getDeploymentTimestamp() );
// we update the build number anyway so that it doesn't get lost. It requires the timestamp to take effect
@ -117,8 +117,8 @@ public void transformForDeployment( Artifact artifact,
}
catch ( RepositoryMetadataResolutionException e )
{
throw new ArtifactDeploymentException( "Error retrieving previous build number for artifact '" +
artifact.getDependencyConflictId() + "': " + e.getMessage(), e );
throw new ArtifactDeploymentException( "Error retrieving previous build number for artifact '"
+ artifact.getDependencyConflictId() + "': " + e.getMessage(), e );
}
RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );

View File

@ -1,5 +1,24 @@
package org.apache.maven.repository.metadata;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@ -8,7 +27,7 @@
/**
* classpath container that is aware of the classpath scope
*
*
* @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
*
*/
@ -16,97 +35,111 @@ public class ClasspathContainer
implements Iterable<ArtifactMetadata>
{
private List<ArtifactMetadata> classpath;
private ArtifactScopeEnum scope;
//-------------------------------------------------------------------------------------------
public ClasspathContainer(ArtifactScopeEnum scope)
{
this.scope = ArtifactScopeEnum.checkScope(scope);
}
//-------------------------------------------------------------------------------------------
public ClasspathContainer(
List<ArtifactMetadata> classpath
, ArtifactScopeEnum scope
)
{
this(scope);
this.classpath = classpath;
}
//-------------------------------------------------------------------------------------------
public Iterator<ArtifactMetadata> iterator()
{
return classpath == null ? null : classpath.iterator() ;
}
//-------------------------------------------------------------------------------------------
public ClasspathContainer add( ArtifactMetadata md )
{
if( classpath == null )
classpath = new ArrayList<ArtifactMetadata>(16);
classpath.add(md);
return this;
}
//-------------------------------------------------------------------------------------------
public List<ArtifactMetadata> getClasspath()
{
return classpath;
}
//-------------------------------------------------------------------------------------------
public MetadataTreeNode getClasspathAsTree()
throws MetadataResolutionException
{
if( classpath == null || classpath.size() < 1 )
return null;
MetadataTreeNode tree = null;
MetadataTreeNode parent = null;
MetadataTreeNode node = null;
for( ArtifactMetadata md : classpath ) {
node = new MetadataTreeNode( md, parent, md.isResolved(), md.getArtifactScope() );
if( tree == null ) {
tree = node;
}
if( parent != null ) {
parent.setNChildren(1);
parent.addChild(0, node);
}
parent = node;
}
return tree;
}
private ArtifactScopeEnum scope;
public void setClasspath(List<ArtifactMetadata> classpath)
{
this.classpath = classpath;
}
// -------------------------------------------------------------------------------------------
public ClasspathContainer( ArtifactScopeEnum scope )
{
this.scope = ArtifactScopeEnum.checkScope( scope );
}
public ArtifactScopeEnum getScope()
{
return scope;
}
// -------------------------------------------------------------------------------------------
public ClasspathContainer( List<ArtifactMetadata> classpath, ArtifactScopeEnum scope )
{
this( scope );
this.classpath = classpath;
}
public void setScope(ArtifactScopeEnum scope)
{
this.scope = scope;
}
//-------------------------------------------------------------------------------------------
@Override
public String toString()
{
StringBuilder sb = new StringBuilder(256);
sb.append("[scope="+scope.getScope() );
if(classpath != null)
for( ArtifactMetadata md : classpath ) {
sb.append(": "+md.toString()+'{'+md.getArtifactUri()+'}');
}
sb.append(']');
return sb.toString();
}
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
// -------------------------------------------------------------------------------------------
public Iterator<ArtifactMetadata> iterator()
{
return classpath == null ? null : classpath.iterator();
}
// -------------------------------------------------------------------------------------------
public ClasspathContainer add( ArtifactMetadata md )
{
if ( classpath == null )
{
classpath = new ArrayList<ArtifactMetadata>( 16 );
}
classpath.add( md );
return this;
}
// -------------------------------------------------------------------------------------------
public List<ArtifactMetadata> getClasspath()
{
return classpath;
}
// -------------------------------------------------------------------------------------------
public MetadataTreeNode getClasspathAsTree()
throws MetadataResolutionException
{
if ( classpath == null || classpath.size() < 1 )
{
return null;
}
MetadataTreeNode tree = null;
MetadataTreeNode parent = null;
MetadataTreeNode node = null;
for ( ArtifactMetadata md : classpath )
{
node = new MetadataTreeNode( md, parent, md.isResolved(), md.getArtifactScope() );
if ( tree == null )
{
tree = node;
}
if ( parent != null )
{
parent.setNChildren( 1 );
parent.addChild( 0, node );
}
parent = node;
}
return tree;
}
public void setClasspath( List<ArtifactMetadata> classpath )
{
this.classpath = classpath;
}
public ArtifactScopeEnum getScope()
{
return scope;
}
public void setScope( ArtifactScopeEnum scope )
{
this.scope = scope;
}
// -------------------------------------------------------------------------------------------
@Override
public String toString()
{
StringBuilder sb = new StringBuilder( 256 );
sb.append( "[scope=" + scope.getScope() );
if ( classpath != null )
{
for ( ArtifactMetadata md : classpath )
{
sb.append( ": " + md.toString() + '{' + md.getArtifactUri() + '}' );
}
}
sb.append( ']' );
return sb.toString();
}
// -------------------------------------------------------------------------------------------
// -------------------------------------------------------------------------------------------
}

View File

@ -1,5 +1,24 @@
package org.apache.maven.repository.metadata;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@ -11,7 +30,7 @@
/**
* default implementation of the metadata classpath transformer
*
*
* @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
*
*/
@ -23,44 +42,47 @@ public class DefaultClasspathTransformation
GraphConflictResolver conflictResolver;
//----------------------------------------------------------------------------------------------------
public ClasspathContainer transform(
MetadataGraph dirtyGraph
, ArtifactScopeEnum scope
, boolean resolve
)
throws MetadataGraphTransformationException
{
try {
if( dirtyGraph == null
|| dirtyGraph.isEmpty()
)
return null;
public ClasspathContainer transform( MetadataGraph dirtyGraph, ArtifactScopeEnum scope, boolean resolve )
throws MetadataGraphTransformationException
{
try
{
if ( dirtyGraph == null || dirtyGraph.isEmpty() )
{
return null;
}
MetadataGraph cleanGraph = conflictResolver.resolveConflicts( dirtyGraph, scope );
MetadataGraph cleanGraph = conflictResolver.resolveConflicts( dirtyGraph, scope );
if ( cleanGraph == null || cleanGraph.isEmpty() )
{
return null;
}
ClasspathContainer cpc = new ClasspathContainer( scope );
if ( cleanGraph.isEmptyEdges() )
{
// single entry in the classpath, populated from itself
ArtifactMetadata amd = cleanGraph.getEntry().getMd();
cpc.add( amd );
}
else
{
ClasspathGraphVisitor v = new ClasspathGraphVisitor( cleanGraph, cpc );
MetadataGraphVertex entry = cleanGraph.getEntry();
ArtifactMetadata md = entry.getMd();
// entry point
v.visit( entry ); // , md.getVersion(), md.getArtifactUri() );
}
return cpc;
}
catch ( GraphConflictResolutionException e )
{
throw new MetadataGraphTransformationException( e );
}
}
if( cleanGraph == null
|| cleanGraph.isEmpty()
)
return null;
ClasspathContainer cpc = new ClasspathContainer( scope );
if( cleanGraph.isEmptyEdges() ) {
// single entry in the classpath, populated from itself
ArtifactMetadata amd = cleanGraph.getEntry().getMd();
cpc.add( amd );
} else {
ClasspathGraphVisitor v = new ClasspathGraphVisitor( cleanGraph, cpc );
MetadataGraphVertex entry = cleanGraph.getEntry();
ArtifactMetadata md = entry.getMd();
// entry point
v.visit( entry ); //, md.getVersion(), md.getArtifactUri() );
}
return cpc;
} catch (GraphConflictResolutionException e) {
throw new MetadataGraphTransformationException(e);
}
}
//===================================================================================================
/**
* Helper class to traverse graph. Required to make the containing method thread-safe
@ -68,82 +90,91 @@ public ClasspathContainer transform(
*/
private class ClasspathGraphVisitor
{
MetadataGraph graph;
ClasspathContainer cpc;
List<MetadataGraphVertex> visited;
//-----------------------------------------------------------------------
protected ClasspathGraphVisitor( MetadataGraph cleanGraph, ClasspathContainer cpc )
{
this.cpc = cpc;
this.graph = cleanGraph;
MetadataGraph graph;
visited = new ArrayList<MetadataGraphVertex>( cleanGraph.getVertices().size() );
}
//-----------------------------------------------------------------------
protected void visit( MetadataGraphVertex node ) //, String version, String artifactUri )
{
ArtifactMetadata md = node.getMd();
if( visited.contains(node) )
return;
ClasspathContainer cpc;
cpc.add( md );
List<MetadataGraphVertex> visited;
// -----------------------------------------------------------------------
protected ClasspathGraphVisitor( MetadataGraph cleanGraph, ClasspathContainer cpc )
{
this.cpc = cpc;
this.graph = cleanGraph;
visited = new ArrayList<MetadataGraphVertex>( cleanGraph.getVertices().size() );
}
// -----------------------------------------------------------------------
protected void visit( MetadataGraphVertex node ) // , String version, String artifactUri )
{
ArtifactMetadata md = node.getMd();
if ( visited.contains( node ) )
{
return;
}
cpc.add( md );
//
// TreeSet<MetadataGraphEdge> deps = new TreeSet<MetadataGraphEdge>(
// new Comparator<MetadataGraphEdge>()
// {
// public int compare( MetadataGraphEdge e1
// , MetadataGraphEdge e2
// )
// {
// if( e1.getDepth() == e2.getDepth() )
// {
// if( e2.getPomOrder() == e1.getPomOrder() )
// return e1.getTarget().toString().compareTo(e2.getTarget().toString() );
// TreeSet<MetadataGraphEdge> deps = new TreeSet<MetadataGraphEdge>(
// new Comparator<MetadataGraphEdge>()
// {
// public int compare( MetadataGraphEdge e1
// , MetadataGraphEdge e2
// )
// {
// if( e1.getDepth() == e2.getDepth() )
// {
// if( e2.getPomOrder() == e1.getPomOrder() )
// return e1.getTarget().toString().compareTo(e2.getTarget().toString() );
//
// return e2.getPomOrder() - e1.getPomOrder();
// }
// return e2.getPomOrder() - e1.getPomOrder();
// }
//
// return e2.getDepth() - e1.getDepth();
// }
// }
// );
// return e2.getDepth() - e1.getDepth();
// }
// }
// );
List<MetadataGraphEdge> exits = graph.getExcidentEdges(node);
if( exits != null && exits.size() > 0)
{
MetadataGraphEdge[] sortedExits = exits.toArray( new MetadataGraphEdge[exits.size()] );
Arrays.sort( sortedExits
,
new Comparator<MetadataGraphEdge>()
{
public int compare( MetadataGraphEdge e1
, MetadataGraphEdge e2
)
{
if( e1.getDepth() == e2.getDepth() )
{
if( e2.getPomOrder() == e1.getPomOrder() )
return e1.getTarget().toString().compareTo(e2.getTarget().toString() );
return e2.getPomOrder() - e1.getPomOrder();
}
List<MetadataGraphEdge> exits = graph.getExcidentEdges(node);
return e2.getDepth() - e1.getDepth();
}
}
);
for( MetadataGraphEdge e : sortedExits ) {
MetadataGraphVertex targetNode = e.getTarget();
targetNode.getMd().setArtifactScope( e.getScope() );
targetNode.getMd().setWhy( e.getSource().getMd().toString() );
visit( targetNode );
}
}
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
if ( exits != null && exits.size() > 0 )
{
MetadataGraphEdge[] sortedExits = exits.toArray( new MetadataGraphEdge[exits.size()] );
Arrays.sort( sortedExits
,
new Comparator<MetadataGraphEdge>()
{
public int compare( MetadataGraphEdge e1
, MetadataGraphEdge e2
)
{
if ( e1.getDepth() == e2.getDepth() )
{
if ( e2.getPomOrder() == e1.getPomOrder() )
{
return e1.getTarget().toString().compareTo( e2.getTarget().toString() );
}
return e2.getPomOrder() - e1.getPomOrder();
}
return e2.getDepth() - e1.getDepth();
}
}
);
for ( MetadataGraphEdge e : sortedExits )
{
MetadataGraphVertex targetNode = e.getTarget();
targetNode.getMd().setArtifactScope( e.getScope() );
targetNode.getMd().setWhy( e.getSource().getMd().toString() );
visit( targetNode );
}
}
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
}
//----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------

View File

@ -1,5 +1,24 @@
package org.apache.maven.repository.metadata;
/*
* 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.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.codehaus.plexus.component.annotations.Component;
@ -7,44 +26,49 @@
/**
* @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
*
*
* @version $Id$
*/
@Component(role=GraphConflictResolutionPolicy.class)
@Component(role=GraphConflictResolutionPolicy.class)
public class DefaultGraphConflictResolutionPolicy
implements GraphConflictResolutionPolicy
{
{
/**
* artifact, closer to the entry point, is selected
*/
@Configuration(name="closer-first", value="true")
@Configuration(name="closer-first", value="true")
private boolean closerFirst = true;
/**
* newer artifact is selected
*/
@Configuration(name="newer-first", value="true")
@Configuration(name="newer-first", value="true")
private boolean newerFirst = true;
public MetadataGraphEdge apply(MetadataGraphEdge e1, MetadataGraphEdge e2)
{
int depth1 = e1.getDepth();
int depth2 = e2.getDepth();
if( depth1 == depth2 ) {
ArtifactVersion v1 = new DefaultArtifactVersion( e1.getVersion() );
ArtifactVersion v2 = new DefaultArtifactVersion( e2.getVersion() );
if( newerFirst )
return v1.compareTo(v2) > 0 ? e1 : e2;
public MetadataGraphEdge apply( MetadataGraphEdge e1, MetadataGraphEdge e2 )
{
int depth1 = e1.getDepth();
int depth2 = e2.getDepth();
return v1.compareTo(v2) > 0 ? e2 : e1;
}
if( closerFirst )
return depth1 < depth2 ? e1 : e2;
if ( depth1 == depth2 )
{
ArtifactVersion v1 = new DefaultArtifactVersion( e1.getVersion() );
ArtifactVersion v2 = new DefaultArtifactVersion( e2.getVersion() );
return depth1 < depth2 ? e2 : e1;
}
if ( newerFirst )
{
return v1.compareTo( v2 ) > 0 ? e1 : e2;
}
return v1.compareTo( v2 ) > 0 ? e2 : e1;
}
if ( closerFirst )
{
return depth1 < depth2 ? e1 : e2;
}
return depth1 < depth2 ? e2 : e1;
}
}

View File

@ -1,5 +1,24 @@
package org.apache.maven.repository.metadata;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -10,35 +29,35 @@
/**
* maven dependency metadata graph
*
*
* @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
*
*/
public class MetadataGraph
{
public static int DEFAULT_VERTICES = 32;
public static int DEFAULT_EDGES = 64;
// flags to indicate the granularity of vertices
private boolean versionedVertices = false;
private boolean scopedVertices = false;
/**
* the entry point we started building the graph from
*/
MetadataGraphVertex entry;
// graph vertices
TreeSet< MetadataGraphVertex > vertices;
public static final int DEFAULT_VERTICES = 32;
public static final int DEFAULT_EDGES = 64;
/**
// flags to indicate the granularity of vertices
private boolean versionedVertices = false;
private boolean scopedVertices = false;
/**
* the entry point we started building the graph from
*/
MetadataGraphVertex entry;
// graph vertices
TreeSet<MetadataGraphVertex> vertices;
/**
* incident and excident edges per node
*/
Map<MetadataGraphVertex, List<MetadataGraphEdge>> incidentEdges;
Map<MetadataGraphVertex, List<MetadataGraphEdge>> excidentEdges;
/**
* null in dirty graph, actual
* null in dirty graph, actual
* scope for conflict-resolved graph
*/
ArtifactScopeEnum scope;
@ -49,11 +68,11 @@ public class MetadataGraph
*/
public MetadataGraph( int nVertices )
{
init( nVertices, 2*nVertices );
init( nVertices, 2 * nVertices );
}
public MetadataGraph( int nVertices, int nEdges )
{
init( nVertices, nEdges );
init( nVertices, nEdges );
}
//------------------------------------------------------------------------
/**
@ -62,14 +81,14 @@ public MetadataGraph( int nVertices, int nEdges )
public MetadataGraph( MetadataGraphVertex entry )
throws MetadataResolutionException
{
checkVertex(entry);
checkVertices(1);
checkVertex( entry );
checkVertices( 1 );
entry.setCompareVersion( versionedVertices );
entry.setCompareScope( scopedVertices );
entry.setCompareVersion( versionedVertices );
entry.setCompareScope( scopedVertices );
vertices.add( entry );
this.entry = entry;
vertices.add( entry );
this.entry = entry;
}
//------------------------------------------------------------------------
/**
@ -78,16 +97,16 @@ public MetadataGraph( MetadataGraphVertex entry )
public MetadataGraph( MetadataTreeNode tree )
throws MetadataResolutionException
{
this( tree, false, false );
this( tree, false, false );
}
//------------------------------------------------------------------------
/**
* construct graph from a "dirty" tree
*
*
* @param tree "dirty" tree root
* @param versionedVertices true if graph nodes should be versioned (different versions -> different nodes)
* @param scopedVertices true if graph nodes should be versioned and scoped (different versions and/or scopes -> different nodes)
*
*
*/
public MetadataGraph( MetadataTreeNode tree, boolean versionedVertices, boolean scopedVertices )
throws MetadataResolutionException
@ -97,12 +116,12 @@ public MetadataGraph( MetadataTreeNode tree, boolean versionedVertices, boolean
throw new MetadataResolutionException( "tree is null" );
}
setVersionedVertices(versionedVertices);
setScopedVertices(scopedVertices);
setVersionedVertices( versionedVertices );
setScopedVertices( scopedVertices );
this.versionedVertices = scopedVertices || versionedVertices;
this.scopedVertices = scopedVertices;
int count = countNodes( tree );
init( count, count + ( count / 2 ) );
@ -114,7 +133,7 @@ private void processTreeNodes( MetadataGraphVertex parentVertex
, MetadataTreeNode node
, int depth
, int pomOrder
)
)
throws MetadataResolutionException
{
if ( node == null )
@ -123,20 +142,20 @@ private void processTreeNodes( MetadataGraphVertex parentVertex
}
MetadataGraphVertex vertex = new MetadataGraphVertex( node.md, versionedVertices, scopedVertices );
if( ! vertices.contains(vertex) )
if ( !vertices.contains( vertex ) )
{
vertices.add(vertex);
vertices.add( vertex );
}
if( parentVertex != null ) // then create the edge
{
if ( parentVertex != null ) // then create the edge
{
ArtifactMetadata md = node.getMd();
MetadataGraphEdge e = new MetadataGraphEdge( md.version, md.resolved, md.artifactScope, md.artifactUri, depth, pomOrder );
addEdge( parentVertex, vertex, e);
addEdge( parentVertex, vertex, e );
}
else
{
entry = vertex;
entry = vertex;
}
MetadataTreeNode[] kids = node.getChildren();
@ -145,49 +164,57 @@ private void processTreeNodes( MetadataGraphVertex parentVertex
return;
}
for( int i = 0; i< kids.length; i++ )
for ( int i = 0; i < kids.length; i++ )
{
MetadataTreeNode n = kids[i];
MetadataTreeNode n = kids[i];
processTreeNodes( vertex, n, depth + 1, i );
}
}
//------------------------------------------------------------------------
public MetadataGraphVertex findVertex( ArtifactMetadata md )
{
if( md == null || vertices == null || vertices.size() < 1 )
return null;
MetadataGraphVertex v = new MetadataGraphVertex(md);
v.setCompareVersion(versionedVertices);
v.setCompareScope(scopedVertices);
if ( md == null || vertices == null || vertices.size() < 1 )
{
return null;
}
for( MetadataGraphVertex gv : vertices )
{
if( gv.equals(v) )
return gv;
}
return null;
MetadataGraphVertex v = new MetadataGraphVertex( md );
v.setCompareVersion( versionedVertices );
v.setCompareScope( scopedVertices );
for ( MetadataGraphVertex gv : vertices )
{
if ( gv.equals( v ) )
{
return gv;
}
}
return null;
}
//------------------------------------------------------------------------
public MetadataGraphVertex addVertex( ArtifactMetadata md )
{
if( md == null )
return null;
checkVertices();
MetadataGraphVertex v = findVertex(md);
if( v != null)
return v;
v = new MetadataGraphVertex(md);
v.setCompareVersion(versionedVertices);
v.setCompareScope(scopedVertices);
if ( md == null )
{
return null;
}
vertices.add( v );
return v;
checkVertices();
MetadataGraphVertex v = findVertex( md );
if ( v != null )
{
return v;
}
v = new MetadataGraphVertex( md );
v.setCompareVersion( versionedVertices );
v.setCompareScope( scopedVertices );
vertices.add( v );
return v;
}
//------------------------------------------------------------------------
/**
@ -195,136 +222,164 @@ public MetadataGraphVertex addVertex( ArtifactMetadata md )
*/
private void init( int nVertices, int nEdges )
{
int nV = nVertices;
if( nVertices < 1 )
nV = 1;
checkVertices(nV);
int nV = nVertices;
if ( nVertices < 1 )
{
nV = 1;
}
int nE = nVertices;
if( nEdges <= nV )
nE = 2*nE;
checkEdges(nE);
checkVertices( nV );
int nE = nVertices;
if ( nEdges <= nV )
{
nE = 2 * nE;
}
checkEdges( nE );
}
private void checkVertices()
{
checkVertices(DEFAULT_VERTICES);
checkVertices( DEFAULT_VERTICES );
}
private void checkVertices( int nVertices )
{
if( vertices == null )
vertices = new TreeSet<MetadataGraphVertex>();
if ( vertices == null )
{
vertices = new TreeSet<MetadataGraphVertex>();
}
}
private void checkEdges()
{
int count = DEFAULT_EDGES;
if( vertices != null )
count = vertices.size() + vertices.size() / 2;
int count = DEFAULT_EDGES;
checkEdges( count );
if ( vertices != null )
{
count = vertices.size() + vertices.size() / 2;
}
checkEdges( count );
}
private void checkEdges( int nEdges )
{
if( incidentEdges == null )
incidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
if( excidentEdges == null )
excidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
if ( incidentEdges == null )
{
incidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
}
if ( excidentEdges == null )
{
excidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
}
}
//------------------------------------------------------------------------
private static void checkVertex( MetadataGraphVertex v )
throws MetadataResolutionException
{
if( v == null )
throw new MetadataResolutionException( "null vertex" );
if( v.getMd() == null )
throw new MetadataResolutionException( "vertex without metadata" );
if ( v == null )
{
throw new MetadataResolutionException( "null vertex" );
}
if ( v.getMd() == null )
{
throw new MetadataResolutionException( "vertex without metadata" );
}
}
//------------------------------------------------------------------------
private static void checkEdge( MetadataGraphEdge e )
throws MetadataResolutionException
{
if( e == null )
throw new MetadataResolutionException( "badly formed edge" );
if ( e == null )
{
throw new MetadataResolutionException( "badly formed edge" );
}
}
//------------------------------------------------------------------------
public List<MetadataGraphEdge> getEdgesBetween(
MetadataGraphVertex vFrom
, MetadataGraphVertex vTo
)
public List<MetadataGraphEdge> getEdgesBetween( MetadataGraphVertex vFrom, MetadataGraphVertex vTo )
{
List<MetadataGraphEdge> edges = getIncidentEdges(vTo);
if( edges == null || edges.isEmpty() )
return null;
List<MetadataGraphEdge> res = new ArrayList<MetadataGraphEdge>( edges.size() );
for( MetadataGraphEdge e : edges )
{
if( e.getSource().equals(vFrom) )
res.add(e);
}
return res;
List<MetadataGraphEdge> edges = getIncidentEdges(vTo);
if ( edges == null || edges.isEmpty() )
{
return null;
}
List<MetadataGraphEdge> res = new ArrayList<MetadataGraphEdge>( edges.size() );
for ( MetadataGraphEdge e : edges )
{
if ( e.getSource().equals( vFrom ) )
{
res.add( e );
}
}
return res;
}
//------------------------------------------------------------------------
public MetadataGraph addEdge( MetadataGraphVertex vFrom
, MetadataGraphVertex vTo
, MetadataGraphEdge e
)
public MetadataGraph addEdge( MetadataGraphVertex vFrom, MetadataGraphVertex vTo, MetadataGraphEdge e )
throws MetadataResolutionException
{
checkVertex(vFrom);
checkVertex(vTo);
checkVertex( vFrom );
checkVertex( vTo );
checkVertices();
checkEdge(e);
checkEdges();
e.setSource(vFrom);
e.setTarget(vTo);
checkVertices();
vFrom.setCompareVersion(versionedVertices);
vFrom.setCompareScope(scopedVertices);
List<MetadataGraphEdge> exList = excidentEdges.get(vFrom);
if( exList == null ) {
exList = new ArrayList<MetadataGraphEdge>();
excidentEdges.put( vFrom, exList );
}
if( !exList.contains(e) )
exList.add(e);
List<MetadataGraphEdge> inList = incidentEdges.get(vTo);
if( inList == null ) {
inList = new ArrayList<MetadataGraphEdge>();
incidentEdges.put( vTo, inList );
}
if( !inList.contains(e) )
inList.add(e);
return this;
checkEdge( e );
checkEdges();
e.setSource( vFrom );
e.setTarget( vTo );
vFrom.setCompareVersion( versionedVertices );
vFrom.setCompareScope( scopedVertices );
List<MetadataGraphEdge> exList = excidentEdges.get( vFrom );
if ( exList == null )
{
exList = new ArrayList<MetadataGraphEdge>();
excidentEdges.put( vFrom, exList );
}
if ( !exList.contains( e ) )
{
exList.add( e );
}
List<MetadataGraphEdge> inList = incidentEdges.get( vTo );
if ( inList == null )
{
inList = new ArrayList<MetadataGraphEdge>();
incidentEdges.put( vTo, inList );
}
if ( !inList.contains( e ) )
{
inList.add( e );
}
return this;
}
//------------------------------------------------------------------------
public MetadataGraph removeVertex( MetadataGraphVertex v )
{
if( vertices!= null && v != null )
vertices.remove(v);
if( incidentEdges!= null )
incidentEdges.remove(v);
if( excidentEdges!= null )
excidentEdges.remove(v);
if ( vertices != null && v != null )
{
vertices.remove( v );
}
if ( incidentEdges != null )
{
incidentEdges.remove( v );
}
if ( excidentEdges != null )
{
excidentEdges.remove( v );
}
return this;
return this;
}
//------------------------------------------------------------------------
private static int countNodes( MetadataTreeNode tree )
@ -363,99 +418,110 @@ public TreeSet<MetadataGraphVertex> getVertices()
{
return vertices;
}
public List<MetadataGraphEdge> getIncidentEdges( MetadataGraphVertex vertex )
{
checkEdges();
return incidentEdges.get(vertex);
}
public List<MetadataGraphEdge> getExcidentEdges( MetadataGraphVertex vertex )
{
checkEdges();
return excidentEdges.get(vertex);
}
public boolean isVersionedVertices()
{
return versionedVertices;
}
public void setVersionedVertices(boolean versionedVertices)
{
this.versionedVertices = versionedVertices;
}
public boolean isScopedVertices()
{
return scopedVertices;
}
public void setScopedVertices(boolean scopedVertices)
{
this.scopedVertices = scopedVertices;
// scoped graph is versioned by definition
if( scopedVertices )
versionedVertices = true;
}
public ArtifactScopeEnum getScope()
{
return scope;
}
public void setScope(ArtifactScopeEnum scope)
{
this.scope = scope;
}
public List<MetadataGraphEdge> getIncidentEdges( MetadataGraphVertex vertex )
{
checkEdges();
return incidentEdges.get( vertex );
}
public List<MetadataGraphEdge> getExcidentEdges( MetadataGraphVertex vertex )
{
checkEdges();
return excidentEdges.get( vertex );
}
public boolean isVersionedVertices()
{
return versionedVertices;
}
public void setVersionedVertices( boolean versionedVertices )
{
this.versionedVertices = versionedVertices;
}
public boolean isScopedVertices()
{
return scopedVertices;
}
public void setScopedVertices( boolean scopedVertices )
{
this.scopedVertices = scopedVertices;
// scoped graph is versioned by definition
if ( scopedVertices )
{
versionedVertices = true;
}
}
public ArtifactScopeEnum getScope()
{
return scope;
}
public void setScope( ArtifactScopeEnum scope )
{
this.scope = scope;
}
// ------------------------------------------------------------------------
public boolean isEmpty()
{
return entry == null || vertices == null || vertices.isEmpty();
}
//------------------------------------------------------------------------
public boolean isEmpty()
{
return
entry == null
|| vertices == null
|| vertices.isEmpty()
;
}
public boolean isEmptyEdges()
{
return isEmpty() || incidentEdges == null || incidentEdges.isEmpty();
}
//------------------------------------------------------------------------
public boolean isEmptyEdges()
{
return
isEmpty()
|| incidentEdges == null
|| incidentEdges.isEmpty()
;
}
//------------------------------------------------------------------------
@Override
public String toString()
{
StringBuilder sb = new StringBuilder(512);
if( isEmpty() )
return "empty";
for( MetadataGraphVertex v : vertices )
{
sb.append("Vertex: "+v.getMd().toString()+ "\n");
List<MetadataGraphEdge> ins = getIncidentEdges(v);
if( ins != null )
for( MetadataGraphEdge e : ins )
{
sb.append(" from : "+e.toString()+"\n");
}
else
sb.append(" no entries\n");
List<MetadataGraphEdge> outs = getExcidentEdges(v);
if( outs != null )
for( MetadataGraphEdge e : outs )
{
sb.append(" to : "+e.toString()+ "\n");
}
else
sb.append(" no exit\n");
sb.append("-------------------------------------------------\n");
}
sb.append("=============================================================\n");
return sb.toString();
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder( 512 );
if ( isEmpty() )
{
return "empty";
}
for ( MetadataGraphVertex v : vertices )
{
sb.append( "Vertex: " + v.getMd().toString() + "\n" );
List<MetadataGraphEdge> ins = getIncidentEdges( v );
if ( ins != null )
{
for ( MetadataGraphEdge e : ins )
{
sb.append( " from : " + e.toString() + "\n" );
}
}
else
{
sb.append( " no entries\n" );
}
List<MetadataGraphEdge> outs = getExcidentEdges( v );
if ( outs != null )
{
for ( MetadataGraphEdge e : outs )
{
sb.append( " to : " + e.toString() + "\n" );
}
}
else
{
sb.append( " no exit\n" );
}
sb.append( "-------------------------------------------------\n" );
}
sb.append( "=============================================================\n" );
return sb.toString();
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------
}

View File

@ -1,10 +1,29 @@
package org.apache.maven.repository.metadata;
/*
* 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.artifact.ArtifactScopeEnum;
/**
* metadata graph vertice - just a wrapper around artifact's metadata
*
*
* @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
*/
public class MetadataGraphVertex
@ -15,16 +34,16 @@ public class MetadataGraphVertex
// indications to use these in comparrison
private boolean compareVersion = false;
private boolean compareScope = false;
public MetadataGraphVertex( ArtifactMetadata md )
public MetadataGraphVertex( ArtifactMetadata md )
{
super();
this.md = md;
}
public MetadataGraphVertex( ArtifactMetadata md, boolean compareVersion, boolean compareScope )
public MetadataGraphVertex( ArtifactMetadata md, boolean compareVersion, boolean compareScope )
{
this(md);
this( md );
this.compareVersion = compareVersion;
this.compareScope = compareScope;
}
@ -38,125 +57,160 @@ public void setMd( ArtifactMetadata md )
{
this.md = md;
}
//---------------------------------------------------------------------
// ---------------------------------------------------------------------
public boolean isCompareVersion()
{
return compareVersion;
}
{
return compareVersion;
}
public void setCompareVersion(boolean compareVersion)
{
this.compareVersion = compareVersion;
}
public void setCompareVersion( boolean compareVersion )
{
this.compareVersion = compareVersion;
}
public boolean isCompareScope()
{
return compareScope;
}
public boolean isCompareScope()
{
return compareScope;
}
public void setCompareScope(boolean compareScope)
{
this.compareScope = compareScope;
}
public void setCompareScope( boolean compareScope )
{
this.compareScope = compareScope;
}
//---------------------------------------------------------------------
@Override
public String toString()
{
return "["+ (md == null ? "no metadata" : md.toString()) + "]";
}
//---------------------------------------------------------------------
private static int compareStrings( String s1, String s2 )
{
if( s1 == null && s2 == null )
return 0;
// ---------------------------------------------------------------------
@Override
public String toString()
{
return "[" + ( md == null ? "no metadata" : md.toString() ) + "]";
}
if( s1 == null && s2 != null )
return -1;
// ---------------------------------------------------------------------
private static int compareStrings( String s1, String s2 )
{
if ( s1 == null && s2 == null )
{
return 0;
}
if( s1 != null && s2 == null )
return 1;
return s1.compareTo(s2);
}
//---------------------------------------------------------------------
public int compareTo(MetadataGraphVertex vertex)
{
if( vertex == null || vertex.getMd() == null )
return 1;
ArtifactMetadata vmd = vertex.getMd();
if ( s1 == null && s2 != null )
{
return -1;
}
if( vmd == null )
{
if( md == null )
return 0;
else
return 1;
}
int g = compareStrings( md.groupId, vmd.groupId );
if( g == 0 )
{
int a = compareStrings( md.artifactId, vmd.artifactId );
if( a == 0 )
{
if( compareVersion )
{
int v = compareStrings( md.version, vmd.version );
if( v == 0) {
if( compareScope ) {
String s1 = ArtifactScopeEnum.checkScope( md.artifactScope).getScope();
String s2 = ArtifactScopeEnum.checkScope(vmd.artifactScope).getScope();
return s1.compareTo(s2);
}
else
return 0;
}
else
return v;
}
else
return 0;
}
else
return a;
}
return g;
}
//---------------------------------------------------------------------
@Override
public boolean equals(Object vo)
{
if( vo == null || !(vo instanceof MetadataGraphVertex) )
return false;
return compareTo( (MetadataGraphVertex)vo ) == 0;
}
//---------------------------------------------------------------------
if ( s1 != null && s2 == null )
{
return 1;
}
@Override
public int hashCode()
{
if( md == null )
return super.hashCode();
StringBuilder hashString = new StringBuilder(128);
hashString.append( md.groupId+"|" );
hashString.append( md.artifactId+"|" );
if( compareVersion )
hashString.append(md.version + "|");
if( compareScope )
hashString.append(md.getArtifactScope() + "|");
return hashString.toString().hashCode();
return s1.compareTo( s2 );
}
// BASE64Encoder b64 = new BASE64Encoder();
// return b64.encode( hashString.toString().getBytes() ).hashCode();
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
// ---------------------------------------------------------------------
public int compareTo( MetadataGraphVertex vertex )
{
if ( vertex == null || vertex.getMd() == null )
{
return 1;
}
ArtifactMetadata vmd = vertex.getMd();
if ( vmd == null )
{
if ( md == null )
{
return 0;
}
else
{
return 1;
}
}
int g = compareStrings( md.groupId, vmd.groupId );
if ( g == 0 )
{
int a = compareStrings( md.artifactId, vmd.artifactId );
if ( a == 0 )
{
if ( compareVersion )
{
int v = compareStrings( md.version, vmd.version );
if ( v == 0 )
{
if ( compareScope )
{
String s1 = ArtifactScopeEnum.checkScope( md.artifactScope ).getScope();
String s2 = ArtifactScopeEnum.checkScope( vmd.artifactScope ).getScope();
return s1.compareTo( s2 );
}
else
{
return 0;
}
}
else
{
return v;
}
}
else
{
return 0;
}
}
else
{
return a;
}
}
return g;
}
// ---------------------------------------------------------------------
@Override
public boolean equals( Object vo )
{
if ( vo == null || !( vo instanceof MetadataGraphVertex ) )
{
return false;
}
return compareTo( (MetadataGraphVertex) vo ) == 0;
}
// ---------------------------------------------------------------------
@Override
public int hashCode()
{
if ( md == null )
{
return super.hashCode();
}
StringBuilder hashString = new StringBuilder( 128 );
hashString.append( md.groupId + "|" );
hashString.append( md.artifactId + "|" );
if ( compareVersion )
{
hashString.append( md.version + "|" );
}
if ( compareScope )
{
hashString.append( md.getArtifactScope() + "|" );
}
return hashString.toString().hashCode();
// BASE64Encoder b64 = new BASE64Encoder();
// return b64.encode( hashString.toString().getBytes() ).hashCode();
}
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
}

View File

@ -1,23 +1,42 @@
package org.apache.maven.repository.metadata;
/*
* 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.artifact.ArtifactScopeEnum;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
/**
* This object is tinted with ClasspathTransformation and GraphConflictResolver.
/**
* This object is tinted with ClasspathTransformation and GraphConflictResolver.
* Get rid of them after debugging
*
*
* @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
*/
public class MetadataResolutionResult
{
MetadataTreeNode treeRoot;
/**
/**
* these components are are initialized on demand by
* explicit call of the initTreeProcessing()
*/
* explicit call of the initTreeProcessing()
*/
ClasspathTransformation classpathTransformation;
GraphConflictResolver conflictResolver;
@ -40,84 +59,112 @@ public void setTree( MetadataTreeNode root )
{
this.treeRoot = root;
}
public void initTreeProcessing( PlexusContainer plexus )
throws ComponentLookupException
{
classpathTransformation = (ClasspathTransformation)plexus.lookup(ClasspathTransformation.class);
conflictResolver = (GraphConflictResolver)plexus.lookup(GraphConflictResolver.class);
classpathTransformation = (ClasspathTransformation) plexus.lookup( ClasspathTransformation.class );
conflictResolver = (GraphConflictResolver) plexus.lookup( GraphConflictResolver.class );
}
//----------------------------------------------------------------------------
public MetadataGraph getGraph()
throws MetadataResolutionException
{
return treeRoot == null ? null : new MetadataGraph(treeRoot);
return treeRoot == null ? null : new MetadataGraph( treeRoot );
}
//----------------------------------------------------------------------------
public MetadataGraph getGraph( ArtifactScopeEnum scope )
throws MetadataResolutionException, GraphConflictResolutionException
{
if( treeRoot == null )
return null;
if( conflictResolver == null )
return null;
if ( treeRoot == null )
{
return null;
}
if ( conflictResolver == null )
{
return null;
}
return conflictResolver.resolveConflicts( getGraph(), scope );
}
//----------------------------------------------------------------------------
public MetadataGraph getGraph( MetadataResolutionRequestTypeEnum requestType )
throws MetadataResolutionException, GraphConflictResolutionException
{
if( requestType == null )
return null;
if( treeRoot == null )
return null;
if( conflictResolver == null )
return null;
if( requestType.equals(MetadataResolutionRequestTypeEnum.classpathCompile) )
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.compile );
else if( requestType.equals(MetadataResolutionRequestTypeEnum.classpathRuntime) )
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.runtime );
else if( requestType.equals(MetadataResolutionRequestTypeEnum.classpathRuntime) )
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
else if( requestType.equals(MetadataResolutionRequestTypeEnum.classpathRuntime) )
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
else if( requestType.equals(MetadataResolutionRequestTypeEnum.graph) )
return getGraph();
else if( requestType.equals(MetadataResolutionRequestTypeEnum.versionedGraph) ) {
return new MetadataGraph( getTree(), true, false );
}
else if( requestType.equals(MetadataResolutionRequestTypeEnum.scopedGraph) ) {
return new MetadataGraph( getTree(), true, true );
}
return null;
if ( requestType == null )
{
return null;
}
if ( treeRoot == null )
{
return null;
}
if ( conflictResolver == null )
{
return null;
}
if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathCompile ) )
{
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.compile );
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
{
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.runtime );
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
{
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
{
return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.graph ) )
{
return getGraph();
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.versionedGraph ) )
{
return new MetadataGraph( getTree(), true, false );
}
else if ( requestType.equals( MetadataResolutionRequestTypeEnum.scopedGraph ) )
{
return new MetadataGraph( getTree(), true, true );
}
return null;
}
//----------------------------------------------------------------------------
public ClasspathContainer getClasspath( ArtifactScopeEnum scope )
throws MetadataGraphTransformationException, MetadataResolutionException
{
if( classpathTransformation == null )
return null;
if ( classpathTransformation == null )
{
return null;
}
MetadataGraph dirtyGraph = getGraph();
if( dirtyGraph == null )
return null;
if ( dirtyGraph == null )
{
return null;
}
return classpathTransformation.transform( dirtyGraph, scope, false );
}
//----------------------------------------------------------------------------
public MetadataTreeNode getClasspathTree( ArtifactScopeEnum scope )
throws MetadataGraphTransformationException, MetadataResolutionException
{
ClasspathContainer cpc = getClasspath(scope);
if( cpc == null )
return null;
ClasspathContainer cpc = getClasspath( scope );
if ( cpc == null )
{
return null;
}
return cpc.getClasspathAsTree();
}
//----------------------------------------------------------------------------

View File

@ -147,8 +147,8 @@ under the License.
versioning.setLastUpdated( v.getLastUpdated() );
}
if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0 ||
versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0
|| versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
{
changed = true;
v.setLastUpdated( versioning.getLastUpdated() );

View File

@ -1,12 +1,30 @@
package org.apache.maven.repository;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.io.File;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.codehaus.plexus.PlexusTestCase;
@ -15,7 +33,7 @@ public class MirrorProcessorTest
{
private DefaultMirrorBuilder mirrorBuilder;
private ArtifactRepositoryFactory repositorySystem;
protected void setUp()
throws Exception
{
@ -23,38 +41,40 @@ protected void setUp()
repositorySystem = lookup( ArtifactRepositoryFactory.class );
mirrorBuilder.clearMirrors();
}
@Override
protected void tearDown() throws Exception {
mirrorBuilder = null;
super.tearDown();
protected void tearDown()
throws Exception
{
mirrorBuilder = null;
super.tearDown();
}
public void testAddMirrorWithNullRepositoryId()
{
mirrorBuilder.addMirror( null, "test", "http://www.nowhere.com/", null );
}
public void testExternalURL()
{
assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
assertTrue( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://" ) ) );
assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
assertTrue( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://" ) ) );
// these are local
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
// not a proper url so returns false;
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
assertFalse( mirrorBuilder.isExternalRepo( getRepo( "foo", "" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
assertFalse( DefaultMirrorBuilder.isExternalRepo( getRepo( "foo", "" ) ) );
}
public void testMirrorLookup()
@ -98,12 +118,12 @@ public void testMirrorStopOnFirstMatch()
mirrorBuilder.addMirror( "a2", "a,b", "http://a2", null );
mirrorBuilder.addMirror( "a", "a", "http://a", null );
//make sure repeated entries are skipped
mirrorBuilder.addMirror( "a", "a", "http://a3", null );
mirrorBuilder.addMirror( "a", "a", "http://a3", null );
mirrorBuilder.addMirror( "b", "b", "http://b", null );
mirrorBuilder.addMirror( "c", "d,e", "http://de", null );
mirrorBuilder.addMirror( "c", "*", "http://wildcard", null );
mirrorBuilder.addMirror( "c", "e,f", "http://ef", null );
mirrorBuilder.addMirror( "c", "e,f", "http://ef", null );
ArtifactRepository repo = null;
repo = mirrorBuilder.getMirrorRepository( getRepo( "a", "http://a.a" ) );
@ -114,68 +134,68 @@ public void testMirrorStopOnFirstMatch()
repo = mirrorBuilder.getMirrorRepository( getRepo( "c", "http://c.c" ) );
assertEquals( "http://wildcard", repo.getUrl() );
repo = mirrorBuilder.getMirrorRepository( getRepo( "d", "http://d" ) );
assertEquals( "http://de", repo.getUrl() );
repo = mirrorBuilder.getMirrorRepository( getRepo( "e", "http://e" ) );
assertEquals( "http://de", repo.getUrl() );
repo = mirrorBuilder.getMirrorRepository( getRepo( "f", "http://f" ) );
assertEquals( "http://wildcard", repo.getUrl() );
}
public void testPatterns()
{
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), ",*," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), ",*," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), ",a," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), ",a," ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a," ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), "a" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), "a," ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), ",a" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "b" ), ",a," ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a," ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), ",a" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), ",a," ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "a,b" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "b" ), "a,b" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "a,b" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "b" ), "a,b" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "c" ), "a,b" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "a,b" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*,b" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a" ), "*,!b" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,b" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,!b" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "a" ), "*,!a" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "a" ), "!a,*" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "*,!a" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a" ), "!a,*" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "c" ), "*,!a" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "c" ), "!a,*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "*,!a" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "!a,*" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "c" ), "!a,!c" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "d" ), "!a,!c*" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c" ), "!a,!c" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "d" ), "!a,!c*" ) );
}
public void testPatternsWithExternal()
{
assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
assertFalse( mirrorBuilder.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
assertTrue( mirrorBuilder.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
}
assertFalse( DefaultMirrorBuilder.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
assertTrue( DefaultMirrorBuilder.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
}
public void testMirrorProperUrlAndProtocolAndBasedir()
{
@ -192,7 +212,7 @@ public void testMirrorProperUrlAndProtocolAndBasedir()
/**
* Build an ArtifactRepository object.
*
*
* @param id
* @param url
* @return
@ -204,12 +224,12 @@ private ArtifactRepository getRepo( String id, String url )
/**
* Build an ArtifactRepository object.
*
*
* @param id
* @return
*/
private ArtifactRepository getRepo( String id )
{
return getRepo( id, "http://something" );
}
}
}

View File

@ -34,10 +34,6 @@
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.repository.legacy.ChecksumFailedException;
import org.apache.maven.repository.legacy.DefaultWagonManager;
import org.apache.maven.repository.legacy.UpdateCheckManager;
import org.apache.maven.repository.legacy.WagonManager;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.TransferFailedException;
import org.apache.maven.wagon.UnsupportedProtocolException;
@ -63,48 +59,59 @@ public class DefaultWagonManagerTest
private TransferListener transferListener = new Debug();
private ArtifactFactory artifactFactory;
private ArtifactRepositoryFactory artifactRepositoryFactory;
protected void setUp()
throws Exception
{
super.setUp();
wagonManager = (DefaultWagonManager) lookup( WagonManager.class );
wagonManager = (DefaultWagonManager) lookup( WagonManager.class );
artifactFactory = lookup( ArtifactFactory.class );
artifactRepositoryFactory = lookup( ArtifactRepositoryFactory.class );
}
@Override
protected void tearDown() throws Exception {
wagonManager = null;
artifactFactory = null;
super.tearDown();
protected void tearDown()
throws Exception
{
wagonManager = null;
artifactFactory = null;
super.tearDown();
}
public void testUnnecessaryRepositoryLookup() throws Exception {
public void testUnnecessaryRepositoryLookup()
throws Exception
{
Artifact artifact = createTestPomArtifact( "target/test-data/get-missing-pom" );
List<ArtifactRepository> repos = new ArrayList<ArtifactRepository>();
repos.add(artifactRepositoryFactory.createArtifactRepository( "repo1", "string://url1", new ArtifactRepositoryLayoutStub(), null, null ));
repos.add(artifactRepositoryFactory.createArtifactRepository( "repo2", "string://url2", new ArtifactRepositoryLayoutStub(), null, null ));
repos.add( artifactRepositoryFactory.createArtifactRepository( "repo1", "string://url1",
new ArtifactRepositoryLayoutStub(), null, null ) );
repos.add( artifactRepositoryFactory.createArtifactRepository( "repo2", "string://url2",
new ArtifactRepositoryLayoutStub(), null, null ) );
StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
wagon.addExpectedContent( repos.get(0).getLayout().pathOf( artifact ), "expected" );
wagon.addExpectedContent( repos.get(1).getLayout().pathOf( artifact ), "expected" );
class TransferListener extends AbstractTransferListener {
public List<TransferEvent> events = new ArrayList<TransferEvent>();
@Override
public void transferInitiated(TransferEvent transferEvent) {
events.add(transferEvent);
}
};
wagon.addExpectedContent( repos.get( 0 ).getLayout().pathOf( artifact ), "expected" );
wagon.addExpectedContent( repos.get( 1 ).getLayout().pathOf( artifact ), "expected" );
class TransferListener
extends AbstractTransferListener
{
public List<TransferEvent> events = new ArrayList<TransferEvent>();
@Override
public void transferInitiated( TransferEvent transferEvent )
{
events.add( transferEvent );
}
}
TransferListener listener = new TransferListener();
wagonManager.getArtifact( artifact, repos, listener );
assertEquals(1, listener.events.size());
assertEquals( 1, listener.events.size() );
}
public void testGetPomExistsLocallyForced()
throws IOException, TransferFailedException, ResourceDoesNotExistException, UnsupportedProtocolException
{
@ -131,43 +138,43 @@ public void testGetPomExistsLocallyForced()
public void testGetMissingJar() throws TransferFailedException, UnsupportedProtocolException, IOException
{
Artifact artifact = createTestArtifact( "target/test-data/get-missing-jar", "jar" );
ArtifactRepository repo = createStringRepo();
try
{
wagonManager.getArtifact( artifact, repo, null );
fail();
}
catch ( ResourceDoesNotExistException e )
{
assertTrue( true );
}
assertFalse( artifact.getFile().exists() );
}
public void testGetMissingJarForced() throws TransferFailedException, UnsupportedProtocolException, IOException
{
Artifact artifact = createTestArtifact( "target/test-data/get-missing-jar", "jar" );
ArtifactRepository repo = createStringRepo();
try
{
wagonManager.getArtifact( artifact, repo, null );
fail();
}
catch ( ResourceDoesNotExistException e )
{
assertTrue( true );
}
assertFalse( artifact.getFile().exists() );
}
public void testGetRemoteJar()
throws TransferFailedException, ResourceDoesNotExistException, UnsupportedProtocolException, IOException,
AuthorizationException
@ -249,10 +256,10 @@ private ArtifactRepository createStringRepo()
{
return artifactRepositoryFactory.createArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), null, null );
}
/**
* Build an ArtifactRepository object.
*
*
* @param id
* @param url
* @return
@ -264,7 +271,7 @@ private ArtifactRepository getRepo( String id, String url )
/**
* Build an ArtifactRepository object.
*
*
* @param id
* @return
*/
@ -311,7 +318,7 @@ public void testWagonTransferListenerRemovedAfterGetArtifactAndPutArtifact()
/* getArtifact */
assertFalse( "Transfer listener is registered before test",
wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
wagonManager.getArtifact( artifact, repo, transferListener);
wagonManager.getArtifact( artifact, repo, transferListener );
assertFalse( "Transfer listener still registered after getArtifact",
wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
@ -331,16 +338,16 @@ public void xtestChecksumVerification()
throws Exception
{
ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
ArtifactRepository repo = artifactRepositoryFactory.createArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), policy, policy );
Artifact artifact =
new DefaultArtifact( "sample.group", "sample-art", VersionRange.createFromVersion( "1.0" ), "scope",
"jar", "classifier", null );
artifact.setFile( getTestFile( "target/sample-art" ) );
artifact.setFile( getTestFile( "target/sample-art" ) );
StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
wagon.clearExpectedContent();
wagon.addExpectedContent( "path", "lower-case-checksum" );
wagon.addExpectedContent( "path.sha1", "2a25dc564a3b34f68237fc849066cbc7bb7a36a1" );
@ -437,7 +444,7 @@ public String getId()
{
return "test";
}
public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
{
return "path";

View File

@ -48,7 +48,6 @@
import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
import org.apache.maven.repository.legacy.resolver.LegacyArtifactCollector;
import org.codehaus.plexus.PlexusTestCase;
/**
@ -84,10 +83,12 @@ protected void setUp()
}
@Override
protected void tearDown() throws Exception {
artifactCollector = null;
artifactFactory = null;
super.tearDown();
protected void tearDown()
throws Exception
{
artifactCollector = null;
artifactFactory = null;
super.tearDown();
}
// works, but we don't fail on cycles presently
@ -738,7 +739,7 @@ private ArtifactResolutionResult collect( Set artifacts )
private ArtifactResolutionResult collect( Set artifacts, ArtifactFilter filter )
throws ArtifactResolutionException
{
{
return artifactCollector.collect( artifacts, projectArtifact.artifact, null, null, null, source, filter,
Collections.EMPTY_LIST, null );
}