You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2008/05/22 07:15:04 UTC
svn commit: r659009 [1/2] - in /maven/artifact/branches/CAP: ./
src/main/java/org/apache/maven/artifact/
src/main/java/org/apache/maven/artifact/manager/
src/main/java/org/apache/maven/artifact/repository/
src/main/java/org/apache/maven/artifact/reposi...
Author: jvanzyl
Date: Wed May 21 22:15:02 2008
New Revision: 659009
URL: http://svn.apache.org/viewvc?rev=659009&view=rev
Log:
o merge in changes from trunk
Added:
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java (with props)
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java (with props)
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java (with props)
maven/artifact/branches/CAP/target-eclipse/
maven/artifact/branches/CAP/target-eclipse/classes/
maven/artifact/branches/CAP/target-eclipse/test-classes/
Modified:
maven/artifact/branches/CAP/ (props changed)
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/Artifact.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsChangeRequest.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSource.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSourceException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/conflict/DefaultGraphConflictResolver.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/conflict/GraphConflictResolutionException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/DefaultClasspathTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/LatestArtifactTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/MetadataGraphTransformationException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/ReleaseArtifactTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
maven/artifact/branches/CAP/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java
Propchange: maven/artifact/branches/CAP/
------------------------------------------------------------------------------
svn:mergeinfo = /maven/artifact/trunk:658725
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/Artifact.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/Artifact.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/Artifact.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/Artifact.java Wed May 21 22:15:02 2008
@@ -102,7 +102,7 @@
void addMetadata( ArtifactMetadata metadata );
- Collection getMetadataList();
+ Collection<ArtifactMetadata> getMetadataList();
void setRepository( ArtifactRepository remoteRepository );
@@ -119,9 +119,9 @@
void setDependencyFilter( ArtifactFilter artifactFilter );
- List getDependencyTrail();
+ List<String> getDependencyTrail();
- void setDependencyTrail( List dependencyTrail );
+ void setDependencyTrail( List<String> dependencyTrail );
void setScope( String scope );
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/ArtifactUtils.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/ArtifactUtils.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/ArtifactUtils.java Wed May 21 22:15:02 2008
@@ -25,14 +25,12 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
public final class ArtifactUtils
{
-
private ArtifactUtils()
{
}
@@ -94,34 +92,28 @@
baseVersion;
}
- public static Map artifactMapByVersionlessId( Collection artifacts )
+ public static Map<String,Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
{
- Map artifactMap = new HashMap();
+ Map<String,Artifact> artifactMap = new HashMap<String,Artifact>();
if ( artifacts != null )
{
- for ( Iterator it = artifacts.iterator(); it.hasNext(); )
- {
- Artifact artifact = (Artifact) it.next();
-
- artifactMap.put( versionlessKey( artifact ), artifact );
+ for (Artifact artifact : artifacts) {
+ artifactMap.put(versionlessKey(artifact), artifact);
}
}
return artifactMap;
}
- public static Map artifactMapByArtifactId( Collection artifacts )
+ public static Map<String,Artifact> artifactMapByArtifactId( Collection<Artifact> artifacts )
{
- Map artifactMap = new HashMap();
+ Map<String,Artifact> artifactMap = new HashMap<String,Artifact>();
if ( artifacts != null )
{
- for ( Iterator it = artifacts.iterator(); it.hasNext(); )
- {
- Artifact artifact = (Artifact) it.next();
-
- artifactMap.put( artifact.getId(), artifact );
+ for (Artifact artifact : artifacts) {
+ artifactMap.put(artifact.getId(), artifact);
}
}
@@ -148,13 +140,13 @@
return clone;
}
- private static List copyList( List original )
+ private static <T> List<T> copyList( List<T> original )
{
- List copy = null;
+ List<T> copy = null;
if ( original != null )
{
- copy = new ArrayList();
+ copy = new ArrayList<T>();
if ( !original.isEmpty() )
{
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/DefaultArtifact.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/DefaultArtifact.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/DefaultArtifact.java Wed May 21 22:15:02 2008
@@ -48,10 +48,6 @@
private String artifactId;
- private String type;
-
- private File file;
-
/**
* The resolved version for the artifact after conflict resolution, that has not been transformed.
*
@@ -59,11 +55,15 @@
*/
private String baseVersion;
+ private String type;
+
+ private File file;
+
private String version;
private VersionRange versionRange;
- private Map metadataMap;
+ private Map<Object,ArtifactMetadata> metadataMap;
// This is Maven specific. jvz/
private String classifier;
@@ -302,10 +302,10 @@
{
if ( metadataMap == null )
{
- metadataMap = new HashMap();
+ metadataMap = new HashMap<Object,ArtifactMetadata>();
}
- ArtifactMetadata m = (ArtifactMetadata) metadataMap.get( metadata.getKey() );
+ ArtifactMetadata m = metadataMap.get( metadata.getKey() );
if ( m != null )
{
m.merge( metadata );
@@ -316,9 +316,13 @@
}
}
- public Collection getMetadataList()
+ public Collection<ArtifactMetadata> getMetadataList()
{
- return metadataMap == null ? Collections.EMPTY_LIST : metadataMap.values();
+ if (metadataMap == null) {
+ return Collections.emptyList();
+ }
+
+ return metadataMap.values();
}
// ----------------------------------------------------------------------
@@ -515,12 +519,12 @@
dependencyFilter = artifactFilter;
}
- public List getDependencyTrail()
+ public List<String> getDependencyTrail()
{
return dependencyTrail;
}
- public void setDependencyTrail( List dependencyTrail )
+ public void setDependencyTrail( List<String> dependencyTrail )
{
this.dependencyTrail = dependencyTrail;
}
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsChangeRequest.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsChangeRequest.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsChangeRequest.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsChangeRequest.java Wed May 21 22:15:02 2008
@@ -1,5 +1,24 @@
package org.apache.maven.artifact.manager;
+/*
+ * 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.wagon.authentication.AuthenticationInfo;
public class CredentialsChangeRequest
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSource.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSource.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSource.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSource.java Wed May 21 22:15:02 2008
@@ -1,5 +1,24 @@
package org.apache.maven.artifact.manager;
+/*
+ * 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.wagon.authentication.AuthenticationInfo;
/**
@@ -29,14 +48,7 @@
* set, if not found, prompt and create Authentication info
* for a given resource. This one uses the old password
* member of AuthenticationInfo
- *
- * @param resourceId resource ID for which authentication is required
- * @param authInfo authentication info to set for the given resource ID
- * @param oldPassword old password if one exists or <code>null</code> if not needed
- * - you know for sure that it's a new auth of the existing auth
- * does not have a password, associated with the resource, or you want the
- * old password to be prompted
- * @return
+ *
* @throws CredentialsDataSourceException
*/
void set( CredentialsChangeRequest req )
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSourceException.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSourceException.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSourceException.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/CredentialsDataSourceException.java Wed May 21 22:15:02 2008
@@ -1,5 +1,24 @@
package org.apache.maven.artifact.manager;
+/*
+ * 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.
+ */
+
public class CredentialsDataSourceException
extends Exception
{
Added: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java?rev=659009&view=auto
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java (added)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java Wed May 21 22:15:02 2008
@@ -0,0 +1,350 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * 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.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.util.Date;
+import java.util.Properties;
+
+/** @plexus.component */
+public class DefaultUpdateCheckManager
+ extends AbstractLogEnabled
+ implements UpdateCheckManager
+{
+
+ public DefaultUpdateCheckManager()
+ {
+
+ }
+
+ public DefaultUpdateCheckManager( Logger logger )
+ {
+ enableLogging( logger );
+ }
+
+ public static final String LAST_UPDATE_TAG = ".lastUpdated";
+
+ private static final String TOUCHFILE_NAME = "resolver-status.properties";
+
+ public boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository )
+ {
+ // Update intervals are never used for release artifacts. These intervals
+ // only exist on the release section of the repository definition in the POM for one reason:
+ // to specify how often artifact METADATA is checked. Here, we simply shortcut for non-snapshot
+ // artifacts.
+ if ( !artifact.isSnapshot() )
+ {
+ return false;
+ }
+
+ // 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();
+
+ File file = artifact.getFile();
+
+ if ( !policy.isEnabled() )
+ {
+ return false;
+ }
+
+ if ( file == null )
+ {
+ // TODO throw something instead?
+ return true;
+ }
+
+ Date lastCheckDate;
+
+ if ( file.exists() )
+ {
+ lastCheckDate = new Date ( file.lastModified() );
+ }
+ else
+ {
+ File touchfile = getTouchfile( artifact );
+ lastCheckDate = readLastUpdated( touchfile, repository.getId() );
+ }
+
+ return ( lastCheckDate == null ) || policy.checkOutOfDate( lastCheckDate );
+ }
+
+ public boolean isUpdateRequired( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ // Here, we need to determine which policy to use. Release updateInterval will be used when
+ // the metadata refers to a release artifact or meta-version, and snapshot updateInterval will be used when
+ // it refers to a snapshot artifact or meta-version.
+ // NOTE: Release metadata includes version information about artifacts that have been released, to allow
+ // meta-versions like RELEASE and LATEST to resolve, and also to allow retrieval of the range of valid, released
+ // artifacts available.
+ ArtifactRepositoryPolicy policy = metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+
+ if ( !policy.isEnabled() )
+ {
+ return false;
+ }
+
+ if ( file == null )
+ {
+ // TODO throw something instead?
+ return true;
+ }
+
+ Date lastCheckDate = readLastUpdated( metadata, repository, file );
+
+ return ( lastCheckDate == null ) || policy.checkOutOfDate( lastCheckDate );
+ }
+
+ public Date readLastUpdated( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ return readLastUpdated( touchfile, key );
+ }
+
+ public void touch( Artifact artifact, ArtifactRepository repository )
+ {
+ File file = artifact.getFile();
+
+ File touchfile = getTouchfile( artifact );
+
+ if ( file.exists() )
+ {
+ touchfile.delete();
+ }
+ else
+ {
+ writeLastUpdated( touchfile, repository.getId() );
+ }
+
+ }
+
+ public void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ writeLastUpdated( touchfile, key );
+ }
+
+ public String getMetadataKey( ArtifactRepository repository, File file )
+ {
+ return repository.getId() + "." + file.getName() + LAST_UPDATE_TAG;
+ }
+
+ private void writeLastUpdated( File touchfile, String key )
+ {
+ synchronized ( touchfile.getAbsolutePath().intern() )
+ {
+ if ( !touchfile.getParentFile().exists() && !touchfile.getParentFile().mkdirs() )
+ {
+ getLogger().debug( "Failed to create directory: " + touchfile.getParent() +
+ " for tracking artifact metadata resolution." );
+ return;
+ }
+
+ FileChannel channel = null;
+ FileLock lock = null;
+ try
+ {
+ Properties props = new Properties();
+
+ channel = new RandomAccessFile( touchfile, "rw" ).getChannel();
+ lock = channel.lock( 0, channel.size(), false );
+
+ if ( touchfile.canRead() )
+ {
+ getLogger().debug( "Reading resolution-state from: " + touchfile );
+ ByteBuffer buffer = ByteBuffer.allocate( (int) channel.size() );
+
+ channel.read( buffer );
+ buffer.flip();
+
+ ByteArrayInputStream stream = new ByteArrayInputStream( buffer.array() );
+ props.load( stream );
+ }
+
+ props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
+
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ getLogger().debug( "Writing resolution-state to: " + touchfile );
+ props.store( stream, "Last modified on: " + new Date() );
+
+ byte[] data = stream.toByteArray();
+ ByteBuffer buffer = ByteBuffer.allocate( data.length );
+ buffer.put( data );
+ buffer.flip();
+
+ channel.position( 0 );
+ channel.write( buffer );
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Failed to record lastUpdated information for resolution.\nFile: " +
+ touchfile.toString() + "; key: " + key, e );
+ }
+ finally
+ {
+ if ( lock != null )
+ {
+ try
+ {
+ lock.release();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error releasing exclusive lock for resolution tracking file: " +
+ touchfile, e );
+ }
+ }
+
+ if ( channel != null )
+ {
+ try
+ {
+ channel.close();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error closing FileChannel for resolution tracking file: " +
+ touchfile, e );
+ }
+ }
+ }
+ }
+ }
+
+ public Date readLastUpdated( File touchfile, String key )
+ {
+ if ( !touchfile.canRead() )
+ {
+ return null;
+ }
+
+ synchronized ( touchfile.getAbsolutePath().intern() )
+ {
+ getLogger().debug( "Searching for: " + key + " in touchfile." );
+
+ Date result = null;
+ FileInputStream stream = null;
+ FileLock lock = null;
+ FileChannel channel = null;
+ try
+ {
+ Properties props = new Properties();
+
+ stream = new FileInputStream( touchfile );
+ channel = stream.getChannel();
+ lock = channel.lock( 0, channel.size(), true );
+
+ getLogger().debug( "Reading resolution-state from: " + touchfile );
+ props.load( stream );
+
+ String rawVal = props.getProperty( key );
+ if ( rawVal != null )
+ {
+ try
+ {
+ result = new Date( Long.parseLong( rawVal ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
+ result = null;
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Failed to read lastUpdated information.\nFile: " +
+ touchfile.toString() + "; key: " + key, e );
+ }
+ finally
+ {
+ if ( lock != null )
+ {
+ try
+ {
+ lock.release();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error releasing shared lock for resolution tracking file: " +
+ touchfile, e );
+ }
+ }
+
+ if ( channel != null )
+ {
+ try
+ {
+ channel.close();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error closing FileChannel for resolution tracking file: " +
+ touchfile, e );
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+
+ public File getTouchfile( Artifact artifact )
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append( artifact.getArtifactId() );
+ sb.append( '-' ).append( artifact.getBaseVersion() );
+ if ( artifact.getClassifier() != null )
+ {
+ sb.append( '-' ).append( artifact.getClassifier() );
+ }
+ sb.append( '.' ).append( artifact.getType() ).append( LAST_UPDATE_TAG );
+ File touchfile = new File( artifact.getFile().getParentFile(), sb.toString() );
+ return touchfile;
+ }
+
+ public File getTouchfile( RepositoryMetadata metadata, File file )
+ {
+ return new File( file.getParent(), TOUCHFILE_NAME );
+ }
+
+}
Propchange: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Wed May 21 22:15:02 2008
@@ -56,12 +56,16 @@
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/** @plexus.component */
public class DefaultWagonManager
@@ -71,6 +75,8 @@
{
private static final String WILDCARD = "*";
+ private static final String EXTERNAL_WILDCARD = "external:*";
+
private static final String[] CHECKSUM_IDS = {"md5", "sha1"};
/** have to match the CHECKSUM_IDS */
@@ -86,7 +92,8 @@
private Map serverPermissionsMap = new HashMap();
- private Map mirrors = new HashMap();
+ //used LinkedMap to preserve the order.
+ private Map mirrors = new LinkedHashMap();
/** Map( String, XmlPlexusConfiguration ) with the repository id and the wagon configuration */
private Map serverConfigurationMap = new HashMap();
@@ -110,6 +117,9 @@
/** encapsulates access to Server credentials */
private CredentialsDataSource credentialsDataSource;
+ /** @plexus.requirement */
+ private UpdateCheckManager updateCheckManager;
+
// TODO: this leaks the component in the public api - it is never released back to the container
public Wagon getWagon( Repository repository )
throws UnsupportedProtocolException, WagonConfigurationException
@@ -316,7 +326,15 @@
// NOTE: It is not possible that this method throws TransferFailedException under current conditions.
// FIXME: Change the throws clause to reflect the fact that we're never throwing TransferFailedException
public void getArtifact( Artifact artifact,
- List remoteRepositories )
+ List remoteRepositories )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ getArtifact( artifact, remoteRepositories, true );
+ }
+
+ public void getArtifact( Artifact artifact,
+ List remoteRepositories,
+ boolean force )
throws TransferFailedException, ResourceDoesNotExistException
{
boolean successful = false;
@@ -327,7 +345,7 @@
try
{
- getArtifact( artifact, repository );
+ getArtifact( artifact, repository, force );
successful = artifact.isResolved();
}
@@ -355,6 +373,15 @@
public void getArtifact( Artifact artifact,
ArtifactRepository repository )
+ throws TransferFailedException,
+ ResourceDoesNotExistException
+ {
+ getArtifact( artifact, repository, true );
+ }
+
+ public void getArtifact( Artifact artifact,
+ ArtifactRepository repository,
+ boolean force )
throws TransferFailedException, ResourceDoesNotExistException
{
String remotePath = repository.pathOf( artifact );
@@ -369,11 +396,39 @@
{
getLogger().debug( "Skipping blacklisted repository " + repository.getId() );
}
- else
+ // If the artifact is a snapshot, we need to determine whether it's time to check this repository for an update:
+ // 1. If it's forced, then check
+ // 2. If the updateInterval has been exceeded since the last check for this artifact on this repository, then check.
+ else if ( artifact.isSnapshot() && ( force || updateCheckManager.isUpdateRequired( artifact, repository ) ) )
{
getLogger().debug( "Trying repository " + repository.getId() );
- getRemoteFile( repository, artifact.getFile(), remotePath, downloadMonitor, policy.getChecksumPolicy(), false );
+ try
+ {
+ getRemoteFile( getMirrorRepository( repository ), artifact.getFile(), remotePath, downloadMonitor,
+ policy.getChecksumPolicy(), false );
+ }
+ finally
+ {
+ updateCheckManager.touch( artifact, repository );
+ }
+
+ getLogger().debug( " Artifact resolved" );
+
+ artifact.setResolved( true );
+ }
+ // If it's not a snapshot artifact, then we don't care what the force flag says. If it's on the local
+ // system, it's resolved. Releases are presumed to be immutable, so release artifacts are not ever updated.
+ // NOTE: This is NOT the case for metadata files on relese-only repositories. This metadata may contain information
+ // about successive releases, so it should be checked using the same updateInterval/force characteristics as snapshot
+ // artifacts, above.
+
+ // don't write touch-file for release artifacts.
+ else if ( !artifact.isSnapshot() )
+ {
+ getLogger().debug( "Trying repository " + repository.getId() );
+
+ getRemoteFile( getMirrorRepository( repository ), artifact.getFile(), remotePath, downloadMonitor, policy.getChecksumPolicy(), false );
getLogger().debug( " Artifact resolved" );
@@ -389,6 +444,15 @@
{
String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
+ getRemoteFile( getMirrorRepository( repository ), destination, remotePath, null, checksumPolicy, true );
+ }
+
+ public void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository repository,
+ File destination, String checksumPolicy )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
+
getRemoteFile( repository, destination, remotePath, null, checksumPolicy, true );
}
@@ -404,15 +468,6 @@
failIfNotOnline();
- ArtifactRepository mirror = getMirror( repository.getId() );
-
- if ( mirror != null )
- {
- repository = repositoryFactory.createArtifactRepository( mirror.getId(), mirror.getUrl(),
- repository.getLayout(), repository.getSnapshots(),
- repository.getReleases() );
- }
-
String protocol = repository.getProtocol();
Wagon wagon;
@@ -621,6 +676,26 @@
}
}
+ public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
+ {
+ ArtifactRepository mirror = getMirror( repository );
+ if ( mirror != null )
+ {
+ String id = mirror.getId();
+ if ( id == null )
+ {
+ // TODO: this should be illegal in settings.xml
+ id = repository.getId();
+ }
+
+ getLogger().info( "Using mirror: " + mirror.getId() + " for repository: " + repository.getId() + "\n(mirror url: " + mirror.getUrl() + ")" );
+ repository = repositoryFactory.createArtifactRepository( id, mirror.getUrl(),
+ repository.getLayout(), repository.getSnapshots(),
+ repository.getReleases() );
+ }
+ return repository;
+ }
+
private void failIfNotOnline()
throws TransferFailedException
{
@@ -685,7 +760,7 @@
expectedChecksum = expectedChecksum.substring( 0, spacePos );
}
}
- if ( expectedChecksum.equals( actualChecksum ) )
+ if ( expectedChecksum.equalsIgnoreCase( actualChecksum ) )
{
File checksumFile = new File( destination + checksumFileExtension );
if ( checksumFile.exists() )
@@ -707,6 +782,7 @@
}
}
+
private void disconnectWagon( Wagon wagon )
{
try
@@ -747,28 +823,130 @@
;
}
- public ArtifactRepository getMirror( String mirrorOf )
+ /**
+ * This method finds a matching mirror for the selected repository. If there is an exact match, this will be used.
+ * If there is no exact match, then the list of mirrors is examined to see if a pattern applies.
+ *
+ * @param originalRepository See if there is a mirror for this repository.
+ * @return the selected mirror or null if none are found.
+ */
+ public ArtifactRepository getMirror( ArtifactRepository originalRepository )
{
- ArtifactRepository repository = (ArtifactRepository) mirrors.get( mirrorOf );
+ ArtifactRepository selectedMirror = (ArtifactRepository) mirrors.get( originalRepository.getId() );
+ if ( null == selectedMirror )
+ {
+ // Process the patterns in order. First one that matches wins.
+ Set keySet = mirrors.keySet();
+ if ( keySet != null )
+ {
+ Iterator iter = keySet.iterator();
+ while ( iter.hasNext() )
+ {
+ String pattern = (String) iter.next();
+ if ( matchPattern( originalRepository, pattern ) )
+ {
+ selectedMirror = (ArtifactRepository) mirrors.get( pattern );
+ }
+ }
+ }
- if ( repository == null )
+ }
+ return selectedMirror;
+ }
+
+ /**
+ * This method checks if the pattern matches the originalRepository.
+ * Valid patterns:
+ * * = everything
+ * external:* = everything not on the localhost and not file based.
+ * repo,repo1 = repo or repo1
+ * *,!repo1 = everything except repo1
+ *
+ * @param originalRepository to compare for a match.
+ * @param pattern used for match. Currently only '*' is supported.
+ * @return true if the repository is a match to this pattern.
+ */
+ public boolean matchPattern( ArtifactRepository originalRepository, String pattern )
+ {
+ boolean result = false;
+ String originalId = originalRepository.getId();
+
+ // simple checks first to short circuit processing below.
+ if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
{
- repository = (ArtifactRepository) mirrors.get( WILDCARD );
+ result = true;
}
+ else
+ {
+ // process the list
+ String[] repos = pattern.split( "," );
+ for ( int i = 0; i < repos.length; i++ )
+ {
+ String repo = repos[i];
- return repository;
+ // see if this is a negative match
+ if ( repo.length() > 1 && repo.startsWith( "!" ) )
+ {
+ if ( originalId.equals( repo.substring( 1 ) ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( originalId.equals( repo ) )
+ {
+ result = true;
+ break;
+ }
+ // check for external:*
+ else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( originalRepository ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ else if ( WILDCARD.equals( repo ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Checks the URL to see if this repository refers to an external repository
+ *
+ * @param originalRepository
+ * @return true if external.
+ */
+ public boolean isExternalRepo( ArtifactRepository originalRepository )
+ {
+ try
+ {
+ URL url = new URL( originalRepository.getUrl() );
+ return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" ) || url.getProtocol().equals(
+ "file" ) );
+ }
+ catch ( MalformedURLException e )
+ {
+ // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
+ return false;
+ }
}
/**
* Set the proxy used for a particular protocol.
*
- * @param protocol the protocol (required)
- * @param host the proxy host name (required)
- * @param port the proxy port (required)
- * @param username the username for the proxy, or null if there is none
- * @param password the password for the proxy, or null if there is none
- * @param nonProxyHosts the set of hosts not to use the proxy for. Follows Java system
- * property format: <code>*.foo.com|localhost</code>.
+ * @param protocol the protocol (required)
+ * @param host the proxy host name (required)
+ * @param port the proxy port (required)
+ * @param username the username for the proxy, or null if there is none
+ * @param password the password for the proxy, or null if there is none
+ * @param nonProxyHosts the set of hosts not to use the proxy for. Follows Java system property format:
+ * <code>*.foo.com|localhost</code>.
* @todo [BP] would be nice to configure this via plexus in some way
*/
public void addProxy( String protocol,
Added: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java?rev=659009&view=auto
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java (added)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java Wed May 21 22:15:02 2008
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * 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 org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+
+public interface UpdateCheckManager {
+
+ String ROLE = UpdateCheckManager.class.getName();
+
+ boolean isUpdateRequired( 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 );
+
+}
Propchange: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/UpdateCheckManager.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/WagonManager.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/WagonManager.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/manager/WagonManager.java Wed May 21 22:15:02 2008
@@ -77,9 +77,19 @@
throws TransferFailedException, ResourceDoesNotExistException;
void getArtifact( Artifact artifact,
+ List remoteRepositories,
+ boolean forceUpdateCheck )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getArtifact( Artifact artifact,
ArtifactRepository repository )
throws TransferFailedException, ResourceDoesNotExistException;
+ void getArtifact( Artifact artifact,
+ ArtifactRepository repository,
+ boolean forceUpdateCheck )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
void putArtifact( File source,
Artifact artifact,
ArtifactRepository deploymentRepository )
@@ -96,6 +106,10 @@
String checksumPolicy )
throws TransferFailedException, ResourceDoesNotExistException;
+ void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
+ File file, String checksumPolicyWarn )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
void setOnline( boolean online );
boolean isOnline();
@@ -154,4 +168,6 @@
void findAndRegisterWagons( PlexusContainer container );
void setDefaultRepositoryPermissions( RepositoryPermissions permissions );
-}
\ No newline at end of file
+
+ ArtifactRepository getMirrorRepository( ArtifactRepository repository );
+}
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java Wed May 21 22:15:02 2008
@@ -131,7 +131,7 @@
else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
{
String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
- int minutes = Integer.valueOf( s ).intValue();
+ int minutes = Integer.valueOf(s);
Calendar cal = Calendar.getInstance();
cal.add( Calendar.MINUTE, -minutes );
if ( cal.getTime().after( lastModified ) )
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java Wed May 21 22:15:02 2008
@@ -41,15 +41,15 @@
private String globalChecksumPolicy;
// FIXME: This is a non-ThreadLocal cache!!
- private final Map artifactRepositories = new HashMap();
+ private final Map<String,ArtifactRepository> artifactRepositories = new HashMap<String,ArtifactRepository>();
/** @plexus.requirement role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout" */
- private Map repositoryLayouts;
+ private Map<String,ArtifactRepositoryLayout> repositoryLayouts;
public ArtifactRepositoryLayout getLayout( String layoutId )
throws UnknownRepositoryLayoutException
{
- return (ArtifactRepositoryLayout) repositoryLayouts.get( layoutId );
+ return repositoryLayouts.get( layoutId );
}
public ArtifactRepository createDeploymentArtifactRepository( String id,
@@ -58,7 +58,7 @@
boolean uniqueVersion )
throws UnknownRepositoryLayoutException
{
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) repositoryLayouts.get( layoutId );
+ ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
checkLayout( id, layoutId, layout );
@@ -91,7 +91,7 @@
ArtifactRepositoryPolicy releases )
throws UnknownRepositoryLayoutException
{
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) repositoryLayouts.get( layoutId );
+ ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
checkLayout( id, layoutId, layout );
@@ -107,7 +107,7 @@
boolean blacklisted = false;
if ( artifactRepositories.containsKey( id ) )
{
- ArtifactRepository repository = (ArtifactRepository) artifactRepositories.get( id );
+ ArtifactRepository repository = artifactRepositories.get( id );
// TODO: this should be an if there are duplicates?
if ( repository.getUrl().equals( url ) )
{
@@ -137,8 +137,7 @@
releases.setChecksumPolicy( globalChecksumPolicy );
}
- DefaultArtifactRepository repository = new DefaultArtifactRepository( id, url, repositoryLayout, snapshots,
- releases );
+ DefaultArtifactRepository repository = new DefaultArtifactRepository( id, url, repositoryLayout, snapshots, releases );
repository.setBlacklisted( blacklisted );
artifactRepositories.put( id, repository );
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Wed May 21 22:15:02 2008
@@ -19,6 +19,16 @@
* under the License.
*/
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.manager.UpdateCheckManager;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -32,16 +42,6 @@
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/**
* @author Jason van Zyl
* @plexus.component
@@ -53,9 +53,13 @@
/** @plexus.requirement */
private WagonManager wagonManager;
- protected DefaultRepositoryMetadataManager( WagonManager wagonManager, Logger logger )
+ /** @plexus.requirement */
+ private UpdateCheckManager updateCheckManager;
+
+ protected DefaultRepositoryMetadataManager( WagonManager wagonManager, UpdateCheckManager updateCheckManager, Logger logger )
{
this.wagonManager = wagonManager;
+ this.updateCheckManager = updateCheckManager;
enableLogging( logger );
}
@@ -64,62 +68,57 @@
}
public void resolve( RepositoryMetadata metadata,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactRepository localRepository )
throws RepositoryMetadataResolutionException
{
- MetadataTouchfile touchfile = new MetadataTouchfile( metadata, localRepository );
-
- for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
- {
- ArtifactRepository repository = (ArtifactRepository) i.next();
-
+ for (ArtifactRepository repository : remoteRepositories) {
ArtifactRepositoryPolicy policy =
- metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+ metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
- if ( !policy.isEnabled() )
- {
- getLogger().debug( "Skipping disabled repository " + repository.getId() );
- }
- else if ( repository.isBlacklisted() )
- {
- getLogger().debug( "Skipping blacklisted repository " + repository.getId() );
- }
- else
- {
- File file = new File( localRepository.getBasedir(),
- localRepository.pathOfLocalRepositoryMetadata( metadata, repository ) );
+ File file = new File(localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata(metadata, repository));
- Date lastMod = touchfile.getLastCheckDate( repository.getId(), file.getName(), getLogger() );
- getLogger().debug( "Got last-check-date of: " + lastMod + "\nfor metadata: " + metadata + "\nwith filename: " + file.getName() + "\nin repository: " + repository.getId() );
+ if (wagonManager.isOnline()) {
+ if (updateCheckManager.isUpdateRequired(metadata, repository, file)) {
+ getLogger().info(metadata.getKey() + ": checking for updates from " + repository.getId());
+ try {
+ wagonManager.getArtifactMetadata(metadata, repository, file, policy.getChecksumPolicy());
+ }
+ catch (ResourceDoesNotExistException e) {
+ getLogger().debug(metadata + " could not be found on repository: " + repository.getId());
- boolean checkForUpdates =
- ( lastMod == null ) || policy.checkOutOfDate( lastMod );
+ // delete the local copy so the old details aren't used.
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+ catch (TransferFailedException e) {
+ getLogger().warn(metadata + " could not be retrieved from repository: " + repository.getId() +
+ " due to an error: " + e.getMessage());
+ getLogger().debug("Exception", e);
- if ( checkForUpdates )
- {
- getLogger().info( metadata.getKey() + ": checking for updates from " + repository.getId() );
+ getLogger().info("Repository '" + repository.getId() + "' will be blacklisted");
+ repository.setBlacklisted(true);
- try
- {
- resolveAlways( metadata, repository, file, policy.getChecksumPolicy(), touchfile, true );
- }
- catch ( TransferFailedException e )
- {
// TODO: [jc; 08-Nov-2005] revisit this for 2.1
// suppressing logging to avoid logging this error twice.
}
+ finally {
+ updateCheckManager.touch(metadata, repository, file);
+ }
}
+ } else {
+ getLogger().debug(
+ "System is offline. Cannot resolve metadata:\n" + metadata.extendedToString() + "\n\n");
+ }
- // TODO: should this be inside the above check?
- // touch file so that this is not checked again until interval has passed
- if ( file.exists() )
- {
- file.setLastModified( System.currentTimeMillis() );
- }
+ // TODO: should this be inside the above check?
+ // touch file so that this is not checked again until interval has passed
+ if (file.exists()) {
+ file.setLastModified(System.currentTimeMillis());
}
}
-
try
{
mergeMetadata( metadata, remoteRepositories, localRepository );
@@ -137,7 +136,7 @@
}
private void mergeMetadata( RepositoryMetadata metadata,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactRepository localRepository )
throws RepositoryMetadataStoreException, RepositoryMetadataReadException
{
@@ -148,17 +147,13 @@
Map previousMetadata = new HashMap();
ArtifactRepository selected = null;
- for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
- {
- ArtifactRepository repository = (ArtifactRepository) i.next();
-
+ for (ArtifactRepository repository : remoteRepositories) {
ArtifactRepositoryPolicy policy =
- metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+ metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
- if ( ( policy.isEnabled() && !repository.isBlacklisted() )
- && ( loadMetadata( metadata, repository, localRepository, previousMetadata ) ) )
- {
- metadata.setRepository( repository );
+ if ((policy.isEnabled() && !repository.isBlacklisted())
+ && (loadMetadata(metadata, repository, localRepository, previousMetadata))) {
+ metadata.setRepository(repository);
selected = repository;
}
}
@@ -295,21 +290,15 @@
"System is offline. Cannot resolve required metadata:\n" + metadata.extendedToString() );
}
- File file = new File( localRepository.getBasedir(),
- localRepository.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
-
+ File file;
try
{
- MetadataTouchfile touchfile = new MetadataTouchfile( metadata, localRepository );
-
- resolveAlways( metadata, remoteRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN, touchfile, false );
+ file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, remoteRepository );
}
catch ( TransferFailedException e )
{
- // TODO: [jc; 08-Nov-2005] revisit this for 2.1
- // suppressing logging to avoid logging this error twice.
- // We don't want to interrupt program flow here. Just allow empty metadata instead.
- // rethrowing this would change behavior.
+ throw new RepositoryMetadataResolutionException( metadata + " could not be retrieved from repository: " +
+ remoteRepository.getId() + " due to an error: " + e.getMessage(), e );
}
try
@@ -326,59 +315,38 @@
}
}
- private void resolveAlways( ArtifactMetadata metadata,
- ArtifactRepository repository,
- File file,
- String checksumPolicy,
- MetadataTouchfile touchfile,
- boolean allowBlacklisting )
- throws RepositoryMetadataResolutionException, TransferFailedException
+ private File getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws TransferFailedException
{
- if ( !wagonManager.isOnline() )
- {
- if ( allowBlacklisting )
- {
- getLogger().debug(
- "System is offline. Cannot resolve metadata:\n" + metadata.extendedToString() + "\n\n" );
- return;
- }
- else
- {
- // metadata is required for deployment, can't be offline
- throw new RepositoryMetadataResolutionException(
- "System is offline. Cannot resolve required metadata:\n" + metadata.extendedToString() );
- }
- }
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
try
{
- wagonManager.getArtifactMetadata( metadata, repository, file, checksumPolicy );
+ wagonManager.getArtifactMetadataFromDeploymentRepository( metadata, remoteRepository, file,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
}
catch ( ResourceDoesNotExistException e )
{
- getLogger().debug( metadata
- + " could not be found on repository: "
- + repository.getId() );
+ getLogger().info(
+ metadata + " could not be found on repository: " + remoteRepository.getId() + ", so will be created" );
+ // delete the local copy so the old details aren't used.
if ( file.exists() )
{
file.delete();
}
}
- catch ( TransferFailedException e )
- {
- getLogger().warn(
- metadata + " could not be retrieved from repository: " + repository.getId() + " due to an error: " + e.getMessage() );
- getLogger().info( "Repository '" + repository.getId() + "' will be blacklisted" );
- getLogger().debug( "Exception", e );
- repository.setBlacklisted( allowBlacklisting );
-
- throw e;
- }
finally
{
- touchfile.touch( repository.getId(), file.getName(), getLogger() );
+ if ( metadata instanceof RepositoryMetadata )
+ {
+ updateCheckManager.touch( (RepositoryMetadata) metadata, remoteRepository, file );
+ }
}
+ return file;
}
public void deploy( ArtifactMetadata metadata,
@@ -393,26 +361,26 @@
"System is offline. Cannot deploy metadata:\n" + metadata.extendedToString() );
}
- getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
-
- File file = new File( localRepository.getBasedir(),
- localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
-
- try
+ File file;
+ if ( metadata instanceof RepositoryMetadata )
{
- MetadataTouchfile touchfile = new MetadataTouchfile( metadata, localRepository );
-
- resolveAlways( metadata, deploymentRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN, touchfile, false );
- }
- catch ( RepositoryMetadataResolutionException e )
- {
- throw new RepositoryMetadataDeploymentException(
- "Unable to get previous metadata to update: " + e.getMessage(), e );
+ getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
+ try
+ {
+ file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, deploymentRepository );
+ }
+ catch ( TransferFailedException e )
+ {
+ throw new RepositoryMetadataDeploymentException( metadata +
+ " could not be retrieved from repository: " + deploymentRepository.getId() + " due to an error: " +
+ e.getMessage(), e );
+ }
}
- catch ( TransferFailedException e )
+ else
{
- throw new RepositoryMetadataDeploymentException(
- "Unable to get previous metadata to update: " + e.getMessage(), e );
+ // It's a POM - we don't need to retrieve it first
+ file = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
}
try
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java Wed May 21 22:15:02 2008
@@ -27,7 +27,7 @@
public interface RepositoryMetadataManager
{
void resolve( RepositoryMetadata repositoryMetadata,
- List repositories,
+ List<ArtifactRepository> repositories,
ArtifactRepository localRepository )
throws RepositoryMetadataResolutionException;
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java Wed May 21 22:15:02 2008
@@ -23,6 +23,7 @@
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.conflict.ConflictResolver;
import java.util.List;
import java.util.Map;
@@ -45,33 +46,33 @@
String ROLE = ArtifactCollector.class.getName();
// TODO: deprecate since conflict resolvers should always be specified
- ArtifactResolutionResult collect( Set artifacts,
+ ArtifactResolutionResult collect( Set<Artifact> artifacts,
Artifact originatingArtifact,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source,
ArtifactFilter filter,
- List listeners );
+ List<ResolutionListener> listeners );
// TODO: deprecate since conflict resolvers should always be specified
- ArtifactResolutionResult collect( Set artifacts,
+ ArtifactResolutionResult collect( Set<Artifact> artifacts,
Artifact originatingArtifact,
Map managedVersions,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source,
ArtifactFilter filter,
- List listeners );
+ List<ResolutionListener> listeners );
/** @since 3.0 */
- ArtifactResolutionResult collect( Set artifacts,
+ ArtifactResolutionResult collect( Set<Artifact> artifacts,
Artifact originatingArtifact,
Map managedVersions,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source,
ArtifactFilter filter,
- List listeners,
- List conflictResolvers )
+ List<ResolutionListener> listeners,
+ List<ConflictResolver> conflictResolvers )
throws ArtifactResolutionException;
}
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java Wed May 21 22:15:02 2008
@@ -20,6 +20,7 @@
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import java.util.List;
@@ -35,7 +36,7 @@
protected ArtifactNotFoundException( String message,
Artifact artifact,
- List remoteRepositories )
+ List<ArtifactRepository> remoteRepositories )
{
super( message, artifact, remoteRepositories );
}
@@ -49,7 +50,7 @@
protected ArtifactNotFoundException( String message,
Artifact artifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ResourceDoesNotExistException cause )
{
this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
@@ -63,7 +64,7 @@
String version,
String type,
String classifier,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
String downloadUrl,
List path,
ResourceDoesNotExistException cause )
@@ -81,7 +82,7 @@
String version,
String type,
String classifier,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
String downloadUrl,
List path )
{
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java Wed May 21 22:15:02 2008
@@ -22,6 +22,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.wagon.TransferFailedException;
import java.io.IOException;
@@ -40,7 +41,7 @@
String version,
String type,
String classifier,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
List path,
Throwable t )
{
@@ -66,7 +67,7 @@
public ArtifactResolutionException( String message,
Artifact artifact,
- List remoteRepositories )
+ List<ArtifactRepository> remoteRepositories )
{
super( message, artifact, remoteRepositories );
}
@@ -80,7 +81,7 @@
protected ArtifactResolutionException( String message,
Artifact artifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataRetrievalException cause )
{
super( message, artifact, remoteRepositories, cause );
@@ -88,7 +89,7 @@
protected ArtifactResolutionException( String message,
Artifact artifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
TransferFailedException cause )
{
super( message, artifact, remoteRepositories, cause );
@@ -96,7 +97,7 @@
protected ArtifactResolutionException( String message,
Artifact artifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
IOException cause )
{
super( message, artifact, remoteRepositories, cause );
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java Wed May 21 22:15:02 2008
@@ -4,6 +4,7 @@
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.conflict.ConflictResolver;
import java.util.ArrayList;
import java.util.List;
@@ -30,18 +31,18 @@
private ArtifactRepository localRepository;
- private List remoteRepostories;
+ private List<ArtifactRepository> remoteRepostories;
private ArtifactFilter filter;
- private List listeners = new ArrayList();
+ private List<ResolutionListener> listeners = new ArrayList<ResolutionListener>();
// This should really be a component. Different impls can can be composed to account for different forms of metadata.
private ArtifactMetadataSource metadataSource;
private Map managedVersionMap;
- private List conflictResolvers;
+ private List<ConflictResolver> conflictResolvers;
public Artifact getArtifact()
{
@@ -140,7 +141,7 @@
return remoteRepostories;
}
- public ArtifactResolutionRequest setRemoteRepostories( List remoteRepostories )
+ public ArtifactResolutionRequest setRemoteRepostories( List<ArtifactRepository> remoteRepostories )
{
this.remoteRepostories = remoteRepostories;
@@ -199,12 +200,12 @@
return this;
}
- public List getConflictResolvers()
+ public List<ConflictResolver> getConflictResolvers()
{
return conflictResolvers;
}
- public ArtifactResolutionRequest setConflictResolvers( List conflictResolvers )
+ public ArtifactResolutionRequest setConflictResolvers( List<ConflictResolver> conflictResolvers )
{
this.conflictResolvers = conflictResolvers;
@@ -214,9 +215,9 @@
public String toString()
{
StringBuffer sb = new StringBuffer()
- .append( "groupId = " + getGroupId() )
- .append( "artifactId = " + getArtifactId() )
- .append( "version = " + getVersion() );
+ .append("groupId = ").append(getGroupId())
+ .append("artifactId = ").append(getArtifactId())
+ .append("version = ").append(getVersion());
return sb.toString();
}
Modified: maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java?rev=659009&r1=659008&r2=659009&view=diff
==============================================================================
--- maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java (original)
+++ maven/artifact/branches/CAP/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java Wed May 21 22:15:02 2008
@@ -20,11 +20,11 @@
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -49,70 +49,56 @@
{
private Artifact originatingArtifact;
- private List versionRangeViolations;
+ private List<Exception> versionRangeViolations;
- private List metadataResolutionExceptions;
+ private List<ArtifactResolutionException> metadataResolutionExceptions;
- private List missingArtifacts;
+ private List<Artifact> missingArtifacts;
- private List circularDependencyExceptions;
+ private List<CyclicDependencyException> circularDependencyExceptions;
- private List errorArtifactExceptions;
+ private List<ArtifactResolutionException> errorArtifactExceptions;
// file system errors
- private List repositories;
+ private List<ArtifactRepository> repositories;
- private Set resolutionNodes;
+ private Set<ResolutionNode> resolutionNodes;
- private Set artifacts;
-
- //
+ private Set<Artifact> artifacts;
public Artifact getOriginatingArtifact()
{
return originatingArtifact;
}
- public ArtifactResolutionResult ListOriginatingArtifact( Artifact originatingArtifact )
+ public ArtifactResolutionResult ListOriginatingArtifact( final Artifact originatingArtifact )
{
this.originatingArtifact = originatingArtifact;
return this;
}
- /**
- *
- * @return set of Artifact instances
- */
-
- public Set getArtifacts()
+ public Set<Artifact> getArtifacts()
{
if ( artifacts == null )
{
- artifacts = new LinkedHashSet();
-
- for ( Iterator i = resolutionNodes.iterator(); i.hasNext(); )
- {
- ResolutionNode node = (ResolutionNode) i.next();
+ artifacts = new LinkedHashSet<Artifact>();
- artifacts.add( node.getArtifact() );
+ for (ResolutionNode node : resolutionNodes) {
+ artifacts.add(node.getArtifact());
}
}
return artifacts;
}
- /**
- *
- * @return Set of ResolutionNode instances
- */
public Set getArtifactResolutionNodes()
{
return resolutionNodes == null ? Collections.EMPTY_SET : resolutionNodes;
}
- public ArtifactResolutionResult setArtifactResolutionNodes( Set resolutionNodes )
+ public ArtifactResolutionResult setArtifactResolutionNodes( final Set<ResolutionNode> resolutionNodes )
{
this.resolutionNodes = resolutionNodes;
@@ -136,7 +122,7 @@
return this;
}
- public ArtifactResolutionResult setUnresolvedArtifacts( List unresolvedArtifacts )
+ public ArtifactResolutionResult setUnresolvedArtifacts( final List<Artifact> unresolvedArtifacts )
{
this.missingArtifacts = unresolvedArtifacts;
@@ -196,7 +182,7 @@
public ArtifactResolutionException getMetadataResolutionException( int i )
{
- return (ArtifactResolutionException) metadataResolutionExceptions.get( i );
+ return metadataResolutionExceptions.get( i );
}
public List getMetadataResolutionExceptions()
@@ -222,9 +208,13 @@
return this;
}
- public List getErrorArtifactExceptions()
+ public List<ArtifactResolutionException> getErrorArtifactExceptions()
{
- return errorArtifactExceptions == null ? Collections.EMPTY_LIST : errorArtifactExceptions;
+ if (errorArtifactExceptions == null) {
+ return Collections.emptyList();
+ }
+
+ return errorArtifactExceptions;
}
// ------------------------------------------------------------------------
@@ -247,37 +237,47 @@
public CyclicDependencyException getCircularDependencyException( int i )
{
- return (CyclicDependencyException) circularDependencyExceptions.get( i );
+ return circularDependencyExceptions.get( i );
}
- public List getCircularDependencyExceptions()
+ public List<CyclicDependencyException> getCircularDependencyExceptions()
{
- return circularDependencyExceptions == null ? Collections.EMPTY_LIST : circularDependencyExceptions;
+ if (circularDependencyExceptions == null) {
+ return Collections.emptyList();
+ }
+
+ return circularDependencyExceptions;
}
// ------------------------------------------------------------------------
- //
- // ------------------------------------------------------------------------
-
// Repositories
+ // ------------------------------------------------------------------------
- public List getRepositories()
+ public List<ArtifactRepository> getRepositories()
{
- return repositories == null ? Collections.EMPTY_LIST : repositories;
+ if (repositories == null) {
+ return Collections.emptyList();
+ }
+
+ return repositories;
}
- public ArtifactResolutionResult setRepositories( List repositories )
+ public ArtifactResolutionResult setRepositories( final List<ArtifactRepository> repositories )
{
this.repositories = repositories;
return this;
}
- private List initList( List l )
+ //
+ // Internal
+ //
+
+ private <T> List<T> initList( final List<T> l )
{
if ( l == null )
{
- return new ArrayList();
+ return new ArrayList<T>();
}
return l;
}