/******************************************************************************* * Copyright (c) 2010, 2014 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.aether.internal.ant; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.tools.ant.Project; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.ArtifactProperties; import org.eclipse.aether.artifact.ArtifactType; import org.eclipse.aether.artifact.ArtifactTypeRegistry; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.artifact.DefaultArtifactType; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.internal.ant.types.Authentication; import org.eclipse.aether.internal.ant.types.Dependency; import org.eclipse.aether.internal.ant.types.Exclusion; import org.eclipse.aether.internal.ant.types.Proxy; import org.eclipse.aether.internal.ant.types.RemoteRepositories; import org.eclipse.aether.internal.ant.types.RemoteRepository; import org.eclipse.aether.repository.RepositoryPolicy; import org.eclipse.aether.util.repository.AuthenticationBuilder; /** * Utility methods to convert between Aether and Ant objects. */ class ConverterUtils { private static org.eclipse.aether.artifact.Artifact toArtifact( Dependency dependency, ArtifactTypeRegistry types ) { ArtifactType type = types.get( dependency.getType() ); if ( type == null ) { type = new DefaultArtifactType( dependency.getType() ); } Map<String, String> props = null; if ( "system".equals( dependency.getScope() ) && dependency.getSystemPath() != null ) { props = Collections.singletonMap( ArtifactProperties.LOCAL_PATH, dependency.getSystemPath().getPath() ); } Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null, dependency.getVersion(), props, type ); return artifact; } public static org.eclipse.aether.repository.Authentication toAuthentication( Authentication auth ) { if ( auth == null ) { return null; } AuthenticationBuilder authBuilder = new AuthenticationBuilder(); authBuilder.addUsername( auth.getUsername() ).addPassword( auth.getPassword() ); authBuilder.addPrivateKey( auth.getPrivateKeyFile(), auth.getPassphrase() ); return authBuilder.build(); } public static org.eclipse.aether.graph.Dependency toDependency( Dependency dependency, List<Exclusion> exclusions, RepositorySystemSession session ) { return new org.eclipse.aether.graph.Dependency( toArtifact( dependency, session.getArtifactTypeRegistry() ), dependency.getScope(), false, toExclusions( dependency.getExclusions(), exclusions ) ); } /** * Converts the given ant repository type to an Aether repository instance with authentication and proxy filled in * via the sessions' selectors. */ public static org.eclipse.aether.repository.RemoteRepository toDistRepository( RemoteRepository repo, RepositorySystemSession session ) { org.eclipse.aether.repository.RemoteRepository result = toRepository( repo ); org.eclipse.aether.repository.RemoteRepository.Builder builder = new org.eclipse.aether.repository.RemoteRepository.Builder( result ); builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( result ) ); builder.setProxy( session.getProxySelector().getProxy( result ) ); return builder.build(); } private static org.eclipse.aether.graph.Exclusion toExclusion( Exclusion exclusion ) { return new org.eclipse.aether.graph.Exclusion( exclusion.getGroupId(), exclusion.getArtifactId(), exclusion.getClassifier(), exclusion.getExtension() ); } private static Collection<org.eclipse.aether.graph.Exclusion> toExclusions( Collection<Exclusion> exclusions1, Collection<Exclusion> exclusions2 ) { Collection<org.eclipse.aether.graph.Exclusion> results = new LinkedHashSet<org.eclipse.aether.graph.Exclusion>(); if ( exclusions1 != null ) { for ( Exclusion exclusion : exclusions1 ) { results.add( toExclusion( exclusion ) ); } } if ( exclusions2 != null ) { for ( Exclusion exclusion : exclusions2 ) { results.add( toExclusion( exclusion ) ); } } return results; } private static RepositoryPolicy toPolicy( RemoteRepository.Policy policy, boolean enabled, String updates, String checksums ) { if ( policy != null ) { enabled = policy.isEnabled(); if ( policy.getChecksums() != null ) { checksums = policy.getChecksums(); } if ( policy.getUpdates() != null ) { updates = policy.getUpdates(); } } return new RepositoryPolicy( enabled, updates, checksums ); } /** * Adds every <String, String>-entry in the map as a property to the given Properties. */ public static Properties addProperties( Properties props, Map<?, ?> map ) { if ( props == null ) { props = new Properties(); } for ( Map.Entry<?, ?> entry : map.entrySet() ) { if ( entry.getKey() instanceof String && entry.getValue() instanceof String ) { props.put( entry.getKey(), entry.getValue() ); } } return props; } public static org.eclipse.aether.repository.Proxy toProxy( Proxy proxy ) { if ( proxy == null ) { return null; } return new org.eclipse.aether.repository.Proxy( proxy.getType(), proxy.getHost(), proxy.getPort(), toAuthentication( proxy.getAuthentication() ) ); } private static org.eclipse.aether.repository.RemoteRepository toRepository( RemoteRepository repo ) { org.eclipse.aether.repository.RemoteRepository.Builder builder = new org.eclipse.aether.repository.RemoteRepository.Builder( repo.getId(), repo.getType(), repo.getUrl() ); builder.setSnapshotPolicy( toPolicy( repo.getSnapshotPolicy(), repo.isSnapshots(), repo.getUpdates(), repo.getChecksums() ) ); builder.setReleasePolicy( toPolicy( repo.getReleasePolicy(), repo.isReleases(), repo.getUpdates(), repo.getChecksums() ) ); builder.setAuthentication( toAuthentication( repo.getAuthentication() ) ); return builder.build(); } public static List<org.eclipse.aether.repository.RemoteRepository> toRepositories( Project project, RepositorySystemSession session, RemoteRepositories repos, RemoteRepositoryManager remoteRepositoryManager ) { List<RemoteRepository> repositories; if ( repos != null ) { repositories = repos.getRepositories(); } else { repositories = new ArrayList<RemoteRepository>(); } List<org.eclipse.aether.repository.RemoteRepository> results = new ArrayList<org.eclipse.aether.repository.RemoteRepository>(); for ( RemoteRepository repo : repositories ) { results.add( toRepository( repo ) ); } results = remoteRepositoryManager.aggregateRepositories( session, Collections.<org.eclipse.aether.repository.RemoteRepository> emptyList(), results, true ); return results; } }