Modified: 
manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/queuestatus.jsp
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/queuestatus.jsp?rev=1684303&r1=1684302&r2=1684303&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/queuestatus.jsp
 (original)
+++ 
manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/queuestatus.jsp
 Tue Jun  9 01:30:36 2015
@@ -2,629 +2,629 @@
 
 <%
 
-/* $Id$ */
+  /* $Id$ */
 
 /**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-* 
-* http://www.apache.org/licenses/LICENSE-2.0
-* 
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-boolean maintenanceUnderway = 
org.apache.manifoldcf.crawler.system.ManifoldCF.checkMaintenanceUnderway();
-
-%>
-
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html>
-<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-<head>
-       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-       <link rel="StyleSheet" href="style.css" type="text/css" media="screen"/>
-       <title>
-               
<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.ApacheManifoldCFQueueStatus")%>
-       </title>
-
-       <script type="text/javascript">
-       <!--
-
-       function Go()
-       {
-               if (report.statusbucketdesc.value == "")
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionCannotBeEmpty")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (!isRegularExpression(report.statusbucketdesc.value))
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustBeAValidRegularExpression")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (report.statusbucketdesc.value.indexOf("(") == -1 || 
report.statusbucketdesc.value.indexOf(")") == -1)
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustDelimitAClassWithParentheses")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (!isInteger(report.rowcount.value))
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.EnterALegalNumberForRowsPerPage")%>");
-                       report.rowcount.focus();
-                       return;
-               }
-               if (!isRegularExpression(report.statusidentifiermatch.value))
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierMatchMustBeAValidRegularExpression")%>");
-                       report.statusidentifiermatch.focus();
-                       return;
-               }
-               
-               document.report.op.value="Status";
-               document.report.action = document.report.action + "#MainButton";
-               document.report.submit();
-       }
-
-       function Continue()
-       {
-               if (report.statusbucketdesc.value == "")
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionCannotBeEmpty")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (!isRegularExpression(report.statusbucketdesc.value))
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustBeAValidRegularExpression")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (report.statusbucketdesc.value.indexOf("(") == -1 || 
report.statusbucketdesc.value.indexOf(")") == -1)
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustDelimitAClassWithParentheses")%>");
-                       report.statusbucketdesc.focus();
-                       return;
-               }
-               if (!isRegularExpression(report.statusidentifiermatch.value))
-               {
-                       
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierMatchMustBeAValidRegularExpression")%>");
-                       report.statusidentifiermatch.focus();
-                       return;
-               }
-               document.report.op.value="Continue";
-               document.report.action = document.report.action + "#MainButton";
-               document.report.submit();
-       }
-
-       function ColumnClick(colname)
-       {
-               document.report.clickcolumn.value = colname;
-               Go();
-       }
-
-       function SetPosition(amt)
-       {
-               if (amt < 0)
-                       amt = 0;
-               document.report.startrow.value = amt;
-               Go();
-       }
-
-       function isRegularExpression(value)
-       {
-               try
-               {
-                       var foo = "teststring";
-                        foo.search(value.replace(/\(\?i\)/,""));
-                       return true;
-               }
-               catch (e)
-               {
-                       return false;
-               }
-
-       }
-
-       function isInteger(value)
-       {
-               var anum=/(^\d+$)/;
-               return anum.test(value);
-       }
-
-       //-->
-       </script>
-
-
-</head>
-
-<body class="standardbody">
-
-    <table class="page">
-      <tr><td colspan="2" class="banner"><jsp:include page="banner.jsp" 
flush="true"/></td></tr>
-      <tr><td class="navigation"><jsp:include page="navigation.jsp" 
flush="true"/></td>
-       <td class="window">
-       <p 
class="windowtitle"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.QueueStatus")%></p>
-<%
-if (maintenanceUnderway == false)
-{
-       int k;
-
-       // Read the document selection parameters.
-       
-       // The status report is connection based, so the connection has to be 
selected before anything else makes sense.
-       String statusConnection = 
variableContext.getParameter("statusconnection");
-       if (statusConnection == null)
-               statusConnection = "";
-       
-       // Which jobs we care about also figure in the selection part of the 
query.  It is the user's responsibility to pick jobs
-       // that are in desired states.
-       String[] statusJobIdentifiers = 
variableContext.getParameterValues("statusjobs");
-       if (statusJobIdentifiers == null)
-               statusJobIdentifiers = new String[0];
-
-       // We can select documents from the queue based on the earliest time 
they can be acted upon.  This is specified in
-       // a delta in minutes offset from "now".  Empty means that we don't 
want to select on that criteria.
-       String activeTimeOffsetMinutes = 
variableContext.getParameter("statusscheduleoffset");
-       if (activeTimeOffsetMinutes == null)
-               activeTimeOffsetMinutes = "";
-       
-       // There is a selection criteria also based on the document state; 
these are integers defined in IJobManager.
-       String[] documentStateTypes;
-       if (variableContext.getParameter("statusdocumentstates_posted") != null)
-       {
-               documentStateTypes = 
variableContext.getParameterValues("statusdocumentstates");
-               if (documentStateTypes == null)
-                       documentStateTypes = new String[0];
-       }
-       else
-               documentStateTypes = null;
-       
-       // There is a selection criteria based on the document status; these 
are also integers defined in IJobManager.
-       String[] documentStatusTypes;
-       if (variableContext.getParameter("statusdocumentstatuses_posted") != 
null)
-       {
-               documentStatusTypes = 
variableContext.getParameterValues("statusdocumentstatuses");
-               if (documentStatusTypes == null)
-                       documentStatusTypes = new String[0];
-       }
-       else
-               documentStatusTypes = null;
-
-       // Match string for the document identifier
-       String identifierMatch = 
variableContext.getParameter("statusidentifiermatch");
-       if (identifierMatch == null)
-               identifierMatch = "";
-
-       String statusBucketDesc = 
variableContext.getParameter("statusbucketdesc");
-       if (statusBucketDesc == null)
-               statusBucketDesc = "(.*)";
-
-       // From the passed-in selection values, calculate the actual selection 
criteria that we'll use in the queries.
-       IRepositoryConnectionManager connMgr = 
RepositoryConnectionManagerFactory.make(threadContext);
-       IRepositoryConnection[] connList = connMgr.getAllConnections();
-       
-       IJobManager jobManager = JobManagerFactory.make(threadContext);
-
-       // Repository connection name: This simply needs to be mapped to an 
eligible list of identifiers.
-       IJobDescription[] eligibleList = null;
-       HashMap selectedJobs = null;
-       if (statusConnection.length() > 0)
-       {
-               eligibleList = 
jobManager.findJobsForConnection(statusConnection);
-               selectedJobs = new HashMap();
-               k = 0;
-               while (k < statusJobIdentifiers.length)
-               {
-                       Long identifier = new Long(statusJobIdentifiers[k++]);
-                       selectedJobs.put(identifier,identifier);
-               }
-       }
-       
-       // Time offset: Need to calculate the actual time in ms since epoch to 
use to query against the "checktime" field.
-       // Note that the checktime field is actually nullable and will only 
have a value when the document is in certain states;
-       // therefore, the query itself will only include checktime for those 
states where it makes sense.  An empty value
-       // means "from the beginning of time", or is equivalent to time 0.
-       long nowTime = 0L;
-       if (activeTimeOffsetMinutes.length() > 0)
-       {
-               nowTime = System.currentTimeMillis() + (new 
Long(activeTimeOffsetMinutes).longValue()) * 60000L;
-               if (nowTime < 0L)
-                       nowTime = 0L;
-       }
-       else
-               nowTime = System.currentTimeMillis();
-
-       // Translate the states from a string to a number that will be 
understood by IJobManager.
-       int[] matchingStates;
-       if (documentStateTypes == null)
-       {
-               matchingStates = new 
int[]{IJobManager.DOCSTATE_NEVERPROCESSED,IJobManager.DOCSTATE_PREVIOUSLYPROCESSED,IJobManager.DOCSTATE_OUTOFSCOPE};
-       }
-       else
-       {
-               matchingStates = new int[documentStateTypes.length];
-               k = 0;
-               while (k < matchingStates.length)
-               {
-                       matchingStates[k] = new 
Integer(documentStateTypes[k]).intValue();
-                       k++;
-               }
-       }
-       HashMap matchingStatesHash = new HashMap();
-       k = 0;
-       while (k < matchingStates.length)
-       {
-               Integer state = new Integer(matchingStates[k++]);
-               matchingStatesHash.put(state,state);
-       }
-       
-       // Convert the status from a string to a number that will be understood 
by IJobManager
-       int[] matchingStatuses;
-       if (documentStatusTypes == null)
-       {
-               matchingStatuses = new 
int[]{IJobManager.DOCSTATUS_INACTIVE,IJobManager.DOCSTATUS_PROCESSING,IJobManager.DOCSTATUS_EXPIRING,
-                       
IJobManager.DOCSTATUS_DELETING,IJobManager.DOCSTATUS_READYFORPROCESSING,IJobManager.DOCSTATUS_READYFOREXPIRATION,
-                       
IJobManager.DOCSTATUS_WAITINGFORPROCESSING,IJobManager.DOCSTATUS_WAITINGFOREXPIRATION,IJobManager.DOCSTATUS_WAITINGFOREVER,
-                       IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED};
-       }
-       else
-       {
-               matchingStatuses = new int[documentStatusTypes.length];
-               k = 0;
-               while (k < matchingStatuses.length)
-               {
-                       matchingStatuses[k] = new 
Integer(documentStatusTypes[k]).intValue();
-                       k++;
-               }
-       }
-       HashMap matchingStatusesHash = new HashMap();
-       k = 0;
-       while (k < matchingStatuses.length)
-       {
-               Integer status = new Integer(matchingStatuses[k++]);
-               matchingStatusesHash.put(status,status);
-       }
-       
-%>
-       <form class="standardform" name="report" action="execute.jsp" 
method="POST">
-               <input type="hidden" name="op" value="Continue"/>
-               <input type="hidden" name="type" value="queuestatus"/>
-               <table class="displaytable">
-                       <tr>
-                               <td class="separator" colspan="4"><hr/></td>
-                       </tr>
-                       <tr>
-                               <td class="description" 
colspan="1"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Connection")%></td><td
 class="value" colspan="1">
-                                       <select name="statusconnection" 
size="3">
-                                               <option 
<%=(statusConnection.length()==0)?"selected=\"selected\"":""%> value="">-- 
<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.NotSpecified")%>
 --</option>
-<%
-       int i = 0;
-       while (i < connList.length)
-       {
-               IRepositoryConnection conn = connList[i++];
-               String thisConnectionName = conn.getName();
-               String thisDescription = conn.getDescription();
-               if (thisDescription == null || thisDescription.length() == 0)
-                       thisDescription = thisConnectionName;
-%>
-                                               <option 
<%=(thisConnectionName.equals(statusConnection))?"selected=\"selected\"":""%> 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(thisConnectionName)%>'><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(thisDescription)%></option>
-<%
-       }
-%>
-                                       </select>
-                               </td>
-<%
-       if (eligibleList != null)
-       {
-%>
-                               <td class="description" 
colspan="1"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Jobs")%></td><td
 class="value" colspan="1">
-                                       <select multiple="true" 
name="statusjobs" size="3">
-<%
-           i = 0;
-           while (i < eligibleList.length)
-           {
-               IJobDescription job = eligibleList[i++];
-               String description = job.getDescription();
-               Long identifier = job.getID();
-%>
-                                               <option 
<%=((selectedJobs.get(identifier)==null)?"":"selected=\"selected\"")%> 
value='<%=identifier.toString()%>'><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)%></option>
-<%
-           }
-%>
-                                       </select>
-                               </td>
-<%
-       }
-       else
-       {
-%>
-                               <td class="value" colspan="2"></td>
-<%
-       }
-%>
-
-                       </tr>
-                       <tr>
-                               <td class="separator" colspan="4"><hr/></td>
-                       </tr>
-                       <tr>
-                               <td 
class="description"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.TimeOffsetFromNowMinutes")%></td>
-                               <td class="value" colspan="3">
-                                       <input name="statusscheduleoffset" 
type="text" size="6" value=""/>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td 
class="description"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentState")%></td>
-                               <td class="value" colspan="3">
-                                       <input 
name="statusdocumentstates_posted" type="hidden" value="true"/>
-                                       <select name="statusdocumentstates" 
multiple="true" size="3">
-                                               <option 
<%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_NEVERPROCESSED))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATE_NEVERPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsThatHaveNeverBeenProcessed")%></option>
-                                               <option 
<%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsProcessedAtLeastOnce")%></option>
-                                               <option 
<%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_OUTOFSCOPE))==null)?"":"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATE_OUTOFSCOPE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsOutOfScope")%></option>
-                                       </select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td 
class="description"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentState")%></td>
-                               <td class="value" colspan="3">
-                                       <input 
name="statusdocumentstatuses_posted" type="hidden" value="true"/>
-                                       <select name="statusdocumentstatuses" 
multiple="true" size="3">
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_INACTIVE))==null)?"":"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_INACTIVE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsThatAreNoLongerActive")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_PROCESSING))==null)?"":"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_PROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsCurrentlyInProgress")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_EXPIRING))==null)?"":"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_EXPIRING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsCurrentlyBeingExpired")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_DELETING))==null)?"":"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_DELETING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsCurrentlyBeingDeleted")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_READYFORPROCESSING))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsCurrentlyAvailableForProcessing")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_READYFOREXPIRATION))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsCurrentlyAvailableForExpiration")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFORPROCESSING))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsNotYetProcessable")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsNotYetExpirable")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFOREVER))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREVER)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsWaitingForever")%></option>
-                                               <option 
<%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED))==null)?"":"selected=\"selected\"")%>
 
value='<%=Integer.toString(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentsHopcountExceeded")%></option>
-                                       </select>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class="separator" colspan="4"><hr/></td>
-                       </tr>
-                       <tr>
-                               <td 
class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.DocumentIdentifierMatch")%></nobr></td>
-                               <td class="value" colspan="3"><input 
type="text" name="statusidentifiermatch" size="40" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(identifierMatch)%>'/></td>
-                       </tr>
-                       <tr>
-                               <td 
class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescription")%></nobr></td>
-                               <td class="value" colspan="3"><input 
type="text" name="statusbucketdesc" size="40" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(statusBucketDesc)%>'/></td>
-                       </tr>
-                       <tr>
-                               <td class="separator" colspan="4"><hr/></td>
-                       </tr>
-                       <tr>
-                               <td class="message" colspan="4">
-<%
-       if (statusConnection.length() > 0 && statusJobIdentifiers.length > 0)
-       {
-%>
-                                       <a name="MainButton"><input 
type="button" 
value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Go")%>"
 onClick="javascript:Go()" 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.ExecuteThisQuery")%>"/></a>
-<%
-       }
-       else
-       {
-%>
-                                       <a name="MainButton"><input 
type="button" 
value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Continue")%>"
 onClick="javascript:Continue()" 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Continue")%>"/></a>
-<%
-       }
-%>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class="separator" colspan="4"><hr/></td>
-                       </tr>
-
-               </table>
-<%
-       if (statusConnection.length() > 0)
-       {
-           if (statusJobIdentifiers.length > 0)
-           {
-               // Run the report.
-
-               // First, we need to gather the sort order object.
-               String sortOrderString = 
variableContext.getParameter("sortorder");
-               SortOrder sortOrder;
-               if (sortOrderString == null || sortOrderString.length() == 0)
-                       sortOrder = new SortOrder();
-               else
-                       sortOrder = new SortOrder(sortOrderString);
-
-               // Now, gather the column header that was clicked on (if any)
-               String clickedColumn = 
variableContext.getParameter("clickcolumn");
-               if (clickedColumn != null && clickedColumn.length() > 0)
-                       sortOrder.clickColumn(clickedColumn);
-
-               // Gather the start
-               String startRowString = 
variableContext.getParameter("startrow");
-               int startRow = 0;
-               if (startRowString != null && startRowString.length() > 0)
-                       startRow = Integer.parseInt(startRowString);
-
-               // Gather the max
-               String maxRowCountString = 
variableContext.getParameter("rowcount");
-               int rowCount = 20;
-               if (maxRowCountString != null && maxRowCountString.length() > 0)
-                       rowCount = Integer.parseInt(maxRowCountString);
-
-               Long[] ourJobs = new Long[selectedJobs.size()];
-               Iterator iter = selectedJobs.keySet().iterator();
-               int zz = 0;
-               while (iter.hasNext())
-               {
-                       ourJobs[zz++] = (Long)iter.next();
-               }
-
-               RegExpCriteria identifierMatchObject = null;
-               if (identifierMatch.length() > 0)
-                       identifierMatchObject = new 
RegExpCriteria(identifierMatch,true);
-               StatusFilterCriteria criteria = new 
StatusFilterCriteria(ourJobs,nowTime,identifierMatchObject,matchingStates,matchingStatuses);
-
-               BucketDescription idBucket = new 
BucketDescription(statusBucketDesc,false);
-               IResultSet set = 
jobManager.genQueueStatus(statusConnection,criteria,sortOrder,idBucket,startRow,rowCount+1);
-
-%>
-               <input type="hidden" name="clickcolumn" value=""/>
-               <input type="hidden" name="startrow" 
value='<%=Integer.toString(startRow)%>'/>
-               <input type="hidden" name="sortorder" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sortOrder.toString())%>'/>
-
-               <table class="displaytable">
-                   <tr class="headerrow">
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("idbucket");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClass")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("inactive");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Inactive")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("processing");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Processing")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("expiring");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Expiring")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("deleting");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Deleting")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("processready");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.AboutToProcess")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("expireready");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.AboutToExpire")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("processwaiting");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.WaitingForProcessing")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("expirewaiting");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.WaitingForExpiration")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("waitingforever");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.WaitingForever")%></nobr></a></td>
-                       <td class="reportcolumnheader"><a 
href="javascript:void(0);" 
onclick='javascript:ColumnClick("hopcountexceeded");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.HopcountExceeded")%></nobr></a></td>
-                   </tr>
-<%
-               zz = 0;
-               boolean hasMoreRows = (set.getRowCount() > rowCount);
-               int iterCount = hasMoreRows?rowCount:set.getRowCount();
-               while (zz < iterCount)
-               {
-                   IResultRow row = set.getRow(zz);
-                   
-                   // Translate column values into something that can be 
reasonably displayed.
-                   // Note that the actual hard work of translating things to 
human-readable strings largely is done by the query itself; this is because
-                   // we want to sort on the columns, so it has to be that way.
-
-                   String idBucketValue = (String)row.getValue("idbucket");
-                   if (idBucketValue == null)
-                       idBucketValue = "";
-                   String[] identifierBreakdown = 
org.apache.manifoldcf.ui.util.Formatter.formatString(idBucketValue,64,true,true);
-                       
-%>
-                   <tr 
<%="class=\""+((zz%2==0)?"evendatarow":"odddatarow")+"\""%>>
-                       <td class="reportcolumncell">
-<%
-                   int q = 0;
-                   while (q < identifierBreakdown.length)
-                   {
-%>
-                               
<nobr><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(identifierBreakdown[q++])%></nobr><br/>
-<%
-                   }
-%>
-                       </td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("inactive").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processing").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expiring").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("deleting").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processready").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expireready").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processwaiting").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expirewaiting").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("waitingforever").toString())%></td>
-                       <td 
class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("hopcountexceeded").toString())%></td>
-                   </tr>
-<%
-                       zz++;
-               }
-%>
-               </table>
-               <table class="reportfootertable">
-                   <tr class="reportfooterrow">
-                       <td class="reportfootercell">
-                               <nobr>
-<%
-               if (startRow == 0)
-               {
-%>
-                                       
<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Previous")%>
-<%
-               }
-               else
-               {
-%>
-                                       <a href="javascript:void(0);" 
onclick='<%="javascript:SetPosition("+Integer.toString(startRow-rowCount)+");"%>'
 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.PreviousPage")%>"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Previous")%></a>
-<%
-               }
-%>
-                               </nobr>
-                               <nobr>
-<%
-               if (hasMoreRows == false)
-               {
-%>
-                                       
<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Next")%>
-<%
-               }
-               else
-               {
-%>
-                                       <a href="javascript:void(0);" 
onclick='<%="javascript:SetPosition("+Integer.toString(startRow+rowCount)+");"%>'
 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.NextPage")%>"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Next")%></a>
-<%
-               }
-%>
-                               </nobr>
-                       </td>
-                       <td class="reportfootercell">
-                               
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.Rows")%></nobr>
-                               
<nobr><%=Integer.toString(startRow)%>-<%=(hasMoreRows?Integer.toString(startRow+rowCount-1):"END")%></nobr>
-                       </td>
-                       <td class="reportfootercell">
-                               
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.RowsPerPage")%></nobr>
-                               <nobr><input type="text" name="rowcount" 
size="5" value='<%=Integer.toString(rowCount)%>'/></nobr>
-                       </td>
-                   </tr>
-               </table>
-
-<%
-           }
-           else
-           {
-%>
-               <table class="displaytable"><tr><td 
class="message"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.PleaseSelectAtLeastOneJob")%></td></tr></table>
-<%
-           }
-       }
-       else
-       {
-%>
-               <table class="displaytable"><tr><td 
class="message"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.PleaseSelectaConnection")%></td></tr></table>
-<%
-       }
-%>
-       </form>
-<%
-}
-else
-{
-%>
-               <table class="displaytable">
-                       <tr><td class="separator" colspan="1"><hr/></td></tr>
-                       <tr><td 
class="message"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.PleaseTryAgainLater")%></td></tr>
-               </table>
-<%
-}
-%>
-
-       </td>
-      </tr>
-    </table>
-
-</body>
-
-</html>
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+  boolean maintenanceUnderway = 
org.apache.manifoldcf.crawler.system.ManifoldCF.checkMaintenanceUnderway();
+
+%>
+<script type="text/javascript">
+  <!--
+  
$.ManifoldCF.setTitle('<%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.ApacheManifoldCFQueueStatus")%>',
+      
'<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"queuestatus.QueueStatus")%>',
+      'statusReports'
+  );
+  function Go() {
+    if (report.statusbucketdesc.value == "") {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionCannotBeEmpty")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (!isRegularExpression(report.statusbucketdesc.value)) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustBeAValidRegularExpression")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (report.statusbucketdesc.value.indexOf("(") == -1 || 
report.statusbucketdesc.value.indexOf(")") == -1) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustDelimitAClassWithParentheses")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (!isInteger(report.rowcount.value)) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.EnterALegalNumberForRowsPerPage")%>");
+      report.rowcount.focus();
+      return;
+    }
+    if (!isRegularExpression(report.statusidentifiermatch.value)) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierMatchMustBeAValidRegularExpression")%>");
+      report.statusidentifiermatch.focus();
+      return;
+    }
+
+    document.report.op.value = "Status";
+    document.report.action = document.report.action + "#MainButton";
+    $.ManifoldCF.submit(document.report);
+    //document.report.submit();
+  }
+
+  function Continue() {
+    if (report.statusbucketdesc.value == "") {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionCannotBeEmpty")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (!isRegularExpression(report.statusbucketdesc.value)) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustBeAValidRegularExpression")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (report.statusbucketdesc.value.indexOf("(") == -1 || 
report.statusbucketdesc.value.indexOf(")") == -1) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierClassDescriptionMustDelimitAClassWithParentheses")%>");
+      report.statusbucketdesc.focus();
+      return;
+    }
+    if (!isRegularExpression(report.statusidentifiermatch.value)) {
+      
alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"queuestatus.IdentifierMatchMustBeAValidRegularExpression")%>");
+      report.statusidentifiermatch.focus();
+      return;
+    }
+    document.report.op.value = "Continue";
+    document.report.action = document.report.action + "#MainButton";
+    $.ManifoldCF.submit(document.report);
+    //document.report.submit();
+  }
+
+  function ColumnClick(colname) {
+    document.report.clickcolumn.value = colname;
+    Go();
+  }
+
+  function SetPosition(amt) {
+    if (amt < 0)
+      amt = 0;
+    document.report.startrow.value = amt;
+    Go();
+  }
+
+  function isRegularExpression(value) {
+    try {
+      var foo = "teststring";
+      foo.search(value.replace(/\(\?i\)/, ""));
+      return true;
+    }
+    catch (e) {
+      return false;
+    }
+
+  }
+
+  function isInteger(value) {
+    var anum = /(^\d+$)/;
+    return anum.test(value);
+  }
+
+  $(function () {
+    $('.selectpicker').selectpicker();
+  });
+
+  //-->
+</script>
+
+
+<div class="row">
+  <div class="col-md-12">
+
+    <%
+      if (maintenanceUnderway == false) {
+        int k;
+
+        // Read the document selection parameters.
+
+        // The status report is connection based, so the connection has to be 
selected before anything else makes sense.
+        String statusConnection = 
variableContext.getParameter("statusconnection");
+        if (statusConnection == null)
+          statusConnection = "";
+
+        // Which jobs we care about also figure in the selection part of the 
query.  It is the user's responsibility to pick jobs
+        // that are in desired states.
+        String[] statusJobIdentifiers = 
variableContext.getParameterValues("statusjobs");
+        if (statusJobIdentifiers == null)
+          statusJobIdentifiers = new String[0];
+
+        // We can select documents from the queue based on the earliest time 
they can be acted upon.  This is specified in
+        // a delta in minutes offset from "now".  Empty means that we don't 
want to select on that criteria.
+        String activeTimeOffsetMinutes = 
variableContext.getParameter("statusscheduleoffset");
+        if (activeTimeOffsetMinutes == null)
+          activeTimeOffsetMinutes = "";
+
+        // There is a selection criteria also based on the document state; 
these are integers defined in IJobManager.
+        String[] documentStateTypes;
+        if (variableContext.getParameter("statusdocumentstates_posted") != 
null) {
+          documentStateTypes = 
variableContext.getParameterValues("statusdocumentstates");
+          if (documentStateTypes == null)
+            documentStateTypes = new String[0];
+        } else
+          documentStateTypes = null;
+
+        // There is a selection criteria based on the document status; these 
are also integers defined in IJobManager.
+        String[] documentStatusTypes;
+        if (variableContext.getParameter("statusdocumentstatuses_posted") != 
null) {
+          documentStatusTypes = 
variableContext.getParameterValues("statusdocumentstatuses");
+          if (documentStatusTypes == null)
+            documentStatusTypes = new String[0];
+        } else
+          documentStatusTypes = null;
+
+        // Match string for the document identifier
+        String identifierMatch = 
variableContext.getParameter("statusidentifiermatch");
+        if (identifierMatch == null)
+          identifierMatch = "";
+
+        String statusBucketDesc = 
variableContext.getParameter("statusbucketdesc");
+        if (statusBucketDesc == null)
+          statusBucketDesc = "(.*)";
+
+        // From the passed-in selection values, calculate the actual selection 
criteria that we'll use in the queries.
+        IRepositoryConnectionManager connMgr = 
RepositoryConnectionManagerFactory.make(threadContext);
+        IRepositoryConnection[] connList = connMgr.getAllConnections();
+
+        IJobManager jobManager = JobManagerFactory.make(threadContext);
+
+        // Repository connection name: This simply needs to be mapped to an 
eligible list of identifiers.
+        IJobDescription[] eligibleList = null;
+        HashMap selectedJobs = null;
+        if (statusConnection.length() > 0) {
+          eligibleList = jobManager.findJobsForConnection(statusConnection);
+          selectedJobs = new HashMap();
+          k = 0;
+          while (k < statusJobIdentifiers.length) {
+            Long identifier = new Long(statusJobIdentifiers[k++]);
+            selectedJobs.put(identifier, identifier);
+          }
+        }
+
+        // Time offset: Need to calculate the actual time in ms since epoch to 
use to query against the "checktime" field.
+        // Note that the checktime field is actually nullable and will only 
have a value when the document is in certain states;
+        // therefore, the query itself will only include checktime for those 
states where it makes sense.  An empty value
+        // means "from the beginning of time", or is equivalent to time 0.
+        long nowTime = 0L;
+        if (activeTimeOffsetMinutes.length() > 0) {
+          nowTime = System.currentTimeMillis() + (new 
Long(activeTimeOffsetMinutes).longValue()) * 60000L;
+          if (nowTime < 0L)
+            nowTime = 0L;
+        } else
+          nowTime = System.currentTimeMillis();
+
+        // Translate the states from a string to a number that will be 
understood by IJobManager.
+        int[] matchingStates;
+        if (documentStateTypes == null) {
+          matchingStates = new int[]{IJobManager.DOCSTATE_NEVERPROCESSED, 
IJobManager.DOCSTATE_PREVIOUSLYPROCESSED, IJobManager.DOCSTATE_OUTOFSCOPE};
+        } else {
+          matchingStates = new int[documentStateTypes.length];
+          k = 0;
+          while (k < matchingStates.length) {
+            matchingStates[k] = new Integer(documentStateTypes[k]).intValue();
+            k++;
+          }
+        }
+        HashMap matchingStatesHash = new HashMap();
+        k = 0;
+        while (k < matchingStates.length) {
+          Integer state = new Integer(matchingStates[k++]);
+          matchingStatesHash.put(state, state);
+        }
+
+        // Convert the status from a string to a number that will be 
understood by IJobManager
+        int[] matchingStatuses;
+        if (documentStatusTypes == null) {
+          matchingStatuses = new int[]{IJobManager.DOCSTATUS_INACTIVE, 
IJobManager.DOCSTATUS_PROCESSING, IJobManager.DOCSTATUS_EXPIRING,
+              IJobManager.DOCSTATUS_DELETING, 
IJobManager.DOCSTATUS_READYFORPROCESSING, 
IJobManager.DOCSTATUS_READYFOREXPIRATION,
+              IJobManager.DOCSTATUS_WAITINGFORPROCESSING, 
IJobManager.DOCSTATUS_WAITINGFOREXPIRATION, 
IJobManager.DOCSTATUS_WAITINGFOREVER,
+              IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED};
+        } else {
+          matchingStatuses = new int[documentStatusTypes.length];
+          k = 0;
+          while (k < matchingStatuses.length) {
+            matchingStatuses[k] = new 
Integer(documentStatusTypes[k]).intValue();
+            k++;
+          }
+        }
+        HashMap matchingStatusesHash = new HashMap();
+        k = 0;
+        while (k < matchingStatuses.length) {
+          Integer status = new Integer(matchingStatuses[k++]);
+          matchingStatusesHash.put(status, status);
+        }
+
+    %>
+    <form class="standardform" name="report" action="execute.jsp" 
method="POST">
+      <input type="hidden" name="op" value="Continue"/>
+      <input type="hidden" name="type" value="queuestatus"/>
+
+      <div class="box box-primary">
+        <div class="box-body">
+          <table class="table table-bordered">
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Connection")%>
+              </th>
+              <td>
+                <select class="selectpicker" name="statusconnection">
+                  <option <%=(statusConnection.length() == 0) ? 
"selected=\"selected\"" : ""%> value="">-- 
<%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.NotSpecified")%> --</option>
+                  <%
+                    int i = 0;
+                    while (i < connList.length) {
+                      IRepositoryConnection conn = connList[i++];
+                      String thisConnectionName = conn.getName();
+                      String thisDescription = conn.getDescription();
+                      if (thisDescription == null || thisDescription.length() 
== 0)
+                        thisDescription = thisConnectionName;
+                  %>
+                  <option <%=(thisConnectionName.equals(statusConnection)) ? 
"selected=\"selected\"" : ""%> 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(thisConnectionName)%>'><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(thisDescription)%>
+                  </option>
+                  <%
+                    }
+                  %>
+                </select>
+              </td>
+              <%
+                if (eligibleList != null) {
+              %>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Jobs")%>
+              </th>
+              <th>
+                <select class="selectpicker" multiple="true" name="statusjobs">
+                  <%
+                    i = 0;
+                    while (i < eligibleList.length) {
+                      IJobDescription job = eligibleList[i++];
+                      String description = job.getDescription();
+                      Long identifier = job.getID();
+                  %>
+                  <option <%=((selectedJobs.get(identifier) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=identifier.toString()%>'><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)%>
+                  </option>
+                  <%
+                    }
+                  %>
+                </select>
+              </td>
+              <%
+              } else {
+              %>
+              <td colspan="2"></td>
+              <%
+                }
+              %>
+
+            </tr>
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.TimeOffsetFromNowMinutes")%>
+              </th>
+              <td colspan="3">
+                <input name="statusscheduleoffset" type="text" size="6" 
value=""/>
+              </td>
+            </tr>
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.DocumentState")%>
+              </th>
+              <td colspan="3">
+                <input name="statusdocumentstates_posted" type="hidden" 
value="true"/>
+                <select class="selectpicker" name="statusdocumentstates" 
multiple="true">
+                  <option <%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_NEVERPROCESSED)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATE_NEVERPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsThatHaveNeverBeenProcessed")%>
+                  </option>
+                  <option <%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsProcessedAtLeastOnce")%>
+                  </option>
+                  <option <%=((matchingStatesHash.get(new 
Integer(IJobManager.DOCSTATE_OUTOFSCOPE)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATE_OUTOFSCOPE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsOutOfScope")%>
+                  </option>
+                </select>
+              </td>
+            </tr>
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.DocumentState")%>
+              </th>
+              <td colspan="3">
+                <input name="statusdocumentstatuses_posted" type="hidden" 
value="true"/>
+                <select class="selectpicker" name="statusdocumentstatuses" 
multiple="true">
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_INACTIVE)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_INACTIVE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsThatAreNoLongerActive")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_PROCESSING)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_PROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsCurrentlyInProgress")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_EXPIRING)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_EXPIRING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsCurrentlyBeingExpired")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_DELETING)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_DELETING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsCurrentlyBeingDeleted")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_READYFORPROCESSING)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsCurrentlyAvailableForProcessing")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_READYFOREXPIRATION)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsCurrentlyAvailableForExpiration")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsNotYetProcessable")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsNotYetExpirable")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_WAITINGFOREVER)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREVER)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsWaitingForever")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new 
Integer(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)) == null) ? "" : 
"selected=\"selected\"")%> 
value='<%=Integer.toString(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.DocumentsHopcountExceeded")%>
+                  </option>
+                </select>
+              </td>
+            </tr>
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.DocumentIdentifierMatch")%>
+              </th>
+              <td colspan="3">
+                <input type="text" name="statusidentifiermatch" size="40" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(identifierMatch)%>'/>
+              </td>
+            </tr>
+            <tr>
+              
<th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.IdentifierClassDescription")%>
+              </th>
+              <td colspan="3">
+                <input type="text" name="statusbucketdesc" size="40" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(statusBucketDesc)%>'/></td>
+            </tr>
+          </table>
+        </div>
+        <div class="box-footer clearfix">
+          <div class="btn-group">
+            <%
+              if (statusConnection.length() > 0 && statusJobIdentifiers.length 
> 0) {
+            %>
+            <a name="MainButton"><input class="btn btn-primary btn-sm" 
type="button" 
value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Go")%>"
 onClick="javascript:Go()" 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.ExecuteThisQuery")%>"/></a>
+            <%
+            } else {
+            %>
+            <a name="MainButton"><input class="btn btn-primary btn-sm" 
type="button" 
value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Continue")%>"
 onClick="javascript:Continue()" 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.Continue")%>"/></a>
+            <%
+              }
+            %>
+          </div>
+        </div>
+      </div>
+      <%
+        if (statusConnection.length() > 0) {
+          if (statusJobIdentifiers.length > 0) {
+            // Run the report.
+
+            // First, we need to gather the sort order object.
+            String sortOrderString = variableContext.getParameter("sortorder");
+            SortOrder sortOrder;
+            if (sortOrderString == null || sortOrderString.length() == 0)
+              sortOrder = new SortOrder();
+            else
+              sortOrder = new SortOrder(sortOrderString);
+
+            // Now, gather the column header that was clicked on (if any)
+            String clickedColumn = variableContext.getParameter("clickcolumn");
+            if (clickedColumn != null && clickedColumn.length() > 0)
+              sortOrder.clickColumn(clickedColumn);
+
+            // Gather the start
+            String startRowString = variableContext.getParameter("startrow");
+            int startRow = 0;
+            if (startRowString != null && startRowString.length() > 0)
+              startRow = Integer.parseInt(startRowString);
+
+            // Gather the max
+            String maxRowCountString = 
variableContext.getParameter("rowcount");
+            int rowCount = 20;
+            if (maxRowCountString != null && maxRowCountString.length() > 0)
+              rowCount = Integer.parseInt(maxRowCountString);
+
+            Long[] ourJobs = new Long[selectedJobs.size()];
+            Iterator iter = selectedJobs.keySet().iterator();
+            int zz = 0;
+            while (iter.hasNext()) {
+              ourJobs[zz++] = (Long) iter.next();
+            }
+
+            RegExpCriteria identifierMatchObject = null;
+            if (identifierMatch.length() > 0)
+              identifierMatchObject = new RegExpCriteria(identifierMatch, 
true);
+            StatusFilterCriteria criteria = new StatusFilterCriteria(ourJobs, 
nowTime, identifierMatchObject, matchingStates, matchingStatuses);
+
+            BucketDescription idBucket = new 
BucketDescription(statusBucketDesc, false);
+            IResultSet set = jobManager.genQueueStatus(statusConnection, 
criteria, sortOrder, idBucket, startRow, rowCount + 1);
+
+      %>
+      <input type="hidden" name="clickcolumn" value=""/>
+      <input type="hidden" name="startrow" 
value='<%=Integer.toString(startRow)%>'/>
+      <input type="hidden" name="sortorder" 
value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sortOrder.toString())%>'/>
+
+      <div class="box box-primary">
+        <div class="box-body no-padding">
+          <table class="table table-responsive">
+            <tr>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("idbucket");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.IdentifierClass")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("inactive");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Inactive")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("processing");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Processing")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("expiring");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Expiring")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("deleting");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Deleting")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("processready");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.AboutToProcess")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("expireready");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.AboutToExpire")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("processwaiting");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.WaitingForProcessing")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("expirewaiting");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.WaitingForExpiration")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("waitingforever");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.WaitingForever")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" 
onclick='javascript:ColumnClick("hopcountexceeded");'>
+                
<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.HopcountExceeded")%>
+                </nobr>
+              </a></th>
+            </tr>
+            <%
+              zz = 0;
+              boolean hasMoreRows = (set.getRowCount() > rowCount);
+              int iterCount = hasMoreRows ? rowCount : set.getRowCount();
+              while (zz < iterCount) {
+                IResultRow row = set.getRow(zz);
+
+                // Translate column values into something that can be 
reasonably displayed.
+                // Note that the actual hard work of translating things to 
human-readable strings largely is done by the query itself; this is because
+                // we want to sort on the columns, so it has to be that way.
+
+                String idBucketValue = (String) row.getValue("idbucket");
+                if (idBucketValue == null)
+                  idBucketValue = "";
+                String[] identifierBreakdown = 
org.apache.manifoldcf.ui.util.Formatter.formatString(idBucketValue, 64, true, 
true);
+
+            %>
+            <tr>
+              <td>
+                <%
+                  int q = 0;
+                  while (q < identifierBreakdown.length) {
+                %>
+                
<nobr><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(identifierBreakdown[q++])%>
+                </nobr>
+                <br/>
+                <%
+                  }
+                %>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("inactive").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processing").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expiring").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("deleting").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processready").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expireready").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("processwaiting").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("expirewaiting").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("waitingforever").toString())%>
+              </td>
+              
<td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("hopcountexceeded").toString())%>
+              </td>
+            </tr>
+            <%
+                zz++;
+              }
+            %>
+          </table>
+        </div>
+        <div class="box-footer">
+          <div class="row">
+            <div class="col-md-7">
+              <ul class="pagination pagination-sm no-margin pull-left">
+                <%
+                  if (startRow == 0) {
+                %>
+                <li><a 
hred="#"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Previous")%>
+                </a></li>
+                <%
+                } else {
+                %>
+                <li>
+                  <a href="javascript:void(0);" 
onclick='<%="javascript:SetPosition("+Integer.toString(startRow-rowCount)+");"%>'
 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.PreviousPage")%>"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.Previous")%>
+                  </a></li>
+                <%
+                  }
+                %>
+
+                <%
+                  if (hasMoreRows == false) {
+                %>
+                <li><a 
href="#"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Next")%>
+                </a></li>
+                <%
+                } else {
+                %>
+                <li>
+                  <a href="javascript:void(0);" 
onclick='<%="javascript:SetPosition("+Integer.toString(startRow+rowCount)+");"%>'
 
alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"queuestatus.NextPage")%>"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.Next")%>
+                  </a></li>
+                <%
+                  }
+                %>
+              </ul>
+            </div>
+            <div class="col-md-2">
+              <span class="label 
label-primary"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.Rows")%></span>
+              <span class="label 
label-primary"><%=Integer.toString(startRow)%>-<%=(hasMoreRows ? 
Integer.toString(startRow + rowCount - 1) : "END")%></span>
+            </div>
+            <div class="col-md-3">
+              <div class="input-group input-group-sm">
+                <span 
class="input-group-addon"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.RowsPerPage")%></span>
+                <input type="text" class="form-control" name="rowcount" 
size="5" value='<%=Integer.toString(rowCount)%>'/>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <%
+        } else {
+        %>
+        <div class="callout callout-info">
+          <p><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.PleaseSelectAtLeastOneJob")%>
+          </p>
+        </div>
+        <%
+          }
+        } else {
+        %>
+        <div class="callout 
callout-info"><p><%=Messages.getBodyString(pageContext.getRequest().getLocale(),
 "queuestatus.PleaseSelectaConnection")%>
+        </p></div>
+        <%
+          }
+        %>
+      </div>
+    </form>
+    <%
+    } else {
+    %>
+    <div class="callout callout-warning">
+      <p><%=Messages.getBodyString(pageContext.getRequest().getLocale(), 
"queuestatus.PleaseTryAgainLater")%>
+      </p>
+    </div>
+    <%
+      }
+    %>
+  </div>
+</div>
+</div>
\ No newline at end of file


Reply via email to