Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
  • 17 commits
  • 15 files changed
  • 0 comments
  • 1 contributor
2  .checkstyle
... ...
@@ -1,7 +1,7 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 
3 3
 <fileset-config file-format-version="1.2.0" simple-config="true">
4  
-  <local-check-config name="Ulli's Checkstyle Rules" location="/analysis-config/etc/checkstyle-eclipse-configuration.xml" type="project" description="">
  4
+  <local-check-config name="Ulli's Checkstyle Rules" location="/analysis-config/etc/checkstyle-configuration.xml" type="project" description="">
5 5
     <additional-data name="protect-config-file" value="false"/>
6 6
   </local-check-config>
7 7
   <fileset name="all" enabled="true" check-config-name="Ulli's Checkstyle Rules" local="true">
4  .classpath
... ...
@@ -1,9 +1,9 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <classpath>
3 3
 	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
4  
-	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
  4
+	<classpathentry kind="src" output="target/classes" path="src/main/resources"/>
5 5
 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
6  
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
  6
+	<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
7 7
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
8 8
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
9 9
 	<classpathentry kind="src" output="target/classes" path="target/generated-sources/localizer">
14  .fbprefs
... ...
@@ -1,6 +1,8 @@
1 1
 #FindBugs User Preferences
2  
-#Thu Sep 16 10:25:47 CEST 2010
  2
+#Fri Feb 24 13:50:19 CET 2012
  3
+cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud
3 4
 detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
  5
+detectorAtomicityProblem=AtomicityProblem|true
4 6
 detectorBadAppletConstructor=BadAppletConstructor|false
5 7
 detectorBadResultSetAccess=BadResultSetAccess|true
6 8
 detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
@@ -8,6 +10,7 @@ detectorBadUseOfReturnValue=BadUseOfReturnValue|true
8 10
 detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
9 11
 detectorBooleanReturnNull=BooleanReturnNull|true
10 12
 detectorCallToUnsupportedMethod=CallToUnsupportedMethod|false
  13
+detectorCheckExpectedWarnings=CheckExpectedWarnings|false
11 14
 detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
12 15
 detectorCheckTypeQualifiers=CheckTypeQualifiers|true
13 16
 detectorCloneIdiom=CloneIdiom|true
@@ -15,6 +18,7 @@ detectorComparatorIdiom=ComparatorIdiom|true
15 18
 detectorConfusedInheritance=ConfusedInheritance|true
16 19
 detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
17 20
 detectorCrossSiteScripting=CrossSiteScripting|true
  21
+detectorDefaultEncodingDetector=DefaultEncodingDetector|true
18 22
 detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
19 23
 detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
20 24
 detectorDontIgnoreResultOfPutIfAbsent=DontIgnoreResultOfPutIfAbsent|true
@@ -25,6 +29,7 @@ detectorDumbMethods=DumbMethods|true
25 29
 detectorDuplicateBranches=DuplicateBranches|true
26 30
 detectorEmptyZipFileEntry=EmptyZipFileEntry|true
27 31
 detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
  32
+detectorExplicitSerialization=ExplicitSerialization|true
28 33
 detectorFinalizerNullsFields=FinalizerNullsFields|true
29 34
 detectorFindBadCast2=FindBadCast2|true
30 35
 detectorFindBadForLoop=FindBadForLoop|true
@@ -65,6 +70,7 @@ detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContaine
65 70
 detectorFindUnreleasedLock=FindUnreleasedLock|true
66 71
 detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
67 72
 detectorFindUnsyncGet=FindUnsyncGet|true
  73
+detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true
68 74
 detectorFindUselessControlFlow=FindUselessControlFlow|true
69 75
 detectorFormatStringChecker=FormatStringChecker|true
70 76
 detectorHugeSharedStringConstants=HugeSharedStringConstants|true
@@ -79,6 +85,7 @@ detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
79 85
 detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
80 86
 detectorInitializationChain=InitializationChain|true
81 87
 detectorInstantiateStaticClass=InstantiateStaticClass|true
  88
+detectorIntCast2LongAsInstant=IntCast2LongAsInstant|true
82 89
 detectorInvalidJUnitTest=InvalidJUnitTest|true
83 90
 detectorIteratorIdioms=IteratorIdioms|true
84 91
 detectorLazyInit=LazyInit|true
@@ -89,6 +96,7 @@ detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
89 96
 detectorMutableLock=MutableLock|true
90 97
 detectorMutableStaticFields=MutableStaticFields|true
91 98
 detectorNaming=Naming|true
  99
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
92 100
 detectorNumberConstructor=NumberConstructor|true
93 101
 detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
94 102
 detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
@@ -122,7 +130,7 @@ detectorWrongMapIterator=WrongMapIterator|true
122 130
 detectorXMLFactoryBypass=XMLFactoryBypass|true
123 131
 detector_threshold=3
124 132
 effort=max
125  
-excludefilter0=../analysis-config/etc/findbugs-exclusion-filter.xml
126  
-filter_settings=Low|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false
  133
+excludefilter0=../analysis-config/etc/findbugs-exclusion-filter.xml|true
  134
+filter_settings=Low|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|20
127 135
 filter_settings_neg=NOISE,I18N|
128 136
 run_at_full_build=true
8  pom.xml
@@ -4,14 +4,14 @@
4 4
   <parent>
5 5
     <groupId>org.jvnet.hudson.plugins</groupId>
6 6
     <artifactId>analysis-pom</artifactId>
7  
-    <version>1.33</version>
  7
+    <version>1.35</version>
8 8
     <relativePath>../analysis-pom/pom.xml</relativePath>
9 9
   </parent>
10 10
 
11 11
   <artifactId>analysis-collector</artifactId>
12 12
   <packaging>hpi</packaging>
13 13
   <name>Static Analysis Collector Plug-in</name>
14  
-  <version>1.20-SNAPSHOT</version>
  14
+  <version>1.23-SNAPSHOT</version>
15 15
   <url>http://wiki.jenkins-ci.org/x/tgeIAg</url>
16 16
 
17 17
   <description>
@@ -24,12 +24,12 @@
24 24
     <dependency>
