Index: pom.xml =================================================================== --- pom.xml (revision 40817) +++ pom.xml (working copy) @@ -94,6 +94,13 @@ 0.10 true + + org.jenkins-ci.plugins + violations + 0.7.11 + compile + true + Index: src/main/java/configurationslicing/violations/AbstractViolationSliceSpec.java =================================================================== --- src/main/java/configurationslicing/violations/AbstractViolationSliceSpec.java (revision 0) +++ src/main/java/configurationslicing/violations/AbstractViolationSliceSpec.java (working copy) @@ -0,0 +1,241 @@ +package configurationslicing.violations; + +import hudson.maven.MavenReporter; +import hudson.maven.MavenModuleSet; +import hudson.model.AbstractProject; +import hudson.model.Descriptor; +import hudson.model.FreeStyleProject; +import hudson.model.Hudson; +import hudson.plugins.violations.TypeConfig; +import hudson.plugins.violations.ViolationsPublisher; +import hudson.plugins.violations.hudson.maven.ViolationsMavenReporter; +import hudson.tasks.Publisher; +import hudson.util.DescribableList; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; + +import configurationslicing.UnorderedStringSlicer.UnorderedStringSlicerSpec; + +/** + * @author Michael Klein + */ +public abstract class AbstractViolationSliceSpec extends + UnorderedStringSlicerSpec> { + + protected static final String DISABLED = "(Disabled)"; + protected static final String SEPARATOR = ","; + + private String name; + private String url; + + protected AbstractViolationSliceSpec(String name, String url) { + this.name = name; + this.url = url; + } + + public abstract String getViolationType(); + + @Override + public String getConfiguredValueDescription() { + return "Min(sunny), Max(stormy), Unstable (e.g. 10,885,999)"; + } + + public String getName() { + return name; + } + + public String getUrl() { + return url; + } + + public String getName(AbstractProject item) { + return item.getName(); + } + + public String getDefaultValueString() { + return DISABLED; + } + + public List> getWorkDomain() { + return (List) Hudson.getInstance().getItems(AbstractProject.class); + } + + public Set> getViolationTypeConfigs(AbstractProject project) { + Set> typeConfigs = null; + + if (project instanceof FreeStyleProject) { + DescribableList> publishers = project + .getPublishersList(); + Descriptor descriptor = Hudson.getInstance() + .getDescriptor(ViolationsPublisher.class); + Publisher publisher = publishers.get(descriptor); + ViolationsPublisher violationPublisher = (ViolationsPublisher) publisher; + + if (violationPublisher == null) { + //violations not activated + return typeConfigs; + } + + typeConfigs = violationPublisher.getConfig().getTypeConfigs().entrySet(); + } else if (project instanceof MavenModuleSet) { + DescribableList> reporters = ((MavenModuleSet) project) + .getReporters(); + + for (MavenReporter mavenReporter : reporters) { + if (mavenReporter instanceof ViolationsMavenReporter) { + typeConfigs = ((ViolationsMavenReporter) mavenReporter) + .getConfig().getTypeConfigs().entrySet(); + } + } + + } + return typeConfigs; + } + + public List getValues(AbstractProject project) { + List values = new ArrayList(); + String violation = null; + Set> typeConfigs = getViolationTypeConfigs(project); + + if (typeConfigs == null) { + values.add(DISABLED); + + return values; + } + for (Entry entry : typeConfigs) { + if (entry.getValue().getType().equals(getViolationType())) { + violation = entry.getValue().getMin() + SEPARATOR + + entry.getValue().getMax() + SEPARATOR + + entry.getValue().getUnstable(); + values.add(violation); + + } + } + + return values; + } + + public boolean setValues(AbstractProject item, List set) { + String configLine; + List values = new ArrayList(); + boolean disabled = false; + configLine = set.iterator().next(); + + if (DISABLED.equals(configLine) || StringUtils.isEmpty(configLine) + || configLine == null) { + disabled = true; + } else { + final String[] split = configLine.split(SEPARATOR); + if (split.length == 3) { + values.add(split[0]); + values.add(split[1]); + values.add(split[2]); + + } else { + disabled = true; + } + } + + boolean saved = false; + boolean oneSaved = false; + + try { + if (disabled) { + oneSaved = removeViolations(item); + } else { + oneSaved = addViolations(item, values); + } + if (oneSaved) { + try { + item.save(); + } catch (IOException e) { + throw new RuntimeException(e); + } + saved = true; + } + return saved; + } catch (IOException e) { + return false; + } + } + + private void updateViolationValues(Set> typeConfigs, List values){ + int min = Integer.parseInt(values.get(0)); + int max = Integer.parseInt(values.get(1)); + int unstable = Integer.parseInt(values.get(2)); + + for (Entry entry : typeConfigs) { + if (entry.getValue().getType().equals(getViolationType())) { + entry.getValue().setMin(min); + entry.getValue().setMax(max); + entry.getValue().setUnstable(unstable); + } + } + } + + public boolean addViolations(AbstractProject item, List values) throws IOException { + Set> typeConfigs = getViolationTypeConfigs(item); + + if (typeConfigs != null) { + // update values + updateViolationValues(typeConfigs, values); + + return true; + } + // violations not activated -> activate it + if (item instanceof FreeStyleProject) { + ViolationsPublisher violationPublisher = new ViolationsPublisher(); + typeConfigs = violationPublisher.getConfig().getTypeConfigs().entrySet(); + updateViolationValues(typeConfigs, values); + item.getPublishersList().add(violationPublisher); + + return true; + + } else if (item instanceof MavenModuleSet) { + ViolationsMavenReporter violationMavenReporter = new ViolationsMavenReporter(); + typeConfigs = violationMavenReporter.getConfig().getTypeConfigs().entrySet(); + updateViolationValues(typeConfigs, values); + ((MavenModuleSet) item).getReporters().add(violationMavenReporter); + + return true; + } + return false; + } + + public boolean removeViolations(AbstractProject item) throws IOException { + if (item instanceof FreeStyleProject) { + DescribableList> publishers = item + .getPublishersList(); + Descriptor descriptor = Hudson.getInstance() + .getDescriptor(ViolationsPublisher.class); + Publisher publisher = publishers.get(descriptor); + + if (publisher != null) { + item.getPublishersList().remove(descriptor); + + return true; + } + return false; + } + if (item instanceof MavenModuleSet) { + DescribableList> reporters = ((MavenModuleSet) item) + .getReporters(); + + for (MavenReporter mavenReporter : reporters) { + if (mavenReporter instanceof ViolationsMavenReporter) { + ((MavenModuleSet) item).getReporters().remove(mavenReporter); + + return true; + } + } + } + return false; + } + +} Index: src/main/java/configurationslicing/violations/ViolationCheckstyle.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationCheckstyle.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationCheckstyle.java (working copy) @@ -0,0 +1,29 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationCheckstyle extends UnorderedStringSlicer> { + + public ViolationCheckstyle() { + super(new ViolationCheckstyleSliceSpec()); + } + + public static class ViolationCheckstyleSliceSpec extends AbstractViolationSliceSpec { + + public ViolationCheckstyleSliceSpec() { + super("Violation - Checkstyle", "violationcheckstyle"); + } + + @Override + public String getViolationType() { + return "checkstyle"; // There is no way to get it from the plugin + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationCodenarc.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationCodenarc.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationCodenarc.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationCodenarc extends UnorderedStringSlicer> { + + public ViolationCodenarc() { + super(new ViolationCodenarcSliceSpec()); + } + + public static class ViolationCodenarcSliceSpec extends AbstractViolationSliceSpec { + + public ViolationCodenarcSliceSpec() { + super("Violation - CodeNarc", "violationcodenarc"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "codenarc"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationCpd.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationCpd.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationCpd.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationCpd extends UnorderedStringSlicer> { + + public ViolationCpd() { + super(new ViolationCpdSliceSpec()); + } + + public static class ViolationCpdSliceSpec extends AbstractViolationSliceSpec { + + public ViolationCpdSliceSpec() { + super("Violation - CPD", "violationcpd"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "cpd"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationCpplint.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationCpplint.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationCpplint.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationCpplint extends UnorderedStringSlicer> { + + public ViolationCpplint() { + super(new ViolationCpplintSliceSpec()); + } + + public static class ViolationCpplintSliceSpec extends AbstractViolationSliceSpec { + + public ViolationCpplintSliceSpec() { + super("Violation - Cpplint", "violationcpplint"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "cpplint"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationCsslint.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationCsslint.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationCsslint.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationCsslint extends UnorderedStringSlicer> { + + public ViolationCsslint() { + super(new ViolationCsslintSliceSpec()); + } + + public static class ViolationCsslintSliceSpec extends AbstractViolationSliceSpec { + + public ViolationCsslintSliceSpec() { + super("Violation - CSSLint", "violationcsslint"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "csslint"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationFindbugs.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationFindbugs.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationFindbugs.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationFindbugs extends UnorderedStringSlicer> { + + public ViolationFindbugs() { + super(new ViolationFindbugsSliceSpec()); + } + + public static class ViolationFindbugsSliceSpec extends AbstractViolationSliceSpec { + + public ViolationFindbugsSliceSpec() { + super("Violation - Findbugs", "violationfindbugs"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "findbugs"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationFxcop.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationFxcop.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationFxcop.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationFxcop extends UnorderedStringSlicer> { + + public ViolationFxcop() { + super(new ViolationFxcopSliceSpec()); + } + + public static class ViolationFxcopSliceSpec extends AbstractViolationSliceSpec { + + public ViolationFxcopSliceSpec() { + super("Violation - FxCop", "violationfxcop"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "fxcop"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationGendarme.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationGendarme.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationGendarme.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationGendarme extends UnorderedStringSlicer> { + + public ViolationGendarme() { + super(new ViolationGendarmeSliceSpec()); + } + + public static class ViolationGendarmeSliceSpec extends AbstractViolationSliceSpec { + + public ViolationGendarmeSliceSpec() { + super("Violation - Gendarme", "violationgendarme"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "gendarme"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationJcreport.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationJcreport.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationJcreport.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationJcreport extends UnorderedStringSlicer> { + + public ViolationJcreport() { + super(new ViolationJcreportSliceSpec()); + } + + public static class ViolationJcreportSliceSpec extends AbstractViolationSliceSpec { + + public ViolationJcreportSliceSpec() { + super("Violation - JcReport", "violationjcreport"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "jcreport"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationJslint.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationJslint.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationJslint.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationJslint extends UnorderedStringSlicer> { + + public ViolationJslint() { + super(new ViolationJslintSliceSpec()); + } + + public static class ViolationJslintSliceSpec extends AbstractViolationSliceSpec { + + public ViolationJslintSliceSpec() { + super("Violation - JSLint", "violationjslint"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "jslint"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationPep8.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationPep8.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationPep8.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationPep8 extends UnorderedStringSlicer> { + + public ViolationPep8() { + super(new ViolationPep8SliceSpec()); + } + + public static class ViolationPep8SliceSpec extends AbstractViolationSliceSpec { + + public ViolationPep8SliceSpec() { + super("Violation - Pep8", "violationpep8"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "pep8"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationPerlcritic.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationPerlcritic.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationPerlcritic.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import hudson.plugins.violations.types.perlcritic.PerlCriticDescriptor; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationPerlcritic extends UnorderedStringSlicer> { + + public ViolationPerlcritic() { + super(new ViolationPerlcriticSliceSpec()); + } + + public static class ViolationPerlcriticSliceSpec extends AbstractViolationSliceSpec { + + public ViolationPerlcriticSliceSpec() { + super("Violation - PerlCritic", "violationperlcritic"); + } + + @Override + public String getViolationType() { + return PerlCriticDescriptor.TYPE_NAME; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationPmd.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationPmd.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationPmd.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationPmd extends UnorderedStringSlicer> { + + public ViolationPmd() { + super(new ViolationPmdSliceSpec()); + } + + public static class ViolationPmdSliceSpec extends AbstractViolationSliceSpec { + + public ViolationPmdSliceSpec() { + super("Violation - PMD", "violationpmd"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "pmd"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationPylint.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationPylint.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationPylint.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationPylint extends UnorderedStringSlicer> { + + public ViolationPylint() { + super(new ViolationPylintSliceSpec()); + } + + public static class ViolationPylintSliceSpec extends AbstractViolationSliceSpec { + + public ViolationPylintSliceSpec() { + super("Violation - Pylint", "violationpylint"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "pylint"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationSimian.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationSimian.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationSimian.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationSimian extends UnorderedStringSlicer> { + + public ViolationSimian() { + super(new ViolationSimianSliceSpec()); + } + + public static class ViolationSimianSliceSpec extends AbstractViolationSliceSpec { + + public ViolationSimianSliceSpec() { + super("Violation - Simian", "violationsimian"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "simian"; + } + + } +} Index: src/main/java/configurationslicing/violations/ViolationStylecop.java =================================================================== --- src/main/java/configurationslicing/violations/ViolationStylecop.java (revision 0) +++ src/main/java/configurationslicing/violations/ViolationStylecop.java (working copy) @@ -0,0 +1,30 @@ +package configurationslicing.violations; + +import hudson.Extension; +import hudson.model.AbstractProject; +import configurationslicing.UnorderedStringSlicer; + +/** + * @author Michael Klein + */ +@Extension +public class ViolationStylecop extends UnorderedStringSlicer> { + + public ViolationStylecop() { + super(new ViolationStylecopSliceSpec()); + } + + public static class ViolationStylecopSliceSpec extends AbstractViolationSliceSpec { + + public ViolationStylecopSliceSpec() { + super("Violation - StyleCop", "violationstylecop"); + } + + @Override + public String getViolationType() { + // There is no way to get it from the plugin + return "stylecop"; + } + + } +}