/******************************************************************************* * Copyright (c) 2010 Thales Corporate Services SAS * * Author : Gregory Boissinot, Guillaume Tanier * * * * Permission is hereby granted, free of charge, to any person obtaining a copy * * of this software and associated documentation files (the "Software"), to deal* * in the Software without restriction, including without limitation the rights * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included in * * all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * * THE SOFTWARE. * *******************************************************************************/ package com.thalesgroup.hudson.plugins.tusarnotifier; import com.thalesgroup.dtkit.metrics.hudson.api.descriptor.CoverageTypeDescriptor; import com.thalesgroup.dtkit.metrics.hudson.api.descriptor.MeasureTypeDescriptor; import com.thalesgroup.dtkit.metrics.hudson.api.descriptor.TestTypeDescriptor; import com.thalesgroup.dtkit.metrics.hudson.api.descriptor.ViolationsTypeDescriptor; import com.thalesgroup.dtkit.metrics.hudson.api.type.CoverageType; import com.thalesgroup.dtkit.metrics.hudson.api.type.MeasureType; import com.thalesgroup.dtkit.metrics.hudson.api.type.TestType; import com.thalesgroup.dtkit.metrics.hudson.api.type.ViolationsType; import com.thalesgroup.hudson.plugins.tusarnotifier.util.TusarNotifierLogger; import hudson.DescriptorExtensionList; import hudson.Extension; import hudson.Launcher; import hudson.model.*; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.BuildStepMonitor; import hudson.tasks.Notifier; import hudson.tasks.Publisher; import net.sf.json.JSONObject; import org.kohsuke.stapler.StaplerRequest; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class TusarNotifier extends Notifier { private TestType[] tests; private CoverageType[] coverages; private ViolationsType[] violations; private MeasureType[] measures; public TusarNotifier(TestType[] tests, CoverageType[] coverages, ViolationsType[] violations, MeasureType[] measures) { this.tests = tests; this.coverages = coverages; this.violations = violations; this.measures = measures; } @SuppressWarnings("unused") public TestType[] getTests() { return tests; } @SuppressWarnings("unused") public CoverageType[] getCoverages() { return coverages; } @SuppressWarnings("unused") public ViolationsType[] getViolations() { return violations; } @SuppressWarnings("unused") public MeasureType[] getMeasures() { return measures; } public BuildStepMonitor getRequiredMonitorService() { return BuildStepMonitor.NONE; } @Override public boolean perform(final AbstractBuild<?, ?> build, Launcher launcher, final BuildListener listener) throws InterruptedException, IOException { TusarNotifierLogger.log(listener, "Starting processing all analysis reports."); TusarTransformer tusarTransformer = new TusarTransformer(launcher.getListener(), tests, coverages, violations, measures); String result = build.getWorkspace().act(tusarTransformer); if (result == null) { build.setResult(Result.FAILURE); TusarNotifierLogger.log(listener, "Stopping TUSARNOFIFIER."); return true; } List<ParameterValue> parameterValues = new ArrayList<ParameterValue>(); parameterValues.add(new StringParameterValue("sonar.language", "tusar")); parameterValues.add(new StringParameterValue("sonar.tusar.reportsPaths", result)); build.addAction(new ParametersAction(parameterValues)); return true; } @Extension(ordinal = 1) @SuppressWarnings("unused") public static final class TusarNotifierDescriptor extends BuildStepDescriptor<Publisher> { public TusarNotifierDescriptor() { super(TusarNotifier.class); load(); } @Override public boolean isApplicable(Class<? extends AbstractProject> jobType) { return true; } @Override public String getHelpFile() { return "/plugin/tusarnotifier/help.html"; } @Override public String getDisplayName() { return "TUSAR Notifier"; } public DescriptorExtensionList<TestType, TestTypeDescriptor<?>> getListTestDescriptors() { return TestTypeDescriptor.all(); } public DescriptorExtensionList<ViolationsType, ViolationsTypeDescriptor<?>> getListViolationDescriptors() { return ViolationsTypeDescriptor.all(); } public DescriptorExtensionList<MeasureType, MeasureTypeDescriptor<?>> getListMeasureDescriptors() { return MeasureTypeDescriptor.all(); } public DescriptorExtensionList<CoverageType, CoverageTypeDescriptor<?>> getListCoverageDescriptors() { return CoverageTypeDescriptor.all(); } @Override public Publisher newInstance(StaplerRequest req, JSONObject formData) throws FormException { List<TestType> tests = Descriptor.newInstancesFromHeteroList(req, formData, "tests", getListTestDescriptors()); List<CoverageType> coverages = Descriptor.newInstancesFromHeteroList(req, formData, "coverages", getListCoverageDescriptors()); List<ViolationsType> violations = Descriptor.newInstancesFromHeteroList(req, formData, "violations", getListViolationDescriptors()); List<MeasureType> measures = Descriptor.newInstancesFromHeteroList(req, formData, "measures", getListMeasureDescriptors()); return new TusarNotifier(tests.toArray(new TestType[tests.size()]), coverages.toArray(new CoverageType[coverages.size()]), violations.toArray(new ViolationsType[violations.size()]), measures.toArray(new MeasureType[measures.size()]) ); } } }