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 2009/05/20 03:38:51 UTC

svn commit: r776518 - in /continuum/trunk: continuum-api/src/main/java/org/apache/continuum/buildmanager/ continuum-core/src/main/java/org/apache/continuum/buildmanager/ continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ contin...

Author: ctan
Date: Wed May 20 01:38:50 2009
New Revision: 776518

URL: http://svn.apache.org/viewvc?rev=776518&view=rev
Log:
[CONTINUUM-2231] added prepare build queue in Queues page
merge -r 776515:776516 from 1.3.x branch

Modified:
    continuum/trunk/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
    continuum/trunk/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
    continuum/trunk/continuum-webapp/src/main/mdo/view-models.mdo
    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/admin/buildQueueView.jsp
    continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp

Modified: continuum/trunk/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java?rev=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java (original)
+++ continuum/trunk/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java Wed May 20 01:38:50 2009
@@ -25,6 +25,7 @@
 
 import org.apache.continuum.taskqueue.BuildProjectTask;
 import org.apache.continuum.taskqueue.CheckOutTask;
+import org.apache.continuum.taskqueue.PrepareBuildProjectsTask;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.BuildQueue;
 import org.apache.maven.continuum.model.project.Project;
@@ -342,4 +343,39 @@
      * @return
      */
     boolean isBuildInProgress();
+
+    /**
+     * Return currently preparing build project 
+     * @return
+     * @throws BuildManagerException
+     */
+    PrepareBuildProjectsTask getCurrentProjectInPrepareBuild()
+        throws BuildManagerException;
+
+    /**
+     * Return all projects in prepare build queue
+     * @return
+     * @throws BuildManagerException
+     */
+    List<PrepareBuildProjectsTask> getProjectsInPrepareBuildQueue()
+        throws BuildManagerException;
+
+    /**
+     * Remove a project from a prepare build queue
+     * @param projectGroupId
+     * @param scmRootId
+     * @return
+     * @throws BuildManagerException
+     */
+    boolean removeProjectFromPrepareBuildQueue( int projectGroupId, int scmRootId )
+        throws BuildManagerException;
+
+    /**
+     * Removes a set of projects using the specified hashcodes from the prepare build queues.
+     *
+     * @param hashcodes
+     * @throws BuildManagerException
+     */
+    void removeProjectsFromPrepareBuildQueueWithHashCodes( int[] hashCodes )
+        throws BuildManagerException;
 }

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java?rev=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java Wed May 20 01:38:50 2009
@@ -28,6 +28,7 @@
 
 import javax.annotation.Resource;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.continuum.buildqueue.BuildQueueService;
 import org.apache.continuum.buildqueue.BuildQueueServiceException;
 import org.apache.continuum.dao.BuildDefinitionDao;
@@ -1048,6 +1049,70 @@
         }
     }
 
