You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ct...@apache.org on 2008/12/08 07:46:00 UTC

svn commit: r724269 - in /continuum/trunk: continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/ continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/ continuum-core/src/main/java/org/apache/maven/continuum/ continuum-core/...

Author: ctan
Date: Sun Dec  7 22:46:00 2008
New Revision: 724269

URL: http://svn.apache.org/viewvc?rev=724269&view=rev
Log:
[CONTINUUM-2010] added group cancel build
- remove prepare build task in queues
- remove build task in queues
- cancel current build task

Removed:
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/AbstractBuildQueueAction.java
Modified:
    continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java
    continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
    continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
    continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java
    continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
    continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties
    continuum/trunk/continuum-webapp/src/main/resources/struts.xml
    continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp

Modified: continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java (original)
+++ continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java Sun Dec  7 22:46:00 2008
@@ -19,6 +19,9 @@
     void cancelBuildTask( int projectId )
         throws TaskQueueManagerException;
 
+    boolean cancelCheckout( int projectId )
+        throws TaskQueueManagerException;
+
     boolean cancelCurrentBuild()
         throws TaskQueueManagerException;
 
@@ -89,6 +92,9 @@
     boolean removeFromBuildingQueue( int projectId, int buildDefinitionId, int trigger, String projectName )
         throws TaskQueueManagerException;
 
