You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by ki...@apache.org on 2015/06/09 03:30:37 UTC

svn commit: r1684303 [1/18] - in /manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp: ./ css/ javascript/ less/

Author: kishore
Date: Tue Jun  9 01:30:36 2015
New Revision: 1684303

URL: http://svn.apache.org/r1684303
Log:
Updated all JSP files with new UI.
Removed old style.css and navigation.jsp

Added:
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/sidebar.jsp
Removed:
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/less/control-sidebar.less
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/navigation.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/style.css
Modified:
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/adminHeaders.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/banner.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/css/style.css
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/documentstatus.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editauthority.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editconnection.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editgroup.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editjob.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editmapper.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editnotification.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/editoutput.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/edittransformation.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/error.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/execute.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/index.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/javascript/app.js
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/less/core.less
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/less/displaytable.less
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/less/navs.less
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/less/table.less
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listauthorities.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listconnections.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listgroups.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listjobs.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listmappers.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listnotifications.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listoutputs.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/listtransformations.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/login.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/logout.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/maxactivityreport.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/maxbandwidthreport.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/queuestatus.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/resultreport.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/setupAdminProfile.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/showjobstatus.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/simplereport.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewauthority.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewconnection.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewgroup.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewjob.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewmapper.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewnotification.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewoutput.jsp
    manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/viewtransformation.jsp

Modified: manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/adminHeaders.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/adminHeaders.jsp?rev=1684303&r1=1684302&r2=1684303&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/adminHeaders.jsp (original)
+++ manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/adminHeaders.jsp Tue Jun  9 01:30:36 2015
@@ -1,30 +1,30 @@
-<% response.setHeader("Pragma","No-cache");
-response.setDateHeader("Expires",0);
-response.setHeader("Cache-Control", "no-cache");
-response.setDateHeader("max-age", 0);
-response.setContentType("text/html;charset=utf-8");
+<% response.setHeader("Pragma", "No-cache");
+  response.setDateHeader("Expires", 0);
+  response.setHeader("Cache-Control", "no-cache");
+  response.setDateHeader("max-age", 0);
+  response.setContentType("text/html;charset=utf-8");
 %>
 
 <%
 
-/* $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.
-*/
+ * 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.
+ */
 %>
 
 <%@ page language="java" %>
