EMMA Coverage Report (generated Sun Sep 18 11:34:27 PHT 2011)
[all classes][org.apache.continuum.taskqueue]

COVERAGE SUMMARY FOR SOURCE FILE [DefaultOverallBuildQueue.java]

nameclass, %method, %block, %line, %
DefaultOverallBuildQueue.java100% (1/1)76%  (25/33)45%  (247/553)50%  (59.5/118)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DefaultOverallBuildQueue100% (1/1)76%  (25/33)45%  (247/553)50%  (59.5/118)
addToBuildQueue (List): void 0%   (0/1)0%   (0/17)0%   (0/3)
addToCheckoutQueue (List): void 0%   (0/1)0%   (0/17)0%   (0/3)
cancelCheckoutTask (int): void 0%   (0/1)0%   (0/32)0%   (0/5)
cancelCurrentCheckout (): boolean 0%   (0/1)0%   (0/24)0%   (0/5)
removeProjectsFromBuildQueue (int []): boolean 0%   (0/1)0%   (0/73)0%   (0/13)
removeProjectsFromBuildQueueWithHashCodes (int []): void 0%   (0/1)0%   (0/25)0%   (0/5)
removeProjectsFromCheckoutQueue (int []): boolean 0%   (0/1)0%   (0/51)0%   (0/11)
removeTasksFromCheckoutQueueWithHashCodes (int []): void 0%   (0/1)0%   (0/25)0%   (0/5)
cancelCurrentBuild (): boolean 100% (1/1)46%  (11/24)60%  (3/5)
removeProjectFromBuildQueue (int, int, int, String, int): boolean 100% (1/1)62%  (28/45)67%  (6/9)
isInBuildQueue (int, int): boolean 100% (1/1)83%  (30/36)87%  (7.8/9)
removeProjectFromBuildQueue (int): boolean 100% (1/1)89%  (24/27)77%  (3.8/5)
removeProjectFromCheckoutQueue (int): boolean 100% (1/1)89%  (24/27)77%  (3.8/5)
<static initializer> 100% (1/1)100% (4/4)100% (1/1)
DefaultOverallBuildQueue (): void 100% (1/1)100% (3/3)100% (1/1)
addToBuildQueue (BuildProjectTask): void 100% (1/1)100% (6/6)100% (2/2)
addToCheckoutQueue (CheckOutTask): void 100% (1/1)100% (6/6)100% (2/2)
cancelBuildTask (int): void 100% (1/1)100% (32/32)100% (5/5)
getBuildQueue (): TaskQueue 100% (1/1)100% (5/5)100% (1/1)
getBuildTaskQueueExecutor (): TaskQueueExecutor 100% (1/1)100% (3/3)100% (1/1)
getCheckoutQueue (): TaskQueue 100% (1/1)100% (5/5)100% (1/1)
getCheckoutTaskQueueExecutor (): TaskQueueExecutor 100% (1/1)100% (3/3)100% (1/1)
getId (): int 100% (1/1)100% (3/3)100% (1/1)
getName (): String 100% (1/1)100% (3/3)100% (1/1)
getProjectsInBuildQueue (): List 100% (1/1)100% (4/4)100% (1/1)
getProjectsInCheckoutQueue (): List 100% (1/1)100% (4/4)100% (1/1)
isInBuildQueue (int): boolean 100% (1/1)100% (5/5)100% (1/1)
isInCheckoutQueue (int): boolean 100% (1/1)100% (24/24)100% (5/5)
setBuildDefinitionDao (BuildDefinitionDao): void 100% (1/1)100% (4/4)100% (2/2)
setBuildTaskQueueExecutor (TaskQueueExecutor): void 100% (1/1)100% (4/4)100% (2/2)
setCheckoutTaskQueueExecutor (TaskQueueExecutor): void 100% (1/1)100% (4/4)100% (2/2)
setId (int): void 100% (1/1)100% (4/4)100% (2/2)
setName (String): void 100% (1/1)100% (4/4)100% (2/2)

