http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java deleted file mode 100644 index 37d296e..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java +++ /dev/null @@ -1,773 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -import javax.inject.Inject; -import javax.inject.Named; - -import org.eclipse.aether.RepositoryEvent; -import org.eclipse.aether.RepositoryEvent.EventType; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.RequestTrace; -import org.eclipse.aether.SyncContext; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.artifact.ArtifactProperties; -import org.eclipse.aether.impl.ArtifactResolver; -import org.eclipse.aether.impl.OfflineController; -import org.eclipse.aether.impl.RemoteRepositoryManager; -import org.eclipse.aether.impl.RepositoryConnectorProvider; -import org.eclipse.aether.impl.RepositoryEventDispatcher; -import org.eclipse.aether.impl.SyncContextFactory; -import org.eclipse.aether.impl.UpdateCheck; -import org.eclipse.aether.impl.UpdateCheckManager; -import org.eclipse.aether.impl.VersionResolver; -import org.eclipse.aether.repository.ArtifactRepository; -import org.eclipse.aether.repository.LocalArtifactRegistration; -import org.eclipse.aether.repository.LocalArtifactRequest; -import org.eclipse.aether.repository.LocalArtifactResult; -import org.eclipse.aether.repository.LocalRepository; -import org.eclipse.aether.repository.LocalRepositoryManager; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.repository.RepositoryPolicy; -import org.eclipse.aether.repository.WorkspaceReader; -import org.eclipse.aether.resolution.ArtifactRequest; -import org.eclipse.aether.resolution.ArtifactResolutionException; -import org.eclipse.aether.resolution.ArtifactResult; -import org.eclipse.aether.resolution.ResolutionErrorPolicy; -import org.eclipse.aether.resolution.VersionRequest; -import org.eclipse.aether.resolution.VersionResolutionException; -import org.eclipse.aether.resolution.VersionResult; -import org.eclipse.aether.spi.connector.ArtifactDownload; -import org.eclipse.aether.spi.connector.RepositoryConnector; -import org.eclipse.aether.spi.io.FileProcessor; -import org.eclipse.aether.spi.locator.Service; -import org.eclipse.aether.spi.locator.ServiceLocator; -import org.eclipse.aether.spi.log.Logger; -import org.eclipse.aether.spi.log.LoggerFactory; -import org.eclipse.aether.spi.log.NullLoggerFactory; -import org.eclipse.aether.transfer.ArtifactNotFoundException; -import org.eclipse.aether.transfer.ArtifactTransferException; -import org.eclipse.aether.transfer.NoRepositoryConnectorException; -import org.eclipse.aether.transfer.RepositoryOfflineException; -import org.eclipse.aether.util.ConfigUtils; - -/** - */ -@Named -public class DefaultArtifactResolver - implements ArtifactResolver, Service -{ - - private static final String CONFIG_PROP_SNAPSHOT_NORMALIZATION = "aether.artifactResolver.snapshotNormalization"; - - private Logger logger = NullLoggerFactory.LOGGER; - - private FileProcessor fileProcessor; - - private RepositoryEventDispatcher repositoryEventDispatcher; - - private VersionResolver versionResolver; - - private UpdateCheckManager updateCheckManager; - - private RepositoryConnectorProvider repositoryConnectorProvider; - - private RemoteRepositoryManager remoteRepositoryManager; - - private SyncContextFactory syncContextFactory; - - private OfflineController offlineController; - - public DefaultArtifactResolver() - { - // enables default constructor - } - - @Inject - DefaultArtifactResolver( FileProcessor fileProcessor, RepositoryEventDispatcher repositoryEventDispatcher, - VersionResolver versionResolver, UpdateCheckManager updateCheckManager, - RepositoryConnectorProvider repositoryConnectorProvider, - RemoteRepositoryManager remoteRepositoryManager, SyncContextFactory syncContextFactory, - OfflineController offlineController, LoggerFactory loggerFactory ) - { - setFileProcessor( fileProcessor ); - setRepositoryEventDispatcher( repositoryEventDispatcher ); - setVersionResolver( versionResolver ); - setUpdateCheckManager( updateCheckManager ); - setRepositoryConnectorProvider( repositoryConnectorProvider ); - setRemoteRepositoryManager( remoteRepositoryManager ); - setSyncContextFactory( syncContextFactory ); - setOfflineController( offlineController ); - setLoggerFactory( loggerFactory ); - } - - public void initService( ServiceLocator locator ) - { - setLoggerFactory( locator.getService( LoggerFactory.class ) ); - setFileProcessor( locator.getService( FileProcessor.class ) ); - setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) ); - setVersionResolver( locator.getService( VersionResolver.class ) ); - setUpdateCheckManager( locator.getService( UpdateCheckManager.class ) ); - setRepositoryConnectorProvider( locator.getService( RepositoryConnectorProvider.class ) ); - setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) ); - setSyncContextFactory( locator.getService( SyncContextFactory.class ) ); - setOfflineController( locator.getService( OfflineController.class ) ); - } - - public DefaultArtifactResolver setLoggerFactory( LoggerFactory loggerFactory ) - { - this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() ); - return this; - } - - public DefaultArtifactResolver setFileProcessor( FileProcessor fileProcessor ) - { - if ( fileProcessor == null ) - { - throw new IllegalArgumentException( "file processor has not been specified" ); - } - this.fileProcessor = fileProcessor; - return this; - } - - public DefaultArtifactResolver setRepositoryEventDispatcher( RepositoryEventDispatcher repositoryEventDispatcher ) - { - if ( repositoryEventDispatcher == null ) - { - throw new IllegalArgumentException( "repository event dispatcher has not been specified" ); - } - this.repositoryEventDispatcher = repositoryEventDispatcher; - return this; - } - - public DefaultArtifactResolver setVersionResolver( VersionResolver versionResolver ) - { - if ( versionResolver == null ) - { - throw new IllegalArgumentException( "version resolver has not been specified" ); - } - this.versionResolver = versionResolver; - return this; - } - - public DefaultArtifactResolver setUpdateCheckManager( UpdateCheckManager updateCheckManager ) - { - if ( updateCheckManager == null ) - { - throw new IllegalArgumentException( "update check manager has not been specified" ); - } - this.updateCheckManager = updateCheckManager; - return this; - } - - public DefaultArtifactResolver setRepositoryConnectorProvider( RepositoryConnectorProvider repositoryConnectorProvider ) - { - if ( repositoryConnectorProvider == null ) - { - throw new IllegalArgumentException( "repository connector provider has not been specified" ); - } - this.repositoryConnectorProvider = repositoryConnectorProvider; - return this; - } - - public DefaultArtifactResolver setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager ) - { - if ( remoteRepositoryManager == null ) - { - throw new IllegalArgumentException( "remote repository manager has not been specified" ); - } - this.remoteRepositoryManager = remoteRepositoryManager; - return this; - } - - public DefaultArtifactResolver setSyncContextFactory( SyncContextFactory syncContextFactory ) - { - if ( syncContextFactory == null ) - { - throw new IllegalArgumentException( "sync context factory has not been specified" ); - } - this.syncContextFactory = syncContextFactory; - return this; - } - - public DefaultArtifactResolver setOfflineController( OfflineController offlineController ) - { - if ( offlineController == null ) - { - throw new IllegalArgumentException( "offline controller has not been specified" ); - } - this.offlineController = offlineController; - return this; - } - - public ArtifactResult resolveArtifact( RepositorySystemSession session, ArtifactRequest request ) - throws ArtifactResolutionException - { - return resolveArtifacts( session, Collections.singleton( request ) ).get( 0 ); - } - - public List<ArtifactResult> resolveArtifacts( RepositorySystemSession session, - Collection<? extends ArtifactRequest> requests ) - throws ArtifactResolutionException - { - SyncContext syncContext = syncContextFactory.newInstance( session, false ); - - try - { - Collection<Artifact> artifacts = new ArrayList<Artifact>( requests.size() ); - for ( ArtifactRequest request : requests ) - { - if ( request.getArtifact().getProperty( ArtifactProperties.LOCAL_PATH, null ) != null ) - { - continue; - } - artifacts.add( request.getArtifact() ); - } - - syncContext.acquire( artifacts, null ); - - return resolve( session, requests ); - } - finally - { - syncContext.close(); - } - } - - private List<ArtifactResult> resolve( RepositorySystemSession session, - Collection<? extends ArtifactRequest> requests ) - throws ArtifactResolutionException - { - List<ArtifactResult> results = new ArrayList<ArtifactResult>( requests.size() ); - boolean failures = false; - - LocalRepositoryManager lrm = session.getLocalRepositoryManager(); - WorkspaceReader workspace = session.getWorkspaceReader(); - - List<ResolutionGroup> groups = new ArrayList<ResolutionGroup>(); - - for ( ArtifactRequest request : requests ) - { - RequestTrace trace = RequestTrace.newChild( request.getTrace(), request ); - - ArtifactResult result = new ArtifactResult( request ); - results.add( result ); - - Artifact artifact = request.getArtifact(); - List<RemoteRepository> repos = request.getRepositories(); - - artifactResolving( session, trace, artifact ); - - String localPath = artifact.getProperty( ArtifactProperties.LOCAL_PATH, null ); - if ( localPath != null ) - { - // unhosted artifact, just validate file - File file = new File( localPath ); - if ( !file.isFile() ) - { - failures = true; - result.addException( new ArtifactNotFoundException( artifact, null ) ); - } - else - { - artifact = artifact.setFile( file ); - result.setArtifact( artifact ); - artifactResolved( session, trace, artifact, null, result.getExceptions() ); - } - continue; - } - - VersionResult versionResult; - try - { - VersionRequest versionRequest = new VersionRequest( artifact, repos, request.getRequestContext() ); - versionRequest.setTrace( trace ); - versionResult = versionResolver.resolveVersion( session, versionRequest ); - } - catch ( VersionResolutionException e ) - { - result.addException( e ); - continue; - } - - artifact = artifact.setVersion( versionResult.getVersion() ); - - if ( versionResult.getRepository() != null ) - { - if ( versionResult.getRepository() instanceof RemoteRepository ) - { - repos = Collections.singletonList( (RemoteRepository) versionResult.getRepository() ); - } - else - { - repos = Collections.emptyList(); - } - } - - if ( workspace != null ) - { - File file = workspace.findArtifact( artifact ); - if ( file != null ) - { - artifact = artifact.setFile( file ); - result.setArtifact( artifact ); - result.setRepository( workspace.getRepository() ); - artifactResolved( session, trace, artifact, result.getRepository(), null ); - continue; - } - } - - LocalArtifactResult local = - lrm.find( session, new LocalArtifactRequest( artifact, repos, request.getRequestContext() ) ); - if ( isLocallyInstalled( local, versionResult ) ) - { - if ( local.getRepository() != null ) - { - result.setRepository( local.getRepository() ); - } - else - { - result.setRepository( lrm.getRepository() ); - } - try - { - artifact = artifact.setFile( getFile( session, artifact, local.getFile() ) ); - result.setArtifact( artifact ); - artifactResolved( session, trace, artifact, result.getRepository(), null ); - } - catch ( ArtifactTransferException e ) - { - result.addException( e ); - } - if ( !local.isAvailable() ) - { - /* - * NOTE: Interop with simple local repository: An artifact installed by a simple local repo manager - * will not show up in the repository tracking file of the enhanced local repository. If however the - * maven-metadata-local.xml tells us the artifact was installed locally, we sync the repository - * tracking file. - */ - lrm.add( session, new LocalArtifactRegistration( artifact ) ); - } - continue; - } - else if ( local.getFile() != null ) - { - logger.debug( "Verifying availability of " + local.getFile() + " from " + repos ); - } - - AtomicBoolean resolved = new AtomicBoolean( false ); - Iterator<ResolutionGroup> groupIt = groups.iterator(); - for ( RemoteRepository repo : repos ) - { - if ( !repo.getPolicy( artifact.isSnapshot() ).isEnabled() ) - { - continue; - } - - try - { - Utils.checkOffline( session, offlineController, repo ); - } - catch ( RepositoryOfflineException e ) - { - Exception exception = - new ArtifactNotFoundException( artifact, repo, "Cannot access " + repo.getId() + " (" - + repo.getUrl() + ") in offline mode and the artifact " + artifact - + " has not been downloaded from it before.", e ); - result.addException( exception ); - continue; - } - - ResolutionGroup group = null; - while ( groupIt.hasNext() ) - { - ResolutionGroup t = groupIt.next(); - if ( t.matches( repo ) ) - { - group = t; - break; - } - } - if ( group == null ) - { - group = new ResolutionGroup( repo ); - groups.add( group ); - groupIt = Collections.<ResolutionGroup>emptyList().iterator(); - } - group.items.add( new ResolutionItem( trace, artifact, resolved, result, local, repo ) ); - } - } - - for ( ResolutionGroup group : groups ) - { - performDownloads( session, group ); - } - - for ( ArtifactResult result : results ) - { - ArtifactRequest request = result.getRequest(); - - Artifact artifact = result.getArtifact(); - if ( artifact == null || artifact.getFile() == null ) - { - failures = true; - if ( result.getExceptions().isEmpty() ) - { - Exception exception = new ArtifactNotFoundException( request.getArtifact(), null ); - result.addException( exception ); - } - RequestTrace trace = RequestTrace.newChild( request.getTrace(), request ); - artifactResolved( session, trace, request.getArtifact(), null, result.getExceptions() ); - } - } - - if ( failures ) - { - throw new ArtifactResolutionException( results ); - } - - return results; - } - - private boolean isLocallyInstalled( LocalArtifactResult lar, VersionResult vr ) - { - if ( lar.isAvailable() ) - { - return true; - } - if ( lar.getFile() != null ) - { - if ( vr.getRepository() instanceof LocalRepository ) - { - // resolution of (snapshot) version found locally installed artifact - return true; - } - else if ( vr.getRepository() == null && lar.getRequest().getRepositories().isEmpty() ) - { - // resolution of version range found locally installed artifact - return true; - } - } - return false; - } - - private File getFile( RepositorySystemSession session, Artifact artifact, File file ) - throws ArtifactTransferException - { - if ( artifact.isSnapshot() && !artifact.getVersion().equals( artifact.getBaseVersion() ) - && ConfigUtils.getBoolean( session, true, CONFIG_PROP_SNAPSHOT_NORMALIZATION ) ) - { - String name = file.getName().replace( artifact.getVersion(), artifact.getBaseVersion() ); - File dst = new File( file.getParent(), name ); - - boolean copy = dst.length() != file.length() || dst.lastModified() != file.lastModified(); - if ( copy ) - { - try - { - fileProcessor.copy( file, dst ); - dst.setLastModified( file.lastModified() ); - } - catch ( IOException e ) - { - throw new ArtifactTransferException( artifact, null, e ); - } - } - - file = dst; - } - - return file; - } - - private void performDownloads( RepositorySystemSession session, ResolutionGroup group ) - { - List<ArtifactDownload> downloads = gatherDownloads( session, group ); - if ( downloads.isEmpty() ) - { - return; - } - - for ( ArtifactDownload download : downloads ) - { - artifactDownloading( session, download.getTrace(), download.getArtifact(), group.repository ); - } - - try - { - RepositoryConnector connector = - repositoryConnectorProvider.newRepositoryConnector( session, group.repository ); - try - { - connector.get( downloads, null ); - } - finally - { - connector.close(); - } - } - catch ( NoRepositoryConnectorException e ) - { - for ( ArtifactDownload download : downloads ) - { - download.setException( new ArtifactTransferException( download.getArtifact(), group.repository, e ) ); - } - } - - evaluateDownloads( session, group ); - } - - private List<ArtifactDownload> gatherDownloads( RepositorySystemSession session, ResolutionGroup group ) - { - LocalRepositoryManager lrm = session.getLocalRepositoryManager(); - List<ArtifactDownload> downloads = new ArrayList<ArtifactDownload>(); - - for ( ResolutionItem item : group.items ) - { - Artifact artifact = item.artifact; - - if ( item.resolved.get() ) - { - // resolved in previous resolution group - continue; - } - - ArtifactDownload download = new ArtifactDownload(); - download.setArtifact( artifact ); - download.setRequestContext( item.request.getRequestContext() ); - download.setListener( SafeTransferListener.wrap( session, logger ) ); - download.setTrace( item.trace ); - if ( item.local.getFile() != null ) - { - download.setFile( item.local.getFile() ); - download.setExistenceCheck( true ); - } - else - { - String path = - lrm.getPathForRemoteArtifact( artifact, group.repository, item.request.getRequestContext() ); - download.setFile( new File( lrm.getRepository().getBasedir(), path ) ); - } - - boolean snapshot = artifact.isSnapshot(); - RepositoryPolicy policy = - remoteRepositoryManager.getPolicy( session, group.repository, !snapshot, snapshot ); - - int errorPolicy = Utils.getPolicy( session, artifact, group.repository ); - if ( ( errorPolicy & ResolutionErrorPolicy.CACHE_ALL ) != 0 ) - { - UpdateCheck<Artifact, ArtifactTransferException> check = - new UpdateCheck<Artifact, ArtifactTransferException>(); - check.setItem( artifact ); - check.setFile( download.getFile() ); - check.setFileValid( false ); - check.setRepository( group.repository ); - check.setPolicy( policy.getUpdatePolicy() ); - item.updateCheck = check; - updateCheckManager.checkArtifact( session, check ); - if ( !check.isRequired() ) - { - item.result.addException( check.getException() ); - continue; - } - } - - download.setChecksumPolicy( policy.getChecksumPolicy() ); - download.setRepositories( item.repository.getMirroredRepositories() ); - downloads.add( download ); - item.download = download; - } - - return downloads; - } - - private void evaluateDownloads( RepositorySystemSession session, ResolutionGroup group ) - { - LocalRepositoryManager lrm = session.getLocalRepositoryManager(); - - for ( ResolutionItem item : group.items ) - { - ArtifactDownload download = item.download; - if ( download == null ) - { - continue; - } - - Artifact artifact = download.getArtifact(); - if ( download.getException() == null ) - { - item.resolved.set( true ); - item.result.setRepository( group.repository ); - try - { - artifact = artifact.setFile( getFile( session, artifact, download.getFile() ) ); - item.result.setArtifact( artifact ); - - lrm.add( session, - new LocalArtifactRegistration( artifact, group.repository, download.getSupportedContexts() ) ); - } - catch ( ArtifactTransferException e ) - { - download.setException( e ); - item.result.addException( e ); - } - } - else - { - item.result.addException( download.getException() ); - } - - /* - * NOTE: Touch after registration with local repo to ensure concurrent resolution is not rejected with - * "already updated" via session data when actual update to local repo is still pending. - */ - if ( item.updateCheck != null ) - { - item.updateCheck.setException( download.getException() ); - updateCheckManager.touchArtifact( session, item.updateCheck ); - } - - artifactDownloaded( session, download.getTrace(), artifact, group.repository, download.getException() ); - if ( download.getException() == null ) - { - artifactResolved( session, download.getTrace(), artifact, group.repository, null ); - } - } - } - - private void artifactResolving( RepositorySystemSession session, RequestTrace trace, Artifact artifact ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_RESOLVING ); - event.setTrace( trace ); - event.setArtifact( artifact ); - - repositoryEventDispatcher.dispatch( event.build() ); - } - - private void artifactResolved( RepositorySystemSession session, RequestTrace trace, Artifact artifact, - ArtifactRepository repository, List<Exception> exceptions ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_RESOLVED ); - event.setTrace( trace ); - event.setArtifact( artifact ); - event.setRepository( repository ); - event.setExceptions( exceptions ); - if ( artifact != null ) - { - event.setFile( artifact.getFile() ); - } - - repositoryEventDispatcher.dispatch( event.build() ); - } - - private void artifactDownloading( RepositorySystemSession session, RequestTrace trace, Artifact artifact, - RemoteRepository repository ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DOWNLOADING ); - event.setTrace( trace ); - event.setArtifact( artifact ); - event.setRepository( repository ); - - repositoryEventDispatcher.dispatch( event.build() ); - } - - private void artifactDownloaded( RepositorySystemSession session, RequestTrace trace, Artifact artifact, - RemoteRepository repository, Exception exception ) - { - RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DOWNLOADED ); - event.setTrace( trace ); - event.setArtifact( artifact ); - event.setRepository( repository ); - event.setException( exception ); - if ( artifact != null ) - { - event.setFile( artifact.getFile() ); - } - - repositoryEventDispatcher.dispatch( event.build() ); - } - - static class ResolutionGroup - { - - final RemoteRepository repository; - - final List<ResolutionItem> items = new ArrayList<ResolutionItem>(); - - ResolutionGroup( RemoteRepository repository ) - { - this.repository = repository; - } - - boolean matches( RemoteRepository repo ) - { - return repository.getUrl().equals( repo.getUrl() ) - && repository.getContentType().equals( repo.getContentType() ) - && repository.isRepositoryManager() == repo.isRepositoryManager(); - } - - } - - static class ResolutionItem - { - - final RequestTrace trace; - - final ArtifactRequest request; - - final ArtifactResult result; - - final LocalArtifactResult local; - - final RemoteRepository repository; - - final Artifact artifact; - - final AtomicBoolean resolved; - - ArtifactDownload download; - - UpdateCheck<Artifact, ArtifactTransferException> updateCheck; - - ResolutionItem( RequestTrace trace, Artifact artifact, AtomicBoolean resolved, ArtifactResult result, - LocalArtifactResult local, RemoteRepository repository ) - { - this.trace = trace; - this.artifact = artifact; - this.resolved = resolved; - this.result = result; - this.request = result.getRequest(); - this.local = local; - this.repository = repository; - } - - } - -}
http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java deleted file mode 100644 index 20c0484..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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 javax.inject.Inject; -import javax.inject.Named; - -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.repository.RepositoryPolicy; -import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy; -import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider; -import org.eclipse.aether.spi.locator.Service; -import org.eclipse.aether.spi.locator.ServiceLocator; -import org.eclipse.aether.spi.log.LoggerFactory; -import org.eclipse.aether.spi.log.NullLoggerFactory; -import org.eclipse.aether.transfer.TransferResource; - -/** - */ -@Named -public final class DefaultChecksumPolicyProvider - implements ChecksumPolicyProvider, Service -{ - - private static final int ORDINAL_IGNORE = 0; - - private static final int ORDINAL_WARN = 1; - - private static final int ORDINAL_FAIL = 2; - - private LoggerFactory loggerFactory = NullLoggerFactory.INSTANCE; - - public DefaultChecksumPolicyProvider() - { - // enables default constructor - } - - @Inject - DefaultChecksumPolicyProvider( LoggerFactory loggerFactory ) - { - setLoggerFactory( loggerFactory ); - } - - public void initService( ServiceLocator locator ) - { - setLoggerFactory( locator.getService( LoggerFactory.class ) ); - } - - public DefaultChecksumPolicyProvider setLoggerFactory( LoggerFactory loggerFactory ) - { - this.loggerFactory = loggerFactory; - return this; - } - - public ChecksumPolicy newChecksumPolicy( RepositorySystemSession session, RemoteRepository repository, - TransferResource resource, String policy ) - { - if ( RepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) ) - { - return null; - } - if ( RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) ) - { - return new FailChecksumPolicy( loggerFactory, resource ); - } - return new WarnChecksumPolicy( loggerFactory, resource ); - } - - public String getEffectiveChecksumPolicy( RepositorySystemSession session, String policy1, String policy2 ) - { - if ( policy1 != null && policy1.equals( policy2 ) ) - { - return policy1; - } - int ordinal1 = ordinalOfPolicy( policy1 ); - int ordinal2 = ordinalOfPolicy( policy2 ); - if ( ordinal2 < ordinal1 ) - { - return ( ordinal2 != ORDINAL_WARN ) ? policy2 : RepositoryPolicy.CHECKSUM_POLICY_WARN; - } - else - { - return ( ordinal1 != ORDINAL_WARN ) ? policy1 : RepositoryPolicy.CHECKSUM_POLICY_WARN; - } - } - - private static int ordinalOfPolicy( String policy ) - { - if ( RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) ) - { - return ORDINAL_FAIL; - } - else if ( RepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) ) - { - return ORDINAL_IGNORE; - } - else - { - return ORDINAL_WARN; - } - } - -} http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java deleted file mode 100644 index 1ad6cc7..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectionContext.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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.List; - -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.collection.DependencyCollectionContext; -import org.eclipse.aether.graph.Dependency; - -/** - * @see DefaultDependencyCollector - */ -final class DefaultDependencyCollectionContext - implements DependencyCollectionContext -{ - - private final RepositorySystemSession session; - - private Artifact artifact; - - private Dependency dependency; - - private List<Dependency> managedDependencies; - - public DefaultDependencyCollectionContext( RepositorySystemSession session, Artifact artifact, - Dependency dependency, List<Dependency> managedDependencies ) - { - this.session = session; - this.artifact = ( dependency != null ) ? dependency.getArtifact() : artifact; - this.dependency = dependency; - this.managedDependencies = managedDependencies; - } - - public RepositorySystemSession getSession() - { - return session; - } - - public Artifact getArtifact() - { - return artifact; - } - - public Dependency getDependency() - { - return dependency; - } - - public List<Dependency> getManagedDependencies() - { - return managedDependencies; - } - - public void set( Dependency dependency, List<Dependency> managedDependencies ) - { - artifact = dependency.getArtifact(); - this.dependency = dependency; - this.managedDependencies = managedDependencies; - } - - @Override - public String toString() - { - return String.valueOf( getDependency() ); - } - -} http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java deleted file mode 100644 index 90fc208..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java +++ /dev/null @@ -1,872 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Named; - -import org.eclipse.aether.DefaultRepositorySystemSession; -import org.eclipse.aether.RepositoryException; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.RequestTrace; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.artifact.ArtifactProperties; -import org.eclipse.aether.collection.CollectRequest; -import org.eclipse.aether.collection.CollectResult; -import org.eclipse.aether.collection.DependencyCollectionException; -import org.eclipse.aether.collection.DependencyGraphTransformer; -import org.eclipse.aether.collection.DependencyManagement; -import org.eclipse.aether.collection.DependencyManager; -import org.eclipse.aether.collection.DependencySelector; -import org.eclipse.aether.collection.DependencyTraverser; -import org.eclipse.aether.collection.VersionFilter; -import org.eclipse.aether.graph.DefaultDependencyNode; -import org.eclipse.aether.graph.Dependency; -import org.eclipse.aether.graph.DependencyNode; -import org.eclipse.aether.impl.ArtifactDescriptorReader; -import org.eclipse.aether.impl.DependencyCollector; -import org.eclipse.aether.impl.RemoteRepositoryManager; -import org.eclipse.aether.impl.VersionRangeResolver; -import org.eclipse.aether.repository.ArtifactRepository; -import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.aether.resolution.ArtifactDescriptorException; -import org.eclipse.aether.resolution.ArtifactDescriptorRequest; -import org.eclipse.aether.resolution.ArtifactDescriptorResult; -import org.eclipse.aether.resolution.VersionRangeRequest; -import org.eclipse.aether.resolution.VersionRangeResolutionException; -import org.eclipse.aether.resolution.VersionRangeResult; -import org.eclipse.aether.spi.locator.Service; -import org.eclipse.aether.spi.locator.ServiceLocator; -import org.eclipse.aether.spi.log.Logger; -import org.eclipse.aether.spi.log.LoggerFactory; -import org.eclipse.aether.spi.log.NullLoggerFactory; -import org.eclipse.aether.util.ConfigUtils; -import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; -import org.eclipse.aether.util.graph.transformer.TransformationContextKeys; -import org.eclipse.aether.version.Version; - -/** - */ -@Named -public class DefaultDependencyCollector - implements DependencyCollector, Service -{ - - private static final String CONFIG_PROP_MAX_EXCEPTIONS = "aether.dependencyCollector.maxExceptions"; - - private static final String CONFIG_PROP_MAX_CYCLES = "aether.dependencyCollector.maxCycles"; - - private Logger logger = NullLoggerFactory.LOGGER; - - private RemoteRepositoryManager remoteRepositoryManager; - - private ArtifactDescriptorReader descriptorReader; - - private VersionRangeResolver versionRangeResolver; - - public DefaultDependencyCollector() - { - // enables default constructor - } - - @Inject - DefaultDependencyCollector( RemoteRepositoryManager remoteRepositoryManager, - ArtifactDescriptorReader artifactDescriptorReader, - VersionRangeResolver versionRangeResolver, LoggerFactory loggerFactory ) - { - setRemoteRepositoryManager( remoteRepositoryManager ); - setArtifactDescriptorReader( artifactDescriptorReader ); - setVersionRangeResolver( versionRangeResolver ); - setLoggerFactory( loggerFactory ); - } - - public void initService( ServiceLocator locator ) - { - setLoggerFactory( locator.getService( LoggerFactory.class ) ); - setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) ); - setArtifactDescriptorReader( locator.getService( ArtifactDescriptorReader.class ) ); - setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) ); - } - - public DefaultDependencyCollector setLoggerFactory( LoggerFactory loggerFactory ) - { - this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() ); - return this; - } - - public DefaultDependencyCollector setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager ) - { - if ( remoteRepositoryManager == null ) - { - throw new IllegalArgumentException( "remote repository manager has not been specified" ); - } - this.remoteRepositoryManager = remoteRepositoryManager; - return this; - } - - public DefaultDependencyCollector setArtifactDescriptorReader( ArtifactDescriptorReader artifactDescriptorReader ) - { - if ( artifactDescriptorReader == null ) - { - throw new IllegalArgumentException( "artifact descriptor reader has not been specified" ); - } - descriptorReader = artifactDescriptorReader; - return this; - } - - public DefaultDependencyCollector setVersionRangeResolver( VersionRangeResolver versionRangeResolver ) - { - if ( versionRangeResolver == null ) - { - throw new IllegalArgumentException( "version range resolver has not been specified" ); - } - this.versionRangeResolver = versionRangeResolver; - return this; - } - - public CollectResult collectDependencies( RepositorySystemSession session, CollectRequest request ) - throws DependencyCollectionException - { - session = optimizeSession( session ); - - RequestTrace trace = RequestTrace.newChild( request.getTrace(), request ); - - CollectResult result = new CollectResult( request ); - - DependencySelector depSelector = session.getDependencySelector(); - DependencyManager depManager = session.getDependencyManager(); - DependencyTraverser depTraverser = session.getDependencyTraverser(); - VersionFilter verFilter = session.getVersionFilter(); - - Dependency root = request.getRoot(); - List<RemoteRepository> repositories = request.getRepositories(); - List<Dependency> dependencies = request.getDependencies(); - List<Dependency> managedDependencies = request.getManagedDependencies(); - - Map<String, Object> stats = logger.isDebugEnabled() ? new LinkedHashMap<String, Object>() : null; - long time1 = System.currentTimeMillis(); - - DefaultDependencyNode node; - if ( root != null ) - { - List<? extends Version> versions; - VersionRangeResult rangeResult; - try - { - VersionRangeRequest rangeRequest = - new VersionRangeRequest( root.getArtifact(), request.getRepositories(), - request.getRequestContext() ); - rangeRequest.setTrace( trace ); - rangeResult = versionRangeResolver.resolveVersionRange( session, rangeRequest ); - versions = filterVersions( root, rangeResult, verFilter, new DefaultVersionFilterContext( session ) ); - } - catch ( VersionRangeResolutionException e ) - { - result.addException( e ); - throw new DependencyCollectionException( result, e.getMessage() ); - } - - Version version = versions.get( versions.size() - 1 ); - root = root.setArtifact( root.getArtifact().setVersion( version.toString() ) ); - - ArtifactDescriptorResult descriptorResult; - try - { - ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest(); - descriptorRequest.setArtifact( root.getArtifact() ); - descriptorRequest.setRepositories( request.getRepositories() ); - descriptorRequest.setRequestContext( request.getRequestContext() ); - descriptorRequest.setTrace( trace ); - if ( isLackingDescriptor( root.getArtifact() ) ) - { - descriptorResult = new ArtifactDescriptorResult( descriptorRequest ); - } - else - { - descriptorResult = descriptorReader.readArtifactDescriptor( session, descriptorRequest ); - } - } - catch ( ArtifactDescriptorException e ) - { - result.addException( e ); - throw new DependencyCollectionException( result, e.getMessage() ); - } - - root = root.setArtifact( descriptorResult.getArtifact() ); - - if ( !session.isIgnoreArtifactDescriptorRepositories() ) - { - repositories = remoteRepositoryManager.aggregateRepositories( session, repositories, - descriptorResult.getRepositories(), - true ); - } - dependencies = mergeDeps( dependencies, descriptorResult.getDependencies() ); - managedDependencies = mergeDeps( managedDependencies, descriptorResult.getManagedDependencies() ); - - node = new DefaultDependencyNode( root ); - node.setRequestContext( request.getRequestContext() ); - node.setRelocations( descriptorResult.getRelocations() ); - node.setVersionConstraint( rangeResult.getVersionConstraint() ); - node.setVersion( version ); - node.setAliases( descriptorResult.getAliases() ); - node.setRepositories( request.getRepositories() ); - } - else - { - node = new DefaultDependencyNode( request.getRootArtifact() ); - } - - result.setRoot( node ); - - boolean traverse = root == null || depTraverser == null || depTraverser.traverseDependency( root ); - String errorPath = null; - if ( traverse && !dependencies.isEmpty() ) - { - DataPool pool = new DataPool( session ); - - NodeStack nodes = new NodeStack(); - nodes.push( node ); - - DefaultDependencyCollectionContext context = - new DefaultDependencyCollectionContext( session, request.getRootArtifact(), root, managedDependencies ); - - DefaultVersionFilterContext versionContext = new DefaultVersionFilterContext( session ); - - Args args = new Args( session, trace, pool, nodes, context, versionContext, request ); - Results results = new Results( result, session ); - - process( args, results, dependencies, repositories, - depSelector != null ? depSelector.deriveChildSelector( context ) : null, - depManager != null ? depManager.deriveChildManager( context ) : null, - depTraverser != null ? depTraverser.deriveChildTraverser( context ) : null, - verFilter != null ? verFilter.deriveChildFilter( context ) : null ); - - errorPath = results.errorPath; - } - - long time2 = System.currentTimeMillis(); - - DependencyGraphTransformer transformer = session.getDependencyGraphTransformer(); - if ( transformer != null ) - { - try - { - DefaultDependencyGraphTransformationContext context = - new DefaultDependencyGraphTransformationContext( session ); - context.put( TransformationContextKeys.STATS, stats ); - result.setRoot( transformer.transformGraph( node, context ) ); - } - catch ( RepositoryException e ) - { - result.addException( e ); - } - } - - if ( stats != null ) - { - long time3 = System.currentTimeMillis(); - stats.put( "DefaultDependencyCollector.collectTime", time2 - time1 ); - stats.put( "DefaultDependencyCollector.transformTime", time3 - time2 ); - logger.debug( "Dependency collection stats: " + stats ); - } - - if ( errorPath != null ) - { - throw new DependencyCollectionException( result, "Failed to collect dependencies at " + errorPath ); - } - if ( !result.getExceptions().isEmpty() ) - { - throw new DependencyCollectionException( result ); - } - - return result; - } - - private static RepositorySystemSession optimizeSession( RepositorySystemSession session ) - { - DefaultRepositorySystemSession optimized = new DefaultRepositorySystemSession( session ); - optimized.setArtifactTypeRegistry( CachingArtifactTypeRegistry.newInstance( session ) ); - return optimized; - } - - private List<Dependency> mergeDeps( List<Dependency> dominant, List<Dependency> recessive ) - { - List<Dependency> result; - if ( dominant == null || dominant.isEmpty() ) - { - result = recessive; - } - else if ( recessive == null || recessive.isEmpty() ) - { - result = dominant; - } - else - { - int initialCapacity = dominant.size() + recessive.size(); - result = new ArrayList<Dependency>( initialCapacity ); - Collection<String> ids = new HashSet<String>( initialCapacity, 1.0f ); - for ( Dependency dependency : dominant ) - { - ids.add( getId( dependency.getArtifact() ) ); - result.add( dependency ); - } - for ( Dependency dependency : recessive ) - { - if ( !ids.contains( getId( dependency.getArtifact() ) ) ) - { - result.add( dependency ); - } - } - } - return result; - } - - private static String getId( Artifact a ) - { - return a.getGroupId() + ':' + a.getArtifactId() + ':' + a.getClassifier() + ':' + a.getExtension(); - } - - private void process( final Args args, Results results, List<Dependency> dependencies, - List<RemoteRepository> repositories, DependencySelector depSelector, - DependencyManager depManager, DependencyTraverser depTraverser, VersionFilter verFilter ) - { - for ( Dependency dependency : dependencies ) - { - processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, - dependency ); - } - } - - private void processDependency( Args args, Results results, List<RemoteRepository> repositories, - DependencySelector depSelector, DependencyManager depManager, - DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency ) - { - - List<Artifact> relocations = Collections.emptyList(); - boolean disableVersionManagement = false; - processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, dependency, - relocations, disableVersionManagement ); - } - - private void processDependency( Args args, Results results, List<RemoteRepository> repositories, - DependencySelector depSelector, DependencyManager depManager, - DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency, - List<Artifact> relocations, boolean disableVersionManagement ) - { - - if ( depSelector != null && !depSelector.selectDependency( dependency ) ) - { - return; - } - - PremanagedDependency preManaged = - PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState ); - dependency = preManaged.managedDependency; - - boolean noDescriptor = isLackingDescriptor( dependency.getArtifact() ); - - boolean traverse = !noDescriptor && ( depTraverser == null || depTraverser.traverseDependency( dependency ) ); - - List<? extends Version> versions; - VersionRangeResult rangeResult; - try - { - VersionRangeRequest rangeRequest = createVersionRangeRequest( args, repositories, dependency ); - - rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session ); - - versions = filterVersions( dependency, rangeResult, verFilter, args.versionContext ); - } - catch ( VersionRangeResolutionException e ) - { - results.addException( dependency, e, args.nodes ); - return; - } - - for ( Version version : versions ) - { - Artifact originalArtifact = dependency.getArtifact().setVersion( version.toString() ); - Dependency d = dependency.setArtifact( originalArtifact ); - - ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest( args, repositories, d ); - - final ArtifactDescriptorResult descriptorResult = - getArtifactDescriptorResult( args, results, noDescriptor, d, descriptorRequest ); - if ( descriptorResult != null ) - { - d = d.setArtifact( descriptorResult.getArtifact() ); - - DependencyNode node = args.nodes.top(); - - int cycleEntry = args.nodes.find( d.getArtifact() ); - if ( cycleEntry >= 0 ) - { - results.addCycle( args.nodes, cycleEntry, d ); - DependencyNode cycleNode = args.nodes.get( cycleEntry ); - if ( cycleNode.getDependency() != null ) - { - DefaultDependencyNode child = - createDependencyNode( relocations, preManaged, rangeResult, version, d, descriptorResult, - cycleNode ); - node.getChildren().add( child ); - continue; - } - } - - if ( !descriptorResult.getRelocations().isEmpty() ) - { - boolean disableVersionManagementSubsequently = - originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() ) - && originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() ); - - processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d, - descriptorResult.getRelocations(), disableVersionManagementSubsequently ); - return; - } - else - { - d = args.pool.intern( d.setArtifact( args.pool.intern( d.getArtifact() ) ) ); - - List<RemoteRepository> repos = - getRemoteRepositories( rangeResult.getRepository( version ), repositories ); - - DefaultDependencyNode child = - createDependencyNode( relocations, preManaged, rangeResult, version, d, - descriptorResult.getAliases(), repos, args.request.getRequestContext() ); - - node.getChildren().add( child ); - - boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty(); - if ( recurse ) - { - doRecurse( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d, - descriptorResult, child ); - } - } - } - else - { - DependencyNode node = args.nodes.top(); - List<RemoteRepository> repos = - getRemoteRepositories( rangeResult.getRepository( version ), repositories ); - DefaultDependencyNode child = - createDependencyNode( relocations, preManaged, rangeResult, version, d, null, repos, - args.request.getRequestContext() ); - node.getChildren().add( child ); - } - } - } - - private void doRecurse( Args args, Results results, List<RemoteRepository> repositories, - DependencySelector depSelector, DependencyManager depManager, - DependencyTraverser depTraverser, VersionFilter verFilter, Dependency d, - ArtifactDescriptorResult descriptorResult, DefaultDependencyNode child ) - { - DefaultDependencyCollectionContext context = args.collectionContext; - context.set( d, descriptorResult.getManagedDependencies() ); - - DependencySelector childSelector = depSelector != null ? depSelector.deriveChildSelector( context ) : null; - DependencyManager childManager = depManager != null ? depManager.deriveChildManager( context ) : null; - DependencyTraverser childTraverser = depTraverser != null ? depTraverser.deriveChildTraverser( context ) : null; - VersionFilter childFilter = verFilter != null ? verFilter.deriveChildFilter( context ) : null; - - final List<RemoteRepository> childRepos = args.ignoreRepos - ? repositories - : remoteRepositoryManager.aggregateRepositories( args.session, repositories, - descriptorResult.getRepositories(), true ); - - Object key = - args.pool.toKey( d.getArtifact(), childRepos, childSelector, childManager, childTraverser, childFilter ); - - List<DependencyNode> children = args.pool.getChildren( key ); - if ( children == null ) - { - args.pool.putChildren( key, child.getChildren() ); - - args.nodes.push( child ); - - process( args, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager, - childTraverser, childFilter ); - - args.nodes.pop(); - } - else - { - child.setChildren( children ); - } - } - - private ArtifactDescriptorResult getArtifactDescriptorResult( Args args, Results results, boolean noDescriptor, - Dependency d, - ArtifactDescriptorRequest descriptorRequest ) - { - return noDescriptor - ? new ArtifactDescriptorResult( descriptorRequest ) - : resolveCachedArtifactDescriptor( args.pool, descriptorRequest, args.session, d, results, args ); - } - - private ArtifactDescriptorResult resolveCachedArtifactDescriptor( DataPool pool, - ArtifactDescriptorRequest descriptorRequest, - RepositorySystemSession session, Dependency d, - Results results, Args args ) - { - Object key = pool.toKey( descriptorRequest ); - ArtifactDescriptorResult descriptorResult = pool.getDescriptor( key, descriptorRequest ); - if ( descriptorResult == null ) - { - try - { - descriptorResult = descriptorReader.readArtifactDescriptor( session, descriptorRequest ); - pool.putDescriptor( key, descriptorResult ); - } - catch ( ArtifactDescriptorException e ) - { - results.addException( d, e, args.nodes ); - pool.putDescriptor( key, e ); - return null; - } - - } - else if ( descriptorResult == DataPool.NO_DESCRIPTOR ) - { - return null; - } - - return descriptorResult; - } - - private static DefaultDependencyNode createDependencyNode( List<Artifact> relocations, - PremanagedDependency preManaged, - VersionRangeResult rangeResult, Version version, - Dependency d, Collection<Artifact> aliases, - List<RemoteRepository> repos, String requestContext ) - { - DefaultDependencyNode child = new DefaultDependencyNode( d ); - preManaged.applyTo( child ); - child.setRelocations( relocations ); - child.setVersionConstraint( rangeResult.getVersionConstraint() ); - child.setVersion( version ); - child.setAliases( aliases ); - child.setRepositories( repos ); - child.setRequestContext( requestContext ); - return child; - } - - private static DefaultDependencyNode createDependencyNode( List<Artifact> relocations, - PremanagedDependency preManaged, - VersionRangeResult rangeResult, Version version, - Dependency d, ArtifactDescriptorResult descriptorResult, - DependencyNode cycleNode ) - { - DefaultDependencyNode child = - createDependencyNode( relocations, preManaged, rangeResult, version, d, descriptorResult.getAliases(), - cycleNode.getRepositories(), cycleNode.getRequestContext() ); - child.setChildren( cycleNode.getChildren() ); - return child; - } - - private static ArtifactDescriptorRequest createArtifactDescriptorRequest( Args args, - List<RemoteRepository> repositories, - Dependency d ) - { - ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest(); - descriptorRequest.setArtifact( d.getArtifact() ); - descriptorRequest.setRepositories( repositories ); - descriptorRequest.setRequestContext( args.request.getRequestContext() ); - descriptorRequest.setTrace( args.trace ); - return descriptorRequest; - } - - private static VersionRangeRequest createVersionRangeRequest( Args args, List<RemoteRepository> repositories, - Dependency dependency ) - { - VersionRangeRequest rangeRequest = new VersionRangeRequest(); - rangeRequest.setArtifact( dependency.getArtifact() ); - rangeRequest.setRepositories( repositories ); - rangeRequest.setRequestContext( args.request.getRequestContext() ); - rangeRequest.setTrace( args.trace ); - return rangeRequest; - } - - private VersionRangeResult cachedResolveRangeResult( VersionRangeRequest rangeRequest, DataPool pool, - RepositorySystemSession session ) - throws VersionRangeResolutionException - { - Object key = pool.toKey( rangeRequest ); - VersionRangeResult rangeResult = pool.getConstraint( key, rangeRequest ); - if ( rangeResult == null ) - { - rangeResult = versionRangeResolver.resolveVersionRange( session, rangeRequest ); - pool.putConstraint( key, rangeResult ); - } - return rangeResult; - } - - - private static boolean isLackingDescriptor( Artifact artifact ) - { - return artifact.getProperty( ArtifactProperties.LOCAL_PATH, null ) != null; - } - - private static List<RemoteRepository> getRemoteRepositories( ArtifactRepository repository, - List<RemoteRepository> repositories ) - { - if ( repository instanceof RemoteRepository ) - { - return Collections.singletonList( (RemoteRepository) repository ); - } - if ( repository != null ) - { - return Collections.emptyList(); - } - return repositories; - } - - private static List<? extends Version> filterVersions( Dependency dependency, VersionRangeResult rangeResult, - VersionFilter verFilter, - DefaultVersionFilterContext verContext ) - throws VersionRangeResolutionException - { - if ( rangeResult.getVersions().isEmpty() ) - { - throw new VersionRangeResolutionException( rangeResult, - "No versions available for " + dependency.getArtifact() - + " within specified range" ); - } - - List<? extends Version> versions; - if ( verFilter != null && rangeResult.getVersionConstraint().getRange() != null ) - { - verContext.set( dependency, rangeResult ); - try - { - verFilter.filterVersions( verContext ); - } - catch ( RepositoryException e ) - { - throw new VersionRangeResolutionException( rangeResult, - "Failed to filter versions for " + dependency.getArtifact() - + ": " + e.getMessage(), e ); - } - versions = verContext.get(); - if ( versions.isEmpty() ) - { - throw new VersionRangeResolutionException( rangeResult, - "No acceptable versions for " + dependency.getArtifact() - + ": " + rangeResult.getVersions() ); - } - } - else - { - versions = rangeResult.getVersions(); - } - return versions; - } - - static class Args - { - - final RepositorySystemSession session; - - final boolean ignoreRepos; - - final boolean premanagedState; - - final RequestTrace trace; - - final DataPool pool; - - final NodeStack nodes; - - final DefaultDependencyCollectionContext collectionContext; - - final DefaultVersionFilterContext versionContext; - - final CollectRequest request; - - - public Args( RepositorySystemSession session, RequestTrace trace, DataPool pool, NodeStack nodes, - DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext, - CollectRequest request ) - { - this.session = session; - this.request = request; - this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories(); - this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE ); - this.trace = trace; - this.pool = pool; - this.nodes = nodes; - this.collectionContext = collectionContext; - this.versionContext = versionContext; - } - - } - - static class Results - { - - private final CollectResult result; - - final int maxExceptions; - - final int maxCycles; - - String errorPath; - - public Results( CollectResult result, RepositorySystemSession session ) - { - this.result = result; - this.maxExceptions = ConfigUtils.getInteger( session, 50, CONFIG_PROP_MAX_EXCEPTIONS ); - this.maxCycles = ConfigUtils.getInteger( session, 10, CONFIG_PROP_MAX_CYCLES ); - } - - public void addException( Dependency dependency, Exception e, NodeStack nodes ) - { - if ( maxExceptions < 0 || result.getExceptions().size() < maxExceptions ) - { - result.addException( e ); - if ( errorPath == null ) - { - StringBuilder buffer = new StringBuilder( 256 ); - for ( int i = 0; i < nodes.size(); i++ ) - { - if ( buffer.length() > 0 ) - { - buffer.append( " -> " ); - } - Dependency dep = nodes.get( i ).getDependency(); - if ( dep != null ) - { - buffer.append( dep.getArtifact() ); - } - } - if ( buffer.length() > 0 ) - { - buffer.append( " -> " ); - } - buffer.append( dependency.getArtifact() ); - errorPath = buffer.toString(); - } - } - } - - public void addCycle( NodeStack nodes, int cycleEntry, Dependency dependency ) - { - if ( maxCycles < 0 || result.getCycles().size() < maxCycles ) - { - result.addCycle( new DefaultDependencyCycle( nodes, cycleEntry, dependency ) ); - } - } - - } - - static class PremanagedDependency - { - final String premanagedVersion; - - final String premanagedScope; - - final Boolean premanagedOptional; - - final int managedBits; - - final Dependency managedDependency; - - final boolean premanagedState; - - PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional, - int managedBits, Dependency managedDependency, boolean premanagedState ) - { - this.premanagedVersion = premanagedVersion; - this.premanagedScope = premanagedScope; - this.premanagedOptional = premanagedOptional; - this.managedBits = managedBits; - this.managedDependency = managedDependency; - this.premanagedState = premanagedState; - } - - static PremanagedDependency create( DependencyManager depManager, Dependency dependency, - boolean disableVersionManagement, boolean premanagedState ) - { - DependencyManagement depMngt = depManager != null ? depManager.manageDependency( dependency ) : null; - - int managedBits = 0; - String premanagedVersion = null; - String premanagedScope = null; - Boolean premanagedOptional = null; - - if ( depMngt != null ) - { - if ( depMngt.getVersion() != null && !disableVersionManagement ) - { - Artifact artifact = dependency.getArtifact(); - premanagedVersion = artifact.getVersion(); - dependency = dependency.setArtifact( artifact.setVersion( depMngt.getVersion() ) ); - managedBits |= DependencyNode.MANAGED_VERSION; - } - if ( depMngt.getProperties() != null ) - { - Artifact artifact = dependency.getArtifact(); - dependency = dependency.setArtifact( artifact.setProperties( depMngt.getProperties() ) ); - managedBits |= DependencyNode.MANAGED_PROPERTIES; - } - if ( depMngt.getScope() != null ) - { - premanagedScope = dependency.getScope(); - dependency = dependency.setScope( depMngt.getScope() ); - managedBits |= DependencyNode.MANAGED_SCOPE; - } - if ( depMngt.getOptional() != null ) - { - premanagedOptional = dependency.isOptional(); - dependency = dependency.setOptional( depMngt.getOptional() ); - managedBits |= DependencyNode.MANAGED_OPTIONAL; - } - if ( depMngt.getExclusions() != null ) - { - dependency = dependency.setExclusions( depMngt.getExclusions() ); - managedBits |= DependencyNode.MANAGED_EXCLUSIONS; - } - } - return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional, managedBits, - dependency, premanagedState ); - } - - public void applyTo( DefaultDependencyNode child ) - { - child.setManagedBits( managedBits ); - if ( premanagedState ) - { - child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, premanagedVersion ); - child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_SCOPE, premanagedScope ); - child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_OPTIONAL, premanagedOptional ); - } - } - } - -} http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java deleted file mode 100644 index 5ffcf67..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCycle.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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.Arrays; -import java.util.Collections; -import java.util.List; - -import org.eclipse.aether.graph.Dependency; -import org.eclipse.aether.graph.DependencyCycle; -import org.eclipse.aether.graph.DependencyNode; -import org.eclipse.aether.util.artifact.ArtifactIdUtils; - -/** - * @see DefaultDependencyCollector - */ -final class DefaultDependencyCycle - implements DependencyCycle -{ - - private final List<Dependency> dependencies; - - private final int cycleEntry; - - public DefaultDependencyCycle( NodeStack nodes, int cycleEntry, Dependency dependency ) - { - // skip root node unless it actually has a dependency or is considered the cycle entry (due to its label) - int offset = ( cycleEntry > 0 && nodes.get( 0 ).getDependency() == null ) ? 1 : 0; - Dependency[] dependencies = new Dependency[nodes.size() - offset + 1]; - for ( int i = 0, n = dependencies.length - 1; i < n; i++ ) - { - DependencyNode node = nodes.get( i + offset ); - dependencies[i] = node.getDependency(); - // when cycle starts at root artifact as opposed to root dependency, synthesize a dependency - if ( dependencies[i] == null ) - { - dependencies[i] = new Dependency( node.getArtifact(), null ); - } - } - dependencies[dependencies.length - 1] = dependency; - this.dependencies = Collections.unmodifiableList( Arrays.asList( dependencies ) ); - this.cycleEntry = cycleEntry; - } - - public List<Dependency> getPrecedingDependencies() - { - return dependencies.subList( 0, cycleEntry ); - } - - public List<Dependency> getCyclicDependencies() - { - return dependencies.subList( cycleEntry, dependencies.size() ); - } - - @Override - public String toString() - { - StringBuilder buffer = new StringBuilder( 256 ); - for ( int i = 0, n = dependencies.size(); i < n; i++ ) - { - if ( i > 0 ) - { - buffer.append( " -> " ); - } - buffer.append( ArtifactIdUtils.toVersionlessId( dependencies.get( i ).getArtifact() ) ); - } - return buffer.toString(); - } - -} http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/3a1b8ae0/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java deleted file mode 100644 index d877ad6..0000000 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyGraphTransformationContext.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.eclipse.aether.internal.impl; - -/* - * 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.HashMap; -import java.util.Map; - -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.collection.DependencyGraphTransformationContext; - -/** - */ -class DefaultDependencyGraphTransformationContext - implements DependencyGraphTransformationContext -{ - - private final RepositorySystemSession session; - - private final Map<Object, Object> map; - - public DefaultDependencyGraphTransformationContext( RepositorySystemSession session ) - { - this.session = session; - this.map = new HashMap<Object, Object>(); - } - - public RepositorySystemSession getSession() - { - return session; - } - - public Object get( Object key ) - { - if ( key == null ) - { - throw new IllegalArgumentException( "key must not be null" ); - } - return map.get( key ); - } - - public Object put( Object key, Object value ) - { - if ( key == null ) - { - throw new IllegalArgumentException( "key must not be null" ); - } - if ( value != null ) - { - return map.put( key, value ); - } - else - { - return map.remove( key ); - } - } - - @Override - public String toString() - { - return String.valueOf( map ); - } - -}