You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by oc...@apache.org on 2008/12/17 12:31:22 UTC

svn commit: r727345 - in /continuum/branches/continuum-parallel-builds: 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/conti...

Author: oching
Date: Wed Dec 17 03:31:21 2008
New Revision: 727345

URL: http://svn.apache.org/viewvc?rev=727345&view=rev
Log:
show which overall build queue the project is queued (for checkout & build)

Modified:
    continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
    continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
    continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
    continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/resources/localization/Continuum.properties
    continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp

Modified: continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java?rev=727345&r1=727344&r2=727345&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java Wed Dec 17 03:31:21 2008
@@ -280,7 +280,7 @@
      * @return
      * @throws BuildManagerException
      */
-    List<Task> getCurrentBuilds()
+    Map<String, Task> getCurrentBuilds()
         throws BuildManagerException;
 
     /**
@@ -288,7 +288,7 @@
      * @return
      * @throws BuildManagerException
      */
-    List<Task> getCurrentCheckouts()
+    Map<String, Task> getCurrentCheckouts()
         throws BuildManagerException;
 
     /**

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java?rev=727345&r1=727344&r2=727345&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java Wed Dec 17 03:31:21 2008
@@ -730,45 +730,43 @@
         return overallBuildQueues;
     }
 
-    public List<Task> getCurrentBuilds()
+    public Map<String, Task> getCurrentBuilds()
         throws BuildManagerException
     {
         synchronized( overallBuildQueues )
         {
-            List<Task> currentBuilds = new ArrayList<Task>();           
+            Map<String, Task> currentBuilds = new HashMap<String, Task>();            
             Set<Integer> keys = overallBuildQueues.keySet();
             for( Integer key : keys )
             {
-                OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
+                OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );                
                 Task task = overallBuildQueue.getBuildTaskQueueExecutor().getCurrentTask();
                 if( task != null )
                 {
-                    currentBuilds.add( task );
-                }
-            }
-            
+                    currentBuilds.put( overallBuildQueue.getName(), task );
+                }                
+            }            
             return currentBuilds;
         }
     }
 
-    public List<Task> getCurrentCheckouts()
+    public Map<String, Task> getCurrentCheckouts()
         throws BuildManagerException
     {
         synchronized( overallBuildQueues )
         {
-            List<Task> currentCheckouts = new ArrayList<Task>();           
+            Map<String, Task> currentCheckouts = new HashMap<String, Task>();
             Set<Integer> keys = overallBuildQueues.keySet();
             for( Integer key : keys )
             {
-                OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
+                OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );                
                 Task task = overallBuildQueue.getCheckoutTaskQueueExecutor().getCurrentTask();
                 if( task != null )
                 {
-                    currentCheckouts.add( task );
-                }
-            }
-            
-            return currentCheckouts;
+                    currentCheckouts.put( overallBuildQueue.getName(), task );
+                }                
+            }            
+            return currentCheckouts;           
         }
     }
 
@@ -777,14 +775,14 @@
     {
         synchronized ( overallBuildQueues )
         {
-            Map<String, List<Task>> buildsInQueue = new HashMap<String, List<Task>>();
+            Map<String, List<Task>> queuedBuilds = new HashMap<String, List<Task>>();
             Set<Integer> keySet = overallBuildQueues.keySet();
             for ( Integer key : keySet )
             {
                 OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
                 try
                 {
-                    buildsInQueue.put( overallBuildQueue.getName(), overallBuildQueue.getProjectsInBuildQueue() );
+                    queuedBuilds.put( overallBuildQueue.getName(), overallBuildQueue.getProjectsInBuildQueue() );
                 }
                 catch ( TaskQueueException e )
                 {
@@ -792,7 +790,7 @@
                         overallBuildQueue.getName() + "'.", e );
                 }
             }
-            return buildsInQueue;
+            return queuedBuilds;
         }
     }
 
@@ -801,22 +799,22 @@
     {
         synchronized ( overallBuildQueues )
         {
-            Map<String, List<Task>> checkoutsInQueue = new HashMap<String, List<Task>>();
+            Map<String, List<Task>> queuedCheckouts = new HashMap<String, List<Task>>();
             Set<Integer> keySet = overallBuildQueues.keySet();
             for ( Integer key : keySet )
             {
                 OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
                 try
                 {
-                    checkoutsInQueue.put( overallBuildQueue.getName(), overallBuildQueue.getCheckOutTasksInQueue() );
+                    queuedCheckouts.put( overallBuildQueue.getName(), overallBuildQueue.getCheckOutTasksInQueue() );
                 }
                 catch ( TaskQueueException e )
                 {
-                    throw new BuildManagerException( "Error occurred while getting projects in checkout queue '" +
+                    throw new BuildManagerException( "Error occurred while getting projects in build queue '" +
                         overallBuildQueue.getName() + "'.", e );
                 }
             }
-            return checkoutsInQueue;
+            return queuedCheckouts;
         }
     }
     

Modified: continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java?rev=727345&r1=727344&r2=727345&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java Wed Dec 17 03:31:21 2008
@@ -76,7 +76,11 @@
      */
     //private TaskQueueManager taskQueueManager;
         