@@ -46,18 +46,29 @@ response.setContentType("text/html;chars
 
 
 <%
-	if (adminprofile.getLoggedOn() == false)
-	{
-		response.sendRedirect("login.jsp");
-		return;
-	}
-
-	IThreadContext threadContext = thread.getThreadContext();
-	org.apache.manifoldcf.ui.multipart.MultipartWrapper variableContext = (org.apache.manifoldcf.ui.multipart.MultipartWrapper)threadContext.get("__WRAPPER__");
-	if (variableContext == null)
-	{
-		variableContext = new org.apache.manifoldcf.ui.multipart.MultipartWrapper(request,adminprofile);
-		threadContext.save("__WRAPPER__",variableContext);
-	}
-%>
+  String queryString = request.getQueryString();
+  String requestURL = request.getRequestURI();
+  requestURL = requestURL.substring(requestURL.lastIndexOf("/") + 1);
+  requestURL += queryString == null ? "" : "?" + queryString;
+  if (adminprofile.getLoggedOn() == false) {
+    if (queryString == null) {
+      response.sendRedirect("login.jsp");
+    } else {
+      if (!requestURL.startsWith("index.jsp")) {
+        requestURL = "index.jsp?p=" + requestURL;
+      }
+      response.sendRedirect("login.jsp?nextUrl=" + URLEncoder.encode(requestURL));
+    }
+    return;
+  }
+
+  response.setHeader("page",requestURL);
+
+  IThreadContext threadContext = thread.getThreadContext();
+  org.apache.manifoldcf.ui.multipart.MultipartWrapper variableContext = (org.apache.manifoldcf.ui.multipart.MultipartWrapper) threadContext.get("__WRAPPER__");
+  if (variableContext == null) {
+    variableContext = new org.apache.manifoldcf.ui.multipart.MultipartWrapper(request, adminprofile);
+    threadContext.save("__WRAPPER__", variableContext);
+  }
 
+%>

Modified: manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/banner.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/banner.jsp?rev=1684303&r1=1684302&r2=1684303&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/banner.jsp (original)
+++ manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/banner.jsp Tue Jun  9 01:30:36 2015
@@ -2,47 +2,48 @@
 
 <%
 
-/* $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.
-*/
+ * 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.
+ */
 %>
 
 <%
-	// This module is meant to be called within a table cell, and will drop the
-	// lcf banner into the cell
-	String dateString = java.text.DateFormat.getDateTimeInstance().format(new java.util.Date());
+  // This module is meant to be called within a table cell, and will drop the
+  // lcf banner into the cell
+  String dateString = java.text.DateFormat.getDateTimeInstance().format(new java.util.Date());
 %>
 
 <table class="bannertable">
-    <tr class="bannerrow">
-	<td class="headerimage"><img src="ManifoldCF-logo.png"/></td>
-          <td class="headercell">
-	    <table class="headertable">
-		<tr class="headerdaterow">
-			<td class="headerdate"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(dateString)%></td>
-		</tr>
-	          <tr class="headerrow">
-			<td class="header"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"banner.DocumentIngestion")%></td>
-		</tr>
-	    </table>
-	</td>
-    </tr>
+  <tr class="bannerrow">
+    <td class="headerimage"><img src="ManifoldCF-logo.png"/></td>
+    <td class="headercell">
+      <table class="headertable">
+        <tr class="headerdaterow">
+          <td class="headerdate"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(dateString)%>
+          </td>
+        </tr>
+        <tr class="headerrow">
+          <td class="header"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "banner.DocumentIngestion")%>
+          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
 </table>
 
 
-

Modified: manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/css/style.css
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/css/style.css?rev=1684303&r1=1684302&r2=1684303&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/css/style.css (original)
+++ manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/css/style.css Tue Jun  9 01:30:36 2015
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 /*
- * Core: Genral Layout Style
+ * Core: General Layout Style
  * -------------------------
  */
 html,
@@ -155,6 +155,9 @@ a:focus {
   text-decoration: none;
   color: #72afd2;
 }
