View Javadoc

1   package org.apache.continuum.builder.distributed.taskqueue;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import org.apache.commons.lang.ArrayUtils;
7   import org.apache.continuum.builder.distributed.executor.DistributedBuildTaskQueueExecutor;
8   import org.apache.continuum.builder.distributed.executor.ThreadedDistributedBuildTaskQueueExecutor;
9   import org.apache.continuum.taskqueue.OverallDistributedBuildQueue;
10  import org.apache.continuum.taskqueue.PrepareBuildProjectsTask;
11  import org.codehaus.plexus.taskqueue.Task;
12  import org.codehaus.plexus.taskqueue.TaskQueue;
13  import org.codehaus.plexus.taskqueue.TaskQueueException;
14  
15  public class DefaultOverallDistributedBuildQueue
16      implements OverallDistributedBuildQueue
17  {
18      private String buildAgentUrl;
19  
20      private DistributedBuildTaskQueueExecutor distributedBuildTaskQueueExecutor;
21  
22      public void addToDistributedBuildQueue( Task distributedBuildTask )
23          throws TaskQueueException
24      {
25          getDistributedBuildQueue().put( distributedBuildTask );
26      }
27  
28      public String getBuildAgentUrl()
29      {
30          return buildAgentUrl;
31      }
32  
33      public TaskQueue getDistributedBuildQueue()
34      {
35          return ( (ThreadedDistributedBuildTaskQueueExecutor) distributedBuildTaskQueueExecutor ).getQueue();
36      }
37  
38      public DistributedBuildTaskQueueExecutor getDistributedBuildTaskQueueExecutor()
39      {
40          return distributedBuildTaskQueueExecutor;
41      }
42  
43      public List<PrepareBuildProjectsTask> getProjectsInQueue()
44          throws TaskQueueException
45      {
46          return getDistributedBuildQueue().getQueueSnapshot();
47      }
48  
49      public boolean isInDistributedBuildQueue( int projectGroupId, int scmRootId )
50          throws TaskQueueException
51      {
52          List<PrepareBuildProjectsTask> tasks = getProjectsInQueue();
53  
54          for ( PrepareBuildProjectsTask task : tasks )
55          {
56              if ( task != null )
57              {
58                  if ( task.getProjectGroupId() == projectGroupId && 
59                       task.getProjectScmRootId() == scmRootId )
60                  {
61                      return true;
62                  }
63              }
64          }
65  
66          return false;
67      }
68  
69      public void removeFromDistributedBuildQueue( int projectGroupId, int scmRootId )
70          throws TaskQueueException
71      {
72          List<PrepareBuildProjectsTask> tasks = getProjectsInQueue();
73  
74          for ( PrepareBuildProjectsTask task : tasks )
75          {
76              if ( task != null )
77              {
78                  if ( task.getProjectGroupId() == projectGroupId && 
79                       task.getProjectScmRootId() == scmRootId )
80                  {
81                      getDistributedBuildQueue().remove( task );
82                      return;
83                  }
84              }
85          }
86      }
87  
88      public void removeFromDistributedBuildQueue( int[] hashCodes )
89          throws TaskQueueException
90      {
91          List<PrepareBuildProjectsTask> tasks = getProjectsInQueue();
92  
93          List<PrepareBuildProjectsTask> tasksToRemove = new ArrayList<PrepareBuildProjectsTask>();
94  
95          for ( PrepareBuildProjectsTask task : tasks )
96          {
97              if ( task != null )
98              {
99                  if ( ArrayUtils.contains( hashCodes, task.getHashCode() ) )
100                 {
101                     tasksToRemove.add( task );
102                 }
103             }
104         }
105 
106         if ( !tasksToRemove.isEmpty() )
107         {
108             getDistributedBuildQueue().removeAll( tasksToRemove );
109         }
110     }
111 
112     public void removeFromDistributedBuildQueueByHashCode( int hashCode )
113         throws TaskQueueException
114     {
115         List<PrepareBuildProjectsTask> tasks = getProjectsInQueue();
116 
117         for ( PrepareBuildProjectsTask task : tasks )
118         {
119             if ( task != null )
120             {
121                 if ( task.getHashCode() == hashCode )
122                 {
123                     getDistributedBuildQueue().remove( task );
124                     return;
125                 }
126             }
127         }
128     }
129 
130     public void setBuildAgentUrl( String buildAgentUrl )
131     {
132         this.buildAgentUrl = buildAgentUrl;
133     }
134 
135     public void setDistributedBuildTaskQueueExecutor( DistributedBuildTaskQueueExecutor distributedBuildTaskQueueExecutor )
136     {
137         this.distributedBuildTaskQueueExecutor = distributedBuildTaskQueueExecutor;
138     }
139 }