-    private List<BuildProjectTask> currentBuildProjectTasks = new ArrayList<BuildProjectTask>();
+    //private List<BuildProjectTask> currentBuildProjectTasks = new ArrayList<BuildProjectTask>();
+    
+    private Map<String, BuildProjectTask> currentBuildProjectTasks = new HashMap<String, BuildProjectTask>();
+    
+    private Map<String, CheckOutTask> currentCheckoutTasks = new HashMap<String, CheckOutTask>();
     
     private Map<String, List<BuildProjectTask>> buildsInQueue = new HashMap<String, List<BuildProjectTask>>();
     
@@ -164,46 +168,82 @@
     public String display()
         throws Exception
     {
-        // current builds
-        for( Task task : getContinuum().getBuildsManager().getCurrentBuilds() )
+        try
+        {
+            // current builds
+            Map<String, Task> currentBuilds = getContinuum().getBuildsManager().getCurrentBuilds();
+            Set<String> keySet = currentBuilds.keySet();
+            for( String key : keySet )
+            {   
+                BuildProjectTask buildTask = (BuildProjectTask) currentBuilds.get( key );
+                currentBuildProjectTasks.put( key, buildTask );
+            }
+        }
+        catch ( BuildManagerException e )
         {
-            BuildProjectTask buildTask = (BuildProjectTask) task;
-            this.currentBuildProjectTasks.add( buildTask );
+            addActionError( e.getMessage() );
+            return ERROR;
         }
         
-        // queued builds
-        Map<String, List<Task>> builds = getContinuum().getBuildsManager().getProjectsInBuildQueues();
-        Set<String> keySet = builds.keySet(); 
-        List<BuildProjectTask> buildTasks = new ArrayList<BuildProjectTask>();
-        for( String key : keySet )
+        try
         {
-            for( Task task : builds.get( key ) )
+            // queued builds
+            Map<String, List<Task>> builds = getContinuum().getBuildsManager().getProjectsInBuildQueues();
+            Set<String> keySet = builds.keySet(); 
+            List<BuildProjectTask> buildTasks = new ArrayList<BuildProjectTask>();
+            for( String key : keySet )
             {
-                BuildProjectTask buildTask = (BuildProjectTask) task;
-                buildTasks.add( buildTask ); 
+                for( Task task : builds.get( key ) )
+                {
+                    BuildProjectTask buildTask = (BuildProjectTask) task;
+                    buildTasks.add( buildTask ); 
+                }
+                buildsInQueue.put( key, buildTasks );
             }
-            buildsInQueue.put( key, buildTasks );
+        }
+        catch ( BuildManagerException e )
+        {
+            addActionError( e.getMessage() );
+            return ERROR;
         }
         
-        // current checkouts
-        for( Task task : getContinuum().getBuildsManager().getCurrentCheckouts() )
+        try
         {
-            CheckOutTask checkoutTask = (CheckOutTask) task;
-            this.currentCheckOutTasks.add( checkoutTask );
+            // current checkouts
+            Map<String, Task> currentCheckouts = getContinuum().getBuildsManager().getCurrentCheckouts();
+            Set<String> keySet = currentCheckouts.keySet();
+            for( String key : keySet )
+            {
+                CheckOutTask checkoutTask = (CheckOutTask) currentCheckouts.get( key );
+                currentCheckoutTasks.put( key, checkoutTask );
+            }
+        }
+        catch ( BuildManagerException e )
+        {
+            addActionError( e.getMessage() );
+            return ERROR;
         }
         
-        // queued checkouts
-        Map<String, List<Task>> checkouts = getContinuum().getBuildsManager().getProjectsInCheckoutQueues();
-        keySet = builds.keySet(); 
-        List<CheckOutTask> checkoutTasks = new ArrayList<CheckOutTask>();
-        for( String key : keySet )
+        try
         {
-            for( Task task : checkouts.get( key ) )
+            // queued checkouts
+            Map<String, List<Task>> checkouts = getContinuum().getBuildsManager().getProjectsInCheckoutQueues();
+            Set<String> keySet = checkouts.keySet(); 
+            List<CheckOutTask> checkoutTasks = new ArrayList<CheckOutTask>();
+            for( String key : keySet )
             {
-                CheckOutTask checkoutTask = (CheckOutTask) task;
-                checkoutTasks.add( checkoutTask ); 
+                for( Task task : checkouts.get( key ) )
+                {
+                    CheckOutTask checkoutTask = (CheckOutTask) task;
+                    checkoutTasks.add( checkoutTask ); 
+                }
+                checkoutsInQueue.put( key, checkoutTasks );
             }
-            checkoutsInQueue.put( key, checkoutTasks );
+        }
+        catch ( BuildManagerException e )
+        {
+            addActionError( e.getMessage() );
+            return ERROR;
         }
         
         return SUCCESS;
@@ -316,12 +356,14 @@
     
     private boolean cancelCheckout(int projectId)
         throws BuildManagerException
-    {
-        List<Task> tasks = getContinuum().getBuildsManager().getCurrentCheckouts();
+    {   
+        Map<String, Task> tasks = getContinuum().getBuildsManager().getCurrentCheckouts();
         if( tasks != null )
-        {        
-            for( Task task : tasks )
+        {  
+            Set<String> keySet = tasks.keySet();
+            for( String key : keySet )
             {
+                Task task = tasks.get( key );
                 if( task != null && task instanceof CheckOutTask )                    
                 {
                     if ( ( (CheckOutTask) task ).getProjectId() == projectId )
@@ -343,28 +385,6 @@
             getLogger().warn( "No task running - not cancelling checkout" );
         }
         
-        /*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" );
-            }
-        }*/
-        
         return false;
     }
     
@@ -490,13 +510,54 @@
         this.selectedCheckOutTaskHashCodes = selectedCheckOutTaskHashCodes;
     }
 
-    public List<BuildProjectTask> getCurrentBuildProjectTasks()
+    public Map<String, BuildProjectTask> getCurrentBuildProjectTasks()
     {
         return currentBuildProjectTasks;
     }
 
-    public void setCurrentBuildProjectTasks( List<BuildProjectTask> currentBuildProjectTasks )
+    public void setCurrentBuildProjectTasks( Map<String, BuildProjectTask> currentBuildProjectTasks )
     {
         this.currentBuildProjectTasks = currentBuildProjectTasks;
     }
+
+    public Map<String, CheckOutTask> getCurrentCheckoutTasks()
+    {
+        return currentCheckoutTasks;
+    }
+
+    public void setCurrentCheckoutTasks( Map<String, CheckOutTask> currentCheckoutTasks )
+    {
+        this.currentCheckoutTasks = currentCheckoutTasks;
+    }
+
+    public Map<String, List<BuildProjectTask>> getBuildsInQueue()
+    {
+        return buildsInQueue;
+    }
+
+    public void setBuildsInQueue( Map<String, List<BuildProjectTask>> buildsInQueue )
+    {
+        this.buildsInQueue = buildsInQueue;
+    }
+
+    public Map<String, List<CheckOutTask>> getCheckoutsInQueue()
+    {
+        return checkoutsInQueue;
+    }
+
+    public void setCheckoutsInQueue( Map<String, List<CheckOutTask>> checkoutsInQueue )
+    {
+        this.checkoutsInQueue = checkoutsInQueue;
+    }
+
+
+    /*public List<BuildProjectTask> getCurrentBuildProjectTasks()
+    {
+        return currentBuildProjectTasks;
+    }
+
+    public void setCurrentBuildProjectTasks( List<BuildProjectTask> currentBuildProjectTasks )
+    {
+        this.currentBuildProjectTasks = currentBuildProjectTasks;
+    }*/
 }

Modified: continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=727345&r1=727344&r2=727345&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/resources/localization/Continuum.properties Wed Dec 17 03:31:21 2008
@@ -803,11 +803,13 @@
 buildQueue.section.title = Continuum - Build Queue
 buildQueue.empty = Build Queue is empty
 buildQueue.currentTask.section.title = Current Build
+buildQueue.currentTask.buildQueue = Build Queue
 buildQueue.currentTask.projectName = Project Name
 buildQueue.currentTask.buildDefinition = Build Definition
 buildQueue.no.currentTaks = Nothing is building
 buildQueue.removeEntries = Cancel Entries
 checkoutQueue.currentTask.section.title = Current Checkout
+checkoutQueue.currentTask.buildQueue = Build Queue
 checkoutQueue.currentTask.projectName = Project Name
 checkoutQueue.no.currentTaks = No current checkout
 checkoutQueue.section.title = Checkout Queue

Modified: continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp?rev=727345&r1=727344&r2=727345&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp (original)
+++ continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/buildQueueView.jsp Wed Dec 17 03:31:21 2008
@@ -36,41 +36,51 @@
             <s:text name="buildQueue.currentTask.section.title"/>
           </h3>  
           <table width="100%">
-            <s:if test="%{currentBuildProjectTask != null}">
+            <s:if test="%{currentBuildProjectTasks != null}">
             <tbody>
               <tr>
+                <th><s:text name="buildQueue.currentTask.buildQueue"/></th>
                 <th><s:text name="buildQueue.currentTask.projectName"/></th>
                 <th><s:text name="buildQueue.currentTask.buildDefinition"/></th>
                 <th>&nbsp;</th>
               </tr>
-              <tr>
-                <td width="50%"><s:property value="currentBuildProjectTask.projectName"/></td>
-                <td width="49%"><s:property value="currentBuildProjectTask.buildDefinitionLabel"/></td>
-                <td width="1%">
-                <redback:ifAuthorized permission="continuum-manage-queues">
-                  <s:url id="cancelUrl" action="cancelCurrentBuildTask" method="cancelCurrent" namespace="/">
-                    <s:param name="projectId"><s:property value="currentBuildProjectTask.projectId"/></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>
-                </td>
-              </tr>
+              <%-- //deng - TODO: loop through each of the current tasks --%>
+              <c:forEach var="element" items="${currentBuildProjectTasks}">
+                <tr>              
+                  <td width="20%">${element.key}</td> 
+                  <td width="50%">${element.value.projectName}</td>
+                  <td width="29%">${element.value.buildDefinitionLabel}</td>
+                  <td width="1%">
+                    <redback:ifAuthorized permission="continuum-manage-queues">
+                      <s:url id="cancelUrl" action="cancelCurrentBuildTask" method="cancelCurrent" namespace="/">
+                        <s:param name="projectId">${element.value.projectId}</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>
+                  </td>
+                </tr>
+              </c:forEach>
             </tbody>
             </s:if>
             <s:else>
               <s:text name="buildQueue.no.currentTaks" />
             </s:else>
           </table>
-        </div>    
+        </div>  
+        
+        <%-- deng - parallel builds
+        TODO: might need to loop through each element of map (each returns a list) 
+        
+          
         <div id="h3">
           <h3>
             <s:text name="buildQueue.section.title"/>
           </h3>  
-            <c:if test="${not empty buildProjectTasks}">
-              <ec:table items="buildProjectTasks"
+            <c:if test="${not empty buildsInQueue}">
+              <ec:table items="buildsInQueue.values"
                         var="buildProjectTask"
                         showExports="false"
                         showPagination="false"
@@ -102,11 +112,11 @@
                 </ec:row>
               </ec:table>
             </c:if>
-            <c:if test="${empty buildProjectTasks}">
+            <c:if test="${empty buildsInQueue}">
               <s:text name="buildQueue.empty"/>
             </c:if>
         </div>
-        <c:if test="${not empty buildProjectTasks}">
+        <c:if test="${not empty buildsInQueue}">
           <div class="functnbar3">
             <table>
               <tbody>
@@ -122,32 +132,39 @@
         </c:if>
         
         
+        END OF COMMENT --%>
+        
+        
         <!-- checkout queue -->
         <div id="h3">
           <h3>
             <s:text name="checkoutQueue.currentTask.section.title"/>
           </h3>  
           <table width="100%">
-            <s:if test="%{currentCheckOutTask != null}">
+            <s:if test="%{currentCheckoutTasks != null}">
             <tbody>
               <tr>
+                <th><s:text name="checkoutQueue.currentTask.buildQueue"/></th>
                 <th><s:text name="checkoutQueue.currentTask.projectName"/></th>
                 <th>&nbsp;</th>
               </tr>
-              <tr>
-                <td width="99%"><s:property value="currentCheckOutTask.projectName"/></td>
-                <td width="1%">
-                <redback:ifAuthorized permission="continuum-manage-queues">
-                  <s:url id="cancelUrl" action="cancelCurrentQueueTask" method="cancelCurrentCheckout" namespace="/">
-                    <s:param name="projectId"><s:property value="currentCheckOutTask.projectId"/></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>              
-                </td>
-              </tr>
+              <c:forEach var="element" items="${currentCheckoutTasks}">
+                <tr>
+                  <td width="30%">${element.key}</td>
+                  <td width="69%">${element.value.projectName}</td>
+                  <td width="1%">
+                  <redback:ifAuthorized permission="continuum-manage-queues">
+                    <s:url id="cancelUrl" action="cancelCurrentQueueTask" method="cancelCurrentCheckout" namespace="/">
+                      <s:param name="projectId">${element.value.projectId}</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>              
+                  </td>
+                </tr>
+              </c:forEach>
             </tbody>
             </s:if>
             <s:else>
@@ -155,12 +172,17 @@
             </s:else>
           </table>
         </div>    
+        
+        <%-- deng - parallel builds 
+        TODO: might need to loop through each element of map (each returns a list) 
+        
+        
         <div id="h3">
           <h3>
             <s:text name="checkoutQueue.section.title"/>
           </h3>  
-            <c:if test="${!empty currentCheckOutTasks}">
-              <ec:table items="currentCheckOutTasks"
+            <c:if test="${!empty checkoutsInQueue}">              
+              <ec:table items="checkoutsInQueue.values"
                         var="currentCheckOutTask"
                         showExports="false"
                         showPagination="false"
@@ -208,6 +230,9 @@
             </table>
           </div>
         </c:if>
+        
+        END OF COMMENT --%>
+        
       </s:form>
     </body>
   </s:i18n>