This report has to be used in conjunction with a report template such as the HTML Template.
Meta-Data Script:
import com.urbancode.anthill3.domain.reporting.*;
ReportMetaData rmd = new ReportMetaData();
rmd.addColumn("Status");
rmd.addColumn("Project");
rmd.addColumn("Branch");
rmd.addColumn("Tests");
rmd.addColumn("Tests Passing");
rmd.addColumn("Line Coverage");
rmd.addColumn("Branch Coverage");
rmd.addColumn("Latest Stamp");
rmd.addColumn("Date");
return rmd;
Report Script:
import com.urbancode.anthill3.dashboard.BuildLifeWorkflowCaseSummary;
import com.urbancode.anthill3.dashboard.DashboardFactory;
import com.urbancode.anthill3.domain.buildlife.BuildLife;
import com.urbancode.anthill3.domain.buildlife.BuildLifeFactory;
import com.urbancode.anthill3.domain.coverage.CoverageReport;
import com.urbancode.anthill3.domain.persistent.PersistenceException;
import com.urbancode.anthill3.domain.project.Project;
import com.urbancode.anthill3.domain.project.ProjectFactory;
import com.urbancode.anthill3.domain.reporting.ReportMetaData;
import com.urbancode.anthill3.domain.reporting.ReportOutput;
import com.urbancode.anthill3.domain.reporting.ReportRow;
import com.urbancode.anthill3.domain.test.TestReportFactory;
import com.urbancode.anthill3.domain.workflow.Workflow;
import com.urbancode.anthill3.domain.workflow.WorkflowStatusEnum;
import com.urbancode.anthill3.web.project.ProjectTasks;
import com.urbancode.anthill3.domain.test.TestReport;
import com.urbancode.anthill3.runtime.scripting.helpers.CoverageHelper;
import java.util.List;
String serverUrl = reportUrl.substring(0, reportUrl.indexOf("/", 10));
String buildLifeUrl = serverUrl + ProjectTasks.methodUrl("viewBuildLife");
Project[] projectArray = ProjectFactory.getInstance().restoreAllActive();
List workflowList = new java.util.ArrayList();
for (int i = 0; i < projectArray.length; i++) {
Workflow[] originatingArray = projectArray[i].getOriginatingWorkflowArray();
for (int j = 0; j < originatingArray.length; j++) {
workflowList.add(originatingArray[j]);
}
}
ReportOutput output = new ReportOutput(metaData);
Workflow[] workflows = new Workflow[ workflowList.size() ];
workflowList.toArray(workflows);
for (int i = 0; i < workflows.length; i++) {
BuildLifeWorkflowCaseSummary[] mostRecentSummaryArray =
DashboardFactory.getInstance().getBuildLifeWorkflowSummariesByWorkflow(workflows[i].getId(), null, new Integer(1));
if (mostRecentSummaryArray.length > 0) {
BuildLifeWorkflowCaseSummary summary = mostRecentSummaryArray[0];
ReportRow row = new ReportRow(output, "1");
///////// PROJECT /////////////////
String projectName = summary.getProjectName();
Long projectId = summary.getProjectId();
String projectUrl = "/tasks/project/ProjectTasks/viewDashboard?projectId=" + projectId;
// HTML OUTPUT
// row.setColumnValue("Project", "<b><a href=\"" + projectUrl + "\">" + projectName + "</a></b>");
// CSV OUTPUT
row.setColumnValue("Project", projectName);
///////// BRANCH /////////////////
row.setColumnValue("Branch", summary.getWorkflowName());
///////// DATE ///////////////////
row.setColumnValue("Date", summary.getEndDate() == null ? "Running" : String.valueOf(summary.getEndDate()));
///////// STATUS /////////////////
WorkflowStatusEnum workflowStatus = summary.getStatus();
String workflowStatusColor = workflowStatus.getColor();
String workflowStatusName = workflowStatus.getName();
if ("Complete".equals(workflowStatusName)) {
workflowStatusName = "Success";
}
// HTML OUTPUT
//row.setColumnValue("Status", "<font color=\"" + workflowStatusColor + "\">" + workflowStatusName + "</font>");
// CSV OUTPUT
row.setColumnValue("Status", workflowStatusName);
///////// STAMP /////////////////
String stamp = summary.getLatestStamp();
Long buildLifeId = summary.getBuildLifeId();
buildLifeUrl = "/tasks/project/ProjectTasks/viewBuildLife?buildLifeId=" + buildLifeId;
// HTML OUTPUT
//row.setColumnValue("Latest Stamp", "<a href=\"" + buildLifeUrl + "\">" + stamp + "</a>");
// CSV OUTPUT
row.setColumnValue("Latest Stamp", stamp);
///////// TESTS ///////////////
BuildLife buildLife = BuildLifeFactory.getInstance().restore(summary.getBuildLifeId());
TestReport[] tests = TestReportFactory.getInstance().restoreAllForBuildLife(buildLife);
int numberOfTests = 0;
int numberOfSuccesses = 0;
for (int j = 0; j < tests.length; j++) {
numberOfTests += tests[j].getNumberOfTests();
numberOfSuccesses += tests[j].getNumberOfSuccesses();
}
row.setColumnValue("Tests", "" + numberOfTests);
///////// TESTS PASSING /////////
long testsPassingFinal = 0;
if (numberOfTests > 0) {
testsPassingFinal = Math.round(((double)numberOfSuccesses / (double)numberOfTests) * 100.0);
}
row.setColumnValue("Tests Passing", "" + testsPassingFinal + "%");
///////// LINE COVERAGE //////////////
///////// BRANCH COVERAGE ////////////
CoverageReport[] coverageReport = CoverageHelper.getForBuildLife(buildLife);
long lineCoverageFinal = 0;
long branchCoverageFinal = 0;
if (coverageReport != null && coverageReport.length > 0) {
double lineCoverageTotal = 0.0;
int lineCoverageCount = 0;
double branchCoverageTotal = 0.0;
int branchCoverageCount = 0;
for( int k = 0; k < coverageReport.length; ++k) {
if (coverageReport[k].getLinePercentage() != null) {
lineCoverageTotal += coverageReport[k].getLinePercentage().doubleValue();
lineCoverageCount++;
}
if (coverageReport[k].getBranchPercentage() != null) {
branchCoverageTotal += coverageReport[k].getBranchPercentage().doubleValue();
branchCoverageCount++;
}
}
if (lineCoverageCount > 0) {
lineCoverageFinal = Math.round( 100.0 * (lineCoverageTotal / (double)lineCoverageCount));;
}
if (branchCoverageCount > 0) {
branchCoverageFinal = Math.round( 100.0 * (branchCoverageTotal / (double)branchCoverageCount));
}
}
row.setColumnValue("Line Coverage", "" + lineCoverageFinal + "%" );
row.setColumnValue("Branch Coverage", "" + branchCoverageFinal + "%" );
output.addRow(row);
}
}
return output;
Related Content