25 25
       <groupId>org.jvnet.hudson.plugins</groupId>
26 26
       <artifactId>analysis-core</artifactId>
27  
-      <version>1.36</version>
  27
+      <version>1.38</version>
28 28
     </dependency>
29 29
     <dependency>
30 30
       <groupId>org.jvnet.hudson.plugins</groupId>
31 31
       <artifactId>analysis-test</artifactId>
32  
-      <version>1.7</version>
  32
+      <version>1.8</version>
33 33
     </dependency>
34 34
     <dependency>
35 35
       <groupId>org.jvnet.hudson.plugins</groupId>
45  src/main/java/hudson/plugins/analysis/collector/AnalysisResult.java
@@ -7,7 +7,7 @@
7 7
 import hudson.plugins.analysis.core.ResultAction;
8 8
 import hudson.plugins.analysis.util.model.FileAnnotation;
9 9
 
10  
-import java.lang.ref.WeakReference;
  10
+import java.io.IOException;
11 11
 import java.util.Map;
12 12
 
13 13
 import com.google.common.collect.Maps;
@@ -22,8 +22,8 @@
22 22
     /** Unique identifier of this class. */
23 23
     private static final long serialVersionUID = 847650789493429154L;
24 24
 
25  
-    /** Number of annotations by origin mapping. */
26  
-    private transient WeakReference<Map<String, Integer>> annotationsByOrigin;
  25
+    /** Number of annotations by origin mapping. Serialized @since 1.20. */
  26
+    private Map<String, Integer> annotationsByOrigin;
27 27
 
28 28
     private transient Object mappingLock = new Object();
29 29
 
@@ -43,7 +43,7 @@ public AnalysisResult(final AbstractBuild<?, ?> build, final String defaultEncod
43 43
             final ParserResult result, final BuildHistory history) {
44 44
         super(build, defaultEncoding, result, history);
45 45
 
46  
-        annotationsByOrigin = newReference(countAnnotations());
  46
+        annotationsByOrigin = countAnnotations();
47 47
     }
48 48
 
49 49
     /**
@@ -60,7 +60,7 @@ public AnalysisResult(final AbstractBuild<?, ?> build, final String defaultEncod
60 60
             final ParserResult result) {
61 61
         super(build, defaultEncoding, result);
62 62
 
63  
-        annotationsByOrigin = newReference(countAnnotations());
  63
+        annotationsByOrigin = countAnnotations();
64 64
     }
65 65
 
66 66
     /** {@inheritDoc} */
@@ -90,10 +90,6 @@ protected Object readResolve() {
90 90
         return mapping;
91 91
     }
92 92
 
93  
-    private WeakReference<Map<String, Integer>> newReference(final Map<String, Integer> mapping) {
94  
-        return new WeakReference<Map<String, Integer>>(mapping);
95  
-    }
96  
-
97 93
     /**
98 94
      * Returns a summary message for the summary.jelly file.
99 95
      *
@@ -103,13 +99,11 @@ public String getSummary() {
103 99
         return AnalysisResultSummary.createSummary(this);
104 100
     }
105 101
 
106  
-    /** {@inheritDoc} */
107 102
     @Override
108 103
     protected String createDeltaMessage() {
109 104
         return AnalysisResultSummary.createDeltaMessage(this);
110 105
     }
111 106
 
112  
-    /** {@inheritDoc} */
113 107
     @Override
