package hudson.plugins.analysis.collector; // NOPMD
import hudson.model.AbstractBuild;
import hudson.plugins.analysis.core.BuildHistory;
import hudson.plugins.analysis.core.BuildResult;
import hudson.plugins.analysis.core.ParserResult;
import hudson.plugins.analysis.core.ResultAction;
import hudson.plugins.analysis.util.model.FileAnnotation;
import java.util.Map;
import com.google.common.collect.Maps;
/**
* Stores the results of the analysis plug-ins. One instance of this class is
* persisted for each build via an XML file.
*
* @author Ulli Hafner
*/
public class AnalysisResult extends BuildResult {
/** Unique identifier of this class. */
private static final long serialVersionUID = 847650789493429154L;
/** Number of annotations by origin mapping. */
private transient Map<String, Integer> annotationsByOrigin = Maps.newHashMap();
/**
* Creates a new instance of {@link AnalysisResult}.
*
* @param build
* the current build as owner of this action
* @param defaultEncoding
* the default encoding to be used when reading and parsing files
* @param result
* the parsed result with all annotations
* @param history
* the plug-in history
*/
public AnalysisResult(final AbstractBuild<?, ?> build, final String defaultEncoding,
final ParserResult result, final BuildHistory history) {
super(build, defaultEncoding, result, history);
countAnnotations();
}
/**
* Creates a new instance of {@link AnalysisResult}.
*
* @param build
* the current build as owner of this action
* @param defaultEncoding
* the default encoding to be used when reading and parsing files
* @param result
* the parsed result with all annotations
*/
public AnalysisResult(final AbstractBuild<?, ?> build, final String defaultEncoding,
final ParserResult result) {
super(build, defaultEncoding, result);
countAnnotations();
}
/** {@inheritDoc} */
@Override
protected Object readResolve() {
super.readResolve();
if (annotationsByOrigin == null) {
annotationsByOrigin = Maps.newHashMap();
countAnnotations();
}
return this;
}
/**
* Count the annotations by origin.
*/
private void countAnnotations() {
for (FileAnnotation annotation : getAnnotations()) {
if (!annotationsByOrigin.containsKey(annotation.getOrigin())) {
annotationsByOrigin.put(annotation.getOrigin(), 0);
}
annotationsByOrigin.put(annotation.getOrigin(),
annotationsByOrigin.get(annotation.getOrigin()) + 1);
}
}
/**
* Returns a summary message for the summary.jelly file.
*
* @return the summary message
*/
public String getSummary() {
return AnalysisResultSummary.createSummary(this);
}
/** {@inheritDoc} */
@Override
protected String createDeltaMessage() {
return AnalysisResultSummary.createDeltaMessage(this);
}
/** {@inheritDoc} */
@Override
protected String getSerializationFileName() {
return "analysis.xml";
}
/** {@inheritDoc} */
public String getDisplayName() {
return Messages.Analysis_ProjectAction_Name();
}
/** {@inheritDoc} */
@Override
protected Class<? extends ResultAction<? extends BuildResult>> getResultActionType() {
return AnalysisResultAction.class;
}
/**
* Returns the number of annotations from the specified origin. If there are no anntoations
*
* @param origin
* the origin
* @return the number of annotations from the specified origin
*/
public int getNumberOfAnnotationsByOrigin(final String origin) {
if (annotationsByOrigin.containsKey(origin)) {
return annotationsByOrigin.get(origin);
}
return 0;
}
}