+    boolean removeFromPrepareBuildQueue( int projectGroupId, String scmRootAddress )
+        throws TaskQueueManagerException;
+
     /**
      * Remove local repository from the purge queue
      * 

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java Sun Dec  7 22:46:00 2008
@@ -95,14 +95,62 @@
     {
         Task currentTask = getBuildTaskQueueExecutor().getCurrentTask();
         
-        if ( currentTask instanceof BuildProjectTask )
+        if ( currentTask != null )
         {
-            if ( ( (BuildProjectTask) currentTask ).getProjectId() == projectId )
+            if ( currentTask instanceof BuildProjectTask )
             {
-                getLogger().info( "Cancelling task for project " + projectId );
-                getBuildTaskQueueExecutor().cancelTask( currentTask );
+                if ( ( (BuildProjectTask) currentTask ).getProjectId() == projectId )
+                {
+                    getLogger().info( "Cancelling task for project " + projectId );
+                    getBuildTaskQueueExecutor().cancelTask( currentTask );
+                }
+                else
+                {
+                    getLogger().warn( "Current task is not for the given projectId (" + projectId + "): "
+                                          + ( (BuildProjectTask) currentTask ).getProjectId() + "; not cancelling" );
+                }
+            }
+            else
+            {
+                getLogger().warn( "Current task not a BuildProjectTask - not cancelling" );
             }
         }
+        else
+        {
+            getLogger().warn( "No task running - not cancelling" );
+        }
+    }
+
+    public boolean cancelCheckout( int projectId )
+        throws TaskQueueManagerException
+    {
+        Task task = getCheckoutTaskQueueExecutor().getCurrentTask();
+
+        if ( task != null )
+        {
+            if ( task instanceof CheckOutTask )
+            {
+                if ( ( (CheckOutTask) task ).getProjectId() == projectId )
+                {
+                    getLogger().info( "Cancelling checkout for project " + projectId );
+                    return getCheckoutTaskQueueExecutor().cancelTask( task );
+                }
+                else
+                {
+                    getLogger().warn( "Current task is not for the given projectId (" + projectId + "): "
+                                          + ( (CheckOutTask) task ).getProjectId() + "; not cancelling checkout" );
+                }
+            }
+            else
+            {
+                getLogger().warn( "Current task not a CheckOutTask - not cancelling checkout" );
+            }
+        }
+        else
+        {
+            getLogger().warn( "No task running - not cancelling checkout" );
+        }
+        return false;
     }
 
     public boolean cancelCurrentBuild()
@@ -624,6 +672,28 @@
         }
     }
 
+    public boolean removeFromPrepareBuildQueue( int projectGroupId, String scmRootAddress )
+        throws TaskQueueManagerException
+    {
+        try
+        {
+            List<PrepareBuildProjectsTask> queue = prepareBuildQueue.getQueueSnapshot();
+            
+            for ( PrepareBuildProjectsTask task : queue )
+            {
+                if ( task != null && task.getProjectGroupId() == projectGroupId && task.getScmRootAddress().equals( scmRootAddress ) )
+                {
+                    return prepareBuildQueue.remove( task );
+                }
+            }
+            return false;
+        }
+        catch ( TaskQueueException e )
+        {
+            throw new TaskQueueManagerException( "Error while getting the prepare build projects task in queue", e );
+        }
+    }
+    
     public void contextualize( Context context )
         throws ContextException
     {

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java Sun Dec  7 22:46:00 2008
@@ -878,7 +878,7 @@
             projectsList = getProjects();
         }
 
-        Map<String, Map<Integer, Integer>> map = new HashMap<String, Map<Integer, Integer>>();
+        Map<ProjectScmRoot, Map<Integer, Integer>> map = new HashMap<ProjectScmRoot, Map<Integer, Integer>>();
 
         for ( Project project : projectsList )
         {
@@ -895,14 +895,7 @@
                         {
                             ProjectScmRoot scmRoot = getProjectScmRootByProject( project.getId() );
                             
-                            String scmRootAddress = "";
-
-                            if ( scmRoot != null )
-                            {
-                                scmRootAddress = scmRoot.getScmRootAddress();
-                            }
-
-                            Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRootAddress );
+                            Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRoot );
                             
                             if ( projectsAndBuildDefinitionsMap == null )
                             {
@@ -911,7 +904,7 @@
                             
                             projectsAndBuildDefinitionsMap.put( project.getId(), buildDefId );
                             
-                            map.put( scmRootAddress, projectsAndBuildDefinitionsMap );
+                            map.put( scmRoot, projectsAndBuildDefinitionsMap );
                         }
                     } 
                     catch ( TaskQueueManagerException e )
@@ -922,7 +915,7 @@
             }
         }
 
-        prepareBuildProjects( map.values(), ContinuumProjectState.TRIGGER_SCHEDULED );
+        prepareBuildProjects( map, ContinuumProjectState.TRIGGER_SCHEDULED );
     }
 
     public void buildProject( int projectId )
@@ -964,7 +957,8 @@
         Map<Integer, Integer> projectsBuildDefinitionsMap = new HashMap<Integer, Integer>();
         projectsBuildDefinitionsMap.put( projectId, buildDef.getId() );
         
-        prepareBuildProjects( projectsBuildDefinitionsMap, trigger );
+        ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId );
+        prepareBuildProjects( projectsBuildDefinitionsMap, trigger, scmRoot.getScmRootAddress(), scmRoot.getProjectGroup().getId() );
     }
 
     public void buildProject( int projectId, int buildDefinitionId, int trigger )
@@ -987,7 +981,8 @@
         Map<Integer, Integer> projectsBuildDefinitionsMap = new HashMap<Integer, Integer>();
         projectsBuildDefinitionsMap.put( projectId, buildDefinitionId );
 
-        prepareBuildProjects( projectsBuildDefinitionsMap, trigger );
+        ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId );
+        prepareBuildProjects( projectsBuildDefinitionsMap, trigger, scmRoot.getScmRootAddress(), scmRoot.getProjectGroup().getId() );
     }
 
     public BuildResult getBuildResult( int buildId )
@@ -3199,7 +3194,7 @@
                                       boolean checkDefaultBuildDefinitionForProject, int trigger )
         throws ContinuumException
     {
-        Map<String, Map<Integer, Integer>> map = new HashMap<String, Map<Integer, Integer>>();
+        Map<ProjectScmRoot, Map<Integer, Integer>> map = new HashMap<ProjectScmRoot, Map<Integer, Integer>>();
 
         for ( Project project : projects )
         {
@@ -3271,13 +3266,7 @@
 
             ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId );
 
-            String scmRootAddress = "";
-            if ( scmRoot != null )
-            {
-                scmRootAddress = scmRoot.getScmRootAddress();
-            }
-
-            Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRootAddress );
+            Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRoot );
 
             if ( projectsAndBuildDefinitionsMap == null )
             {
@@ -3286,16 +3275,16 @@
 
             projectsAndBuildDefinitionsMap.put( projectId, buildDefId );
 
-            map.put( scmRootAddress, projectsAndBuildDefinitionsMap );
+            map.put( scmRoot, projectsAndBuildDefinitionsMap );
         }
 
-        prepareBuildProjects( map.values(), trigger );
+        prepareBuildProjects( map, trigger );
     }
 
     private void prepareBuildProjects( Collection<Project> projects, int buildDefinitionId, int trigger )
         throws ContinuumException
     {
-        Map<String, Map<Integer,Integer>> map = new HashMap<String, Map<Integer, Integer>>();
+        Map<ProjectScmRoot, Map<Integer,Integer>> map = new HashMap<ProjectScmRoot, Map<Integer, Integer>>();
 
         for ( Project project : projects )
         {
@@ -3315,14 +3304,8 @@
                 }
                 
                 ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId );
-
-                String scmRootAddress = "";
-                if ( scmRoot != null )
-                {
-                    scmRootAddress = scmRoot.getScmRootAddress();
-                }
                 
-                Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRootAddress );
+                Map<Integer, Integer> projectsAndBuildDefinitionsMap = map.get( scmRoot );
                 
                 if ( projectsAndBuildDefinitionsMap == null )
                 {
@@ -3331,7 +3314,7 @@
                 
                 projectsAndBuildDefinitionsMap.put( projectId, buildDefinitionId );
                 
-                map.put( scmRootAddress, projectsAndBuildDefinitionsMap );
+                map.put( scmRoot, projectsAndBuildDefinitionsMap );
             }
             catch ( TaskQueueManagerException e )
             {
@@ -3339,24 +3322,26 @@
             }
         }
 
-        prepareBuildProjects( map.values(), trigger );
+        prepareBuildProjects( map, trigger );
     }
 
-    private void prepareBuildProjects( Collection<Map<Integer, Integer>> projectsBuildDefinitions, int trigger )
+    private void prepareBuildProjects( Map<ProjectScmRoot, Map<Integer, Integer>> map, int trigger )
         throws ContinuumException
     {
-        for ( Map<Integer, Integer> map : projectsBuildDefinitions )
+        for ( ProjectScmRoot scmRoot : map.keySet() )
         {
-            prepareBuildProjects( map, trigger );
+            prepareBuildProjects( map.get( scmRoot ), trigger, scmRoot.getScmRootAddress(), scmRoot.getProjectGroup().getId() );
         }
     }
 
-    private void prepareBuildProjects( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger )
+    private void prepareBuildProjects( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger, 
+                                       String scmRootAddress, int projectGroupId )
         throws ContinuumException
     {
         try
         {
-            PrepareBuildProjectsTask task = new PrepareBuildProjectsTask( projectsBuildDefinitionsMap, trigger );
+            PrepareBuildProjectsTask task = new PrepareBuildProjectsTask( projectsBuildDefinitionsMap, trigger,
+                                                                          projectGroupId, scmRootAddress );
             taskQueueManager.getPrepareBuildQueue().put( task );
         }
         catch ( TaskQueueException e )

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java Sun Dec  7 22:46:00 2008
@@ -11,10 +11,17 @@
 
     private int trigger;
 
-    public PrepareBuildProjectsTask( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger )
+    private int projectGroupId;
+
+    private String scmRootAddress;
+
+    public PrepareBuildProjectsTask( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger, 
+                                     int projectGroupId, String scmRootAddress )
     {
         this.projectsBuildDefinitionsMap = projectsBuildDefinitionsMap;
         this.trigger = trigger;
+        this.projectGroupId = projectGroupId;
+        this.scmRootAddress = scmRootAddress;
     }
     
     public long getMaxExecutionTime()
@@ -42,7 +49,27 @@
     {
         this.trigger = trigger;
     }
-    
+
+    public int getProjectGroupId()
+    {
+        return projectGroupId;
+    }
+
+    public void setProjectGroupId( int projectGroupId )
+    {
+        this.projectGroupId = projectGroupId;
+    }
+
+    public String getScmRootAddress()
+    {
+        return scmRootAddress;
+    }
+
+    public void setScmRootAddress( String scmRootAddress )
+    {
+        this.scmRootAddress = scmRootAddress;
+    }
+
     public int getHashCode()
     {
         return this.hashCode();

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java Sun Dec  7 22:46:00 2008
@@ -86,15 +86,15 @@
                 
                 getLogger().info( "Initializing prepare build" );
                 context = initializeContext( projectId, buildDefinitionId );
-                
-                getLogger().info( "Starting prepare build of project: " + AbstractContinuumAction.getProject( context ).getName() );
-                startPrepareBuild( context );
-                
+
                 if ( !checkProjectScmRoot( context ) )
                 {
                     break;
                 }
-                
+
+                getLogger().info( "Starting prepare build of project: " + AbstractContinuumAction.getProject( context ).getName() );
+                startPrepareBuild( context );
+
                 try
                 {
                     if ( AbstractContinuumAction.getBuildDefinition( context ).isBuildFresh() )
@@ -102,7 +102,7 @@
                         getLogger().info( "Purging existing working copy" );
                         cleanWorkingDirectory( context );
                     }
-                    
+
                     // ----------------------------------------------------------------------
                     // TODO: Centralize the error handling from the SCM related actions.
                     // ContinuumScmResult should return a ContinuumScmResult from all
@@ -110,7 +110,7 @@
                     // ----------------------------------------------------------------------
                     getLogger().info( "Updating working dir" );
                     updateWorkingDirectory( context );
-            
+
                     getLogger().info( "Merging SCM results" );
                     //CONTINUUM-1393
                     if ( !AbstractContinuumAction.getBuildDefinition( context ).isBuildFresh() )
@@ -131,10 +131,13 @@
             endPrepareBuild( context );
         }
 
-        int projectGroupId = AbstractContinuumAction.getProjectGroupId( context );
-        buildProjects( projectGroupId, projectsBuildDefinitionsMap, trigger );
+        if ( checkProjectScmRoot( context ) )
+        {
+            int projectGroupId = AbstractContinuumAction.getProjectGroupId( context );
+            buildProjects( projectGroupId, projectsBuildDefinitionsMap, trigger );
+        }
     }
-    
+
     private Map initializeContext( int projectId, int buildDefinitionId )
         throws TaskExecutionException
     {
@@ -287,7 +290,7 @@
         try
         {
             project.setScmResult( scmResult );
-            
+
             projectDao.updateProject( project );
         }
         catch ( ContinuumStoreException e )
@@ -413,7 +416,7 @@
         {
             projectScmRoot.setState( ContinuumProjectState.ERROR );
             projectScmRoot.setError( error );
-            
+
             projectScmRootDao.updateProjectScmRoot( projectScmRoot );
             
             context.put( AbstractContinuumAction.KEY_PROJECT_SCM_ROOT, projectScmRoot );

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java Sun Dec  7 22:46:00 2008
@@ -19,13 +19,16 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.continuum.model.project.ProjectScmRoot;
 import org.apache.continuum.taskqueue.manager.TaskQueueManager;
 import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
 import org.apache.maven.continuum.ContinuumException;
-import org.apache.maven.continuum.web.action.admin.AbstractBuildQueueAction;
+import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -35,7 +38,7 @@
  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="cancelBuild"
  */
 public class CancelBuildAction
