blob: 73de26bd17d7f2380f45e33cdb67e5f0f1d4f8c5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 SAP AG and others.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.osgi.configuration;
import java.net.URI;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.repository.MirrorSelector;
import org.apache.maven.repository.RepositorySystem;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.crypto.SettingsDecryptionResult;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.sisu.equinox.embedder.EmbeddedEquinox;
import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener;
import org.eclipse.tycho.core.resolver.shared.MavenRepositoryLocation;
import org.eclipse.tycho.core.resolver.shared.MavenRepositorySettings;
@Component(role = EquinoxLifecycleListener.class, hint = "RepositorySettingsConfigurator")
public class RepositorySettingsConfigurator extends EquinoxLifecycleListener {
private static final ArtifactRepositoryPolicy P2_REPOSITORY_POLICY = new ArtifactRepositoryPolicy(true,
ArtifactRepositoryPolicy.UPDATE_POLICY_NEVER, ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE);
@Requirement
private Logger logger;
@Requirement
private LegacySupport context;
@Requirement
private SettingsDecrypterHelper decrypter;
@Requirement
private RepositorySystem repositorySystem;
@Requirement(hint = "p2")
private ArtifactRepositoryLayout p2layout;
@Requirement(role = MirrorSelector.class, hint = "tycho")
private MirrorSelector mirrorSelector;
@Override
public void afterFrameworkStarted(EmbeddedEquinox framework) {
framework.registerService(MavenRepositorySettings.class, new MavenRepositorySettingsProvider());
}
private class MavenRepositorySettingsProvider implements MavenRepositorySettings {
@Override
public MavenRepositoryLocation getMirror(MavenRepositoryLocation location) {
if (location.getId() == null) {
return null;
}
// TODO check repository type?
ArtifactRepository locationAsMavenRepository = repositorySystem.createArtifactRepository(location.getId(),
location.getURL().toString(), p2layout, P2_REPOSITORY_POLICY, P2_REPOSITORY_POLICY);
Mirror mirror = mirrorSelector.getMirror(locationAsMavenRepository,
context.getSession().getRequest().getMirrors());
if (mirror != null) {
return new MavenRepositoryLocation(mirror.getId(), URI.create(mirror.getUrl()));
}
return null;
}
@Override
public MavenRepositorySettings.Credentials getCredentials(MavenRepositoryLocation location) {
if (location.getId() == null) {
return null;
}
Server serverSettings = context.getSession().getSettings().getServer(location.getId());
if (serverSettings != null) {
SettingsDecryptionResult result = decrypter.decryptAndLogProblems(serverSettings);
Server decryptedServer = result.getServer();
return new MavenRepositorySettings.Credentials(decryptedServer.getUsername(),
decryptedServer.getPassword());
}
return null;
}
}
}