package org.jfrog.build.extractor.maven;
import org.apache.commons.lang.StringUtils;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryClientConfiguration;
import org.jfrog.build.extractor.clientConfiguration.ClientConfigurationFields;
import org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient;
import static org.jfrog.build.extractor.clientConfiguration.ClientProperties.PROP_CONNECTION_RETRIES;
import static org.jfrog.build.extractor.clientConfiguration.ClientProperties.PROP_TIMEOUT;
/**
* Simple class to build {@link org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient} for deployment.
*
* @author Noam Y. Tenne
*/
@Component(role = BuildInfoClientBuilder.class)
public class BuildInfoClientBuilder {
@Requirement
private Logger logger;
public ArtifactoryBuildInfoClient resolveProperties(ArtifactoryClientConfiguration clientConf) {
ArtifactoryBuildInfoClient client = resolveClientProps(clientConf);
resolveTimeout(clientConf, client);
resolveProxy(clientConf.proxy, client);
resolveRetriesParams(clientConf, client);
return client;
}
private ArtifactoryBuildInfoClient resolveClientProps(ArtifactoryClientConfiguration clientConf) {
String contextUrl = clientConf.publisher.getContextUrl();
if (StringUtils.isBlank(contextUrl)) {
throw new IllegalArgumentException(
"Unable to resolve Artifactory Build Info Client properties: no context URL was found.");
}
logResolvedProperty(clientConf.publisher.getPrefix() + "." + ClientConfigurationFields.CONTEXT_URL, contextUrl);
String username = clientConf.publisher.getUsername();
String password = clientConf.publisher.getPassword();
if (StringUtils.isNotBlank(username)) {
logResolvedProperty(ClientConfigurationFields.USERNAME, username);
return new ArtifactoryBuildInfoClient(contextUrl, username, password, new Maven3BuildInfoLogger(logger));
} else {
return new ArtifactoryBuildInfoClient(contextUrl, new Maven3BuildInfoLogger(logger));
}
}
private void resolveTimeout(ArtifactoryClientConfiguration clientConf, ArtifactoryBuildInfoClient client) {
if (clientConf.getTimeout() == null) {
return;
}
int timeout = clientConf.getTimeout();
logResolvedProperty(PROP_TIMEOUT, String.valueOf(timeout));
client.setConnectionTimeout(timeout);
}
private void resolveRetriesParams(ArtifactoryClientConfiguration clientConf, ArtifactoryBuildInfoClient client) {
if (clientConf.getConnectionRetries() == null) {
return;
}
int configMaxRetries = clientConf.getConnectionRetries();
logResolvedProperty(PROP_CONNECTION_RETRIES, String.valueOf(configMaxRetries));
client.setConnectionRetries(configMaxRetries);
}
private void resolveProxy(ArtifactoryClientConfiguration.ProxyHandler proxyConf,
ArtifactoryBuildInfoClient client) {
String proxyHost = proxyConf.getHost();
if (StringUtils.isNotBlank(proxyHost)) {
logResolvedProperty(ClientConfigurationFields.HOST, proxyHost);
if (proxyConf.getPort() == null) {
return;
}
String proxyUsername = proxyConf.getUsername();
if (StringUtils.isNotBlank(proxyUsername)) {
logResolvedProperty(ClientConfigurationFields.USERNAME, proxyUsername);
client.setProxyConfiguration(proxyHost, proxyConf.getPort(), proxyUsername,
proxyConf.getPassword());
} else {
client.setProxyConfiguration(proxyHost, proxyConf.getPort());
}
}
}
private void logResolvedProperty(String key, String value) {
logger.debug("Artifactory Client Property Resolver: " + key + " = " + value);
}
}