Skip to content

Commit

Permalink
[JENKINS-21928] Redesign of results page
Browse files Browse the repository at this point in the history
- Table in buildaction/summary.jelly extracted to a separate file and reused in the results page. This table uses rows instead of columns so it is better readable and supports sorting, it also contains more information (delta).
- "Errors Trend" removed, it is part of the summary.
- "Cppcheck Engine versions" updated from one cell table to a simple paragraph.
- summary.jelly renamed to details.jelly, the file contains details and not summary.
- Wrapping of long lines is now possible in the details table to remove horizontal scroll bar.
- Column headers renamed in the details table to look more like words instead of identifiers.
- The tables have their widths instead of 100% width of the page.
- Missing support for translations ${%Text} implemented.
- Function getNumberNewErrorsFromPreviousBuild() is now unused so it was removed.
  • Loading branch information
mixalturek committed Feb 23, 2014
1 parent 8edec09 commit 9335f6c
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 150 deletions.
18 changes: 0 additions & 18 deletions src/main/java/org/jenkinsci/plugins/cppcheck/CppcheckResult.java
Expand Up @@ -196,24 +196,6 @@ public CppcheckStatistics getDiff(){
current.getVersions());
}

/**
* Returns the number of new errors from the previous build result.
*
* @return the number of new errors
*/
public int getNumberNewErrorsFromPreviousBuild() {
CppcheckResult previousCppcheckResult = getPreviousResult();
if (previousCppcheckResult == null) {
return 0;
} else {
int diff = getStatistics().getNumberTotal()
- previousCppcheckResult.getStatistics().getNumberTotal();

// TODO: This is probably incorrect
return (diff > 0) ? diff : 0;
}
}