114 108
     protected String getSerializationFileName() {
115 109
         return "analysis.xml";
@@ -120,35 +114,34 @@ public String getDisplayName() {
120 114
         return Messages.Analysis_ProjectAction_Name();
121 115
     }
122 116
 
123  
-    /** {@inheritDoc} */
124 117
     @Override
125 118
     protected Class<? extends ResultAction<? extends BuildResult>> getResultActionType() {
126 119
         return AnalysisResultAction.class;
127 120
     }
128 121
 
129 122
     /**
130  
-     * Returns the number of annotations from the specified origin. If there are no annotations
  123
+     * Returns the number of annotations from the specified origin. If there are
  124
+     * no annotations, then 0 is returned.
131 125
      *
132 126
      * @param origin
133 127
      *            the origin
134 128
      * @return the number of annotations from the specified origin
135 129
      */
136 130
     public int getNumberOfAnnotationsByOrigin(final String origin) {
137  
-        Map<String, Integer> mapping = getMapping();
138  
-        if (mapping.containsKey(origin)) {
139  
-            return mapping.get(origin);
140  
-        }
141  
-        return 0;
142  
-    }
143  
-
144  
-    private Map<String, Integer> getMapping() {
145 131
         synchronized (mappingLock) {
146  
-            if (annotationsByOrigin == null || annotationsByOrigin.get() == null) {
147  
-                Map<String, Integer> mapping = countAnnotations();
148  
-                annotationsByOrigin = newReference(mapping);
149  
-                return mapping;
  132
+            if (annotationsByOrigin == null) {
  133
+                annotationsByOrigin = countAnnotations();
  134
+                try {
  135
+                    getOwner().save();
  136
+                }
  137
+                catch (IOException exception) {
  138
+                    // ignore
  139
+                }
150 140
             }
151  
-            return annotationsByOrigin.get();
152 141
         }
  142
+        if (annotationsByOrigin.containsKey(origin)) {
  143
+            return annotationsByOrigin.get(origin);
  144
+        }
  145
+        return 0;
153 146
     }
154 147
 }
73  src/main/java/hudson/plugins/analysis/collector/dashboard/AnalysisGraphDescriptor.java
... ...
@@ -0,0 +1,73 @@
  1
+package hudson.plugins.analysis.collector.dashboard;
  2
+
  3
+import hudson.model.Descriptor;
  4
+import hudson.plugins.analysis.collector.AnalysisDescriptor;
  5
+import hudson.plugins.view.dashboard.DashboardPortlet;
  6
+
  7
+/**
  8
+ * Descriptor with convenience methods for accessing the installed plug-ins.
  9
+ *
  10
+ * @author Ulli Hafner
  11
+ */
  12
+public abstract class AnalysisGraphDescriptor extends Descriptor<DashboardPortlet> {
  13
+    /**
  14
+     * Returns whether the Checkstyle plug-in is installed.
  15
+     *
  16
+     * @return <code>true</code> if the Checkstyle plug-in is installed,
  17
+     *         <code>false</code> if not.
  18
+     */
  19
+    public boolean isCheckStyleInstalled() {
  20
+        return AnalysisDescriptor.isCheckStyleInstalled();
  21
+    }
  22
+
  23
+    /**
  24
+     * Returns whether the Dry plug-in is installed.
  25
+     *
  26
+     * @return <code>true</code> if the Dry plug-in is installed,
  27
+     *         <code>false</code> if not.
  28
+     */
  29
+    public boolean isDryInstalled() {
  30
+        return AnalysisDescriptor.isDryInstalled();
  31
+    }
  32
+
  33
+    /**
  34
+     * Returns whether the FindBugs plug-in is installed.
  35
+     *
  36
+     * @return <code>true</code> if the FindBugs plug-in is installed,
  37
+     *         <code>false</code> if not.
  38
+     */
  39
+    public boolean isFindBugsInstalled() {
  40
+        return AnalysisDescriptor.isFindBugsInstalled();
  41
+    }
  42
+
  43
+    /**
  44
+     * Returns whether the PMD plug-in is installed.
  45
+     *
  46
+     * @return <code>true</code> if the PMD plug-in is installed,
  47
+     *         <code>false</code> if not.
  48
+     */
  49
+    public boolean isPmdInstalled() {
  50
+        return AnalysisDescriptor.isPmdInstalled();
  51
+    }
  52
+
  53
+    /**
  54
+     * Returns whether the Open Tasks plug-in is installed.
  55
+     *
  56
+     * @return <code>true</code> if the Open Tasks plug-in is installed,
  57
+     *         <code>false</code> if not.
  58
+     */
  59
+    public boolean isOpenTasksInstalled() {
  60
+        return AnalysisDescriptor.isOpenTasksInstalled();
  61
+    }
  62
+
  63
+    /**
  64
+     * Returns whether the Warnings plug-in is installed.
  65
+     *
  66
+     * @return <code>true</code> if the Warnings plug-in is installed,
  67
+     *         <code>false</code> if not.
  68
+     */
  69
+    public boolean isWarningsInstalled() {
  70
+        return AnalysisDescriptor.isWarningsInstalled();
  71
+    }
  72
+}
  73
+
65  src/main/java/hudson/plugins/analysis/collector/dashboard/WarningsOriginGraphPortlet.java
... ...
@@ -1,15 +1,12 @@
1 1
 package hudson.plugins.analysis.collector.dashboard;
2 2
 
3 3
 import hudson.Extension;
4  
-import hudson.model.Descriptor;
5  
-import hudson.plugins.analysis.collector.AnalysisDescriptor;
6 4
 import hudson.plugins.analysis.collector.AnalysisProjectAction;
7 5
 import hudson.plugins.analysis.collector.Messages;
8 6
 import hudson.plugins.analysis.collector.OriginGraph;
9 7
 import hudson.plugins.analysis.core.AbstractProjectAction;
10 8
 import hudson.plugins.analysis.dashboard.AbstractWarningsGraphPortlet;
11 9
 import hudson.plugins.analysis.graph.BuildResultGraph;
12  
-import hudson.plugins.view.dashboard.DashboardPortlet;
13 10
 
14 11
 import org.kohsuke.stapler.DataBoundConstructor;
15 12
 
@@ -145,71 +142,11 @@ protected BuildResultGraph getGraphType() {
145 142
      * Extension point registration.
146 143
      */
147 144
     @Extension(optional = true)
148  
-    public static class WarningsGraphDescriptor extends Descriptor<DashboardPortlet> {
  145
+    public static class WarningsGraphDescriptor extends AnalysisGraphDescriptor {
149 146
         @Override
150 147
         public String getDisplayName() {
151 148
             return Messages.Portlet_WarningsOriginGraph();
152 149
         }
153  
-
154  
-        /**
155  
-         * Returns whether the Checkstyle plug-in is installed.
156  
-         *
157  
-         * @return <code>true</code> if the Checkstyle plug-in is installed,
158  
-         *         <code>false</code> if not.
159  
-         */
160  
-        public boolean isCheckStyleInstalled() {
161  
-            return AnalysisDescriptor.isCheckStyleInstalled();
162  
-        }
163  
-
164  
-        /**
165  
-         * Returns whether the Dry plug-in is installed.
166  
-         *
167  
-         * @return <code>true</code> if the Dry plug-in is installed,
168  
-         *         <code>false</code> if not.
169  
-         */
170  
-        public static boolean isDryInstalled() {
171  
-            return AnalysisDescriptor.isDryInstalled();
172  
-        }
173  
-
174  
-        /**
175  
-         * Returns whether the FindBugs plug-in is installed.
176  
-         *
177  
-         * @return <code>true</code> if the FindBugs plug-in is installed,
178  
-         *         <code>false</code> if not.
179  
-         */
180  
-        public static boolean isFindBugsInstalled() {
181  
-            return AnalysisDescriptor.isFindBugsInstalled();
182  
-        }
183  
-
184  
-        /**
185  
-         * Returns whether the PMD plug-in is installed.
186  
-         *
187  
-         * @return <code>true</code> if the PMD plug-in is installed,
188  
-         *         <code>false</code> if not.
189  
-         */
190  
-        public static boolean isPmdInstalled() {
191  
-            return AnalysisDescriptor.isPmdInstalled();
192  
-        }
193  
-
194  
-        /**
195  
-         * Returns whether the Open Tasks plug-in is installed.
196  
-         *
197  
-         * @return <code>true</code> if the Open Tasks plug-in is installed,
198  
-         *         <code>false</code> if not.
199  
-         */
200  
-        public static boolean isOpenTasksInstalled() {
201  
-            return AnalysisDescriptor.isOpenTasksInstalled();
202  
-        }
203  
-
204  
-        /**
205  
-         * Returns whether the Warnings plug-in is installed.
206  
-         *
207  
-         * @return <code>true</code> if the Warnings plug-in is installed,
208  
-         *         <code>false</code> if not.
209  
-         */
210  
-        public static boolean isWarningsInstalled() {
211  
-            return AnalysisDescriptor.isWarningsInstalled();
212  
-        }
213 150
     }
214 151
 }
215 152
 
129  src/main/java/hudson/plugins/analysis/collector/dashboard/WarningsTablePortlet.java
... ...
@@ -1,20 +1,17 @@
1 1
 package hudson.plugins.analysis.collector.dashboard;
2 2
 
3 3
 import hudson.Extension;
4  
-import hudson.model.Descriptor;
5 4
 import hudson.model.Job;
6  
-import hudson.plugins.analysis.collector.AnalysisDescriptor;
7 5
 import hudson.plugins.analysis.collector.AnalysisProjectAction;
8 6
 import hudson.plugins.analysis.collector.Messages;
9  
-import hudson.plugins.analysis.core.AbstractProjectAction;
10 7
 import hudson.plugins.analysis.core.BuildResult;
  8
+import hudson.plugins.analysis.core.AbstractProjectAction;
11 9
 import hudson.plugins.analysis.dashboard.AbstractWarningsTablePortlet;
12 10
 import hudson.plugins.checkstyle.CheckStyleProjectAction;
13 11
 import hudson.plugins.dry.DryProjectAction;
14 12
 import hudson.plugins.findbugs.FindBugsProjectAction;
15 13
 import hudson.plugins.pmd.PmdProjectAction;
16 14
 import hudson.plugins.tasks.TasksProjectAction;
17  
-import hudson.plugins.view.dashboard.DashboardPortlet;
18 15
 import hudson.plugins.warnings.WarningsProjectAction;
19 16
 
20 17
 import java.util.Collection;
@@ -35,6 +32,13 @@
35 32
     /** Determines whether images should be used in the table header. */
36 33
     private final boolean useImages;
37 34
 
  35
+    private final boolean isCheckStyleDeactivated;
  36
+    private final boolean isDryDeactivated;
  37
+    private final boolean isFindBugsDeactivated;
  38
+    private final boolean isPmdDeactivated;
  39
+    private final boolean isOpenTasksDeactivated;
  40
+    private final boolean isWarningsDeactivated;
  41
+
38 42
     /**
39 43
      * Creates a new instance of {@link WarningsTablePortlet}.
40 44
      *
@@ -42,11 +46,36 @@
42 46
      *            the name of the portlet
43 47
      * @param useImages
44 48
      *            determines whether images should be used in the table header.
  49
+     * @param isCheckStyleActivated
  50
+     *            determines whether to show the warnings from Checkstyle
  51
+     * @param isDryActivated
  52
+     *            determines whether to show the warnings from DRY
  53
+     * @param isFindBugsActivated
  54
+     *            determines whether to show the warnings from FindBugs
  55
+     * @param isPmdActivated
  56
+     *            determines whether to show the warnings from PMD
  57
+     * @param isOpenTasksActivated
  58
+     *            determines whether to show open tasks
  59
+     * @param isWarningsActivated
  60
+     *            determines whether to show compiler warnings
45 61
      */
46 62
     @DataBoundConstructor
47  
-    public WarningsTablePortlet(final String name, final boolean useImages) {
  63
+    // CHECKSTYLE:OFF
  64
+    public WarningsTablePortlet(final String name, final boolean useImages,
  65
+        final boolean isCheckStyleActivated, final boolean isDryActivated,
  66
+        final boolean isFindBugsActivated, final boolean isPmdActivated,
  67
+        final boolean isOpenTasksActivated, final boolean isWarningsActivated) {
  68
+        // CHECKSTYLE:ON
48 69
         super(name);
  70
+
49 71
         this.useImages = useImages;
  72
+
  73
+        isDryDeactivated = !isDryActivated;
  74
+        isFindBugsDeactivated = !isFindBugsActivated;
  75
+        isPmdDeactivated = !isPmdActivated;
  76
+        isOpenTasksDeactivated = !isOpenTasksActivated;
  77
+        isWarningsDeactivated = !isWarningsActivated;
  78
+        isCheckStyleDeactivated = !isCheckStyleActivated;
50 79
     }
51 80
 
52 81
     /** {@inheritDoc} */
@@ -65,7 +94,7 @@ protected String getPluginName() {
65 94
      * Returns whether images should be used in the table header.
66 95
      *
67 96
      * @return <code>true</code> if images should be used, <code>false</code> if
68  
-     *         text shuld be used
  97
+     *         text should be used
69 98
      */
70 99
     public boolean getUseImages() {
71 100
         return useImages;
@@ -75,70 +104,82 @@ public boolean getUseImages() {
75 104
      * Returns whether icons should be used in the table header.
76 105
      *
77 106
      * @return <code>true</code> if icons should be used, <code>false</code> if
78  
-     *         text shuld be used
  107
+     *         text should be used
79 108
      */
80 109
     public boolean useIcons() {
81 110
         return useImages;
82 111
     }
83 112
 
84 113
     /**
85  
-     * Returns whether the Checkstyle plug-in is installed.
  114
+     * Returns whether the totals column should be shown.
  115
+     *
  116
+     * @return <code>true</code> if the totals column should be shown, <code>false</code> otherwise
  117
+     */
  118
+    public boolean isTotalsVisible() {
  119
+        return toInt(isCheckStyleActivated())
  120
+                + toInt(isDryActivated())
  121
+                + toInt(isFindBugsActivated())
  122
+                + toInt(isPmdActivated())
  123
+                + toInt(isOpenTasksActivated())
  124
+                + toInt(isWarningsActivated()) > 1;
  125
+    }
  126
+
  127
+    private int toInt(final boolean isActivated) {
  128
+        return isActivated ? 1 : 0;
  129
+    }
  130
+
  131
+    /**
  132
+     * Returns whether CheckStyle results should be shown.
86 133
      *
87  
-     * @return <code>true</code> if the Checkstyle plug-in is installed,
88  
-     *         <code>false</code> if not.
  134
+     * @return <code>true</code> if CheckStyle results should be shown, <code>false</code> otherwise
89 135
      */
90  
-    public boolean isCheckStyleInstalled() {
91  
-        return AnalysisDescriptor.isCheckStyleInstalled();
  136
+    public boolean isCheckStyleActivated() {
  137
+        return !isCheckStyleDeactivated;
92 138
     }
93 139
 
94 140
     /**
95  
-     * Returns whether the Dry plug-in is installed.
  141
+     * Returns whether DRY results should be shown.
96 142
      *
97  
-     * @return <code>true</code> if the Dry plug-in is installed,
98  
-     *         <code>false</code> if not.
  143
+     * @return <code>true</code> if DRY results should be shown, <code>false</code> otherwise
99 144
      */
100  
-    public boolean isDryInstalled() {
101  
-        return AnalysisDescriptor.isDryInstalled();
  145
+    public boolean isDryActivated() {
  146
+        return !isDryDeactivated;
102 147
     }
103 148
 
104 149
     /**
105  
-     * Returns whether the FindBugs plug-in is installed.
  150
+     * Returns whether FindBugs results should be shown.
106 151
      *
107  
-     * @return <code>true</code> if the FindBugs plug-in is installed,
108  
-     *         <code>false</code> if not.
  152
+     * @return <code>true</code> if FindBugs results should be shown, <code>false</code> otherwise
109 153
      */
110  
-    public boolean isFindBugsInstalled() {
111  
-        return AnalysisDescriptor.isFindBugsInstalled();
  154
+    public boolean isFindBugsActivated() {
  155
+        return !isFindBugsDeactivated;
112 156
     }
113 157
 
114 158
     /**
115  
-     * Returns whether the PMD plug-in is installed.
  159
+     * Returns whether PMD results should be shown.
116 160
      *
117  
-     * @return <code>true</code> if the PMD plug-in is installed,
118  
-     *         <code>false</code> if not.
  161
+     * @return <code>true</code> if PMD results should be shown, <code>false</code> otherwise
119 162
      */
120  
-    public boolean isPmdInstalled() {
121  
-        return AnalysisDescriptor.isPmdInstalled();
  163
+    public boolean isPmdActivated() {
  164
+        return !isPmdDeactivated;
122 165
     }
123 166
 
124 167
     /**
125  
-     * Returns whether the Open Tasks plug-in is installed.
  168
+     * Returns whether open tasks should be shown.
126 169
      *
127  
-     * @return <code>true</code> if the Open Tasks plug-in is installed,
128  
-     *         <code>false</code> if not.
  170
+     * @return <code>true</code> if open tasks should be shown, <code>false</code> otherwise
129 171
      */
130  
-    public boolean isTasksInstalled() {
131  
-        return AnalysisDescriptor.isOpenTasksInstalled();
  172
+    public boolean isOpenTasksActivated() {
  173
+        return !isOpenTasksDeactivated;
132 174
     }
133 175
 
134 176
     /**
135  
-     * Returns whether the Warnings plug-in is installed.
  177
+     * Returns whether compiler warnings results should be shown.
136 178
      *
137  
-     * @return <code>true</code> if the Warnings plug-in is installed,
138  
-     *         <code>false</code> if not.
  179
+     * @return <code>true</code> if compiler warnings results should be shown, <code>false</code> otherwise
139 180
      */
140  
-    public boolean isWarningsInstalled() {
141  
-        return AnalysisDescriptor.isWarningsInstalled();
  181
+    public boolean isWarningsActivated() {
  182
+        return !isWarningsDeactivated;
142 183
     }
143 184
 
144 185
     /**
@@ -149,7 +190,7 @@ public boolean isWarningsInstalled() {
149 190
      * @return the number of Checkstyle warnings
150 191
      */
151 192
     public String getCheckStyle(final Job<?, ?> job) {
152  
-        if (AnalysisDescriptor.isCheckStyleInstalled()) {
  193
+        if (isCheckStyleActivated()) {
153 194
             return getWarnings(job, CheckStyleProjectAction.class, "checkstyle");
154 195
         }
155 196
         return NO_RESULTS_FOUND;
@@ -163,7 +204,7 @@ public String getCheckStyle(final Job<?, ?> job) {
163 204
      * @return the number of duplicate code warnings
164 205
      */
165 206
     public String getDry(final Job<?, ?> job) {
166  
-        if (AnalysisDescriptor.isDryInstalled()) {
  207
+        if (isDryActivated()) {
167 208
             return getWarnings(job, DryProjectAction.class, "dry");
168 209
         }
169 210
         return NO_RESULTS_FOUND;
@@ -177,7 +218,7 @@ public String getDry(final Job<?, ?> job) {
177 218
      * @return the number of FindBugs warnings
178 219
      */
179 220
     public String getFindBugs(final Job<?, ?> job) {
180  
-        if (AnalysisDescriptor.isFindBugsInstalled()) {
  221
+        if (isFindBugsActivated()) {
181 222
             return getWarnings(job, FindBugsProjectAction.class, "findbugs");
182 223
         }
183 224
         return NO_RESULTS_FOUND;
@@ -191,7 +232,7 @@ public String getFindBugs(final Job<?, ?> job) {
191 232
      * @return the number of PMD warnings
192 233
      */
193 234
     public String getPmd(final Job<?, ?> job) {
194  
-        if (AnalysisDescriptor.isPmdInstalled()) {
  235
+        if (isPmdActivated()) {
195 236
             return getWarnings(job, PmdProjectAction.class, "pmd");
196 237
         }
197 238
         return NO_RESULTS_FOUND;
@@ -205,7 +246,7 @@ public String getPmd(final Job<?, ?> job) {
205 246
      * @return the number of open tasks
206 247
      */
207 248
     public String getTasks(final Job<?, ?> job) {
208  
-        if (AnalysisDescriptor.isOpenTasksInstalled()) {
  249
+        if (isOpenTasksActivated()) {
209 250
             return getWarnings(job, TasksProjectAction.class, "tasks");
210 251
         }
211 252
         return NO_RESULTS_FOUND;
@@ -220,7 +261,7 @@ public String getTasks(final Job<?, ?> job) {
220 261
      */
221 262
     @Override
222 263
     public String getWarnings(final Job<?, ?> job) {
223  
-        if (AnalysisDescriptor.isWarningsInstalled()) {
  264
+        if (isWarningsActivated()) {
224 265
             return getWarnings(job, WarningsProjectAction.class, "warnings");
225 266
         }
226 267
         return NO_RESULTS_FOUND;
@@ -405,7 +446,7 @@ private String getWarnings(final Job<?, ?> job, final Class<? extends AbstractPr
405 446
      * @author Ulli Hafner
406 447
      */
407 448
     @Extension(optional = true)
408  
-    public static class WarningsPerJobDescriptor extends Descriptor<DashboardPortlet> {
  449
+    public static class WarningsPerJobDescriptor extends AnalysisGraphDescriptor {
409 450
         @Override
410 451
         public String getDisplayName() {
411 452
             return Messages.Portlet_WarningsTable();
41  src/main/resources/graph/tools.jelly
... ...
@@ -0,0 +1,41 @@
  1
+<!--
  2
+  Section header
  3
+  
  4
+  <%@attribute name="descriptor" required="true" %>
  5
+  <%@attribute name="instance" required="true" %>
  6
+-->
  7
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
  8
+  xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
  9
+
  10
+  <j:if test="${descriptor.isCheckStyleInstalled()}">
  11
+    <f:entry title="${%Checkstyle warnings}">
  12
+      <f:checkbox name="isCheckStyleActivated" checked="${h.defaultToTrue(instance.isCheckStyleActivated())}"/>
  13
+    </f:entry>
  14
+  </j:if>
  15
+  <j:if test="${descriptor.isDryInstalled()}">
  16
+    <f:entry title="${%Duplicate code warnings}">
  17
+      <f:checkbox name="isDryActivated" checked="${h.defaultToTrue(instance.isDryActivated())}"/>
  18
+    </f:entry>
  19
+  </j:if>
  20
+  <j:if test="${descriptor.isFindBugsInstalled()}">
  21
+    <f:entry title="${%FindBugs warnings}">
  22
+      <f:checkbox name="isFindBugsActivated" checked="${h.defaultToTrue(instance.isFindBugsActivated())}"/>
  23
+    </f:entry>
  24
+  </j:if>
  25
+  <j:if test="${descriptor.isPmdInstalled()}">
  26
+    <f:entry title="${%PMD warnings}">
  27
+      <f:checkbox name="isPmdActivated" checked="${h.defaultToTrue(instance.isPmdActivated())}"/>
  28
+    </f:entry>
  29
+  </j:if>
  30
+  <j:if test="${descriptor.isOpenTasksInstalled()}">
  31
+    <f:entry title="${%Open tasks}">
  32
+      <f:checkbox name="isOpenTasksActivated" checked="${h.defaultToTrue(instance.isOpenTasksActivated())}"/>
  33
+    </f:entry>
  34
+  </j:if>
  35
+  <j:if test="${descriptor.isWarningsInstalled()}">
  36
+    <f:entry title="${%Compiler warnings}">
  37
+      <f:checkbox name="isWarningsActivated" checked="${h.defaultToTrue(instance.isWarningsActivated())}"/>
  38
+    </f:entry>
  39
+  </j:if>
  40
+
  41
+</j:jelly>
0  .../collector/AnalysisPublisher/config_de.properties → src/main/resources/graph/tools_de.properties
File renamed without changes
33  src/main/resources/hudson/plugins/analysis/collector/AnalysisPublisher/config.jelly
... ...
@@ -1,35 +1,6 @@
1 1
 <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
2  
-	xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:u="/util">
3  
-  <j:if test="${descriptor.isCheckStyleInstalled()}">
4  
-    <f:entry title="${%Checkstyle warnings}">
5  
-      <f:checkbox name="isCheckStyleActivated" checked="${h.defaultToTrue(instance.isCheckStyleActivated())}"/>
6  
-    </f:entry>
7  
-  </j:if>
8  
-  <j:if test="${descriptor.isDryInstalled()}">
9  
-    <f:entry title="${%Duplicate code warnings}">
10  
-      <f:checkbox name="isDryActivated" checked="${h.defaultToTrue(instance.isDryActivated())}"/>
11  
-    </f:entry>
12  
-  </j:if>
13  
-  <j:if test="${descriptor.isFindBugsInstalled()}">
14  
-    <f:entry title="${%FindBugs warnings}">
15  
-      <f:checkbox name="isFindBugsActivated" checked="${h.defaultToTrue(instance.isFindBugsActivated())}"/>
16  
-    </f:entry>
17  
-  </j:if>
18  
-  <j:if test="${descriptor.isPmdInstalled()}">
19  
-    <f:entry title="${%PMD warnings}">
20  
-      <f:checkbox name="isPmdActivated" checked="${h.defaultToTrue(instance.isPmdActivated())}"/>
21  
-    </f:entry>
22  
-  </j:if>
23  
-  <j:if test="${descriptor.isOpenTasksInstalled()}">
24  
-    <f:entry title="${%Open tasks}">
25  
-      <f:checkbox name="isOpenTasksActivated" checked="${h.defaultToTrue(instance.isOpenTasksActivated())}"/>
26  
-    </f:entry>
27  
-  </j:if>
28  
-  <j:if test="${descriptor.isWarningsInstalled()}">
29  
-    <f:entry title="${%Compiler warnings}">
30  
-      <f:checkbox name="isWarningsActivated" checked="${h.defaultToTrue(instance.isWarningsActivated())}"/>
31  
-    </f:entry>
32  
-  </j:if>
  2
+	xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:u="/util" xmlns:g="/graph">
  3
+  <g:tools instance="${instance}" descriptor="${descriptor}" />
33 4
   <f:advanced>
34 5
     <u:failed/>
35 6
     <u:health id="analysis"/>
37  ...ugins/analysis/collector/dashboard/WarningsOriginGraphPortlet/WarningsGraphDescriptor/local-config.jelly
... ...
@@ -1,33 +1,6 @@
1  
-<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
2  
-  
3  
-  <j:if test="${descriptor.isCheckStyleInstalled()}">
4  
-    <f:entry title="${%Checkstyle warnings}">
5  
-      <f:checkbox name="isCheckStyleActivated" checked="${h.defaultToTrue(instance.isCheckStyleActivated())}"/>
6  
-    </f:entry>
7  
-  </j:if>
8  
-  <j:if test="${descriptor.isDryInstalled()}">
9  
-    <f:entry title="${%Duplicate code warnings}">
10  
-      <f:checkbox name="isDryActivated" checked="${h.defaultToTrue(instance.isDryActivated())}"/>
11  
-    </f:entry>
12  
-  </j:if>
13  
-  <j:if test="${descriptor.isFindBugsInstalled()}">
14  
-    <f:entry title="${%FindBugs warnings}">
15  
-      <f:checkbox name="isFindBugsActivated" checked="${h.defaultToTrue(instance.isFindBugsActivated())}"/>
16  
-    </f:entry>
17  
-  </j:if>
18  
-  <j:if test="${descriptor.isPmdInstalled()}">
19  
-    <f:entry title="${%PMD warnings}">
20  
-      <f:checkbox name="isPmdActivated" checked="${h.defaultToTrue(instance.isPmdActivated())}"/>
21  
-    </f:entry>
22  
-  </j:if>
23  
-  <j:if test="${descriptor.isOpenTasksInstalled()}">
24  
-    <f:entry title="${%Open tasks}">
25  
-      <f:checkbox name="isOpenTasksActivated" checked="${h.defaultToTrue(instance.isOpenTasksActivated())}"/>
26  
-    </f:entry>
27  
-  </j:if>
28  
-  <j:if test="${descriptor.isWarningsInstalled()}">
29  
-    <f:entry title="${%Compiler warnings}">
30  
-      <f:checkbox name="isWarningsActivated" checked="${h.defaultToTrue(instance.isWarningsActivated())}"/>
31  
-    </f:entry>
32  
-  </j:if>
  1
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
  2
+  xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:g="/graph">
  3
+
  4
+  <g:tools instance="${instance}" descriptor="${descriptor}" />
  5
+
33 6
 </j:jelly>
6  ...alysis/collector/dashboard/WarningsOriginGraphPortlet/WarningsGraphDescriptor/local-config_de.properties
... ...
@@ -1,6 +0,0 @@
1  
-Checkstyle\ warnings=Checkstyle Warnungen
2  
-Duplicate\ code\ warnings=Duplizierter Quelltext
3  
-FindBugs\ warnings=FindBugs Warnungen
4  
-PMD\ warnings=PMD Warnungen
5  
-Open\ tasks=Offene Punkte
6  
-Compiler\ warnings=Compiler Warnungen
10  src/main/resources/hudson/plugins/analysis/collector/dashboard/WarningsTablePortlet/config.jelly
... ...
@@ -1,8 +1,12 @@
1  
-<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
  1
+<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
  2
+  xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:g="/graph">
2 3
   <f:entry title="${%Name}" field="name">
3  
-    <f:textbox default="${descriptor.getDisplayName()}"/>
  4
+    <f:textbox default="${descriptor.getDisplayName()}" />
4 5
   </f:entry>
5 6
   <f:entry title="${%Show images in table header}" field="useImages">
6  
-    <f:checkbox/>
  7
+    <f:checkbox />
7 8
   </f:entry>
  9
+
  10
+  <g:tools instance="${instance}" descriptor="${descriptor}" />
  11
+
8 12
 </j:jelly>
70  src/main/resources/hudson/plugins/analysis/collector/dashboard/WarningsTablePortlet/portlet.jelly
... ...
@@ -1,5 +1,5 @@
1 1
 <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
2  
-    xmlns:dp="/hudson/plugins/view/dashboard"
  2
+    xmlns:dp="/hudson/plugins/view/dashboard" 
3 3
     xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
4 4
   <dp:decorate portlet="${it}" width="1">
5 5
     <tr>
@@ -11,46 +11,48 @@
11 11
           <tr>
12 12
             <td width="30%" initialSortDir="down" class="pane-header">${%Job}</td>
13 13
             <j:if test="${!it.useIcons()}">
14  
-              <j:if test="${it.isCheckStyleInstalled()}">
  14
+              <j:if test="${it.isCheckStyleActivated()}">
15 15
                 <td width="10%" class="pane-header">Checkstyle</td>
16 16
               </j:if>
17  
-              <j:if test="${it.isDryInstalled()}">
  17
+              <j:if test="${it.isDryActivated()}">
18 18
                 <td width="10%" class="pane-header">${%Duplicate Code}</td>
19 19
               </j:if>
20  
-              <j:if test="${it.isFindBugsInstalled()}">
  20
+              <j:if test="${it.isFindBugsActivated()}">
21 21
                 <td width="10%" class="pane-header">FindBugs</td>
22 22
               </j:if>
23  
-              <j:if test="${it.isPmdInstalled()}">
  23
+              <j:if test="${it.isPmdActivated()}">
24 24
                 <td width="10%" class="pane-header">PMD</td>
25 25
               </j:if>
26  
-              <j:if test="${it.isTasksInstalled()}">
  26
+              <j:if test="${it.isOpenTasksActivated()}">
27 27
                 <td width="10%" class="pane-header">${%Open Tasks}</td>
28 28
               </j:if>
29  
-              <j:if test="${it.isWarningsInstalled()}">
  29
+              <j:if test="${it.isWarningsActivated()}">
30 30
                 <td width="10%" class="pane-header">${%Compiler Warnings}</td>
31 31
               </j:if>
32 32
             </j:if>
33 33
             <j:if test="${it.useIcons()}">
34  
-              <j:if test="${it.isCheckStyleInstalled()}">
  34
+              <j:if test="${it.isCheckStyleActivated()}">
35 35
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/checkstyle/icons/checkstyle-24x24.png" alt="Checkstyle" title="Checkstyle" /></td>
36 36
               </j:if>
37  
-              <j:if test="${it.isDryInstalled()}">
  37
+              <j:if test="${it.isDryActivated()}">
38 38
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/dry/icons/dry-24x24.png" alt="${%Duplicate Code}" title="${%Duplicate Code}" /></td>
39 39
               </j:if>
40  
-              <j:if test="${it.isFindBugsInstalled()}">
  40
+              <j:if test="${it.isFindBugsActivated()}">
41 41
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/findbugs/icons/findbugs-32x32.png" alt="FindBugs" title="FindBugs" /></td>
42 42
               </j:if>
43  
-              <j:if test="${it.isPmdInstalled()}">
  43
+              <j:if test="${it.isPmdActivated()}">
44 44
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/pmd/icons/pmd-24x24.gif" alt="PMD" title="PMD" /></td>
45 45
               </j:if>
46  
-              <j:if test="${it.isTasksInstalled()}">
  46
+              <j:if test="${it.isOpenTasksActivated()}">
47 47
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/tasks/icons/tasks-24x24.png" alt="${%Open Tasks}" title="${%Open Tasks}" /></td>
48 48
               </j:if>
49  
-              <j:if test="${it.isWarningsInstalled()}">
  49
+              <j:if test="${it.isWarningsActivated()}">
50 50
                 <td width="5%" class="pane-header"><img width="24" height="24" src="${rootURL}/plugin/warnings/icons/warnings-24x24.png" alt="${%Compiler Warnings}" title="${%Compiler Warnings}" /></td>
51 51
               </j:if>
52 52
             </j:if>
53  
-            <td width="10%" class="pane-header">${%Total}</td>
  53
+            <j:if test="${it.isTotalsVisible()}">
  54
+              <td width="10%" class="pane-header">${%Total}</td>
  55
+            </j:if>
54 56
           </tr>
55 57
           <tbody>
56 58
             <j:forEach var="job" items="${jobs}">
@@ -58,78 +60,82 @@
58 60
                 <td class="pane">
59 61
                     <dp:jobLink job="${job}"/>
60 62
                 </td>
61  
-                <j:if test="${it.isCheckStyleInstalled()}">
  63
+                <j:if test="${it.isCheckStyleActivated()}">
62 64
                   <td class="pane">
63 65
                        ${it.getCheckStyle(job)}
64 66
                   </td>
65 67
                 </j:if>
66  
-                <j:if test="${it.isDryInstalled()}">
  68
+                <j:if test="${it.isDryActivated()}">
67 69
                   <td class="pane">
68 70
                       ${it.getDry(job)}
69 71
                   </td>
70 72
                 </j:if>
71  
-                <j:if test="${it.isFindBugsInstalled()}">
  73
+                <j:if test="${it.isFindBugsActivated()}">
72 74
                   <td class="pane">
73 75
                       ${it.getFindBugs(job)}
74 76
                   </td>
75 77
                 </j:if>
76  
-                <j:if test="${it.isPmdInstalled()}">
  78
+                <j:if test="${it.isPmdActivated()}">
77 79
                   <td class="pane">
78 80
                       ${it.getPmd(job)}
79 81
                   </td>
80 82
                 </j:if>
81  
-                <j:if test="${it.isTasksInstalled()}">
  83
+                <j:if test="${it.isOpenTasksActivated()}">
82 84
                   <td class="pane">
83 85
                       ${it.getTasks(job)}
84 86
                   </td>
85 87
                 </j:if>
86  
-                <j:if test="${it.isWarningsInstalled()}">
  88
+                <j:if test="${it.isWarningsActivated()}">
87 89
                   <td class="pane">
88 90
                       ${it.getWarnings(job)}
89 91
                   </td>
90 92
                 </j:if>
91  
-                <td class="pane">
92  
-                    ${it.getTotal(job)}
93  
-                </td>
  93
+                <j:if test="${it.isTotalsVisible()}">
  94
+                  <td class="pane">
  95
+                      ${it.getTotal(job)}
  96
+                  </td>
  97
+                </j:if>
94 98
               </tr>
95 99
             </j:forEach>
96 100
             <tr class="sortbottom">
97 101
               <td class="pane-header">
98 102
                   ${%Total}
99 103
               </td>
100  
-              <j:if test="${it.isCheckStyleInstalled()}">
  104
+              <j:if test="${it.isCheckStyleActivated()}">
101 105
                 <td class="pane-header">
102 106
                     ${it.getCheckStyle(jobs)}
103 107
                 </td>
104 108
               </j:if>
105  
-              <j:if test="${it.isDryInstalled()}">
  109
+              <j:if test="${it.isDryActivated()}">
106 110
                 <td class="pane-header">
107 111
                     ${it.getDry(jobs)}
108 112
                 </td>
109 113
               </j:if>
110  
-              <j:if test="${it.isFindBugsInstalled()}">
  114
+              <j:if test="${it.isFindBugsActivated()}">
111 115
                 <td class="pane-header">
112 116
                     ${it.getFindBugs(jobs)}
113 117
                 </td>
114 118
               </j:if>
115  
-              <j:if test="${it.isPmdInstalled()}">
  119
+              <j:if test="${it.isPmdActivated()}">
116 120
                 <td class="pane-header">
117 121
                     ${it.getPmd(jobs)}
118 122
                 </td>
119 123
               </j:if>
120  
-              <j:if test="${it.isTasksInstalled()}">
  124
+              <j:if test="${it.isOpenTasksActivated()}">
121 125
                 <td class="pane-header">
122 126
                     ${it.getTasks(jobs)}
123 127
                 </td>
124 128
               </j:if>
125  
-              <j:if test="${it.isWarningsInstalled()}">
  129
+              <j:if test="${it.isWarningsActivated()}">
126 130
                 <td class="pane-header">
127 131
                     ${it.getWarnings(jobs)}
128 132
                 </td>
129 133
               </j:if>
130  
-              <td class="pane-header">
131  
-                  ${it.getTotal(jobs)}
132  
-              </td>
  134
+              <j:if test="${it.isTotalsVisible()}">
  135
+                <td class="pane-header">
  136
+                    ${it.getTotal(jobs)}
  137
+                </td>
  138
+              </j:if>
133 139
             </tr>
134 140
           </tbody>
135 141
         </table>

No commit comments for this range

Something went wrong with that request. Please try again.