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

COVERAGE SUMMARY FOR SOURCE FILE [BuildProjectTaskViabilityEvaluator.java]

nameclass, %method, %block, %line, %
BuildProjectTaskViabilityEvaluator.java100% (1/1)100% (3/3)99%  (123/124)96%  (25/26)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class BuildProjectTaskViabilityEvaluator100% (1/1)100% (3/3)99%  (123/124)96%  (25/26)
checkTasks (List): List 100% (1/1)98%  (56/57)92%  (11/12)
BuildProjectTaskViabilityEvaluator (): void 100% (1/1)100% (3/3)100% (1/1)
evaluate (Collection): Collection 100% (1/1)100% (64/64)100% (13/13)

1package org.apache.maven.continuum.buildqueue.evaluator;
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.Collection;
24import java.util.HashMap;
25import java.util.List;
26import java.util.Map;
27 
28import org.apache.continuum.taskqueue.BuildProjectTask;
29import org.apache.maven.continuum.project.ContinuumProjectState;
30import org.codehaus.plexus.taskqueue.TaskViabilityEvaluator;
31 
32/**
33 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
34 * @version $Id: BuildProjectTaskViabilityEvaluator.java 786891 2009-06-20 19:31:57Z jzurbano $
35 */
36public class BuildProjectTaskViabilityEvaluator
37    implements TaskViabilityEvaluator
38{
39    /**
40     * @plexus.configuration
41     */
42    private long requiredBuildInterval;
43 
44    // ----------------------------------------------------------------------
45    // TaskViabilityEvaluator Implementation
46    // ----------------------------------------------------------------------
47 
48    /**
49     * Removes duplicate tasks from the list. A duplicate task is one with the same
50     * build definition and that's scheduled within the required build interval.
51     * <p/>
52     * <p/>
53     * &forall; <sub>t1, t2 &isin; tasks</sub> [ t1 &ne; t2 &and; t2.buildDefinition = t2.buildDefinition]:
54     * if ( t2.timestamp - t1.timestamp < requiredBuildInterval ) remove( t2 ).
55     * </p>
56     *
57     * @param tasks A list of queued tasks to evaluate
58     * @return a list of tasks with duplicates removed
59     */
60    public Collection<BuildProjectTask> evaluate( Collection tasks )
61    {
62        // ----------------------------------------------------------------------
63        // This code makes a Map with Lists with one list per project. For each
64        // task in the list it puts it in the list for the project that's
65        // requested for a build. Then all each of the lists with tasks is
66        // checked for validity and a list of tasks to remove is returned.
67        // ----------------------------------------------------------------------
68 
69        Map<Integer, List<BuildProjectTask>> projects = new HashMap<Integer, List<BuildProjectTask>>();
70 
71        for ( BuildProjectTask task : (Collection<BuildProjectTask>) tasks )
72        {
73            int key = task.getProjectId();
74 
75            List<BuildProjectTask> projectTasks = projects.get( key );
76 
77            if ( projectTasks == null )
78            {
79                projectTasks = new ArrayList<BuildProjectTask>();
80 
81                projects.put( key, projectTasks );
82            }
83 
84            projectTasks.add( task );
85        }
86 
87        List<BuildProjectTask> toBeRemoved = new ArrayList<BuildProjectTask>();
88 
89        for ( List<BuildProjectTask> projectTasks : projects.values() )
90        {
91            toBeRemoved.addAll( checkTasks( projectTasks ) );
92        }
93 
94        return toBeRemoved;
95    }
96 
97    // ----------------------------------------------------------------------
98    //
99    // ----------------------------------------------------------------------
100 
101    private List<BuildProjectTask> checkTasks( List<BuildProjectTask> list )
102    {
103        List<BuildProjectTask> toBeRemoved = new ArrayList<BuildProjectTask>();
104 
105        for ( BuildProjectTask buildProjectTask : list )
106        {
107            for ( BuildProjectTask task : list )
108            {
109                // check if it's the same task
110                if ( buildProjectTask == task ||
111                    buildProjectTask.getBuildDefinitionId() != task.getBuildDefinitionId() )
112                {
113                    continue;
114                }
115 
116                // ----------------------------------------------------------------------
117                // If this build is forces, don't remove it
118                // ----------------------------------------------------------------------
119 
120                if ( task.getTrigger() == ContinuumProjectState.TRIGGER_FORCED )
121                {
122                    continue;
123                }
124 
125                // ----------------------------------------------------------------------
126                //
127                // ----------------------------------------------------------------------
128 
129                long interval = task.getTimestamp() - buildProjectTask.getTimestamp();
130 
131                if ( interval < requiredBuildInterval )
132                {
133                    toBeRemoved.add( buildProjectTask );
134                }
135            }
136        }
137 
138        return toBeRemoved;
139    }
140}

[all classes][org.apache.maven.continuum.buildqueue.evaluator]
EMMA 2.0.5312 (C) Vladimir Roubtsov