-    extends AbstractBuildQueueAction
+    extends ContinuumActionSupport
 {
 
     private int projectId;
@@ -52,13 +55,19 @@
         try
         {
             checkBuildProjectInGroupAuthorization( getProjectGroupName() );
+
+            TaskQueueManager taskQueueManager = getContinuum().getTaskQueueManager();
+
+            taskQueueManager.cancelBuildTask( projectId );
         }
         catch ( AuthorizationRequiredException e )
         {
             return REQUIRES_AUTHORIZATION;
         }
-
-        cancelBuild( projectId );
+        catch ( TaskQueueManagerException e )
+        {
+            throw new ContinuumException( "Error while canceling build", e );
+        }
 
         return SUCCESS;
     }
@@ -81,20 +90,65 @@
         try
         {
             taskQueueManager.removeProjectsFromBuildingQueue( projectsId );
+            
+            // now we must check if the current build is one of this
+        	int index = ArrayUtils.indexOf( projectsId, taskQueueManager.getCurrentProjectIdBuilding() );
+        	if ( index > 0 )
+        	{
+            	taskQueueManager.cancelBuildTask( projectsId[index] );
+        	}
         }
         catch ( TaskQueueManagerException e )
         {
             throw new ContinuumException( "Unable to remove projects from building queue", e );
         }
