package org.jfrog.hudson.util;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import hudson.model.*;
import jenkins.model.Jenkins;
import org.apache.commons.lang.StringUtils;
import org.jfrog.build.api.util.NullLog;
import org.jfrog.build.client.ProxyConfiguration;
import org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBaseClient;
import org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient;
import org.jfrog.hudson.*;
import java.io.IOException;
import java.util.List;
/**
* @author Shay Yaakov
*/
public abstract class RepositoriesUtils {
public static List<String> getReleaseRepositoryKeysFirst(DeployerOverrider deployer, ArtifactoryServer server) throws IOException {
if (server == null) {
return Lists.newArrayList();
}
return server.getReleaseRepositoryKeysFirst(deployer, null);
}
public static List<String> getSnapshotRepositoryKeysFirst(DeployerOverrider deployer, ArtifactoryServer server) throws IOException {
if (server == null) {
return Lists.newArrayList();
}
return server.getSnapshotRepositoryKeysFirst(deployer, null);
}
public static List<VirtualRepository> getVirtualRepositoryKeys(ResolverOverrider resolverOverrider,
DeployerOverrider deployerOverrider,
ArtifactoryServer server) {
if (server == null) {
return Lists.newArrayList();
}
return server.getVirtualRepositoryKeys(resolverOverrider, null);
}
public static List<VirtualRepository> generateVirtualRepos(ArtifactoryBuildInfoClient client) throws IOException {
List<VirtualRepository> virtualRepositories;
List<String> keys = client.getVirtualRepositoryKeys();
virtualRepositories = Lists.newArrayList(Lists.transform(keys, new Function<String, VirtualRepository>() {
public VirtualRepository apply(String from) {
return new VirtualRepository(from, from);
}
}));
return virtualRepositories;
}
public static List<VirtualRepository> getVirtualRepositoryKeys(String url, CredentialsConfig credentialsConfig,
ArtifactoryServer artifactoryServer, Item item)
throws IOException {
List<VirtualRepository> virtualRepositories;
CredentialsConfig preferredResolver = CredentialManager.getPreferredResolver(credentialsConfig, artifactoryServer);
ArtifactoryBuildInfoClient client;
if (StringUtils.isNotBlank(preferredResolver.provideUsername(item))) {
client = new ArtifactoryBuildInfoClient(url, preferredResolver.provideUsername(item),
preferredResolver.providePassword(item), new NullLog());
} else {
client = new ArtifactoryBuildInfoClient(url, new NullLog());
}
client.setConnectionTimeout(artifactoryServer.getTimeout());
setRetryParams(artifactoryServer, client);
if (Jenkins.getInstance().proxy != null && !artifactoryServer.isBypassProxy()) {
client.setProxyConfiguration(createProxyConfiguration(Jenkins.getInstance().proxy));
}
virtualRepositories = RepositoriesUtils.generateVirtualRepos(client);
return virtualRepositories;
}
public static List<String> getLocalRepositories(String url, CredentialsConfig credentialsConfig,
ArtifactoryServer artifactoryServer, Item item) throws IOException {
List<String> localRepository;
CredentialsConfig preferredDeployer = CredentialManager.getPreferredDeployer(credentialsConfig, artifactoryServer);
ArtifactoryBuildInfoClient client;
if (StringUtils.isNotBlank(preferredDeployer.provideUsername(item))) {
client = new ArtifactoryBuildInfoClient(url, preferredDeployer.provideUsername(item),
preferredDeployer.providePassword(item), new NullLog());
} else {
client = new ArtifactoryBuildInfoClient(url, new NullLog());
}
client.setConnectionTimeout(artifactoryServer.getTimeout());
setRetryParams(artifactoryServer, client);
if (Jenkins.getInstance().proxy != null && !artifactoryServer.isBypassProxy()) {
client.setProxyConfiguration(createProxyConfiguration(Jenkins.getInstance().proxy));
}
localRepository = client.getLocalRepositoriesKeys();
return localRepository;
}
public static ProxyConfiguration createProxyConfiguration(hudson.ProxyConfiguration proxy) {
ProxyConfiguration proxyConfiguration = null;
if (proxy != null) {
proxyConfiguration = new ProxyConfiguration();
proxyConfiguration.host = proxy.name;
proxyConfiguration.port = proxy.port;
proxyConfiguration.username = proxy.getUserName();
proxyConfiguration.password = proxy.getPassword();
}
return proxyConfiguration;
}
public static ArtifactoryServer getArtifactoryServer(String artifactoryIdentity, List<ArtifactoryServer> artifactoryServers) {
if (artifactoryServers != null) {
for (ArtifactoryServer server : artifactoryServers) {
if (server.getUrl().equals(artifactoryIdentity) || server.getName().equals(artifactoryIdentity)) {
return server;
}
}
}
return null;
}
/**
* Returns the list of {@link org.jfrog.hudson.ArtifactoryServer} configured.
*
* @return can be empty but never null.
*/
public static List<ArtifactoryServer> getArtifactoryServers() {
ArtifactoryBuilder.DescriptorImpl descriptor = (ArtifactoryBuilder.DescriptorImpl)
Hudson.getInstance().getDescriptor(ArtifactoryBuilder.class);
return descriptor.getArtifactoryServers();
}
public static List<Repository> createRepositoriesList(List<String> repositoriesValueList) {
List<Repository> repositories = Lists.newArrayList();
for (String repositoryKey : repositoriesValueList) {
Repository repository = new Repository(repositoryKey);
repositories.add(repository);
}
return repositories;
}
public static List<VirtualRepository> collectVirtualRepositories(List<VirtualRepository> repositories, String repoKey) {
if (repositories == null) {
repositories = Lists.newArrayList();
}
if (StringUtils.isNotBlank(repoKey)) {
for (VirtualRepository vr : repositories) {
if (repoKey.equals(vr.getDisplayName())) {
return repositories;
}
}
VirtualRepository vr = new VirtualRepository(repoKey, repoKey);
repositories.add(vr);
}
return repositories;
}
public static List<Repository> collectRepositories(String repoKey) {
List<Repository> repositories = Lists.newArrayList();
if (StringUtils.isNotBlank(repoKey)) {
Repository r = new Repository(repoKey);
repositories.add(r);
}
return repositories;
}
public static void validateServerConfig(AbstractBuild build, BuildListener listener,
ArtifactoryServer artifactoryServer, String artifactoryUrl) throws IOException {
if (artifactoryServer == null) {
String error = "No Artifactory server configured for " + artifactoryUrl +
". Please check your configuration.";
listener.getLogger().println(error);
build.setResult(Result.FAILURE);
throw new IOException(error);
}
}
private static void setRetryParams(ArtifactoryServer artifactoryServer, ArtifactoryBuildInfoClient client) {
setRetryParams(artifactoryServer.getConnectionRetry(), client);
}
/**
* Sets the params of the retry mechanism
*
* @param connectionRetry - The max number of retries configured
* @param client - The client to set the values
*/
public static void setRetryParams(int connectionRetry, ArtifactoryBaseClient client) {
client.setConnectionRetries(connectionRetry);
}
}