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