-        // now we must check if the current build is one of this
-        int index = ArrayUtils.indexOf( projectsId, getCurrentProjectIdBuilding() );
-        if ( index > 0 )
-        {
-            cancelBuild( projectsId[index] );
-        }
+
         return SUCCESS;
     }
 
+    public String cancelGroupBuild()
+        throws ContinuumException
+    {
+        try
+        {
+            checkBuildProjectInGroupAuthorization( getContinuum().getProjectGroup( projectGroupId).getName() );
+        }
+        catch ( AuthorizationRequiredException e )
+        {
+            return REQUIRES_AUTHORIZATION;
+        }
+
+        TaskQueueManager taskQueueManager = getContinuum().getTaskQueueManager();
+
+        List<ProjectScmRoot> scmRoots = getContinuum().getProjectScmRootByProjectGroup( projectGroupId );
+        
+        if ( scmRoots != null )
+        {
+            for ( ProjectScmRoot scmRoot : scmRoots )
+            {
+                try
+                {
+                    taskQueueManager.removeFromPrepareBuildQueue( projectGroupId, scmRoot.getScmRootAddress() );
+                }
+                catch ( TaskQueueManagerException e )
+                {
+                    throw new ContinuumException( "Unable to cancel group build", e );
+                }
+            }
+        }
+        Collection<Project> projects = getContinuum().getProjectsInGroup( projectGroupId );
+
+        List<String> projectIds = new ArrayList<String>();
+        
+        for ( Project project : projects )
+        {
+            projectIds.add( Integer.toString( project.getId() ) );
+        }
+
+        setSelectedProjects( projectIds );
+
+        return cancelBuilds();
+    }
 
     public void setProjectId( int projectId )
     {

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java Sun Dec  7 22:46:00 2008
@@ -27,6 +27,7 @@
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.scm.queue.CheckOutTask;
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
+import org.apache.maven.continuum.web.action.ContinuumActionSupport;
 import org.apache.maven.continuum.web.exception.AuthenticationRequiredException;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
 import org.codehaus.plexus.logging.LogEnabled;
@@ -44,7 +45,7 @@
  * @since 24 sept. 07
  */
 public class QueuesAction
-    extends AbstractBuildQueueAction
+    extends ContinuumActionSupport
     implements SecureAction, LogEnabled
 {
     
@@ -104,8 +105,9 @@
             addActionError( e.getMessage() );
             return REQUIRES_AUTHENTICATION;
         }
-        
-        cancelBuild( projectId );
+
+        taskQueueManager.cancelBuildTask( projectId );
+
         return SUCCESS;
     }
     
