1 package org.apache.maven.continuum.web.action;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.LinkedHashMap;
25 import java.util.List;
26 import java.util.Map;
27
28 import org.apache.maven.continuum.ContinuumException;
29 import org.apache.maven.continuum.configuration.ConfigurationException;
30 import org.apache.maven.continuum.model.project.Project;
31 import org.apache.maven.continuum.reports.surefire.ReportTest;
32 import org.apache.maven.continuum.reports.surefire.ReportTestSuite;
33 import org.apache.maven.continuum.reports.surefire.ReportTestSuiteGenerator;
34 import org.apache.maven.continuum.reports.surefire.ReportTestSuiteGeneratorException;
35 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
36
37
38
39
40
41
42
43 public class SurefireReportAction
44 extends ContinuumActionSupport
45 {
46
47
48
49 private ReportTestSuiteGenerator reportTestSuiteGenerator;
50
51 private int buildId;
52
53 private int projectId;
54
55 private List<ReportTestSuite> testSuites;
56
57 private List<ReportTest> testSummaryList;
58
59 private List<ReportTest> testPackageList;
60
61 private String projectName;
62
63 private Project project;
64
65 public String execute()
66 throws ContinuumException, ConfigurationException, ReportTestSuiteGeneratorException
67 {
68 try
69 {
70 checkViewProjectGroupAuthorization( getProjectGroupName() );
71 }
72 catch ( AuthorizationRequiredException e )
73 {
74 return REQUIRES_AUTHORIZATION;
75 }
76
77 project = getProjectById( projectId );
78
79 testSuites = reportTestSuiteGenerator.generateReports( buildId, projectId );
80
81 getSummary( testSuites );
82
83 getDetails( testSuites );
84
85 return SUCCESS;
86 }
87
88 private void getSummary( List<ReportTestSuite> suiteList )
89 {
90 int totalTests = 0;
91
92 int totalErrors = 0;
93
94 int totalFailures = 0;
95
96 float totalTime = 0.0f;
97
98 for ( ReportTestSuite suite : suiteList )
99 {
100 totalTests += suite.getNumberOfTests();
101
102 totalErrors += suite.getNumberOfErrors();
103
104 totalFailures += suite.getNumberOfFailures();
105
106 totalTime += suite.getTimeElapsed();
107 }
108
109 ReportTest report = new ReportTest();
110 report.setTests( totalTests );
111 report.setErrors( totalErrors );
112 report.setFailures( totalFailures );
113 report.setElapsedTime( totalTime );
114
115 testSummaryList = Collections.singletonList( report );
116 }
117
118 private void getDetails( List<ReportTestSuite> suiteList )
119 {
120 Map<String, ReportTest> testsByPackage = new LinkedHashMap<String, ReportTest>();
121
122 for ( ReportTestSuite suite : suiteList )
123 {
124 ReportTest report = testsByPackage.get( suite.getPackageName() );
125
126 if ( report == null )
127 {
128 report = new ReportTest();
129
130 report.setId( suite.getPackageName() );
131
132 report.setName( suite.getPackageName() );
133 }
134
135 report.setTests( report.getTests() + suite.getNumberOfTests() );
136 report.setErrors( report.getErrors() + suite.getNumberOfErrors() );
137 report.setFailures( report.getFailures() + suite.getNumberOfFailures() );
138 report.setElapsedTime( report.getElapsedTime() + suite.getTimeElapsed() );
139
140 ReportTest reportTest = new ReportTest();
141 reportTest.setId( suite.getPackageName() + "." + suite.getName() );
142 reportTest.setName( suite.getName() );
143 reportTest.setTests( suite.getNumberOfTests() );
144 reportTest.setErrors( suite.getNumberOfErrors() );
145 reportTest.setFailures( suite.getNumberOfFailures() );
146 reportTest.setElapsedTime( suite.getTimeElapsed() );
147 reportTest.setChildren( suite.getTestCases() );
148
149 report.getChildren().add( reportTest );
150
151 testsByPackage.put( suite.getPackageName(), report );
152 }
153
154 testPackageList = new ArrayList<ReportTest>( testsByPackage.values() );
155 }
156
157 public int getBuildId()
158 {
159 return buildId;
160 }
161
162 public void setBuildId( int buildId )
163 {
164 this.buildId = buildId;
165 }
166
167 public Project getProject()
168 {
169 return project;
170 }
171
172 public int getProjectId()
173 {
174 return projectId;
175 }
176
177 public void setProjectId( int projectId )
178 {
179 this.projectId = projectId;
180 }
181
182 public List<ReportTestSuite> getTestSuites()
183 {
184 return testSuites;
185 }
186
187 public void setTestSuites( List<ReportTestSuite> testSuites )
188 {
189 this.testSuites = testSuites;
190 }
191
192 public String getProjectName()
193 {
194 return projectName;
195 }
196
197 public void setProjectName( String projectName )
198 {
199 this.projectName = projectName;
200 }
201
202 public List<ReportTest> getTestSummaryList()
203 {
204 return testSummaryList;
205 }
206
207 public void setTestSummaryList( List<ReportTest> testSummaryList )
208 {
209 this.testSummaryList = testSummaryList;
210 }
211
212 public List<ReportTest> getTestPackageList()
213 {
214 return testPackageList;
215 }
216
217 public void setTestPackageList( List<ReportTest> testPackageList )
218 {
219 this.testPackageList = testPackageList;
220 }
221
222 public Project getProjectById( int projectId )
223 throws ContinuumException
224 {
225 return getContinuum().getProject( projectId );
226 }
227
228 public String getProjectGroupName()
229 throws ContinuumException
230 {
231 return getProjectById( projectId ).getProjectGroup().getName();
232 }
233
234 }