/*
* 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 hudson.Util;
import hudson.model.BuildBadgeAction;
import hudson.model.Run;
import org.apache.commons.lang.StringUtils;
import org.jfrog.build.api.Build;
import org.jfrog.hudson.util.BuildUniqueIdentifierHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Result of the redeploy publisher. Currently only a link to Artifactory build info.
*
* @author Yossi Shaul
*/
public class BuildInfoResultAction implements BuildBadgeAction {
private List<PublishedBuildDetails> publishedBuildsDetails = new ArrayList<PublishedBuildDetails>();
private final Run build;
@Deprecated
private String url;
/**
* @deprecated Only here to keep compatibility with version 1.0.7 and below (part of the xstream de-serialization)
*/
@Deprecated
private transient ArtifactoryRedeployPublisher artifactoryRedeployPublisher;
public BuildInfoResultAction(Run build) {
this.build = build;
}
public BuildInfoResultAction(String artifactoryUrl, Run build, String buildName) {
this(build);
String buildNumber = BuildUniqueIdentifierHelper.getBuildNumber(build);
publishedBuildsDetails.add(createBuildInfoIdentifier(artifactoryUrl, buildName, buildNumber));
}
public void addBuildInfoResults(String artifactoryUrl, Build buildInfo) {
publishedBuildsDetails.add(createBuildInfoIdentifier(artifactoryUrl, build, buildInfo));
}
public Run getBuild() {
return build;
}
public String getIconFileName() {
return "/plugin/artifactory/images/artifactory-icon.png";
}
public String getDisplayName() {
return "Artifactory Build Info";
}
public String getUrlName() {
if (StringUtils.isNotEmpty(url)) {
return url;
} else if (publishedBuildsDetails == null) {
publishedBuildsDetails = new ArrayList<PublishedBuildDetails>();
}
// For backward compatibility if publishedBuildsDetails is empty calculate it from the old structs.
if (publishedBuildsDetails.size() == 0 && artifactoryRedeployPublisher != null && build != null) {
String buildName = BuildUniqueIdentifierHelper.getBuildNameConsiderOverride(artifactoryRedeployPublisher, build);
return generateUrl(artifactoryRedeployPublisher.getArtifactoryName(), build, buildName);
} else if (publishedBuildsDetails.size() == 1) {
return publishedBuildsDetails.get(0).getBuildInfoUrl();
}
return "published_builds";
}
private PublishedBuildDetails createBuildInfoIdentifier(String artifactoryUrl, String buildName, String buildNumber) {
return new PublishedBuildDetails(artifactoryUrl, Util.rawEncode(buildName), Util.rawEncode(buildNumber));
}
private PublishedBuildDetails createBuildInfoIdentifier(String artifactoryUrl, Run build, Build buildInfo) {
String buildName;
String buildNumber;
if (StringUtils.isNotEmpty(buildInfo.getName())) {
buildName = buildInfo.getName();
} else {
buildName = BuildUniqueIdentifierHelper.getBuildName(build);
}
if (StringUtils.isNotEmpty(buildInfo.getNumber())) {
buildNumber = buildInfo.getNumber();
} else {
buildNumber = BuildUniqueIdentifierHelper.getBuildNumber(build);
}
return createBuildInfoIdentifier(artifactoryUrl, buildName, buildNumber);
}
private String generateUrl(String artifactoryUrl, Run build, String buildName) {
return artifactoryUrl + "/webapp/builds/" + Util.rawEncode(buildName) + "/"
+ Util.rawEncode(BuildUniqueIdentifierHelper.getBuildNumber(build));
}
/**
* @return whether we have multiple builds. Called from the UI.
*/
@SuppressWarnings({"UnusedDeclaration"})
public boolean haveMultipleBuilds() {
return publishedBuildsDetails != null && publishedBuildsDetails.size() > 1;
}
/**
* @return list of build info identifiers. Called from the UI.
*/
@SuppressWarnings({"UnusedDeclaration"})
public List<PublishedBuildDetails> getPublishedBuildsDetails() {
return publishedBuildsDetails;
}
@Deprecated
public void setUrl(String url) {
this.url = url;
}
}