+label {
+  font-weight: 600;
+}
 /*
  * Component: Main Header
  * ----------------------
@@ -1734,6 +1737,18 @@ a:focus {
 .nav-tabs > li:first-of-type.active > a {
   border-left-width: 0;
 }
+.nav-tabs > li[seq="0"] {
+  border-bottom: solid 2px #ff851b;
+}
+.nav-tabs > li[seq="1"] {
+  border-bottom: solid 2px #f012be;
+}
+.nav-tabs > li[seq="2"] {
+  border-bottom: solid 2px #00a65a;
+}
+.nav-tabs > li[seq="3"] {
+  border-bottom: solid 2px #0073b7;
+}
 .nav-tabs.pull-right {
   float: none!important;
 }
@@ -1792,6 +1807,13 @@ a:focus {
 .table > tfoot > tr > td {
   border-top: 1px solid #f4f4f4;
 }
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th {
+  font-weight: 600;
+  text-decoration: underline;
+  font-style: italic;
+}
 .table > thead > tr > th {
   border-bottom: 2px solid #f4f4f4;
 }
@@ -1806,6 +1828,7 @@ a:focus {
 }
 .table .callout {
   margin: 0px;
+  padding: 5px 15px;
 }
 .table-bordered {
   border: 1px solid #f4f4f4;
@@ -2431,6 +2454,16 @@ table.text-center th {
   border-top: 1px solid #f4f4f4;
 }
 .displaytable > thead > tr > th,
+.formtable > thead > tr > th,
+.displaytable > tbody > tr > th,
+.formtable > tbody > tr > th,
+.displaytable > tfoot > tr > th,
+.formtable > tfoot > tr > th {
+  font-weight: 600;
+  text-decoration: underline;
+  font-style: italic;
+}
+.displaytable > thead > tr > th,
 .formtable > thead > tr > th {
   border-bottom: 2px solid #f4f4f4;
 }
@@ -2449,6 +2482,7 @@ table.text-center th {
 .displaytable .callout,
 .formtable .callout {
   margin: 0px;
+  padding: 5px 15px;
 }
 .displaytable > thead > tr > th,
 .formtable > thead > tr > th,
@@ -2476,13 +2510,17 @@ table.text-center th {
 }
 .displaytable tr .separator,
 .formtable tr .separator,
+.displaytable tr .lightseparator,
+.formtable tr .lightseparator,
 .displaytable tr .formseparator,
 .formtable tr .formseparator {
   display: none;
 }
 .displaytable tr .description,
 .formtable tr .description {
-  font-weight: bold;
+  font-weight: 600;
+  text-decoration: underline;
+  font-style: italic;
 }
 .displaytable td input[type="text"],
 .formtable td input[type="text"],

Modified: manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/documentstatus.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/documentstatus.jsp?rev=1684303&r1=1684302&r2=1684303&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/documentstatus.jsp (original)
+++ manifoldcf/branches/CONNECTORS-1196/framework/crawler-ui/src/main/webapp/documentstatus.jsp Tue Jun  9 01:30:36 2015
@@ -2,592 +2,548 @@
 
 <%
 
-/* $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(),"documentstatus.ApacheManifoldCFDocumentStatus")%>
-	</title>
-
-	<script type="text/javascript">
-	<!--
-
-	function Go()
-	{
-		if (!isInteger(report.rowcount.value))
-		{
-			alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.EnterALegalNumberForRowsPerPage")%>");
-			report.rowcount.focus();
-			return;
-		}
-		if (!isRegularExpression(report.statusidentifiermatch.value))
-		{
-			alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.IdentifierMatchMustBeAValidRegularExpression")%>");
-			report.statusidentifiermatch.focus();
-			return;
-		}
-		
-		document.report.op.value="Status";
-		document.report.action = document.report.action + "#MainButton";
-		document.report.submit();
-	}
-
-	function Continue()
-	{
-		if (!isRegularExpression(report.statusidentifiermatch.value))
-		{
-			alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.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(),"documentstatus.DocumentStatus")%></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 = "";
-
-	// 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="documentstatus"/>
-		<table class="displaytable">
-			<tr>
-				<td class="separator" colspan="4"><hr/></td>
-			</tr>
-			<tr>
-				<td class="description" colspan="1"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Connection")%></td><td class="value" colspan="1">
-					<select name="statusconnection" size="3">
-						<option <%=(statusConnection.length()==0)?"selected=\"selected\"":""%> value="">-- <%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.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(),"documentstatus.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(),"documentstatus.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(),"documentstatus.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(),"documentstatus.DocumentsThatHaveNeverBeenProcessed")%></option>
-						<option <%=((matchingStatesHash.get(new Integer(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsProcessedAtLeastOnce")%></option>
-						<option <%=((matchingStatesHash.get(new Integer(IJobManager.DOCSTATE_OUTOFSCOPE))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATE_OUTOFSCOPE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsOutOfScope")%></option>
-					</select>
-				</td>
-			</tr>
-			<tr>
-				<td class="description"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.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(),"documentstatus.DocumentsThatAreNoLongerActive")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_PROCESSING))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_PROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsCurrentlyInProgress")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_EXPIRING))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_EXPIRING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsCurrentlyBeingExpired")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_DELETING))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_DELETING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsCurrentlyBeingDeleted")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_READYFORPROCESSING))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsCurrentlyAvailableForProcessing")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_READYFOREXPIRATION))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsCurrentlyAvailableForExpiration")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFORPROCESSING))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsNotYetProcessable")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsNotYetExpirable")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFOREVER))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREVER)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsWaitingForever")%></option>
-						<option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED))==null)?"":"selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentsHopcountExceeded")%></option>
-					</select>
-				</td>
-			</tr>
-			<tr>
-				<td class="separator" colspan="4"><hr/></td>
-			</tr>
-			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.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="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(),"documentstatus.Go")%>" onClick="javascript:Go()" alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.ExecuteThisQuery")%>"/></a>
-<%
-	}
-	else
-	{
-%>
-					<a name="MainButton"><input type="button" value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.Continue")%>" onClick="javascript:Continue()" alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.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);
-
-		IResultSet set = jobManager.genDocumentStatus(statusConnection,criteria,sortOrder,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"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Identifier")%></nobr></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("job");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Job")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("state");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.State")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("status");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Status")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("scheduled");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Scheduled")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("action");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.ScheduledAction")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("retrycount");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.RetryCount")%></nobr></a></td>
-			<td class="reportcolumnheader"><a href="javascript:void(0);" onclick='javascript:ColumnClick("retrylimit");'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.RetryLimit")%></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[] identifierBreakdown = org.apache.manifoldcf.ui.util.Formatter.formatString(row.getValue("identifier").toString(),64,true,true);
-		    Long scheduleTime = (Long)row.getValue("scheduled");
-		    String scheduleTimeString = "";
-		    if (scheduleTime != null)
-			scheduleTimeString = org.apache.manifoldcf.ui.util.Formatter.formatTime(scheduleTime.longValue());
-		    String scheduledActionString = (String)row.getValue("action");
-		    if (scheduledActionString == null)
-		        scheduledActionString = "";
-		    Long retryCount = (Long)row.getValue("retrycount");
-		    String retryCountString = "";
-		    if (retryCount != null)
-			retryCountString = retryCount.toString();
-		    Long retryLimit = (Long)row.getValue("retrylimit");
-		    String retryLimitString = "";
-		    if (retryLimit != null)
-		        retryLimitString = org.apache.manifoldcf.ui.util.Formatter.formatTime(retryLimit.longValue());
-			
-%>
-		    <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("job").toString())%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("state").toString())%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("status").toString())%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(scheduleTimeString)%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(scheduledActionString)%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(retryCountString)%></td>
-			<td class="reportcolumncell"><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(retryLimitString)%></td>
-		    </tr>
-<%
-			zz++;
-		}
-%>
-		</table>
-		<table class="reportfootertable">
-		    <tr class="reportfooterrow">
-			<td class="reportfootercell">
-				<nobr>
-<%
-		if (startRow == 0)
-		{
-%>
-					<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Previous")%>
-<%
-		}
-		else
-		{
-%>
-					<a href="javascript:void(0);" onclick='<%="javascript:SetPosition("+Integer.toString(startRow-rowCount)+");"%>' alt="Previous page">Previous</a>
-<%
-		}
-%>
-				</nobr>
-			</td>
-			<td class="reportfootercell">
-				<nobr>
-<%
-		if (hasMoreRows == false)
-		{
-%>
-					<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Next")%>
-<%
-		}
-		else
-		{
-%>
-					<a href="javascript:void(0);" onclick='<%="javascript:SetPosition("+Integer.toString(startRow+rowCount)+");"%>' alt="Next page">Next</a>
-<%
-		}
-%>
-				</nobr>
-			</td>
-			<td class="reportfootercell">
-				<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.Rows")%></nobr>
-				<nobr><%=Integer.toString(startRow)%>-<%=(hasMoreRows?Integer.toString(startRow+rowCount-1):"END")%></nobr>
-			</td>
-			<td class="reportfootercell">
-				<nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.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(),"documentstatus.PleaseSelectAtLeastOneJob")%></td></tr></table>
-<%
-	    }
-	}
-	else
-	{
-%>
-		<table class="displaytable"><tr><td class="message"><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.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(),"documentstatus.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(), "documentstatus.ApacheManifoldCFDocumentStatus")%>',
+      '<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"documentstatus.DocumentStatus")%>',
+      'statusReports'
+  );
+  function Go() {
+    if (!isInteger(report.rowcount.value)) {
+      alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.EnterALegalNumberForRowsPerPage")%>");
+      report.rowcount.focus();
+      return;
+    }
+    if (!isRegularExpression(report.statusidentifiermatch.value)) {
+      alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.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 (!isRegularExpression(report.statusidentifiermatch.value)) {
+      alert("<%=Messages.getBodyJavascriptString(pageContext.getRequest().getLocale(),"documentstatus.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 = "";
+
+        // 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="documentstatus"/>
+
+      <div class="box box-primary">
+        <div class="box-body">
+          <table class="table table-bordered">
+            <tr>
+              <th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Connection")%>
+              </th>
+              <td>
+                <select class="selectpicker" name="statusconnection">
+                  <option <%=(statusConnection.length() == 0) ? "selected=\"selected\"" : ""%> value="">
+                    -- <%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.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(), "documentstatus.Jobs")%>
+              </th>
+              <td>
+                <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(), "documentstatus.TimeOffsetFromNowMinutes")%>
+              </th>
+              <td colspan="3">
+                <input name="statusscheduleoffset" type="text" size="6" value="" class="form-control"/>
+              </td>
+            </tr>
+            <tr>
+              <th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.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(), "documentstatus.DocumentsThatHaveNeverBeenProcessed")%>
+                  </option>
+                  <option <%=((matchingStatesHash.get(new Integer(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATE_PREVIOUSLYPROCESSED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsProcessedAtLeastOnce")%>
+                  </option>
+                  <option <%=((matchingStatesHash.get(new Integer(IJobManager.DOCSTATE_OUTOFSCOPE)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATE_OUTOFSCOPE)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsOutOfScope")%>
+                  </option>
+                </select>
+              </td>
+            </tr>
+            <tr>
+              <th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.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(), "documentstatus.DocumentsThatAreNoLongerActive")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_PROCESSING)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_PROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsCurrentlyInProgress")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_EXPIRING)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_EXPIRING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsCurrentlyBeingExpired")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_DELETING)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_DELETING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsCurrentlyBeingDeleted")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_READYFORPROCESSING)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsCurrentlyAvailableForProcessing")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_READYFOREXPIRATION)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_READYFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsCurrentlyAvailableForExpiration")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFORPROCESSING)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsNotYetProcessable")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREXPIRATION)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsNotYetExpirable")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_WAITINGFOREVER)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_WAITINGFOREVER)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsWaitingForever")%>
+                  </option>
+                  <option <%=((matchingStatusesHash.get(new Integer(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)) == null) ? "" : "selected=\"selected\"")%> value='<%=Integer.toString(IJobManager.DOCSTATUS_HOPCOUNTEXCEEDED)%>'><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentsHopcountExceeded")%>
+                  </option>
+                </select>
+              </td>
+            </tr>
+            <tr>
+              <th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.DocumentIdentifierMatch")%>
+              </th>
+              <td colspan="3">
+                <input type="text" name="statusidentifiermatch" size="40" class="form-control" value='<%=org.apache.manifoldcf.ui.util.Encoder.attributeEscape(identifierMatch)%>'/>
+              </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(),"documentstatus.Go")%>" onClick="javascript:Go()" alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.ExecuteThisQuery")%>"/></a>
+            <%} else {%>
+            <a name="MainButton"><input class="btn btn-primary btn-sm" type="button" value="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.Continue")%>" onClick="javascript:Continue()" alt="<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"documentstatus.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);
+
+            IResultSet set = jobManager.genDocumentStatus(statusConnection, criteria, sortOrder, 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">
+          <table class="table table-bordered">
+            <tr>
+              <th><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Identifier")%>
+              </th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("job");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Job")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("state");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.State")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("status");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Status")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("scheduled");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Scheduled")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("action");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.ScheduledAction")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("retrycount");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.RetryCount")%>
+                </nobr>
+              </a></th>
+              <th><a href="javascript:void(0);" onclick='javascript:ColumnClick("retrylimit");'>
+                <nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.RetryLimit")%>
+                </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[] identifierBreakdown = org.apache.manifoldcf.ui.util.Formatter.formatString(row.getValue("identifier").toString(), 64, true, true);
+                Long scheduleTime = (Long) row.getValue("scheduled");
+                String scheduleTimeString = "";
+                if (scheduleTime != null)
+                  scheduleTimeString = org.apache.manifoldcf.ui.util.Formatter.formatTime(scheduleTime.longValue());
+                String scheduledActionString = (String) row.getValue("action");
+                if (scheduledActionString == null)
+                  scheduledActionString = "";
+                Long retryCount = (Long) row.getValue("retrycount");
+                String retryCountString = "";
+                if (retryCount != null)
+                  retryCountString = retryCount.toString();
+                Long retryLimit = (Long) row.getValue("retrylimit");
+                String retryLimitString = "";
+                if (retryLimit != null)
+                  retryLimitString = org.apache.manifoldcf.ui.util.Formatter.formatTime(retryLimit.longValue());
+
+            %>
+            <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("job").toString())%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("state").toString())%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(row.getValue("status").toString())%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(scheduleTimeString)%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(scheduledActionString)%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(retryCountString)%>
+              </td>
+              <td><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(retryLimitString)%>
+              </td>
+            </tr>
+            <%
+                zz++;
+              }
+            %>
+          </table>
+        </div>
+        <div class="box-footer">
+          <ul class="pagination pagination-sm no-margin pull-left">
+            <%if (startRow == 0) {%>
+            <li><a href="#"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Previous")%>
+            </a></li>
+            <%} else {%>
+            <li>
+              <a href="javascript:void(0);" onclick='<%="javascript:SetPosition("+Integer.toString(startRow-rowCount)+");"%>' alt="Previous page">Previous</a>
+            </li>
+            <%}%>
+
+            <%if (hasMoreRows == false) {%>
+            <li><a href="#"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Next")%>
+            </a></li>
+            <%} else {%>
+            <li><a href="javascript:void(0);" onclick='<%="javascript:SetPosition("+Integer.toString(startRow+rowCount)+");"%>' alt="Next page">Next</a>
+            </li>
+            <%}%>
+          </ul>
+          <ul class="pagination pagination-sm no-margin pull-right">
+            <li class="pad">
+              <span class="label label-primary">
+                <%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.Rows")%>
+                <%=Integer.toString(startRow)%>-<%=(hasMoreRows ? Integer.toString(startRow + rowCount - 1) : "END")%>
+              </span>
+            </li>
+            <li class="form-inline">
+              <div class="input-group input-group-sm">
+                <span class="input-group-addon"><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.RowsPerPage")%></span>
+                <input type="text" class="form-control" name="rowcount" size="5" class="form-control" value='<%=Integer.toString(rowCount)%>'/>
+              </div>
+            </li>
+          </ul>
+        </div>
+        <%} else {%>
+        <div class="callout callout-info">
+          <p><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.PleaseSelectAtLeastOneJob")%>
+          </p>
+        </div>
+        <%
+          }
+        } else {
+        %>
+        <div class="callout callout-info">
+          <p><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.PleaseSelectaConnection")%>
+          </p>
+        </div>
+        <%}%>
+      </div>
+    </form>
+    <%} else {%>
+    <div class="callout callout-warning">
+      <p><%=Messages.getBodyString(pageContext.getRequest().getLocale(), "documentstatus.PleaseTryAgainLater")%>
+      </p>
+    </div>
+    <%}%>
+  </div>
+</div>
+</div>
\ No newline at end of file