Skip to content

Commit

Permalink
Changes too support setting custom display colors for status in tabular
Browse files Browse the repository at this point in the history
report JENKINS-32203
  • Loading branch information
menonvarun committed Dec 27, 2015
1 parent 80ff588 commit 565c515
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 18 deletions.
Expand Up @@ -273,4 +273,20 @@ public String getSkippedRepresentation() {
public String getNaRepresentation() {
return TestResultsAnalyzerExtension.DESCRIPTOR.getNaRepresentation();
}

public String getPassedColor() {
return TestResultsAnalyzerExtension.DESCRIPTOR.getPassedColor();
}

public String getFailedColor() {
return TestResultsAnalyzerExtension.DESCRIPTOR.getFailedColor();
}

public String getSkippedColor() {
return TestResultsAnalyzerExtension.DESCRIPTOR.getSkippedColor();
}

public String getNaColor() {
return TestResultsAnalyzerExtension.DESCRIPTOR.getNaColor();
}
}
Expand Up @@ -46,6 +46,14 @@ public Descriptor<TestResultsAnalyzerExtension> getDescriptor() {

public static class DescriptorImpl extends Descriptor<TestResultsAnalyzerExtension> {

private static final String PASSED_STATUS_COLOR = "#92D050";
private static final String FAILED_STATUS_COLOR = "#F37A7A";
private static final String SKIP_STATUS_COLOR = "#FDED72";
private static final String NA_STATUS_COLOR = "#E8F5FF";
private static final String PASSED_REPRESENTATION = "PASSED";
private static final String FAILED_REPRESENTATION = "FAILED";
private static final String SKIPPED_REPRESENTATION = "SKIPPED";
private static final String NA_REPRESENTATION = "N/A";
private String noOfBuilds = "10";
private boolean showAllBuilds = false;
private boolean showBuildTime = false;
Expand All @@ -63,6 +71,12 @@ public static class DescriptorImpl extends Descriptor<TestResultsAnalyzerExtensi
private String skippedRepresentation = "SKIPPED";
private String naRepresentation = "N/A";

private boolean useCustomStatusColors;
private String passedColor = PASSED_STATUS_COLOR;
private String failedColor = FAILED_STATUS_COLOR;
private String skippedColor = SKIP_STATUS_COLOR;
private String naColor = NA_STATUS_COLOR;

//true = Show Test Runtimes in Charts instead of Passes and Failures
private String chartDataType = passFailString;

Expand Down Expand Up @@ -95,7 +109,27 @@ public boolean configure(StaplerRequest req, JSONObject formData) {
failedRepresentation = customData.getString("failedRepresentation");
skippedRepresentation = customData.getString("skippedRepresentation");
naRepresentation = customData.getString("naRepresentation");
}
} else {
useCustomStatusNames = false;
passedRepresentation = PASSED_REPRESENTATION;
failedRepresentation = FAILED_REPRESENTATION;
skippedRepresentation = SKIPPED_REPRESENTATION;
naRepresentation = NA_REPRESENTATION;
}
if(formData.containsKey("useCustomStatusColors")) {
JSONObject customData = formData.getJSONObject("useCustomStatusColors");
useCustomStatusColors = true;
passedColor = customData.getString("passedColor");
failedColor= customData.getString("failedColor");
skippedColor = customData.getString("skippedColor");
naColor = customData.getString("naColor");
} else {
useCustomStatusColors = false;
passedColor = PASSED_STATUS_COLOR;
failedColor = FAILED_STATUS_COLOR;
skippedColor = SKIP_STATUS_COLOR;
naColor = NA_STATUS_COLOR;
}
} catch(Exception e) {
e.printStackTrace();
}
Expand Down Expand Up @@ -145,6 +179,26 @@ public String getNaRepresentation() {
return naRepresentation;
}

public boolean isUseCustomStatusColors() {
return useCustomStatusColors;
}

public String getPassedColor() {
return passedColor;
}

public String getFailedColor() {
return failedColor;
}

public String getSkippedColor() {
return skippedColor;
}

public String getNaColor() {
return naColor;
}

public FormValidation doCheckPassedRepresentation(@QueryParameter String passedRepresentation){
return valueValidation(passedRepresentation);
}
Expand All @@ -170,5 +224,32 @@ private FormValidation valueValidation(String value) {
return FormValidation.error("Entered value should not have special characters.");
return FormValidation.ok();
}

