1 package org.apache.maven.plugin.invoker;
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.Arrays;
24 import java.util.Iterator;
25 import java.util.List;
26
27 import org.apache.maven.plugin.MojoFailureException;
28 import org.apache.maven.plugin.invoker.model.BuildJob;
29 import org.apache.maven.plugin.logging.Log;
30
31
32
33
34
35
36 class InvokerSession
37 {
38
39 private List buildJobs;
40
41 private List failedJobs;
42
43 private List successfulJobs;
44
45 private List skippedJobs;
46
47
48
49
50 public InvokerSession()
51 {
52 buildJobs = new ArrayList();
53 }
54
55
56
57
58
59
60 public InvokerSession( BuildJob[] buildJobs )
61 {
62 this.buildJobs = new ArrayList( Arrays.asList( buildJobs ) );
63 }
64
65
66
67
68
69
70 public void addJob( BuildJob buildJob )
71 {
72 buildJobs.add( buildJob );
73
74 resetStats();
75 }
76
77
78
79
80
81
82 public void setJobs( List buildJobs )
83 {
84 this.buildJobs = new ArrayList( buildJobs );
85
86 resetStats();
87 }
88
89
90
91
92
93
94 public List getJobs()
95 {
96 return buildJobs;
97 }
98
99
100
101
102
103
104 public List getSuccessfulJobs()
105 {
106 updateStats();
107
108 return successfulJobs;
109 }
110
111
112
113
114
115
116 public List getFailedJobs()
117 {
118 updateStats();
119
120 return failedJobs;
121 }
122
123
124
125
126
127
128 public List getSkippedJobs()
129 {
130 updateStats();
131
132 return skippedJobs;
133 }
134
135 private void resetStats()
136 {
137 successfulJobs = null;
138 failedJobs = null;
139 skippedJobs = null;
140 }
141
142 private void updateStats()
143 {
144 if ( successfulJobs != null && skippedJobs != null && failedJobs != null )
145 {
146 return;
147 }
148
149 successfulJobs = new ArrayList();
150 failedJobs = new ArrayList();
151 skippedJobs = new ArrayList();
152
153 for ( Iterator iterator = buildJobs.iterator(); iterator.hasNext(); )
154 {
155 BuildJob buildJob = (BuildJob) iterator.next();
156
157 if ( BuildJob.Result.SUCCESS.equals( buildJob.getResult() ) )
158 {
159 successfulJobs.add( buildJob );
160 }
161 else if ( BuildJob.Result.SKIPPED.equals( buildJob.getResult() ) )
162 {
163 skippedJobs.add( buildJob );
164 }
165 else if ( buildJob.getResult() != null )
166 {
167 failedJobs.add( buildJob );
168 }
169 }
170 }
171
172
173
174
175
176
177
178 public void logSummary( Log logger, boolean ignoreFailures )
179 {
180 updateStats();
181
182 String separator = "---------------------------------------";
183
184 logger.info( separator );
185 logger.info( "Execution Summary:" );
186 logger.info( " Builds Passing: " + successfulJobs.size() );
187 logger.info( " Builds Failing: " + failedJobs.size() );
188 logger.info( " Builds Skipped: " + skippedJobs.size() );
189 logger.info( separator );
190
191 if ( !failedJobs.isEmpty() )
192 {
193 String heading = "The following builds failed:";
194 if ( ignoreFailures )
195 {
196 logger.warn( heading );
197 }
198 else
199 {
200 logger.error( heading );
201 }
202
203 for ( Iterator it = failedJobs.iterator(); it.hasNext(); )
204 {
205 BuildJob buildJob = (BuildJob) it.next();
206
207 String item = "* " + buildJob.getProject();
208 if ( ignoreFailures )
209 {
210 logger.warn( item );
211 }
212 else
213 {
214 logger.error( item );
215 }
216 }
217
218 logger.info( separator );
219 }
220 }
221
222
223
224
225
226
227
228
229 public void handleFailures( Log logger, boolean ignoreFailures )
230 throws MojoFailureException
231 {
232 updateStats();
233
234 if ( !failedJobs.isEmpty() )
235 {
236 String message = failedJobs.size() + " build" + ( failedJobs.size() == 1 ? "" : "s" ) + " failed.";
237
238 if ( ignoreFailures )
239 {
240 logger.warn( "Ignoring that " + message );
241 }
242 else
243 {
244 throw new MojoFailureException( this, message, message );
245 }
246 }
247 }
248
249 }