1 /* |
1 /* |
2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). |
2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). |
3 * All rights reserved. |
3 * All rights reserved. |
4 * This component and the accompanying materials are made available |
4 * This component and the accompanying materials are made available |
5 * under the terms of the License "Eclipse Public License v1.0" |
5 * under the terms of the License "Eclipse Public License v1.0" |
6 * which accompanies this distribution, and is available |
6 * which accompanies this distribution, and is available |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
8 * |
8 * |
9 * Initial Contributors: |
9 * Initial Contributors: |
10 * Nokia Corporation - initial contribution. |
10 * Nokia Corporation - initial contribution. |
11 * |
11 * |
12 * Contributors: |
12 * Contributors: |
13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 package com.nokia.helium.logger.ant.listener; |
17 package com.nokia.helium.logger.ant.listener; |
18 |
18 |
19 import java.util.Vector; |
19 import java.util.Vector; |
20 |
20 |
21 import org.apache.log4j.Logger; |
21 import org.apache.log4j.Logger; |
22 import org.apache.tools.ant.BuildEvent; |
22 import org.apache.tools.ant.BuildEvent; |
23 import org.apache.tools.ant.BuildListener; |
23 import org.apache.tools.ant.BuildListener; |
|
24 import org.apache.tools.ant.Project; |
24 import org.apache.tools.ant.SubBuildListener; |
25 import org.apache.tools.ant.SubBuildListener; |
25 import org.apache.tools.ant.Project; |
|
26 |
26 |
27 /** |
27 /** |
28 * <code>StatusAndLogListener</code> implements {@link BuildListener} and |
28 * <code>StatusAndLogListener</code> implements {@link BuildListener} and listens to build events in |
29 * listens to build events in particularly for activities such as ant logging |
29 * particularly for activities such as ant logging and displaying build stage summary at the end of |
30 * and displaying build stage summary at the end of build process. |
30 * build process. |
31 * |
31 * |
32 */ |
32 */ |
33 public class StatusAndLogListener implements BuildListener, SubBuildListener { |
33 public class StatusAndLogListener implements BuildListener, SubBuildListener { |
34 private static StatusAndLogListener self; |
34 private static StatusAndLogListener self; |
35 |
35 |
36 private Vector<BuildEventHandler> buildHandlers = new Vector<BuildEventHandler>(); |
36 private Vector<BuildEventHandler> buildHandlers = new Vector<BuildEventHandler>(); |
37 private Vector<TargetEventHandler> targetHandlers = new Vector<TargetEventHandler>(); |
37 private Vector<TargetEventHandler> targetHandlers = new Vector<TargetEventHandler>(); |
38 private Vector<TaskEventHandler> taskHandlers = new Vector<TaskEventHandler>(); |
38 private Vector<TaskEventHandler> taskHandlers = new Vector<TaskEventHandler>(); |
39 private Vector<MessageEventHandler> messageHandlers = new Vector<MessageEventHandler>(); |
39 private Vector<MessageEventHandler> messageHandlers = new Vector<MessageEventHandler>(); |
40 private Vector<SubBuildEventHandler> subBuildHandlers = new Vector<SubBuildEventHandler>(); |
40 private Vector<SubBuildEventHandler> subBuildHandlers = new Vector<SubBuildEventHandler>(); |
47 public StatusAndLogListener() { |
47 public StatusAndLogListener() { |
48 self = this; |
48 self = this; |
49 } |
49 } |
50 |
50 |
51 /** |
51 /** |
52 * Signals that the last target has finished. This event will still be fired |
52 * Signals that the last target has finished. This event will still be fired if an error |
53 * if an error occurred during the build. |
53 * occurred during the build. |
54 * |
54 * |
55 * @param event |
55 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
56 * An event with any relevant extra information. Must not be |
|
57 * <code>null</code>. |
|
58 * |
56 * |
59 * @see BuildEvent#getException() |
57 * @see BuildEvent#getException() |
60 */ |
58 */ |
61 public synchronized void buildStarted(BuildEvent event) { |
59 public synchronized void buildStarted(BuildEvent event) { |
62 project = event.getProject(); |
60 project = event.getProject(); |
63 for (BuildEventHandler handler : buildHandlers) { |
61 for (BuildEventHandler handler : buildHandlers) { |
64 handler.handleBuildStarted(event); |
62 handler.handleBuildStarted(event); |
65 } |
63 } |
66 |
64 |
67 } |
65 } |
68 /** |
66 |
69 * Signals that a build has started. This event is fired before any targets |
67 /** |
70 * have started. |
68 * Signals that a build has started. This event is fired before any targets have started. |
71 * |
69 * |
72 * @param event |
70 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
73 * An event with any relevant extra information. Must not be |
|
74 * <code>null</code>. |
|
75 */ |
71 */ |
76 public synchronized void buildFinished(BuildEvent event) { |
72 public synchronized void buildFinished(BuildEvent event) { |
77 for ( BuildEventHandler handler : buildHandlers ) { |
73 for (BuildEventHandler handler : buildHandlers) { |
78 handler.handleBuildFinished( event ); |
74 handler.handleBuildFinished(event); |
79 } |
75 } |
80 } |
76 } |
81 |
|
82 |
77 |
83 /** |
78 /** |
84 * Signals that a target is starting. |
79 * Signals that a target is starting. |
85 * |
80 * |
86 * @param event |
81 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
87 * An event with any relevant extra information. Must not be |
|
88 * <code>null</code>. |
|
89 * |
82 * |
90 * @see BuildEvent#getTarget() |
83 * @see BuildEvent#getTarget() |
91 */ |
84 */ |
92 public synchronized void targetStarted(BuildEvent event) { |
85 public synchronized void targetStarted(BuildEvent event) { |
93 for (TargetEventHandler handler : targetHandlers) { |
86 for (TargetEventHandler handler : targetHandlers) { |
94 handler.handleTargetStarted(event); |
87 handler.handleTargetStarted(event); |
95 } |
88 } |
96 } |
89 } |
97 |
90 |
98 /** |
91 /** |
99 * Signals that a target has finished. This event will still be fired if an |
92 * Signals that a target has finished. This event will still be fired if an error occurred |
100 * error occurred during the build. |
93 * during the build. |
101 * |
94 * |
102 * @param event |
95 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
103 * An event with any relevant extra information. Must not be |
|
104 * <code>null</code>. |
|
105 * |
96 * |
106 * @see BuildEvent#getException() |
97 * @see BuildEvent#getException() |
107 */ |
98 */ |
108 public synchronized void targetFinished(BuildEvent event) { |
99 public synchronized void targetFinished(BuildEvent event) { |
109 for (TargetEventHandler handler : targetHandlers) { |
100 for (TargetEventHandler handler : targetHandlers) { |
112 } |
103 } |
113 |
104 |
114 /** |
105 /** |
115 * Signals that a task is starting. |
106 * Signals that a task is starting. |
116 * |
107 * |
117 * @param event |
108 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
118 * An event with any relevant extra information. Must not be |
|
119 * <code>null</code>. |
|
120 * |
109 * |
121 * @see BuildEvent#getTask() |
110 * @see BuildEvent#getTask() |
122 */ |
111 */ |
123 public synchronized void taskStarted(BuildEvent event) { |
112 public synchronized void taskStarted(BuildEvent event) { |
124 for (TaskEventHandler handler : taskHandlers) { |
113 for (TaskEventHandler handler : taskHandlers) { |
125 handler.handleTaskStarted(event); |
114 handler.handleTaskStarted(event); |
126 } |
115 } |
127 } |
116 } |
128 |
117 |
129 /** |
118 /** |
130 * Signals that a task has finished. This event will still be fired if an |
119 * Signals that a task has finished. This event will still be fired if an error occurred during |
131 * error occurred during the build. |
120 * the build. |
132 * |
121 * |
133 * @param event |
122 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
134 * An event with any relevant extra information. Must not be |
|
135 * <code>null</code>. |
|
136 * |
123 * |
137 * @see BuildEvent#getException() |
124 * @see BuildEvent#getException() |
138 */ |
125 */ |
139 public synchronized void taskFinished(BuildEvent event) { |
126 public synchronized void taskFinished(BuildEvent event) { |
140 for (TaskEventHandler handler : taskHandlers) { |
127 for (TaskEventHandler handler : taskHandlers) { |
141 handler.handleTaskFinished(event); |
128 handler.handleTaskFinished(event); |
142 } |
129 } |
143 } |
130 } |
144 |
131 |
145 /** |
132 /** |
146 * Signals that a subbuild has started. This event is fired before any targets have started. |
133 * Signals that a subbuild has started. This event is fired before any targets have started. |
|
134 * |
147 * @param event |
135 * @param event |
148 */ |
136 */ |
149 public synchronized void subBuildStarted(BuildEvent event) { |
137 public synchronized void subBuildStarted(BuildEvent event) { |
150 for (SubBuildEventHandler handler : subBuildHandlers) { |
138 for (SubBuildEventHandler handler : subBuildHandlers) { |
151 handler.handleSubBuildStarted(event); |
139 handler.handleSubBuildStarted(event); |
152 } |
140 } |
153 } |
141 } |
154 |
142 |
155 /** |
143 /** |
156 * Signals that the last target has finished. This event will still be fired if an error occurred during the build. |
144 * Signals that the last target has finished. This event will still be fired if an error |
|
145 * occurred during the build. |
|
146 * |
157 * @param event |
147 * @param event |
158 */ |
148 */ |
159 |
149 |
160 public synchronized void subBuildFinished(BuildEvent event) { |
150 public synchronized void subBuildFinished(BuildEvent event) { |
161 for (SubBuildEventHandler handler : subBuildHandlers) { |
151 for (SubBuildEventHandler handler : subBuildHandlers) { |
162 handler.handleSubBuildStarted(event); |
152 handler.handleSubBuildStarted(event); |
163 } |
153 } |
164 } |
154 } |
165 |
|
166 |
|
167 |
155 |
168 /** |
156 /** |
169 * Signals a message logging event. |
157 * Signals a message logging event. |
170 * |
158 * |
171 * @param event |
159 * @param event An event with any relevant extra information. Must not be <code>null</code>. |
172 * An event with any relevant extra information. Must not be |
|
173 * <code>null</code>. |
|
174 * |
160 * |
175 * @see BuildEvent#getMessage() |
161 * @see BuildEvent#getMessage() |
176 * @see BuildEvent#getException() |
162 * @see BuildEvent#getException() |
177 * @see BuildEvent#getPriority() |
163 * @see BuildEvent#getPriority() |
178 */ |
164 */ |
183 } |
169 } |
184 |
170 |
185 /** |
171 /** |
186 * Register the given handler. |
172 * Register the given handler. |
187 * |
173 * |
188 * @param handler |
174 * @param handler is the handler to register |
189 * is the handler to register |
175 */ |
190 */ |
176 public synchronized void register(Handler handler) { |
191 public synchronized void register( Handler handler ) { |
|
192 Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers); |
177 Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers); |
193 tmpBuildHandlers.add( handler ); |
178 tmpBuildHandlers.add(handler); |
194 buildHandlers = tmpBuildHandlers; |
179 buildHandlers = tmpBuildHandlers; |
195 Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers); |
180 Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers); |
196 tmpTargetHandlers.add( handler ); |
181 tmpTargetHandlers.add(handler); |
197 targetHandlers = tmpTargetHandlers; |
182 targetHandlers = tmpTargetHandlers; |
198 } |
183 } |
199 |
184 |
200 /** |
185 /** |
201 * Register the given handler. |
186 * Register the given handler. |
202 * |
187 * |
203 * @param handler |
188 * @param handler is the handler to register |
204 * is the handler to register |
189 */ |
205 */ |
190 public synchronized void remove(Handler handler) { |
206 public synchronized void remove( Handler handler ) { |
|
207 Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers); |
191 Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers); |
208 tmpBuildHandlers.remove( handler ); |
192 tmpBuildHandlers.remove(handler); |
209 buildHandlers = tmpBuildHandlers; |
193 buildHandlers = tmpBuildHandlers; |
210 Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers); |
194 Vector<TargetEventHandler> tmpTargetHandlers = new Vector<TargetEventHandler>(targetHandlers); |
211 tmpTargetHandlers.remove( handler ); |
195 tmpTargetHandlers.remove(handler); |
212 targetHandlers = tmpTargetHandlers; |
196 targetHandlers = tmpTargetHandlers; |
213 } |
197 } |
214 |
198 |
215 /** |
199 /** |
216 * Register the given handler. |
200 * Register the given handler. |
217 * |
201 * |
218 * @param handler |
202 * @param handler is the handler to register |
219 * is the handler to register |
203 */ |
220 */ |
204 public synchronized void register(BuildEventHandler handler) { |
221 public synchronized void register( BuildEventHandler handler ) { |
|
222 Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers); |
205 Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers); |
223 tmp.add( handler ); |
206 tmp.add(handler); |
224 buildHandlers = tmp; |
207 buildHandlers = tmp; |
225 } |
208 } |
226 |
209 |
227 /** |
210 /** |
228 * Remove the given handler. |
211 * Remove the given handler. |
229 * |
212 * |
230 * @param handler |
213 * @param handler is the handler to register |
231 * is the handler to register |
214 */ |
232 */ |
215 public synchronized void remove(BuildEventHandler handler) { |
233 public synchronized void remove( BuildEventHandler handler ) { |
|
234 Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers); |
216 Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers); |
235 tmp.remove( handler ); |
217 tmp.remove(handler); |
236 buildHandlers = tmp; |
218 buildHandlers = tmp; |
237 } |
219 } |
238 |
220 |
239 /** |
221 /** |
240 * Register the given handler. |
222 * Register the given handler. |
241 * |
223 * |
242 * @param handler |
224 * @param handler is the handler to register |
243 * is the handler to register |
225 */ |
244 */ |
226 public synchronized void register(TargetEventHandler handler) { |
245 public synchronized void register( TargetEventHandler handler ) { |
|
246 Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers); |
227 Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers); |
247 tmp.add( handler ); |
228 tmp.add(handler); |
248 targetHandlers = tmp; |
229 targetHandlers = tmp; |
249 } |
230 } |
250 |
231 |
251 /** |
232 /** |
252 * Remove the given handler. |
233 * Remove the given handler. |
253 * |
234 * |
254 * @param handler |
235 * @param handler is the handler to register |
255 * is the handler to register |
236 */ |
256 */ |
237 public synchronized void remove(TargetEventHandler handler) { |
257 public synchronized void remove( TargetEventHandler handler ) { |
|
258 Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers); |
238 Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers); |
259 tmp.remove( handler ); |
239 tmp.remove(handler); |
260 targetHandlers = tmp; |
240 targetHandlers = tmp; |
261 } |
241 } |
262 |
242 |
263 |
|
264 /** |
243 /** |
265 * Register the given SubBuildEventHandler. |
244 * Register the given SubBuildEventHandler. |
266 * |
245 * |
267 * @param handler |
246 * @param handler is the handler to register |
268 * is the handler to register |
247 */ |
269 */ |
248 public synchronized void register(SubBuildEventHandler handler) { |
270 public synchronized void register( SubBuildEventHandler handler ) { |
|
271 Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers); |
249 Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers); |
272 tmp.add( handler ); |
250 tmp.add(handler); |
273 subBuildHandlers = tmp; |
251 subBuildHandlers = tmp; |
274 } |
252 } |
275 |
253 |
276 /** |
254 /** |
277 * Remove the given SubBuildEventHandler. |
255 * Remove the given SubBuildEventHandler. |
278 * |
256 * |
279 * @param handler |
257 * @param handler is the handler to register |
280 * is the handler to register |
258 */ |
281 */ |
259 public synchronized void remove(SubBuildEventHandler handler) { |
282 public synchronized void remove( SubBuildEventHandler handler ) { |
|
283 Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers); |
260 Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers); |
284 tmp.remove( handler ); |
261 tmp.remove(handler); |
285 subBuildHandlers = tmp; |
262 subBuildHandlers = tmp; |
286 } |
263 } |
287 |
264 |
288 /** |
265 /** |
289 * Register the given MessageEventHandler. |
266 * Register the given MessageEventHandler. |
290 * |
267 * |
291 * @param handler |
268 * @param handler is the handler to register |
292 * is the handler to register |
269 */ |
293 */ |
270 public synchronized void register(MessageEventHandler handler) { |
294 public synchronized void register( MessageEventHandler handler ) { |
|
295 Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers); |
271 Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers); |
296 tmp.add( handler ); |
272 tmp.add(handler); |
297 messageHandlers = tmp; |
273 messageHandlers = tmp; |
298 } |
274 } |
299 |
275 |
300 /** |
276 /** |
301 * Remove the given MessageEventHandler. |
277 * Remove the given MessageEventHandler. |
302 * |
278 * |
303 * @param handler |
279 * @param handler is the handler to register |
304 * is the handler to register |
280 */ |
305 */ |
281 public synchronized void remove(MessageEventHandler handler) { |
306 public synchronized void remove( MessageEventHandler handler ) { |
|
307 Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers); |
282 Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers); |
308 tmp.remove( handler ); |
283 tmp.remove(handler); |
309 messageHandlers = tmp; |
284 messageHandlers = tmp; |
310 } |
285 } |
311 |
286 |
312 /** |
287 /** |
313 * Register the given TaskEventHandler. |
288 * Register the given TaskEventHandler. |
314 * |
289 * |
315 * @param handler |
290 * @param handler is the handler to register |
316 * is the handler to register |
291 */ |
317 */ |
292 public synchronized void register(TaskEventHandler handler) { |
318 public synchronized void register( TaskEventHandler handler ) { |
|
319 Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers); |
293 Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers); |
320 tmp.add( handler ); |
294 tmp.add(handler); |
321 taskHandlers = tmp; |
295 taskHandlers = tmp; |
322 } |
296 } |
323 |
297 |
324 /** |
298 /** |
325 * Remove the given TaskEventHandler. |
299 * Remove the given TaskEventHandler. |
326 * |
300 * |
327 * @param handler |
301 * @param handler is the handler to register |
328 * is the handler to register |
302 */ |
329 */ |
303 public synchronized void remove(TaskEventHandler handler) { |
330 public synchronized void remove( TaskEventHandler handler ) { |
|
331 Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers); |
304 Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers); |
332 tmp.remove( handler ); |
305 tmp.remove(handler); |
333 taskHandlers = tmp; |
306 taskHandlers = tmp; |
334 } |
307 } |
335 |
|
336 |
308 |
337 /** |
309 /** |
338 * Return root project. |
310 * Return root project. |
|
311 * |
339 * @return |
312 * @return |
340 */ |
313 */ |
341 public Project getProject() { |
314 public Project getProject() { |
342 return project; |
315 return project; |
343 } |
316 } |
344 |
317 |
345 /** |
318 /** |
346 * Get the main StatusAndLogListener. |
319 * Get the main StatusAndLogListener. |
|
320 * |
347 * @return |
321 * @return |
348 */ |
322 */ |
349 public static StatusAndLogListener getStatusAndLogListener() { |
323 public static StatusAndLogListener getStatusAndLogListener() { |
350 return self; |
324 return self; |
351 } |
325 } |
352 |
326 |
353 /** |
327 /** |
354 * Check and return required type handler. |
328 * Check and return required type handler. |
|
329 * |
355 * @param handlerType |
330 * @param handlerType |
356 * @return |
331 * @return |
357 */ |
332 */ |
358 public synchronized Handler getHandler(Class<?> handlerType) { |
333 public synchronized Handler getHandler(Class<?> handlerType) { |
359 for (BuildEventHandler handler : buildHandlers) { |
334 for (BuildEventHandler handler : buildHandlers) { |
360 if (handlerType.isInstance(handler)) { |
335 if (handlerType.isInstance(handler)) { |
361 return (Handler)handler; |
336 return (Handler) handler; |
362 } |
337 } |
363 } |
338 } |
364 return null; |
339 return null; |
365 } |
340 } |
366 |
341 |