public FormValidation doCheckPassedColor(@QueryParameter String passedColor) {
return colorValidation(passedColor);
}

public FormValidation doCheckFailedColor(@QueryParameter String failedColor) {
return colorValidation(failedColor);
}

public FormValidation doCheckSkippedColor(@QueryParameter String skippedColor) {
return colorValidation(skippedColor);
}

public FormValidation doCheckNaColor(@QueryParameter String naColor) {
return colorValidation(naColor);
}

private FormValidation colorValidation(String value) {
if (value == "")
return FormValidation.error("Entered value should not be empty");
final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";
Pattern regex = Pattern.compile(HEX_PATTERN);
Matcher matcher = regex.matcher(value);
if (!matcher.matches())
return FormValidation.error("Entered value should be a valid HEX Color");
return FormValidation.ok();
}
}
}
Expand Up @@ -18,6 +18,23 @@

var $j = jQuery.noConflict();
</script>
<style type="text/css">
.failed {
background-color: ${it.failedColor};
}

.passed {
background-color: ${it.passedColor};
}

.skipped{
background-color: ${it.skippedColor};
}

.no_status{
background-color: ${it.naColor};
}
</style>
<j:set var="temp" value="${it.jsonLoadData}"/>
<j:set var="builds" value="${it.builds}"/>

Expand Down
Expand Up @@ -30,7 +30,7 @@
<f:entry title="${%Runtime High Threshold}">
<f:textbox name="runTimeHighThreshold" value="${descriptor.getRunTimeHighThreshold()}" />
</f:entry>
<f:optionalBlock name="useCustomStatusNames" title="${%Use Custom Names for Passed/Failed/Skipped/NA status}" checked="${descriptor.useCustomStatusNames}">
<f:optionalBlock field="useCustomStatusNames" title="${%Use Custom Names for Passed/Failed/Skipped/NA status}" checked="${descriptor.useCustomStatusNames}">
<f:entry title="${%Passed}" field="passedRepresentation">
<f:textbox name="passedRepresentation" value="${descriptor.passedRepresentation}"/>
</f:entry>
Expand All @@ -44,5 +44,20 @@
<f:textbox name="naRepresentation" value="${descriptor.naRepresentation}"/>
</f:entry>
</f:optionalBlock>
<f:optionalBlock field="useCustomStatusColors" title="${%Use Custom Colors for execution status}" checked="${descriptor.useCustomStatusColors}">
<f:entry title="${%Passed Status Color}" field="passedColor">
<f:textbox name="passedColor" value="${descriptor.passedColor}"/>
</f:entry>
<f:entry title="${%Failed Status Color}" field="failedColor">
<f:textbox name="failedColor" value="${descriptor.failedColor}"/>
</f:entry>
<f:entry title="${%Skipped Status Color}" field="skippedColor">
<f:textbox name="skippedColor" value="${descriptor.skippedColor}"/>
</f:entry>
<f:entry title="${%NA Status Color}" field="naColor">
<f:textbox name="naColor" value="${descriptor.naColor}"/>
</f:entry>
</f:optionalBlock>

</f:section>
</j:jelly>
@@ -0,0 +1,9 @@
<div>
You can set Custom colors for representing a status in Test Results Analyzer Tabular report.
Please enter valid Hex colors to be set for each of the statuses.
<br/><br/>
You can find some colors in the following link:<br/>
<a href="http://www.w3schools.com/tags/ref_colorpicker.asp" target="_blank">Color Picker</a>
<br/><br/>
If option is unchecked, Test Result Analyzer will reset the values to default.
</div>
@@ -0,0 +1,7 @@
<div>
You can set Custom names for representing a status in Test Results Analyzer Tabular report.
<br/>
Please enter a valid string, empty string and special characters are not allowed.
<br/><br/>
If option is unchecked, Test Result Analyzer will reset the values to default.
</div>
16 changes: 0 additions & 16 deletions src/main/webapp/css/table-style.css
Expand Up @@ -24,22 +24,6 @@
font-size: larger;
}

.failed {
background-color: #F37A7A;
}

.passed {
background-color: #92D050;
}

.skipped{
background-color: #FDED72;
}

.no_status{
background-color: #E8F5FF;
}

img {
margin-left: 10px;
}
Expand Down

0 comments on commit 565c515

Please sign in to comment.