/**
* Gets the number of errors according the selected severities form the configuration user object.
*
Expand Down
@@ -0,0 +1,67 @@
<j:jelly xmlns:j="jelly:core"
xmlns:d="jelly:define"
xmlns:l="/lib/layout"
xmlns:t="/lib/hudson"
xmlns:f="/lib/form"
xmlns:i="jelly:fmt">

<style type="text/css">
#cppcheckStatistics { width: auto; }
#cppcheckStatistics .number { text-align: right; }
</style>

<table class="pane sortable" id="cppcheckStatistics">
<thead>
<tr>
<td class="pane-header">${%Severity}</td>
<td class="pane-header">${%Count}</td>
<td class="pane-header">${%Delta}</td>
</tr>
</thead>
<tbody>
<tr>
<td class="pane" data="6">${%Error}</td>
<td class="pane number" data="${stat.numberErrorSeverity}">${stat.numberErrorSeverity}</td>
<td class="pane number" data="${diff.numberErrorSeverity}">${diff.formatDiff(diff.numberErrorSeverity)}</td>
</tr>

<tr>
<td class="pane" data="5">${%Warning}</td>
<td class="pane number" data="${stat.numberWarningSeverity}">${stat.numberWarningSeverity}</td>
<td class="pane number" data="${diff.numberWarningSeverity}">${diff.formatDiff(diff.numberWarningSeverity)}</td>
</tr>

<tr>
<td class="pane" data="4">${%Style}</td>
<td class="pane number" data="${stat.numberStyleSeverity}">${stat.numberStyleSeverity}</td>
<td class="pane number" data="${diff.numberStyleSeverity}">${diff.formatDiff(diff.numberStyleSeverity)}</td>
</tr>

<tr>
<td class="pane" data="3">${%Performance}</td>
<td class="pane number" data="${stat.numberPerformanceSeverity}">${stat.numberPerformanceSeverity}</td>
<td class="pane number" data="${diff.numberPerformanceSeverity}">${diff.formatDiff(diff.numberPerformanceSeverity)}</td>
</tr>

<tr>
<td class="pane" data="2">${%Information}</td>
<td class="pane number" data="${stat.numberInformationSeverity}">${stat.numberInformationSeverity}</td>
<td class="pane number" data="${diff.numberInformationSeverity}">${diff.formatDiff(diff.numberInformationSeverity)}</td>
</tr>

<tr>
<td class="pane" data="1">${%No Category}</td>
<td class="pane number" data="${stat.numberNoCategorySeverity}">${stat.numberNoCategorySeverity}</td>
<td class="pane number" data="${diff.numberNoCategorySeverity}">${diff.formatDiff(diff.numberNoCategorySeverity)}</td>
</tr>
</tbody>
<tfoot>
<tr class="sortbottom">
<td class="pane-header" data="0">${%Total}</td>
<td class="pane-header number" data="${stat.numberTotal}">${stat.numberTotal}</td>
<td class="pane-header number" data="${diff.numberTotal}">${diff.formatDiff(diff.numberTotal)}</td>
</tr>
</tfoot>
</table>

</j:jelly>
Expand Up @@ -3,72 +3,13 @@
xmlns:l="/lib/layout"
xmlns:t="/lib/hudson"
xmlns:f="/lib/form"
xmlns:i="jelly:fmt">
xmlns:i="jelly:fmt"
xmlns:st="jelly:stapler">

<t:summary icon="/plugin/cppcheck/icons/cppcheck-48.png">
<div><a href="cppcheckResult">${%Cppcheck}</a></div>

<j:set var="current" value="${it.result.statistics}"/>
<j:set var="stat" value="${it.result.statistics}"/>
<j:set var="diff" value="${it.result.diff}"/>

<style type="text/css">
#cppcheckSummary { width: auto; }
#cppcheckSummary .number { text-align: right; }
</style>

<table class="pane sortable" id="cppcheckSummary">
<thead>
<tr>
<td class="pane-header">${%Severity}</td>
<td class="pane-header">${%Count}</td>
<td class="pane-header">${%Delta}</td>
</tr>
</thead>
<tbody>
<tr>
<td class="pane" data="6">${%Error}</td>
<td class="pane number" data="${current.numberErrorSeverity}">${current.numberErrorSeverity}</td>
<td class="pane number" data="${diff.numberErrorSeverity}">${diff.formatDiff(diff.numberErrorSeverity)}</td>
</tr>

<tr>
<td class="pane" data="5">${%Warning}</td>
<td class="pane number" data="${current.numberWarningSeverity}">${current.numberWarningSeverity}</td>
<td class="pane number" data="${diff.numberWarningSeverity}">${diff.formatDiff(diff.numberWarningSeverity)}</td>
</tr>

<tr>
<td class="pane" data="4">${%Style}</td>
<td class="pane number" data="${current.numberStyleSeverity}">${current.numberStyleSeverity}</td>
<td class="pane number" data="${diff.numberStyleSeverity}">${diff.formatDiff(diff.numberStyleSeverity)}</td>
</tr>

<tr>
<td class="pane" data="3">${%Performance}</td>
<td class="pane number" data="${current.numberPerformanceSeverity}">${current.numberPerformanceSeverity}</td>
<td class="pane number" data="${diff.numberPerformanceSeverity}">${diff.formatDiff(diff.numberPerformanceSeverity)}</td>
</tr>

<tr>
<td class="pane" data="2">${%Information}</td>
<td class="pane number" data="${current.numberInformationSeverity}">${current.numberInformationSeverity}</td>
<td class="pane number" data="${diff.numberInformationSeverity}">${diff.formatDiff(diff.numberInformationSeverity)}</td>
</tr>

<tr>
<td class="pane" data="1">${%No Category}</td>
<td class="pane number" data="${current.numberNoCategorySeverity}">${current.numberNoCategorySeverity}</td>
<td class="pane number" data="${diff.numberNoCategorySeverity}">${diff.formatDiff(diff.numberNoCategorySeverity)}</td>
</tr>
</tbody>
<tfoot>
<tr class="sortbottom">
<td class="pane-header" data="0">${%Total}</td>
<td class="pane-header number" data="${current.numberTotal}">${current.numberTotal}</td>
<td class="pane-header number" data="${diff.numberTotal}">${diff.formatDiff(diff.numberTotal)}</td>
</tr>
</tfoot>
</table>

<st:include page="statistics.jelly" />
</t:summary>
</j:jelly>
Expand Up @@ -5,18 +5,24 @@

<j:if test="${cachedContainer != null}">

<h2>Details</h2>

<table class="pane sortable" id="files">
<tr>
<td class="pane-header">Filename</td>
<td class="pane-header" style="width:2em">LineNumber</td>
<td class="pane-header" style="width:2em">CppCheckId</td>
<td class="pane-header" style="width:2em">Severity</td>
<td class="pane-header" style="width:60%">Message</td>
</tr>
<h2>${%Details}</h2>

<style type="text/css">
#cppcheckDetails { width: auto; }
#cppcheckDetails td { white-space: normal; }
</style>

<table class="pane sortable" id="cppcheckDetails">
<thead>
<tr>
<td class="pane-header">${%File}</td>
<td class="pane-header">${%Line}</td>
<td class="pane-header">${%Severity}</td>
<td class="pane-header">${%Type}</td>
<td class="pane-header">${%Message}</td>
</tr>
</thead>
<tbody>

<j:forEach var="elt" items="${cachedContainer.internalMap.values()}">
<j:set var="cppcheckfile" value="${elt.cppcheckFile}"/>
<tr>
Expand All @@ -33,19 +39,16 @@
${cppcheckfile.lineNumber}
</j:if>
<j:if test="${not elt.isSourceIgnored()}">
<a href="source.${cppcheckfile.key}#${cppcheckfile.lineNumber}">${cppcheckfile.lineNumber}
</a>
<a href="source.${cppcheckfile.key}#${cppcheckfile.lineNumber}">${cppcheckfile.lineNumber}</a>
</j:if>
</td>
<g:format value="${cppcheckfile.cppCheckId}" severity="${cppcheckfile.severity}"/>
<g:format value="${cppcheckfile.severity}" severity="${cppcheckfile.severity}"/>
<g:format value="${cppcheckfile.message}" severity="${cppcheckfile.severity}"/>
<td class="pane">${cppcheckfile.severity}</td>
<td class="pane">${cppcheckfile.cppCheckId}</td>
<td class="pane">${cppcheckfile.message}</td>
</tr>
</j:forEach>

</tbody>
</table>

</j:if>

</j:jelly>
Expand Up @@ -2,63 +2,23 @@
<l:layout norefresh="true">
<st:include it="${it.owner}" page="sidepanel.jelly"/>
<l:main-panel>
<h1>Cppcheck Result</h1>

<h2>Errors Trend</h2>
<table class="pane sortable">
<tr>
<td class="pane-header">All errors</td>
<td class="pane-header" style="width:2em">New errors</td>
</tr>
<tbody>
<tr>
<td class="pane">${it.statistics.numberTotal}</td>
<td class="pane">${it.numberNewErrorsFromPreviousBuild}</td>
</tr>
</tbody>
</table>
<h1>${%Cppcheck Results}</h1>

<h2>Summary</h2>
<table class="pane sortable">
<tr>
<td class="pane-header">Total</td>
<td class="pane-header" style="width:2em">Severity 'error'</td>
<td class="pane-header" style="width:2em">Severity 'warning'</td>
<td class="pane-header" style="width:2em">Severity 'style'</td>
<td class="pane-header" style="width:2em">Severity 'performance'</td>
<td class="pane-header" style="width:2em">Severity 'information'</td>
<td class="pane-header" style="width:2em">No category</td>
</tr>
<tbody>
<tr>
<td class="pane">${it.statistics.numberTotal}</td>
<td class="pane">${it.statistics.numberErrorSeverity}</td>
<td class="pane">${it.statistics.numberWarningSeverity}</td>
<td class="pane">${it.statistics.numberStyleSeverity}</td>
<td class="pane">${it.statistics.numberPerformanceSeverity}</td>
<td class="pane">${it.statistics.numberInformationSeverity}</td>
<td class="pane">${it.statistics.numberNoCategorySeverity}</td>
</tr>
</tbody>
</table>
<h2>${%Summary}</h2>
<j:set var="stat" value="${it.statistics}"/>
<j:set var="diff" value="${it.diff}"/>
<st:include page="../CppcheckBuildAction/statistics.jelly"/>

<j:if test="${it.statistics.versions != null}">
<h2>Cppcheck Information</h2>
<table class="pane sortable">
<tr>
<td class="pane-header">Cppcheck Engine versions</td>
</tr>
<tbody>
<tr>
<td class="pane">${it.statistics.versions}</td>
</tr>
</tbody>
</table>
<j:if test="${stat.versions != null}">
<h2>${%Cppcheck Engine}</h2>
<p>${stat.versions}</p>
</j:if>

<j:if test="${it.statistics.numberTotal != 0}">
<st:include page="summary.jelly"/>
<j:if test="${stat.numberTotal != 0}">
<st:include page="details.jelly"/>
</j:if>

</l:main-panel>
</l:layout>
</j:jelly>

0 comments on commit 9335f6c

Please sign in to comment.