/*******************************************************************************
* Copyright (c) 2017 Synopsys, Inc
* 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:
* Synopsys, Inc - initial implementation and documentation
*******************************************************************************/
package jenkins.plugins.coverity;
import com.coverity.ws.v9.CovRemoteServiceException_Exception;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import jenkins.model.Jenkins;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
* Captures Coverity information for a single build, including a snapshot of cim instance, project and stream, and a
* filtered list of defects. This shows a link on the left side of each build page, which goes to a list of defects from
* that build.
*/
public class CoverityBuildAction implements Action {
public static final String BUILD_ACTION_IDENTIFIER = "coverity_defects";
// deprecated defectIds field
private transient List<Long> defectIds;
private final AbstractBuild build;
private final String projectId;
private final String streamId;
private final String cimInstance;
private final List<CoverityDefect> defects;
public CoverityBuildAction(AbstractBuild build, String projectId, String streamId, String cimInstance, List<CoverityDefect> defects) {
this.build = build;
this.projectId = projectId;
this.streamId = streamId;
this.cimInstance = cimInstance;
this.defects = defects;
}
/**
* The owning build
*/
public AbstractBuild getBuild() {
return build;
}
/**
* The data for the defects that were captured for this build.
*/
public List<CoverityDefect> getDefects() {
// use defectIds field if specified to support older builds (pre-1.9.0 plugin)
if (defectIds != null && !defectIds.isEmpty()) {
List<CoverityDefect> covDefects = new ArrayList<>();
for(Long defectId : defectIds) {
covDefects.add(new CoverityDefect(defectId, "---", "View in Coverity Connect", StringUtils.EMPTY));
}
return covDefects;
} else {
return defects != null ? defects : new ArrayList<CoverityDefect>();
}
}
/**
* Returns the URL to the page for this defect in the CIM instance.
*/
public String getURL(CoverityDefect defect) throws IOException, CovRemoteServiceException_Exception {
CIMInstance instance = Jenkins.getInstance().getDescriptorByType(CoverityPublisher.DescriptorImpl.class).getInstance(cimInstance);
String header = "http";
if(instance.isUseSSL()){
header = "https";
}
return String.format(header + "://%s:%d/sourcebrowser.htm?projectId=%s&mergedDefectId=%d",
instance.getHost(), instance.getPort(), instance.getProjectKey(projectId), defect.getCid());
}
public String getIconFileName() {
return "/plugin/coverity/icons/coverity-logo-400px.png";
}
public String getDisplayName() {
return "Coverity Defects ";
}
public String getGraphDisplayName() {
return "Coverity Defects (" + streamId + ")";
}
public String getUrlName() {
return BUILD_ACTION_IDENTIFIER;
}
}