@@ -132,6 +134,7 @@
     }
 
     public String cancelCurrentCheckout()
+        throws Exception
     {
         try 
         {
@@ -148,7 +151,7 @@
             return REQUIRES_AUTHENTICATION;
         }
         
-        cancelCheckout( projectId );
+        taskQueueManager.cancelCheckout( projectId );
         return SUCCESS;
     }
     
@@ -261,39 +264,6 @@
 
         return bundle;
     }
-    
-    private boolean cancelCheckout(int projectId)
-    {
-        Task task = getCheckoutTaskQueueExecutor().getCurrentTask();
-
-        if ( task != null )
-        {
-            if ( task instanceof CheckOutTask )
-            {
-                if ( ( (CheckOutTask) task ).getProjectId() == projectId )
-                {
-                    getLogger().info( "Cancelling checkout for project " + projectId );
-                    return getCheckoutTaskQueueExecutor().cancelTask( task );
-                }
-                else
-                {
-                    getLogger().warn(
-                                      "Current task is not for the given projectId (" + projectId + "): "
-                                          + ( (CheckOutTask) task ).getProjectId() + "; not cancelling checkout" );
-                }
-            }
-            else
-            {
-                getLogger().warn( "Current task not a CheckOutTask - not cancelling checkout" );
-            }
-        }
-        else
-        {
-            getLogger().warn( "No task running - not cancelling checkout" );
-        }
-        return false;
-    }
-    
 
     public List<BuildProjectTask> getBuildProjectTasks()
     {
@@ -414,8 +384,5 @@
     public void setSelectedCheckOutTaskHashCodes( List<String> selectedCheckOutTaskHashCodes )
     {
         this.selectedCheckOutTaskHashCodes = selectedCheckOutTaskHashCodes;
-    }
-
-
-    
+    }    
 }

Modified: continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties Sun Dec  7 22:46:00 2008
@@ -185,6 +185,7 @@
 projectGroup.tab.releaseResults = Release Results
 projectGroup.scmRoot.title = Project Group Scm Root
 projectGroup.scmRoot.label = Scm Root URL
+projectGroup.cancelGroupBuild = Cancel Group Build
 
 # ----------------------------------------------------------------------
 # Page: Project Group - Members

Modified: continuum/trunk/continuum-webapp/src/main/resources/struts.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/struts.xml?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/struts.xml (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/struts.xml Sun Dec  7 22:46:00 2008
@@ -444,6 +444,13 @@
       </result>
     </action>    
 
+    <action name="cancelGroupBuild" class="cancelBuild" method="cancelGroupBuild">
+      <result name="success" type="redirect-action">
+        <param name="actionName">projectGroupSummary</param>
+        <param name="projectGroupId">${projectGroupId}</param>
+      </result>
+    </action>
+
     <!--
     - continuum release
     -->

Modified: continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp?rev=724269&r1=724268&r2=724269&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp (original)
+++ continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp Sun Dec  7 22:46:00 2008
@@ -175,6 +175,14 @@
                 </form>
               </redback:ifAuthorized>
             </td>
+            <td>
+              <redback:ifAuthorized permission="continuum-build-project-in-group" resource="${projectGroup.name}">
+                <form action="cancelGroupBuild.action" method="post">
+                  <input type="hidden" name="projectGroupId" value="<s:property value="projectGroupId"/>"/>
+                  <input type="submit" name="cancel" value="<s:text name="projectGroup.cancelGroupBuild"/>"/>
+                </form>
+              </redback:ifAuthorized>
+            </td>
           </tr>
         </table>
       </div>