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 }