1package org.apache.continuum.taskqueue;
2 
3/*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements.  See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership.  The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License.  You may obtain a copy of the License at
11 *
12 *   http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied.  See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21 
22import java.util.ArrayList;
23import java.util.List;
24 
25import javax.annotation.Resource;
26 
27import org.apache.commons.lang.ArrayUtils;
28import org.apache.continuum.dao.BuildDefinitionDao;
29import org.apache.continuum.taskqueueexecutor.ParallelBuildsThreadedTaskQueueExecutor;
30import org.apache.maven.continuum.model.project.BuildDefinition;
31import org.apache.maven.continuum.store.ContinuumStoreException;
32import org.codehaus.plexus.taskqueue.Task;
33import org.codehaus.plexus.taskqueue.TaskQueue;
34import org.codehaus.plexus.taskqueue.TaskQueueException;
35import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
36import org.codehaus.plexus.util.StringUtils;
37import org.slf4j.Logger;
38import org.slf4j.LoggerFactory;
39 
40/**
41 * "Overall" build queue which has a checkout queue and a build queue.
42 *
43 * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
44 * @version $Id$
45 */
46public class DefaultOverallBuildQueue
47    implements OverallBuildQueue
48{
49    private static final Logger log = LoggerFactory.getLogger( DefaultOverallBuildQueue.class );
50 
51    @Resource
52    private BuildDefinitionDao buildDefinitionDao;
53 
54    private TaskQueueExecutor buildTaskQueueExecutor;
55 
56    private TaskQueueExecutor checkoutTaskQueueExecutor;
57 
58    private int id;
59 
60    private String name;
61 
62    public int getId()
63    {
64        return id;
65    }
66 
67    public void setId( int id )
68    {
69        this.id = id;
70    }
71 
72    public String getName()
73    {
74        return name;
75    }
76 
77    public void setName( String name )
78    {
79        this.name = name;
80    }
81 
82    /**
83     * @see OverallBuildQueue#addToCheckoutQueue(CheckOutTask)
84     */
85    public void addToCheckoutQueue( CheckOutTask checkoutTask )
86        throws TaskQueueException
87    {
88        getCheckoutQueue().put( checkoutTask );
89    }
90 
91    /**
92     * @see OverallBuildQueue#addToCheckoutQueue(List)
93     */
94    public void addToCheckoutQueue( List<CheckOutTask> checkoutTasks )
95        throws TaskQueueException
96    {
97        for ( CheckOutTask checkoutTask : checkoutTasks )
98        {
99            getCheckoutQueue().put( checkoutTask );
100        }
101    }
102 
103    /**
104     * @see OverallBuildQueue#getProjectsInCheckoutQueue()
105     */
106    public List<CheckOutTask> getProjectsInCheckoutQueue()
107        throws TaskQueueException
108    {
109        return getCheckoutQueue().getQueueSnapshot();
110    }
111 
112    /**
113     * @see OverallBuildQueue#isInCheckoutQueue(int)
114     */
115    public boolean isInCheckoutQueue( int projectId )
116        throws TaskQueueException
117    {
118        List<CheckOutTask> queue = getProjectsInCheckoutQueue();
119 
120        for ( CheckOutTask task : queue )
121        {
122            if ( task != null && task.getProjectId() == projectId )
123            {
124                return true;
125            }
126        }
127        return false;
128    }
129 
130    /**
131     * @see OverallBuildQueue#removeProjectFromCheckoutQueue(int)
132     */
133    public boolean removeProjectFromCheckoutQueue( int projectId )
134        throws TaskQueueException
135    {
136        List<CheckOutTask> queue = getProjectsInCheckoutQueue();
137 
138        for ( CheckOutTask task : queue )
139        {
140            if ( task != null && task.getProjectId() == projectId )
141            {
142                return getCheckoutQueue().remove( task );
143            }
144        }
145        return false;
146    }
147 
148    /**
149     * @see OverallBuildQueue#removeProjectsFromCheckoutQueue(int[])
150     */
151    public boolean removeProjectsFromCheckoutQueue( int[] projectsId )
152        throws TaskQueueException
153    {
154        if ( projectsId == null )
155        {
156            return false;
157        }
158        if ( projectsId.length < 1 )
159        {
160            return false;
161        }
162        List<CheckOutTask> queue = getProjectsInCheckoutQueue();
163 
164        List<CheckOutTask> tasks = new ArrayList<CheckOutTask>();
165 
166        for ( CheckOutTask task : queue )
167        {
168            if ( task != null )
169            {
170                if ( ArrayUtils.contains( projectsId, task.getProjectId() ) )
171                {
172                    tasks.add( task );
173                }
174            }
175        }
176        return !tasks.isEmpty() && getCheckoutQueue().removeAll( tasks );
177    }
178 
179    /**
180     * @see OverallBuildQueue#removeTasksFromCheckoutQueueWithHashCodes(int[])
181     */
182    public void removeTasksFromCheckoutQueueWithHashCodes( int[] hashCodes )
183        throws TaskQueueException
184    {
185        List<CheckOutTask> queue = getProjectsInCheckoutQueue();
186 
187        for ( CheckOutTask task : queue )
188        {
189            if ( ArrayUtils.contains( hashCodes, task.hashCode() ) )
190            {
191                getCheckoutQueue().remove( task );
192            }
193        }
194    }
195 
196    /**
197     * @see OverallBuildQueue#addToBuildQueue(BuildProjectTask)
198     */
199    public void addToBuildQueue( BuildProjectTask buildTask )
200        throws TaskQueueException
201    {
202        getBuildQueue().put( buildTask );
203    }
204 
205    /**
206     * @see OverallBuildQueue#addToBuildQueue(List)
207     */
208    public void addToBuildQueue( List<BuildProjectTask> buildTasks )
209        throws TaskQueueException
210    {
211        for ( BuildProjectTask buildTask : buildTasks )
212        {
213            getBuildQueue().put( buildTask );
214        }
215    }
216 
217    /**
218     * @see OverallBuildQueue#getProjectsInBuildQueue()
219     */
220    public List<BuildProjectTask> getProjectsInBuildQueue()
221        throws TaskQueueException
222    {
223        return getBuildQueue().getQueueSnapshot();
224    }
225 
226    /**
227     * @see OverallBuildQueue#isInBuildQueue(int)
228     */
229    public boolean isInBuildQueue( int projectId )
230        throws TaskQueueException
231    {
232        return isInBuildQueue( projectId, -1 );
233    }
234 
235    /**
236     * @see OverallBuildQueue#isInBuildQueue(int, int)
237     */
238    public boolean isInBuildQueue( int projectId, int buildDefinitionId )
239        throws TaskQueueException
240    {
241        List<BuildProjectTask> queue = getProjectsInBuildQueue();
242        for ( BuildProjectTask buildTask : queue )
243        {
244            if ( buildTask != null )
245            {
246                if ( buildDefinitionId < 0 )
247                {
248                    if ( buildTask.getProjectId() == projectId )
249                    {
250                        return true;
251                    }
252                }
253                else
254                {
255                    if ( buildTask.getProjectId() == projectId &&
256                        buildTask.getBuildDefinitionId() == buildDefinitionId )
257                    {
258                        return true;
259                    }
260                }
261            }
262        }
263        return false;
264    }
265 
266    /**
267     * @see OverallBuildQueue#cancelBuildTask(int)
268     */
269    public void cancelBuildTask( int projectId )
270    {
271        BuildProjectTask task = (BuildProjectTask) buildTaskQueueExecutor.getCurrentTask();
272        if ( task != null && task.getProjectId() == projectId )
273        {
274            log.info(
275                "Cancelling build task for project '" + projectId + "' in task executor '" + buildTaskQueueExecutor );
276            buildTaskQueueExecutor.cancelTask( task );
277        }
278    }
279 
280    /**
281     * @see OverallBuildQueue#cancelCheckoutTask(int)
282     */
283    public void cancelCheckoutTask( int projectId )
284        throws TaskQueueException
285    {
286        CheckOutTask task = (CheckOutTask) checkoutTaskQueueExecutor.getCurrentTask();
287        if ( task != null && task.getProjectId() == projectId )
288        {
289            log.info( "Cancelling checkout task for project '" + projectId + "' in task executor '" +
290                checkoutTaskQueueExecutor );
291            checkoutTaskQueueExecutor.cancelTask( task );
292        }
293    }
294 
295    /**
296     * @see OverallBuildQueue#cancelCurrentBuild()
297     */
298    public boolean cancelCurrentBuild()
299    {
300        Task task = buildTaskQueueExecutor.getCurrentTask();
301        if ( task != null )
302        {
303            return buildTaskQueueExecutor.cancelTask( task );
304        }
305 
306        log.info( "No build task currently executing on build executor: " + buildTaskQueueExecutor );
307        return false;
308    }
309 
310    /**
311     * @see OverallBuildQueue#cancelCurrentCheckout()
312     */
313    public boolean cancelCurrentCheckout()
314    {
315        Task task = checkoutTaskQueueExecutor.getCurrentTask();
316        if ( task != null )
317        {
318            return checkoutTaskQueueExecutor.cancelTask( task );
319        }
320 
321        log.info( "No checkout task currently executing on checkout task executor: " + checkoutTaskQueueExecutor );
322        return false;
323    }
324 
325    /**
326     * @see OverallBuildQueue#removeProjectFromBuildQueue(int, int, int, String, int)
327     */
328    public boolean removeProjectFromBuildQueue( int projectId, int buildDefinitionId, int trigger, String projectName,
329                                                int projectGroupId )
330        throws TaskQueueException
331    {
332        BuildDefinition buildDefinition;
333 
334        // maybe we could just pass the label as a parameter to eliminate dependency to BuildDefinitionDAO?
335        try
336        {
337            buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
338        }
339        catch ( ContinuumStoreException e )
340        {
341            throw new TaskQueueException( "Error while removing project from build queue: " + projectName, e );
342        }
343 
344        String buildDefinitionLabel = buildDefinition.getDescription();
345        if ( StringUtils.isEmpty( buildDefinitionLabel ) )
346        {
347            buildDefinitionLabel = buildDefinition.getGoals();
348        }
349 
350        BuildProjectTask buildProjectTask =
351            new BuildProjectTask( projectId, buildDefinitionId, trigger, projectName, 
352                                  buildDefinitionLabel, null, projectGroupId );
353 
354        return getBuildQueue().remove( buildProjectTask );
355    }
356 
357    /**
358     * @see OverallBuildQueue#removeProjectsFromBuildQueue(int[])
359     */
360    public boolean removeProjectsFromBuildQueue( int[] projectIds )
361        throws TaskQueueException
362    {
363        if ( projectIds == null )
364        {
365            return false;
366        }
367        if ( projectIds.length < 1 )
368        {
369            return false;
370        }
371        List<BuildProjectTask> queue = getProjectsInBuildQueue();
372 
373        List<BuildProjectTask> tasks = new ArrayList<BuildProjectTask>();
374 
375        for ( BuildProjectTask buildTask : queue )
376        {
377            if ( buildTask != null )
378            {
379                if ( ArrayUtils.contains( projectIds, buildTask.getProjectId() ) )
380                {
381                    tasks.add( buildTask );
382                }
383            }
384        }
385 
386        for ( BuildProjectTask buildProjectTask : tasks )
387        {
388            log.info( "cancel build for project " + buildProjectTask.getProjectId() );
389        }
390 
391        return !tasks.isEmpty() && getBuildQueue().removeAll( tasks );
392    }
393 
394    /**
395     * @see OverallBuildQueue#removeProjectFromBuildQueue(int)
396     */
397    public boolean removeProjectFromBuildQueue( int projectId )
398        throws TaskQueueException
399    {
400        List<BuildProjectTask> queue = getProjectsInBuildQueue();
401 
402        for ( BuildProjectTask buildTask : queue )
403        {
404            if ( buildTask != null && buildTask.getProjectId() == projectId )
405            {
406                return getBuildQueue().remove( buildTask );
407            }
408        }
409        return false;
410    }
411 
412    /**
413     * @see OverallBuildQueue#removeProjectsFromBuildQueueWithHashCodes(int[])
414     */
415    public void removeProjectsFromBuildQueueWithHashCodes( int[] hashCodes )
416        throws TaskQueueException
417    {
418        List<BuildProjectTask> queue = getProjectsInBuildQueue();
419        for ( BuildProjectTask task : queue )
420        {
421            if ( ArrayUtils.contains( hashCodes, task.hashCode() ) )
422            {
423                getBuildQueue().remove( task );
424            }
425        }
426    }
427 
428    /**
429     * @see OverallBuildQueue#getCheckoutQueue()
430     */
431    public TaskQueue getCheckoutQueue()
432    {
433        return ( (ParallelBuildsThreadedTaskQueueExecutor) checkoutTaskQueueExecutor ).getQueue();
434    }
435 
436    /**
437     * @see OverallBuildQueue#getBuildQueue()
438     */
439    public TaskQueue getBuildQueue()
440    {
441        return ( (ParallelBuildsThreadedTaskQueueExecutor) buildTaskQueueExecutor ).getQueue();
442    }
443 
444    /**
445     * @see OverallBuildQueue#getBuildTaskQueueExecutor()
446     */
447    public TaskQueueExecutor getBuildTaskQueueExecutor()
448    {
449        return buildTaskQueueExecutor;
450    }
451 
452    /**
453     * @see OverallBuildQueue#getCheckoutTaskQueueExecutor()
454     */
455    public TaskQueueExecutor getCheckoutTaskQueueExecutor()
456    {
457        return checkoutTaskQueueExecutor;
458    }
459 
460    public void setBuildDefinitionDao( BuildDefinitionDao buildDefinitionDao )
461    {
462        this.buildDefinitionDao = buildDefinitionDao;
463    }
464 
465    public void setBuildTaskQueueExecutor( TaskQueueExecutor buildTaskQueueExecutor )
466    {
467        this.buildTaskQueueExecutor = buildTaskQueueExecutor;
468    }
469 
470    public void setCheckoutTaskQueueExecutor( TaskQueueExecutor checkoutTaskQueueExecutor )
471    {
472        this.checkoutTaskQueueExecutor = checkoutTaskQueueExecutor;
473    }
474}

[all classes][org.apache.continuum.taskqueue]
EMMA 2.0.5312 (C) Vladimir Roubtsov