/*
* Copyright (C) 2010 JFrog Ltd.
*
* Licensed 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.
*/
package org.jfrog.hudson;
import com.google.common.collect.Maps;
import hudson.util.XStream2;
import org.apache.commons.lang.StringUtils;
import org.jfrog.hudson.util.converters.ServerDetailsConverter;
import org.kohsuke.stapler.DataBoundConstructor;
import java.util.Map;
/**
* Artifacts resolution and deployment configuration.
*/
public class ServerDetails {
public final String artifactoryName;
/**
* Artifactory server URL
*/
private final String artifactoryUrl;
/**
* Configuration of the repository to deploy release artifacts to
*/
private final RepositoryConf deployReleaseRepository;
/**
* Configuration of the repository to deploy snapshot artifacts to. If not specified will use the deployReleaseRepository
*/
private final RepositoryConf deploySnapshotRepository;
/**
* Configuration of repository to use to download snapshots artifacts
*/
private final RepositoryConf resolveSnapshotRepository;
/**
* Configuration of repository to use to download artifacts
*/
private final RepositoryConf resolveReleaseRepository;
/**
/**
* @deprecated: Use org.jfrog.hudson.ServerDetails#deployReleaseRepository
*/
@Deprecated
public String repositoryKey;
/**
* @deprecated: Use org.jfrog.hudson.ServerDetails#deploySnapshotRepository
*/
@Deprecated
public String snapshotsRepositoryKey;
/**
* @deprecated: Use org.jfrog.hudson.ServerDetails#resolveSnapshotRepository
*/
@Deprecated
public String downloadSnapshotRepositoryKey;
/**
* @deprecated: Use org.jfrog.hudson.ServerDetails#resolveReleaseRepository
*/
@Deprecated
public String downloadReleaseRepositoryKey;
/**
* Display name of repository to use to download snapshots artifacts
*/
private String downloadSnapshotRepositoryDisplayName;
/**
* Display name of repository to use to download artifacts
*/
private String downloadReleaseRepositoryDisplayName;
private PluginSettings stagingPlugin;
private String userPluginKey;
private String userPluginParams;
/**
* @deprecated: Use org.jfrog.hudson.ServerDetails#downloadReleaseRepositoryKey
*/
@Deprecated
private String downloadRepositoryKey;
@DataBoundConstructor
public ServerDetails(String artifactoryName, String artifactoryUrl, RepositoryConf deployReleaseRepository,
RepositoryConf deploySnapshotRepository, RepositoryConf resolveReleaseRepository,
RepositoryConf resolveSnapshotRepository,
String userPluginKey, String userPluginParams) {
this.artifactoryName = artifactoryName;
this.artifactoryUrl = artifactoryUrl;
this.deployReleaseRepository = deployReleaseRepository;
this.deploySnapshotRepository = deploySnapshotRepository;
this.resolveReleaseRepository = resolveReleaseRepository;
this.resolveSnapshotRepository = resolveSnapshotRepository;
this.userPluginKey = userPluginKey;
this.userPluginParams = userPluginParams;
createStagingPlugin();
}
public ServerDetails(String artifactoryName, String artifactoryUrl, RepositoryConf deployReleaseRepository, RepositoryConf deploySnapshotRepository,
RepositoryConf resolveReleaseRepository, RepositoryConf resolveSnapshotRepository) {
this(artifactoryName, artifactoryUrl, deployReleaseRepository, deploySnapshotRepository, resolveReleaseRepository,
resolveSnapshotRepository, null, null);
}
public String getArtifactoryName() {
return artifactoryName;
}
public RepositoryConf getDeployReleaseRepository() {
return deployReleaseRepository;
}
public RepositoryConf getDeploySnapshotRepository() {
if (deploySnapshotRepository == null) {
return deployReleaseRepository;
}
return deploySnapshotRepository;
}
public RepositoryConf getResolveReleaseRepository() {
return resolveReleaseRepository;
}
public RepositoryConf getResolveSnapshotRepository() {
if (resolveSnapshotRepository == null) {
return resolveReleaseRepository;
}
return resolveSnapshotRepository;
}
public String getUserPluginKey() {
return stagingPlugin != null ? stagingPlugin.getPluginName() : null;
}
public String getDeployReleaseRepositoryKey() {
if (deployReleaseRepository != null){
return deployReleaseRepository.getRepoKey();
}
return StringUtils.EMPTY;
}
public String getDeploySnapshotRepositoryKey() {
return getDeploySnapshotRepository().getRepoKey();
}
public String getResolveReleaseRepositoryKey() {
return getResolveReleaseRepository().getRepoKey();
}
public String getResolveSnapshotRepositoryKey() {
return getResolveSnapshotRepository().getRepoKey();
}
public void createStagingPlugin() {
if (stagingPlugin == null) {
stagingPlugin = new PluginSettings();
}
if (userPluginKey != null) {
stagingPlugin.setPluginName(userPluginKey);
}
if (userPluginParams != null) {
Map<String, String> paramsMap = Maps.newHashMap();
String[] params = userPluginParams.split(" ");
for (String param : params) {
String[] keyValue = param.split("=");
if (keyValue.length == 2) {
paramsMap.put(keyValue[0], keyValue[1]);
}
}
stagingPlugin.setParamMap(paramsMap);
}
}
public String getDownloadReleaseRepositoryDisplayName() {
// The following if statement is for backward compatibility with version 2.2.3 and below of the plugin.
// Without the below code, upgrade from 2.2.3 or below to 2.2.4 and above will cause the configuration to be lost.
// This should be eventually removed.
if (downloadReleaseRepositoryDisplayName == null && resolveReleaseRepository != null) {
return resolveReleaseRepository.getRepoKey();
}
return downloadReleaseRepositoryDisplayName;
}
public String getDownloadSnapshotRepositoryDisplayName() {
// The following if statement is for backward compatibility with version 2.2.3 and below of the plugin.
// Without the below code, upgrade from 2.2.3 or below to 2.2.4 and above will cause the configuration to be lost.
// This should be eventually removed.
if (downloadSnapshotRepositoryDisplayName == null && resolveSnapshotRepository != null) {
return resolveSnapshotRepository.getRepoKey();
}
return downloadSnapshotRepositoryDisplayName;
}
public PluginSettings getStagingPlugin() {
return stagingPlugin;
}
public void setStagingPlugin(PluginSettings stagingPlugin) {
this.stagingPlugin = stagingPlugin;
}
public String getArtifactoryUrl() {
//support legacy code when artifactoryName was the url
return artifactoryUrl != null ? artifactoryUrl : artifactoryName;
}
public String getStagingPluginName() {
return (stagingPlugin != null) ? stagingPlugin.getPluginName() : null;
}
public String getPluginParamValue(String pluginName, String paramKey) {
return (stagingPlugin != null) ? stagingPlugin.getPluginParamValue(pluginName, paramKey) : null;
}
public static final class ConverterImpl extends ServerDetailsConverter {
public ConverterImpl(XStream2 xstream) {
super(xstream);
}
}
}