+    public PrepareBuildProjectsTask getCurrentProjectInPrepareBuild()
+        throws BuildManagerException
+    {
+        Task task = getPrepareBuildTaskQueueExecutor().getCurrentTask();
+
+        if ( task != null )
+        {
+            return (PrepareBuildProjectsTask) task;
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public List<PrepareBuildProjectsTask> getProjectsInPrepareBuildQueue()
+        throws BuildManagerException
+    {
+        try
+        {
+            return getPrepareBuildQueue().getQueueSnapshot();
+        }
+        catch ( TaskQueueException e )
+        {
+            throw new BuildManagerException( "Error occurred while retrieving projects in prepare build queue", e );
+        }
+    }
+
+    public boolean removeProjectFromPrepareBuildQueue( int projectGroupId, int scmRootId )
+        throws BuildManagerException
+    {
+        List<PrepareBuildProjectsTask> tasks = getProjectsInPrepareBuildQueue();
+
+        if ( tasks != null )
+        {
+            for ( PrepareBuildProjectsTask task : tasks )
+            {
+                if ( task.getProjectGroupId() == projectGroupId && task.getProjectScmRootId() == scmRootId )
+                {
+                    return getPrepareBuildQueue().remove( task );
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public void removeProjectsFromPrepareBuildQueueWithHashCodes( int[] hashCodes )
+        throws BuildManagerException
+    {
+        List<PrepareBuildProjectsTask> tasks = getProjectsInPrepareBuildQueue();
+
+        if ( tasks != null )
+        {
+            for ( PrepareBuildProjectsTask task : tasks )
+            {
+                if ( ArrayUtils.contains( hashCodes, task.getHashCode() ) )
+                {
+                    getPrepareBuildQueue().remove( task );
+                }
+            }
+        }
+    }
+
     private boolean isInQueue( int projectId, int typeOfQueue, int buildDefinitionId )
         throws TaskQueueException
     {
@@ -1273,6 +1338,19 @@
         }
     }
 
+    public TaskQueueExecutor getPrepareBuildTaskQueueExecutor()
+        throws BuildManagerException
+    {
+        try
+        {
+            return (TaskQueueExecutor) container.lookup( TaskQueueExecutor.class, "prepare-build-project" );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new BuildManagerException( e.getMessage(), e );
+        }
+    }
+
     public void contextualize( Context context )
         throws ContextException
     {

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=776518&r1=776517&r2=776518&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 Wed May 20 01:38:50 2009
@@ -38,7 +38,7 @@
 import org.apache.maven.continuum.web.exception.AuthenticationRequiredException;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
 import org.apache.maven.continuum.web.model.DistributedBuildSummary;
-import org.apache.maven.continuum.web.model.DistributedPrepareBuildSummary;
+import org.apache.maven.continuum.web.model.PrepareBuildSummary;
 import org.codehaus.plexus.redback.rbac.Resource;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.redback.integration.interceptor.SecureAction;
@@ -83,9 +83,13 @@
 
     private List<CheckoutQueue> checkoutsInQueue = new ArrayList<CheckoutQueue>();
 
-    private List<DistributedPrepareBuildSummary> currentDistributedPrepareBuilds = new ArrayList<DistributedPrepareBuildSummary>();
+    private List<PrepareBuildSummary> currentPrepareBuilds = new ArrayList<PrepareBuildSummary>();
 
-    private List<DistributedPrepareBuildSummary> distributedPrepareBuildQueues = new ArrayList<DistributedPrepareBuildSummary>();
+    private List<PrepareBuildSummary> prepareBuildQueues = new ArrayList<PrepareBuildSummary>();
+
+    private List<PrepareBuildSummary> currentDistributedPrepareBuilds = new ArrayList<PrepareBuildSummary>();
+
+    private List<PrepareBuildSummary> distributedPrepareBuildQueues = new ArrayList<PrepareBuildSummary>();
 
     private List<DistributedBuildSummary> currentDistributedBuilds = new ArrayList<DistributedBuildSummary>();
 
@@ -207,7 +211,7 @@
 
                 ProjectGroup projectGroup = getContinuum().getProjectGroup( task.getProjectGroupId() );
 
-                DistributedPrepareBuildSummary summary = new DistributedPrepareBuildSummary();
+                PrepareBuildSummary summary = new PrepareBuildSummary();
                 summary.setBuildAgentUrl( url );
                 summary.setProjectGroupId( task.getProjectGroupId() );
                 summary.setProjectGroupName( projectGroup.getName() );
@@ -247,7 +251,7 @@
                 {
                     ProjectGroup projectGroup = getContinuum().getProjectGroup( task.getProjectGroupId() );
 
-                    DistributedPrepareBuildSummary summary = new DistributedPrepareBuildSummary();
+                    PrepareBuildSummary summary = new PrepareBuildSummary();
                     summary.setBuildAgentUrl( url );
                     summary.setProjectGroupId( task.getProjectGroupId() );
                     summary.setProjectGroupName( projectGroup.getName() );
@@ -288,6 +292,28 @@
         {
             try
             {
+                // current prepare builds
+                PrepareBuildProjectsTask currentPrepareBuildTask = getContinuum().getBuildsManager().getCurrentProjectInPrepareBuild();
+
+                if ( currentPrepareBuildTask != null )
+                {
+                    PrepareBuildSummary s = new PrepareBuildSummary();
+                    
+                    s.setProjectGroupId( currentPrepareBuildTask.getProjectGroupId() );
+                    s.setProjectGroupName( currentPrepareBuildTask.getProjectGroupName() );
+                    s.setScmRootId( currentPrepareBuildTask.getProjectScmRootId() );
+                    s.setScmRootAddress( currentPrepareBuildTask.getScmRootAddress() );
+                    currentPrepareBuilds.add( s );
+                }
+            }
+            catch ( BuildManagerException e )
+            {
+                addActionError( e.getMessage() );
+                return ERROR;
+            }
+
+            try
+            {
                 // current builds
                 Map<String, BuildProjectTask> currentBuilds = getContinuum().getBuildsManager().getCurrentBuilds();
                 Set<String> keySet = currentBuilds.keySet();
@@ -308,6 +334,29 @@
 
             try
             {
+                // queued prepare builds
+                List<PrepareBuildProjectsTask> prepareBuilds = 
+                    getContinuum().getBuildsManager().getProjectsInPrepareBuildQueue();
+                for ( PrepareBuildProjectsTask task : prepareBuilds )
+                {
+                    PrepareBuildSummary summary = new PrepareBuildSummary();
+                    summary.setProjectGroupId( task.getProjectGroupId() );
+                    summary.setProjectGroupName( task.getProjectGroupName() );
+                    summary.setScmRootId( task.getProjectScmRootId() );
+                    summary.setScmRootAddress( task.getScmRootAddress() );
+                    summary.setHashCode( task.getHashCode() );
+
+                    prepareBuildQueues.add( summary );
+                }
+            }
+            catch ( BuildManagerException e )
+            {
+                addActionError( e.getMessage() );
+                return ERROR;
+            }
+
+            try
+            {
                 // queued builds
                 Map<String, List<BuildProjectTask>> builds =
                     getContinuum().getBuildsManager().getProjectsInBuildQueues();
@@ -449,6 +498,51 @@
         return SUCCESS;
     }
 
+    public String removePrepareBuildEntry()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getBuildsManager().removeProjectFromPrepareBuildQueue( projectGroupId, scmRootId );
+        return SUCCESS;
+    }
+
+    public String removePrepareBuildEntries()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getBuildsManager().removeProjectsFromPrepareBuildQueueWithHashCodes( 
+            listToIntArray( this.selectedPrepareBuildTaskHashCodes ) );
+        return SUCCESS;
+    }
+
     public String cancelDistributedBuild()
         throws Exception
     {
@@ -726,7 +820,7 @@
         this.checkoutsInQueue = checkoutsInQueue;
     }
 
-    public List<DistributedPrepareBuildSummary> getCurrentDistributedPrepareBuilds()
+    public List<PrepareBuildSummary> getCurrentDistributedPrepareBuilds()
     {
         return currentDistributedPrepareBuilds;
     }
@@ -736,7 +830,7 @@
         return currentDistributedBuilds;
     }
 
-    public List<DistributedPrepareBuildSummary> getDistributedPrepareBuildQueues()
+    public List<PrepareBuildSummary> getDistributedPrepareBuildQueues()
     {
         return distributedPrepareBuildQueues;
     }
@@ -745,7 +839,17 @@
     {
         return distributedBuildQueues;
     }
-    
+
+    public List<PrepareBuildSummary> getCurrentPrepareBuilds()
+    {
+        return currentPrepareBuilds;
+    }
+
+    public List<PrepareBuildSummary> getPrepareBuildQueues()
+    {
+        return prepareBuildQueues;
+    }
+
     public String getBuildAgentUrl()
     {
         return buildAgentUrl;

Modified: continuum/trunk/continuum-webapp/src/main/mdo/view-models.mdo
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/mdo/view-models.mdo?rev=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/mdo/view-models.mdo (original)
+++ continuum/trunk/continuum-webapp/src/main/mdo/view-models.mdo Wed May 20 01:38:50 2009
@@ -495,13 +495,13 @@
       </fields>
     </class>    
     <class>
-      <name>DistributedPrepareBuildSummary</name>
+      <name>PrepareBuildSummary</name>
       <version>1.0.0+</version>
       <fields>
         <field>
           <name>buildAgentUrl</name>
           <version>1.0.0</version>
-          <required>true</required>
+          <required>false</required>
           <description>URL of the build agent</description>
           <type>String</type>
         </field>

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=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/localization/Continuum.properties Wed May 20 01:38:50 2009
@@ -869,7 +869,7 @@
 # Page: Queues
 # ----------------------------------------------------------------------
 buildQueue.page.title = Continuum - Build Queue
-buildQueue.section.title = Continuum - Build Queue
+buildQueue.section.title = Build Queue
 buildQueue.empty = Build Queue is empty
 buildQueue.currentTask.section.title = Current Build
 buildQueue.currentTask.buildQueue = Build Queue
@@ -884,6 +884,13 @@
 checkoutQueue.section.title = Checkout Queue
 checkoutQueue.empty = Checkout Queue is empty
 checkoutQueue.removeEntries = Cancel Entries
+prepareBuildQueue.currentTask.section.title = Current Prepare Build
+prepareBuildQueue.section.title = Prepare Build Queue
+prepareBuildQueue.table.projectGroupName = Project Group
+prepareBuildQueue.table.scmRootAddress = SCM Root URL
+prepareBuildQueue.empty = Prepare Build Queue is empty
+prepareBuildQueue.no.currentTasks = No current prepare build
+prepareBuildQueue.removeEntries = Cancel Entries
 
 # ----------------------------------------------------------------------
 # Page: Build Queue
@@ -1153,21 +1160,23 @@
 # Page: View Distributed Build
 # ----------------------------------------------------------------------
 distributedBuilds.page.title = Continuum - View Distributed Builds
-distributedBuilds.currentPrepareBuild.section.title = Current Prepare Builds
-distributedBuilds.currentBuild.section.title = Current Builds
-distributedBuilds.prepareBuildQueue.section.title = Prepare Build Queues
-distributedBuilds.buildQueue.section.title = Build Queues
+distributedBuilds.currentPrepareBuild.section.title = Current Prepare Build
+distributedBuilds.currentBuild.section.title = Current Build
+distributedBuilds.prepareBuildQueue.section.title = Prepare Build Queue
+distributedBuilds.buildQueue.section.title = Build Queue
 distributedPrepareBuild.table.projectGroupName = Project Group Name
-distributedPrepareBuild.table.scmRootAddress = Scm Root Address
+distributedPrepareBuild.table.scmRootAddress = SCM Root URL
 distributedPrepareBuild.table.buildAgentUrl = Build Agent URL
-distributedPrepareBuilds.empty = No Prepare Builds
-distributedPrepareBuilds.removeEntries = Cancel Prepare Builds
+distributedPrepareBuilds.empty = Prepare Build Queue is empty
+distributedPrepareBuilds.no.currentTasks = No current prepare build
+distributedPrepareBuilds.removeEntries = Cancel Entries
 distributedBuild.table.projectName = Project Name
 distributedBuild.table.buildDefinitionLabel = Build Definition Label
 distributedBuild.table.projectGroupName = Project Group Name
 distributedBuild.table.buildAgentUrl = Build Agent URL
-distributedBuilds.empty = No Builds
-distributedBuilds.removeEntries = Cancel Builds
+distributedBuilds.empty = Build Queue is empty
+distributedBuilds.no.currentTasks = No current build
+distributedBuilds.removeEntries = Cancel Entries
 
 # ----------------------------------------------------------------------
 # Page: Delete BuildAgentGroup

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=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/struts.xml (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/struts.xml Wed May 20 01:38:50 2009
@@ -818,6 +818,18 @@
         <param name="actionName">displayQueues</param>
       </result>      
     </action>    
+
+    <action name="removePrepareBuildEntry" class="queues" method="removePrepareBuildEntry">
+	  <result name="success" type="redirect-action">
+        <param name="actionName">displayQueues</param>
+      </result>
+    </action>
+
+    <action name="removePrepareBuildEntries" class="queues" method="removePrepareBuildEntries">
+      <result name="success" type="redirect-action">
+        <param name="actionName">displayQueues</param>
+      </result>
+    </action>
     
     <action name="cancelDistributedBuild" class="queues" method="cancelDistributedBuild">
       <result name="success" type="redirect-action">

Modified: continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp?rev=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp (original)
+++ continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp Wed May 20 01:38:50 2009
@@ -30,7 +30,87 @@
       <meta http-equiv="refresh" content="60"/>
     </head>
     <body>
-      <s:form id="removeForm" action="none" method="post">
+      <s:form id="prepareBuildForm" action="none" method="post">
+      	<div id="h3">
+          <h3><s:text name="prepareBuildQueue.currentTask.section.title"/></h3>
+          <c:if test="${not empty currentPrepareBuilds}">
+            <s:set name="currentPrepareBuilds" value="currentPrepareBuilds" scope="request"/>
+            <ec:table items="currentPrepareBuilds"
+                      var="currentPrepareBuild"
+                      showExports="false"
+                      showPagination="false"
+                      showStatusBar="false"
+                      sortable="false"
+                      filterable="false">
+              <ec:row>
+                <ec:column property="projectGroupName" title="prepareBuildQueue.table.projectGroupName"/>
+                <ec:column property="scmRootAddress" title="prepareBuildQueue.table.scmRootAddress"/>
+              </ec:row>
+            </ec:table>
+          </c:if>
+          <c:if test="${empty currentPrepareBuilds}">
+            <s:text name="prepareBuildQueue.no.currentTasks"/>
+          </c:if>
+        </div>
+      </s:form>
+       
+      <s:form id="removePrepareBuildForm" action="removePrepareBuildEntries.action" method="post">
+        <div id="h3">
+          <h3>
+            <s:text name="prepareBuildQueue.section.title"/>
+          </h3>
+          <c:if test="${not empty prepareBuildQueues}">
+            <s:set name="prepareBuildQueues" value="prepareBuildQueues" scope="request"/>
+            <ec:table items="prepareBuildQueues"
+                      var="prepareBuildQueue"
+                      showExports="false"
+                      showPagination="false"
+                      showStatusBar="false"
+                      sortable="false"
+                      filterable="false">
+              <ec:row>
+                <redback:ifAuthorized permission="continuum-manage-queues">
+                  <ec:column alias="selectedPrepareBuildTaskHashCodes" title="&nbsp;" style="width:5px" filterable="false" sortable="false" width="1%" headerCell="selectAll">
+                    <input type="checkbox" name="selectedPrepareBuildTaskHashCodes" value="${pageScope.prepareBuildQueue.hashCode}" />
+                  </ec:column>             
+                </redback:ifAuthorized>
+                <ec:column property="projectGroupName" title="prepareBuildQueue.table.projectGroupName"/>
+                <ec:column property="scmRootAddress" title="prepareBuildQueue.table.scmRootAddress"/>
+                <ec:column property="cancelEntry" title="&nbsp;" width="1%">
+                  <redback:ifAuthorized permission="continuum-manage-queues">
+                    <s:url id="cancelUrl" action="removePrepareBuildEntry" method="removePrepareBuildEntry" namespace="/">
+                      <s:param name="projectGroupId">${pageScope.prepareBuildQueue.projectGroupId}</s:param>
+                      <s:param name="scmRootId">${pageScope.prepareBuildQueue.scmRootId}</s:param>
+                    </s:url>
+                    <s:a href="%{cancelUrl}"><img src="<s:url value='/images/cancelbuild.gif' includeParams="none"/>" alt="<s:text name='cancel'/>" title="<s:text name='cancel'/>" border="0"></s:a>
+                  </redback:ifAuthorized>
+                  <redback:elseAuthorized>
+                    <img src="<s:url value='/images/cancelbuild_disabled.gif' includeParams="none"/>" alt="<s:text name='cancel'/>" title="<s:text name='cancel'/>" border="0">
+                  </redback:elseAuthorized>
+                </ec:column>
+              </ec:row>
+            </ec:table>
+          </c:if>
+        </div>
+        <c:if test="${not empty prepareBuildQueues}">
+          <div class="functnbar3">
+            <table>
+              <tbody>
+                <tr>
+                  <td>
+                    <input type="button" name="remove-prepare-build-queues" value="<s:text name="prepareBuildQueue.removeEntries"/>" onclick="document.forms.removePrepareBuildForm.submit();" /> 
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+        </c:if>
+        <c:if test="${empty prepaerBuildQueues}">
+          <s:text name="prepareBuildQueue.empty"/>
+        </c:if>
+      </s:form>
+      
+      <s:form id="buildQueueForm" action="none" method="post">
         <div id="h3">
           <h3>
             <s:text name="buildQueue.currentTask.section.title"/>
@@ -71,7 +151,9 @@
             <s:text name="buildQueue.no.currentTaks" />
           </c:if>
         </div>
-        
+      </s:form>
+      
+      <s:form id="removeBuildForm" action="removeBuildQueueEntries!removeBuildEntries.action" method="post">
         <div id="h3">
           <h3>
             <s:text name="buildQueue.section.title"/>
@@ -127,16 +209,17 @@
               <tbody>
                 <tr>
                   <td>
-                    <input type="submit" value="<s:text name="buildQueue.removeEntries"/>"
-                           onclick="$('removeForm').action='removeBuildQueueEntries!removeBuildEntries.action';$('removeForm').submit();" />
+                    <input type="button" value="<s:text name="buildQueue.removeEntries"/>" onclick="document.forms.removeBuildForm.submit();" />
                   </td>
                 </tr>
               </tbody>
             </table>
           </div>
         </c:if>
-                
-        <!-- checkout queue -->
+      </s:form>
+
+      <s:form id="checkoutForm" action="none" method="post">
+        <%-- checkout queue --%>
         <div id="h3">
           <h3>
             <s:text name="checkoutQueue.currentTask.section.title"/>
@@ -176,7 +259,9 @@
             <s:text name="checkoutQueue.no.currentTaks" />
           </c:if>
         </div>
+      </s:form>
         
+      <s:form id="removeCheckoutForm" action="removeCheckoutQueueEntries!removeCheckoutEntries.action" method="post">
         <div id="h3">
           <h3>
             <s:text name="checkoutQueue.section.title"/>
@@ -228,8 +313,7 @@
                 <tr>
                   <td>
                     <redback:ifAuthorized permission="continuum-manage-queues">
-                    <input type="submit" value="<s:text name="checkoutQueue.removeEntries"/>"
-                           onclick="$('removeForm').action='removeCheckoutQueueEntries!removeCheckoutEntries.action';$('removeForm').submit();" />
+                    <input type="submit" value="<s:text name="checkoutQueue.removeEntries"/>" onclick="document.forms.removeCheckoutForm.submit();" />
                     </redback:ifAuthorized>
                   </td>
                 </tr>

Modified: continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp?rev=776518&r1=776517&r2=776518&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp (original)
+++ continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp Wed May 20 01:38:50 2009
@@ -56,7 +56,7 @@
             </ec:table>
           </c:if>
           <c:if test="${empty currentDistributedPrepareBuilds}">
-            <s:text name="distributedPrepareBuilds.empty"/>
+            <s:text name="distributedPrepareBuilds.no.currentTasks"/>
           </c:if>
         </div>
         <div id="h3">
@@ -90,7 +90,7 @@
             </ec:table>
           </c:if>
           <c:if test="${empty currentDistributedBuilds}">
-            <s:text name="distributedBuilds.empty"/>
+            <s:text name="distributedBuilds.no.currentTasks"/>
           </c:if>
         </div>
       </form>
@@ -147,6 +147,9 @@
             </table>
           </div>
         </c:if>
+        <c:if test="${empty distributedPrepareBuildQueues}">
+          <s:text name="distributedPrepareBuilds.empty"/>
+        </c:if>
       </form>
       <form id="removeBuildForm" action="removeDistributedBuildEntries.action" method="post">
         <div id="h3">
@@ -202,6 +205,9 @@
             </table>
           </div>
         </c:if>
+        <c:if test="${empty distributedBuildQueues}">
+          <s:text name="distributedBuilds.empty"/>
+        </c:if>
       </form>
     </body>
   </s:i18n>