You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/03/16 21:53:50 UTC

svn commit: r1457304 [1/3] - in /manifoldcf/branches/CONNECTORS-663: connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/ framework/crawler-ui/src/main/webapp/ framework/pull-agent/src/main/java/org/apache/...

Author: kwright
Date: Sat Mar 16 20:53:46 2013
New Revision: 1457304

URL: http://svn.apache.org/r1457304
Log:
Implement feature and documentation.

Added:
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java   (with props)
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java   (with props)
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java   (with props)
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java   (with props)
Modified:
    manifoldcf/branches/CONNECTORS-663/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/FileConnector.java
    manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/editjob.jsp
    manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/execute.jsp
    manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/showjobstatus.jsp
    manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/viewjob.jsp
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/AddScheduledTime.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/GetJobSchedule.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnector.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStartRecord.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ScheduleRecord.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ScheduleManager.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/JobNotificationThread.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/SeedingThread.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/StartDeleteThread.java
    manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/StartupThread.java
    manifoldcf/branches/CONNECTORS-663/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_en_US.properties
    manifoldcf/branches/CONNECTORS-663/framework/ui-core/src/main/native2ascii/org/apache/manifoldcf/ui/i18n/common_ja_JP.properties
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/content/xdocs/en_US/end-user-documentation.xml
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/content/xdocs/en_US/programmatic-operation.xml
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/content/xdocs/en_US/writing-repository-connectors.xml
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/content/xdocs/ja_JP/programmatic-operation.xml
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/content/xdocs/ja_JP/writing-repository-connectors.xml
    manifoldcf/branches/CONNECTORS-663/site/src/documentation/resources/images/en_US/job-status.PNG
    manifoldcf/branches/CONNECTORS-663/tests/filesystem/src/test/java/org/apache/manifoldcf/filesystem_tests/SanityTester.java

Modified: manifoldcf/branches/CONNECTORS-663/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/FileConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/FileConnector.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/FileConnector.java (original)
+++ manifoldcf/branches/CONNECTORS-663/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/filesystem/FileConnector.java Sat Mar 16 20:53:46 2013
@@ -54,6 +54,16 @@ public class FileConnector extends org.a
   {
   }
 
+  /** Tell the world what model this connector uses for getDocumentIdentifiers().
+  * This must return a model value as specified above.
+  *@return the model type value.
+  */
+  @Override
+  public int getConnectorModel()
+  {
+    return MODEL_CHAINED_ADD_CHANGE;
+  }
+
   /** Return the list of relationship types that this connector recognizes.
   *@return the list.
   */

Modified: manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/editjob.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/editjob.jsp?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/editjob.jsp (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/editjob.jsp Sat Mar 16 20:53:46 2013
@@ -75,6 +75,8 @@
 	EnumeratedValues minutesOfHour = null;
 	// Duration in minutes
 	Long duration = null;
+	// RequestMinimum flag
+	boolean requestMinimum = false;
 
 	// Priority
 	int priority = 5;
@@ -830,7 +832,7 @@
 %>
 		  <table class="displaytable">
 <%
-	    if (model != -1 && model != IRepositoryConnector.MODEL_ADD_CHANGE_DELETE)
+	    if (model != -1 && model != IRepositoryConnector.MODEL_ADD_CHANGE_DELETE && model != IRepositoryConnector.MODEL_CHAINED_ADD_CHANGE_DELETE)
 	    {
 %>
 			<tr>
@@ -902,6 +904,7 @@
 		EnumeratedValues srYear = sr.getYear();
 		EnumeratedValues srHourOfDay = sr.getHourOfDay();
 		EnumeratedValues srMinutesOfHour = sr.getMinutesOfHour();
+		boolean srRequestMinimum = sr.getRequestMinimum();
 		String postFix = Integer.toString(l);
 		int k;
 
@@ -936,10 +939,10 @@
 						int q = k;
 						String ampm;
 						if (k < 12)
-							ampm = "am";
+							ampm = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.am");
 						else
 						{
-							ampm = "pm";
+							ampm = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.pm");
 							q -= 12;
 						}
 						String hour;
@@ -989,15 +992,15 @@
 						int value = (k+1) % 10;
 						String suffix;
 						if (value == 1 && k != 10)
-							suffix = "st";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.st");
 						else if (value == 2 && k != 11)
-							suffix = "nd";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.nd");
 						else if (value == 3 && k != 12)
-							suffix = "rd";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.rd");
 						else
-							suffix = "th";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.th");
 %>
-						<option value='<%=Integer.toString(k)%>' <%=(srDayOfMonth!=null&&srDayOfMonth.checkValue(k))?"selected=\"selected\"":""%>><%=Integer.toString(k+1)+suffix+" day of month"%></option>
+						<option value='<%=Integer.toString(k)%>' <%=(srDayOfMonth!=null&&srDayOfMonth.checkValue(k))?"selected=\"selected\"":""%>><%=Integer.toString(k+1)+suffix+" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.dayofmonth")%></option>
 <%
 						k++;
 					}
@@ -1006,9 +1009,17 @@
 				</td>
 			</tr>
 			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.MaximumRunTimeColon")%></nobr></td><td colspan="3" class="value">
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.MaximumRunTimeColon")%></nobr></td>
+				<td class="value">
 					<input type="text" size="5" name='<%="duration"+postFix%>' value='<%=((srDuration==null)?"":new Long(srDuration.longValue()/60000L).toString())%>'/> <%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.minutes")%>
 				</td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.JobInvocationColon")%></nobr></td>
+				<td class="value">
+					<select class="schedulepulldown" multiple="false" name='<%="invocation"+postFix%>' size="2">
+						<option value="complete" <%=(srRequestMinimum==false)?"selected=\"selected\"":""%>><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.Complete")%></option>
+						<option value="minimal" <%=srRequestMinimum?"selected=\"selected\"":""%>><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.Minimal")%></option>
+					</select>
+				</td>
 			</tr>
 			<tr>
 				<td class="message" colspan="4">
@@ -1047,10 +1058,10 @@
 						int q = k;
 						String ampm;
 						if (k < 12)
-							ampm = "am";
+							ampm = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.am");
 						else
 						{
-							ampm = "pm";
+							ampm = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.pm");
 							q -= 12;
 						}
 						String hour;
@@ -1100,15 +1111,15 @@
 						int value = (k+1) % 10;
 						String suffix;
 						if (value == 1 && k != 10)
-							suffix = "st";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.st");
 						else if (value == 2 && k != 11)
-							suffix = "nd";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.nd");
 						else if (value == 3 && k != 12)
-							suffix = "rd";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.rd");
 						else
-							suffix = "th";
+							suffix = Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.th");
 %>
-						<option value='<%=Integer.toString(k)%>' <%=(dayOfMonth!=null&&dayOfMonth.checkValue(k))?"selected=\"selected\"":""%>><%=Integer.toString(k+1)+suffix+" day of month"%></option>
+						<option value='<%=Integer.toString(k)%>' <%=(dayOfMonth!=null&&dayOfMonth.checkValue(k))?"selected=\"selected\"":""%>><%=Integer.toString(k+1)+suffix+" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.dayofmonth")%></option>
 <%
 						k++;
 					}
@@ -1117,9 +1128,17 @@
 				</td>
 			</tr>
 			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.MaximumRunTimeColon")%></nobr></td><td colspan="3" class="value">
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.MaximumRunTimeColon")%></nobr></td>
+				<td class="value">
 					<input type="text" size="5" name="duration" value='<%=((duration==null)?"":duration.toString())%>'/> <%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.minutes")%>
 				</td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.JobInvocationColon")%></nobr></td>
+				<td class="value">
+					<select class="schedulepulldown" multiple="false" name="invocation" size="2">
+						<option value="complete" <%=(requestMinimum==false)?"selected=\"selected\"":""%>><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.Complete")%></option>
+						<option value="minimal" <%=requestMinimum?"selected=\"selected\"":""%>><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"editjob.Minimal")%></option>
+					</select>
+				</td>
 			</tr>
 			<tr>
 				<td class="message" colspan="4">
@@ -1150,6 +1169,7 @@
 		EnumeratedValues srYear = sr.getYear();
 		EnumeratedValues srHourOfDay = sr.getHourOfDay();
 		EnumeratedValues srMinutesOfHour = sr.getMinutesOfHour();
+		boolean srRequestMinimum = sr.getRequestMinimum();
 		String postFix = Integer.toString(l);
 
 		if (srDayOfWeek == null)
@@ -1243,6 +1263,7 @@
 		}
 %>
 		  <input type="hidden" name='<%="duration"+postFix%>' value='<%=((srDuration==null)?"":new Long(srDuration.longValue()/60000L).toString())%>'/>
+		  <input type="hidden" name='<%="invocation"+postFix%>' value='<%=srRequestMinimum?"minimal":"complete"%>'/>
 		  <input type="hidden" name='<%="year"+postFix%>' value="none"/>
 <%
 		l++;

Modified: manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/execute.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/execute.jsp?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/execute.jsp (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/execute.jsp Sat Mar 16 20:53:46 2013
@@ -524,6 +524,7 @@
 							EnumeratedValues srHourOfDay = null;
 							EnumeratedValues srMinutesOfHour = null;
 							Long srDuration = null;
+							boolean srRequestMinimum = false;
 
 							y = variableContext.getParameterValues("dayofweek"+indexValue);
 							if (y != null)
@@ -581,12 +582,17 @@
 								else
 									srDuration = new Long(new Long(x).longValue()*60000L);
 							}
+							x = variableContext.getParameter("invocation"+indexValue);
+							if (x != null)
+							{
+								srRequestMinimum = x.equals("minimal");
+							}
 							
 							x = variableContext.getParameter("recordop"+j);
 							if (x == null || !x.equals("Remove Schedule"))
 							{
 								ScheduleRecord sr = new ScheduleRecord(srDayOfWeek,srMonthOfYear,srDayOfMonth,srYear,srHourOfDay,srMinutesOfHour,
-									null,srDuration);
+									null,srDuration,srRequestMinimum);
 								job.addScheduleRecord(sr);
 							}
 							j++;
@@ -604,6 +610,7 @@
 						EnumeratedValues srHourOfDay = null;
 						EnumeratedValues srMinutesOfHour = null;
 						Long srDuration = null;
+						boolean srRequestMinimum = false;
 
 						y = variableContext.getParameterValues("dayofweek");
 						if (y != null)
@@ -661,8 +668,14 @@
 							else
 								srDuration = new Long(new Long(x).longValue() * 60000L);
 						}
+						x = variableContext.getParameter("invocation");
+						if (x != null)
+						{
+							srRequestMinimum = x.equals("minimal");
+						}
+
 						ScheduleRecord sr = new ScheduleRecord(srDayOfWeek,srMonthOfYear,srDayOfMonth,srYear,srHourOfDay,srMinutesOfHour,
-							null,srDuration);
+							null,srDuration,srRequestMinimum);
 						job.addScheduleRecord(sr);
 					}
 
@@ -894,11 +907,11 @@
 		}
 		else if (op != null && type != null && type.equals("jobstatus"))
 		{
-			if (op.equals("Start"))
+			if (op.equals("Start") || op.equals("StartMinimal"))
 			{
 				// -- Start a job --
 				String jobID = variableContext.getParameter("jobid");
-				manager.manualStart(new Long(jobID));
+				manager.manualStart(new Long(jobID),op.equals("StartMinimal"));
 				// Forward to showjobstatus
 %>
 				<jsp:forward page="showjobstatus.jsp"/>
@@ -924,11 +937,11 @@
 				<jsp:forward page="showjobstatus.jsp"/>
 <%
 			}
-			else if (op.equals("Restart"))
+			else if (op.equals("Restart") || op.equals("RestartMinimal"))
 			{
 				// -- Restart a job --
 				String jobID = variableContext.getParameter("jobid");
-				manager.manualAbortRestart(new Long(jobID));
+				manager.manualAbortRestart(new Long(jobID),op.equals("RestartMinimal"));
 				// Forward to showjobstatus
 %>
 				<jsp:forward page="showjobstatus.jsp"/>

Modified: manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/showjobstatus.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/showjobstatus.jsp?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/showjobstatus.jsp (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/showjobstatus.jsp Sat Mar 16 20:53:46 2013
@@ -44,6 +44,13 @@ boolean maintenanceUnderway = org.apache
 		document.liststatuses.submit();
 	}
 
+	function StartMinimal(jobID)
+	{
+		document.liststatuses.op.value="StartMinimal";
+		document.liststatuses.jobid.value=jobID;
+		document.liststatuses.submit();
+	}
+
 	function Abort(jobID)
 	{
 		document.liststatuses.op.value="Abort";
@@ -58,6 +65,13 @@ boolean maintenanceUnderway = org.apache
 		document.liststatuses.submit();
 	}
 
+	function RestartMinimal(jobID)
+	{
+		document.liststatuses.op.value="RestartMinimal";
+		document.liststatuses.jobid.value=jobID;
+		document.liststatuses.submit();
+	}
+
 	function Pause(jobID)
 	{
 		document.liststatuses.op.value="Pause";
@@ -117,66 +131,66 @@ if (maintenanceUnderway == false)
 		switch (status)
 		{
 		case JobStatus.JOBSTATUS_NOTYETRUN:
-			statusName = "Not yet run";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Notyetrun");
 			break;
 		case JobStatus.JOBSTATUS_RUNNING:
-			statusName = "Running";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Running");
 			break;
 		case JobStatus.JOBSTATUS_RUNNING_UNINSTALLED:
-			statusName = "Running, no connector";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Runningnoconnector");
 			break;
 		case JobStatus.JOBSTATUS_ABORTING:
-			statusName = "Aborting";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Aborting");
 			break;
 		case JobStatus.JOBSTATUS_RESTARTING:
-			statusName = "Restarting";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Restarting");
 			break;
 		case JobStatus.JOBSTATUS_STOPPING:
-			statusName = "Stopping";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Stopping");
 			break;
 		case JobStatus.JOBSTATUS_RESUMING:
-			statusName = "Resuming";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Resuming");
 			break;
 		case JobStatus.JOBSTATUS_PAUSED:
-			statusName = "Paused";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Paused");
 			break;
 		case JobStatus.JOBSTATUS_COMPLETED:
-			statusName = "Done";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Done");
 			break;
 		case JobStatus.JOBSTATUS_WINDOWWAIT:
-			statusName = "Waiting";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus,Waiting");
 			break;
 		case JobStatus.JOBSTATUS_STARTING:
-			statusName = "Starting up";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Startingup");
 			break;
 		case JobStatus.JOBSTATUS_DESTRUCTING:
-			statusName = "Cleaning up";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Cleaningup");
 			break;
 		case JobStatus.JOBSTATUS_JOBENDCLEANUP:
-			statusName = "Terminating";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Terminating");
 			break;
 		case JobStatus.JOBSTATUS_JOBENDNOTIFICATION:
-			statusName = "End notification";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Endnotification");
 			break;
 		case JobStatus.JOBSTATUS_ERROR:
-			statusName = "Error: "+js.getErrorText();
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.ErrorColon")+" "+js.getErrorText();
 			break;
 		default:
-			statusName = "Unknown";
+			statusName = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Unknown");
 			break;
 		}
-		String startTime = "Not started";
+		String startTime = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Notstarted");
 		if (js.getStartTime() != -1L)
 			startTime = new Date(js.getStartTime()).toString();
-		String endTime = "Aborted";
+		String endTime = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Aborted");
 		if (js.getStartTime() == -1L)
-			endTime = "Never run";
+			endTime = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Neverrun");
 		else
 		{
 			if (js.getEndTime() == -1L)
 			{
 				if (status == JobStatus.JOBSTATUS_COMPLETED)
-					endTime = "Aborted";
+					endTime = Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Aborted");
 				else
 					endTime = "";
 			}
@@ -192,7 +206,8 @@ if (maintenanceUnderway == false)
 			status == JobStatus.JOBSTATUS_ERROR)
 		{
 %>
-				<a href='<%="javascript:Start(\""+js.getJobID()+"\")"%>' alt='<%="Start job "+js.getJobID()%>'>Start</a>&nbsp;
+				<a href='<%="javascript:Start(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Startjob")+" "+js.getJobID()%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Start")%></nobr></a>&nbsp;
+				<a href='<%="javascript:StartMinimal(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Startjob")+" "+js.getJobID()+" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.minimally")%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Startminimal")%></nobr></a>&nbsp;
 <%
 		}
 		if (status == JobStatus.JOBSTATUS_RUNNING ||
@@ -202,7 +217,8 @@ if (maintenanceUnderway == false)
 			status == JobStatus.JOBSTATUS_STARTING)
 		{
 %>
-				<a href='<%="javascript:Restart(\""+js.getJobID()+"\")"%>' alt='<%="Restart job "+js.getJobID()%>'>Restart</a>&nbsp;
+				<a href='<%="javascript:Restart(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Restartjob")+" "+js.getJobID()%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Restart")%></nobr></a>&nbsp;
+				<a href='<%="javascript:RestartMinimal(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Restartjob")+" "+js.getJobID()+" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.minimally")%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Restartminimal")%></nobr></a>&nbsp;
 <%
 		}
 		if (status == JobStatus.JOBSTATUS_RUNNING ||
@@ -210,7 +226,7 @@ if (maintenanceUnderway == false)
 			status == JobStatus.JOBSTATUS_WINDOWWAIT)
 		{
 %>
-				<a href='<%="javascript:Pause(\""+js.getJobID()+"\")"%>' alt='<%="Pause job "+js.getJobID()%>'>Pause</a>&nbsp;
+				<a href='<%="javascript:Pause(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Pausejob")+" "+js.getJobID()%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Pause")%></nobr></a>&nbsp;
 <%
 		}
 		if (status == JobStatus.JOBSTATUS_RUNNING ||
@@ -223,13 +239,13 @@ if (maintenanceUnderway == false)
 			status == JobStatus.JOBSTATUS_RESTARTING)
 		{
 %>
-				<a href='<%="javascript:Abort(\""+js.getJobID()+"\")"%>' alt='<%="Abort job "+js.getJobID()%>'>Abort</a>&nbsp;
+				<a href='<%="javascript:Abort(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Abortjob")+" "+js.getJobID()%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Abort")%></nobr></a>&nbsp;
 <%
 		}
 		if (status == JobStatus.JOBSTATUS_PAUSED)
 		{
 %>
-				<a href='<%="javascript:Resume(\""+js.getJobID()+"\")"%>' alt='<%="Resume job "+js.getJobID()%>'>Resume</a>&nbsp;
+				<a href='<%="javascript:Resume(\""+js.getJobID()+"\")"%>' alt='<%=Messages.getAttributeString(pageContext.getRequest().getLocale(),"showjobstatus.Resumejob")+" "+js.getJobID()%>'><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"showjobstatus.Resume")%></nobr></a>&nbsp;
 <%
 		}
 %>

Modified: manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/viewjob.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/viewjob.jsp?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/viewjob.jsp (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/crawler-ui/src/main/webapp/viewjob.jsp Sat Mar 16 20:53:46 2013
@@ -139,7 +139,8 @@
 				<td class="separator" colspan="4"><hr/></td>
 			</tr>
 			<tr>
-				<td class="description" colspan="1"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.NameColon")%></nobr></td><td class="value" colspan="3" ><%="<!--jobid="+jobID+"-->"%><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(job.getDescription())%></td>
+				<td class="description" colspan="1"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.NameColon")%></nobr></td>
+				<td class="value" colspan="3" ><%="<!--jobid="+jobID+"-->"%><%=org.apache.manifoldcf.ui.util.Encoder.bodyEscape(job.getDescription())%></td>
 			</tr>
 			<tr>
 				<td class="separator" colspan="4"><hr/></td>
@@ -154,8 +155,10 @@
 				<td class="separator" colspan="4"><hr/></td>
 			</tr>
 			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.PriorityColon")%></nobr></td><td class="value"><%=priority%></td>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.StartMethodColon")%></nobr></td><td class="value"><%=startMethod%></td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.PriorityColon")%></nobr></td>
+				<td class="value"><%=priority%></td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.StartMethodColon")%></nobr></td>
+				<td class="value"><%=startMethod%></td>
 			</tr>
 <%
 		if (model != -1 && model != IRepositoryConnector.MODEL_ADD_CHANGE_DELETE)
@@ -165,13 +168,16 @@
 				<td class="separator" colspan="4"><hr/></td>
 			</tr>
 			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ScheduleTypeColon")%></nobr></td><td class="value"><nobr><%=jobType%></nobr></td>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.MinimumRecrawlIntervalColon")%></nobr></td><td class="value"><nobr><%=intervalString%></nobr>
-				</td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ScheduleTypeColon")%></nobr></td>
+				<td class="value"><nobr><%=jobType%></nobr></td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.MinimumRecrawlIntervalColon")%></nobr></td>
+				<td class="value"><nobr><%=intervalString%></nobr></td>
 			</tr>
 			<tr>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ExpirationIntervalColon")%></nobr></td><td class="value"><nobr><%=expirationIntervalString%></nobr></td>
-				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ReseedIntervalColon")%></nobr></td><td class="value"><nobr><%=reseedIntervalString%></nobr></td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ExpirationIntervalColon")%></nobr></td>
+				<td class="value"><nobr><%=expirationIntervalString%></nobr></td>
+				<td class="description"><nobr><%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ReseedIntervalColon")%></nobr></td>
+				<td class="value"><nobr><%=reseedIntervalString%></nobr></td>
 			</tr>
 <%
 		}
@@ -195,6 +201,7 @@
 			{
 				ScheduleRecord sr = job.getScheduleRecord(j);
 				Long srDuration = sr.getDuration();
+				boolean srRequestMinimum = sr.getRequestMinimum();
 				EnumeratedValues srDayOfWeek = sr.getDayOfWeek();
 				EnumeratedValues srMonthOfYear = sr.getMonthOfYear();
 				EnumeratedValues srDayOfMonth = sr.getDayOfMonth();
@@ -330,7 +337,7 @@
 					if (srMonthOfYear == null)
 					{
 						if (srDayOfMonth == null && srDayOfWeek == null && srHourOfDay == null && srMinutesOfHour == null)
-							out.println(" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.inJanuary"));
+							out.println(" "+Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.ineverymonthofyear"));
 					}
 					else
 					{
@@ -489,15 +496,13 @@
 						out.println(sb.toString());
 					}
 %>
-
-
 				</td>
 			</tr>
 			<tr>
 				<td class="description">
 					<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.MaximumRunTimeColon")%>
 				</td>
-				<td class="value" colspan="3">
+				<td class="value">
 <%
 					if (srDuration == null)
 						out.println(Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.Nolimit"));
@@ -505,8 +510,18 @@
 						out.println(new Long(srDuration.longValue()/60000L).toString() + " "+Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.minutes"));
 %>
 				</td>
+				<td class="description">
+					<%=Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.JobInvocationColon")%>
+				</td>
+				<td class="value">
+<%
+					if (srRequestMinimum)
+						out.println(Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.Minimal"));
+					else
+						out.println(Messages.getBodyString(pageContext.getRequest().getLocale(),"viewjob.Complete"));
+%>
+				</td>
 			</tr>
-
 <%
 				j++;
 			}

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/AddScheduledTime.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/AddScheduledTime.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/AddScheduledTime.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/AddScheduledTime.java Sat Mar 16 20:53:46 2013
@@ -28,265 +28,272 @@ import java.util.*;
 */
 public class AddScheduledTime
 {
-        public static final String _rcsid = "@(#)$Id: AddScheduledTime.java 988245 2010-08-23 18:39:35Z kwright $";
+  public static final String _rcsid = "@(#)$Id: AddScheduledTime.java 988245 2010-08-23 18:39:35Z kwright $";
 
-        private AddScheduledTime()
-        {
-        }
-
-        public static void main(String[] args)
-        {
-                if (args.length != 8)
-                {
-                        System.err.println("Usage: AddScheduledTime <jobid> <interval_minutes> <day_of_week_list>");
-                        System.err.println("            <day_of_month_list> <month_list> <year_list> <hour_list> <minute_list>");
-                        System.err.println("");
-                        System.err.println("If <interval_minutes> is an empty string, no interval limit");
-                        System.err.println("All lists are comma-separated");
-                        System.err.println("All list values can be empty to indicate no constraint");
-                        System.err.println("Days of week are lower case, full day names, e.g. tuesday");
-                        System.err.println("Months are full month names in lower case, e.g. january");
-                        System.err.println("Years are full year values, e.g. 1999");
-                        System.err.println("Hours include am or pm in lower case, e.g. 12am or 2pm");
-
-                        System.exit(1);
-                }
-
-                String jobID = args[0];
-                String interval = args[1];
-                String dayOfWeekList = args[2];
-                String dayOfMonthList = args[3];
-                String monthList = args[4];
-                String yearList = args[5];
-                String hourList = args[6];
-                String minuteList = args[7];
-
-                try
-                {
-                        ManifoldCF.initializeEnvironment();
-                        IThreadContext tc = ThreadContextFactory.make();
-                        IJobManager jobManager = JobManagerFactory.make(tc);
-
-                        IJobDescription desc = jobManager.load(new Long(jobID));
-                        if (desc == null)
-                                throw new ManifoldCFException("No such job: '"+jobID+"'");
-
-                        ScheduleRecord sr = new ScheduleRecord(
-                                parseDayOfWeek(dayOfWeekList),
-                                parseMonthOfYear(monthList),
-                                parseDayOfMonth(dayOfMonthList),
-                                parseYear(yearList),
-                                parseHourOfDay(hourList),
-                                parseMinutes(minuteList),
-                                null,
-                                (interval.length()>0)?new Long(interval):null);
-
-                        desc.addScheduleRecord(sr);
-                        jobManager.save(desc);
-
-                        System.out.println("Job updated");
-                }
-                catch (Exception e)
-                {
-                        e.printStackTrace();
-                        System.exit(2);
-                }
-        }
-
-        protected static EnumeratedValues parseDayOfWeek(String list)
-                throws Exception
-        {
-                if (list.length() == 0)
-                        return null;
-
-                StringBuilder sb = new StringBuilder();
-                int index = 0;
-                while (true)
-                {
-                        if (index != 0)
-                                sb.append(",");
-                        int newIndex = list.indexOf(",",index);
-                        if (newIndex == -1)
-                        {
-                                sb.append(new Integer(mapToWeekday(list.substring(index))).toString());
-                                break;
-                        }
-                        sb.append(new Integer(mapToWeekday(list.substring(index,newIndex))).toString());
-                        index = newIndex+1;
-                }
-                return new EnumeratedValues(sb.toString());
-        }
-
-        protected static int mapToWeekday(String day)
-                throws Exception
-        {
-                if (day.equals("sunday"))
-                        return 0;
-                if (day.equals("monday"))
-                        return 1;
-                if (day.equals("tuesday"))
-                        return 2;
-                if (day.equals("wednesday"))
-                        return 3;
-                if (day.equals("thursday"))
-                        return 4;
-                if (day.equals("friday"))
-                        return 5;
-                if (day.equals("saturday"))
-                        return 6;
-                throw new ManifoldCFException("Bad day of week: '"+day+"'");
-        }
-
-        protected static EnumeratedValues parseMonthOfYear(String list)
-                throws Exception
-        {
-                if (list.length() == 0)
-                        return null;
-
-                StringBuilder sb = new StringBuilder();
-                int index = 0;
-                while (true)
-                {
-                        if (index != 0)
-                                sb.append(",");
-                        int newIndex = list.indexOf(",",index);
-                        if (newIndex == -1)
-                        {
-                                sb.append(new Integer(mapToMonth(list.substring(index))).toString());
-                                break;
-                        }
-                        sb.append(new Integer(mapToMonth(list.substring(index,newIndex))).toString());
-                        index = newIndex+1;
-                }
-                return new EnumeratedValues(sb.toString());
-
-        }
-
-        protected static int mapToMonth(String day)
-                throws Exception
-        {
-                if (day.equals("january"))
-                        return 0;
-                if (day.equals("february"))
-                        return 1;
-                if (day.equals("march"))
-                        return 2;
-                if (day.equals("april"))
-                        return 3;
-                if (day.equals("may"))
-                        return 4;
-                if (day.equals("june"))
-                        return 5;
-                if (day.equals("july"))
-                        return 6;
-                if (day.equals("august"))
-                        return 7;
-                if (day.equals("september"))
-                        return 8;
-                if (day.equals("october"))
-                        return 9;
-                if (day.equals("november"))
-                        return 10;
-                if (day.equals("december"))
-                        return 11;
-
-                throw new ManifoldCFException("Bad month: '"+day+"'");
-        }
-
-        protected static EnumeratedValues parseDayOfMonth(String list)
-                throws Exception
-        {
-                // Zero based internally
-                if (list.length() == 0)
-                        return null;
-
-                StringBuilder sb = new StringBuilder();
-                int index = 0;
-                while (true)
-                {
-                        if (index != 0)
-                                sb.append(",");
-                        int newIndex = list.indexOf(",",index);
-                        if (newIndex == -1)
-                        {
-                                sb.append(new Integer(new Integer(list.substring(index)).intValue() - 1).toString());
-                                break;
-                        }
-                        sb.append(new Integer(new Integer(list.substring(index,newIndex)).intValue() - 1).toString());
-                        index = newIndex+1;
-                }
-                return new EnumeratedValues(sb.toString());
-        }
-
-        protected static EnumeratedValues parseYear(String list)
-                throws Exception
-        {
-                if (list.length() == 0)
-                        return null;
-                return new EnumeratedValues(list);
-        }
-
-        protected static EnumeratedValues parseHourOfDay(String list)
-                throws Exception
-        {
-                if (list.length() == 0)
-                        return null;
-
-                StringBuilder sb = new StringBuilder();
-                int index = 0;
-                while (true)
-                {
-                        if (index != 0)
-                                sb.append(",");
-                        int newIndex = list.indexOf(",",index);
-                        if (newIndex == -1)
-                        {
-                                sb.append(new Integer(mapToHour(list.substring(index))).toString());
-                                break;
-                        }
-                        sb.append(new Integer(mapToHour(list.substring(index,newIndex))).toString());
-                        index = newIndex+1;
-                }
-                return new EnumeratedValues(sb.toString());
-
-        }
-
-        protected static int mapToHour(String hour)
-                throws Exception
-        {
-                boolean isPM;
-                String value;
-                if (hour.endsWith("am"))
-                {
-                        isPM = false;
-                        value = hour.substring(0,hour.length()-2);
-                }
-                else if (hour.endsWith("pm"))
-                {
-                        isPM = true;
-                        value = hour.substring(0,hour.length()-2);
-                }
-                else
-                {
-                        isPM = false;
-                        value = hour;
-                }
-
-                int rval = new Integer(value).intValue();
-                if (rval == 12)
-                        rval = 0;
-                if (isPM)
-                        rval += 12;
-                return rval;
-        }
-
-        protected static EnumeratedValues parseMinutes(String list)
-                throws Exception
-        {
-                if (list.length() == 0)
-                        return null;
+  private AddScheduledTime()
+  {
+  }
+
+  public static void main(String[] args)
+  {
+    if (args.length != 8 && args.length != 9)
+    {
+      System.err.println("Usage: AddScheduledTime <jobid> <interval_minutes> <day_of_week_list>");
+      System.err.println("      <day_of_month_list> <month_list> <year_list> <hour_list> <minute_list> [<request_minimum>]");
+      System.err.println("");
+      System.err.println("If <interval_minutes> is an empty string, no interval limit");
+      System.err.println("All lists are comma-separated");
+      System.err.println("All list values can be empty to indicate no constraint");
+      System.err.println("Days of week are lower case, full day names, e.g. tuesday");
+      System.err.println("Months are full month names in lower case, e.g. january");
+      System.err.println("Years are full year values, e.g. 1999");
+      System.err.println("Hours include am or pm in lower case, e.g. 12am or 2pm");
+      System.err.println("<request_minimum> is 'true' or 'false'");
+
+      System.exit(1);
+    }
+
+    String jobID = args[0];
+    String interval = args[1];
+    String dayOfWeekList = args[2];
+    String dayOfMonthList = args[3];
+    String monthList = args[4];
+    String yearList = args[5];
+    String hourList = args[6];
+    String minuteList = args[7];
+    String requestMinimum;
+    if (args.length == 9)
+      requestMinimum = args[8];
+    else
+      requestMinimum = "false";
+
+    try
+    {
+      ManifoldCF.initializeEnvironment();
+      IThreadContext tc = ThreadContextFactory.make();
+      IJobManager jobManager = JobManagerFactory.make(tc);
+
+      IJobDescription desc = jobManager.load(new Long(jobID));
+      if (desc == null)
+        throw new ManifoldCFException("No such job: '"+jobID+"'");
+
+      ScheduleRecord sr = new ScheduleRecord(
+        parseDayOfWeek(dayOfWeekList),
+        parseMonthOfYear(monthList),
+        parseDayOfMonth(dayOfMonthList),
+        parseYear(yearList),
+        parseHourOfDay(hourList),
+        parseMinutes(minuteList),
+        null,
+        (interval.length()>0)?new Long(interval):null,
+        requestMinimum.equals("true"));
+
+      desc.addScheduleRecord(sr);
+      jobManager.save(desc);
+
+      System.out.println("Job updated");
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+      System.exit(2);
+    }
+  }
+
+  protected static EnumeratedValues parseDayOfWeek(String list)
+    throws Exception
+  {
+    if (list.length() == 0)
+      return null;
+
+    StringBuilder sb = new StringBuilder();
+    int index = 0;
+    while (true)
+    {
+      if (index != 0)
+        sb.append(",");
+      int newIndex = list.indexOf(",",index);
+      if (newIndex == -1)
+      {
+        sb.append(new Integer(mapToWeekday(list.substring(index))).toString());
+        break;
+      }
+      sb.append(new Integer(mapToWeekday(list.substring(index,newIndex))).toString());
+      index = newIndex+1;
+    }
+    return new EnumeratedValues(sb.toString());
+  }
+
+  protected static int mapToWeekday(String day)
+    throws Exception
+  {
+    if (day.equals("sunday"))
+      return 0;
+    if (day.equals("monday"))
+      return 1;
+    if (day.equals("tuesday"))
+      return 2;
+    if (day.equals("wednesday"))
+      return 3;
+    if (day.equals("thursday"))
+      return 4;
+    if (day.equals("friday"))
+      return 5;
+    if (day.equals("saturday"))
+      return 6;
+    throw new ManifoldCFException("Bad day of week: '"+day+"'");
+  }
+
+  protected static EnumeratedValues parseMonthOfYear(String list)
+    throws Exception
+  {
+    if (list.length() == 0)
+      return null;
+
+    StringBuilder sb = new StringBuilder();
+    int index = 0;
+    while (true)
+    {
+      if (index != 0)
+        sb.append(",");
+      int newIndex = list.indexOf(",",index);
+      if (newIndex == -1)
+      {
+        sb.append(new Integer(mapToMonth(list.substring(index))).toString());
+        break;
+      }
+      sb.append(new Integer(mapToMonth(list.substring(index,newIndex))).toString());
+      index = newIndex+1;
+    }
+    return new EnumeratedValues(sb.toString());
+
+  }
+
+  protected static int mapToMonth(String day)
+    throws Exception
+  {
+    if (day.equals("january"))
+      return 0;
+    if (day.equals("february"))
+      return 1;
+    if (day.equals("march"))
+      return 2;
+    if (day.equals("april"))
+      return 3;
+    if (day.equals("may"))
+      return 4;
+    if (day.equals("june"))
+      return 5;
+    if (day.equals("july"))
+      return 6;
+    if (day.equals("august"))
+      return 7;
+    if (day.equals("september"))
+      return 8;
+    if (day.equals("october"))
+      return 9;
+    if (day.equals("november"))
+      return 10;
+    if (day.equals("december"))
+      return 11;
+
+    throw new ManifoldCFException("Bad month: '"+day+"'");
+  }
+
+  protected static EnumeratedValues parseDayOfMonth(String list)
+    throws Exception
+  {
+    // Zero based internally
+    if (list.length() == 0)
+      return null;
+
+    StringBuilder sb = new StringBuilder();
+    int index = 0;
+    while (true)
+    {
+      if (index != 0)
+        sb.append(",");
+      int newIndex = list.indexOf(",",index);
+      if (newIndex == -1)
+      {
+        sb.append(new Integer(new Integer(list.substring(index)).intValue() - 1).toString());
+        break;
+      }
+      sb.append(new Integer(new Integer(list.substring(index,newIndex)).intValue() - 1).toString());
+      index = newIndex+1;
+    }
+    return new EnumeratedValues(sb.toString());
+  }
+
+  protected static EnumeratedValues parseYear(String list)
+    throws Exception
+  {
+    if (list.length() == 0)
+      return null;
+    return new EnumeratedValues(list);
+  }
+
+  protected static EnumeratedValues parseHourOfDay(String list)
+    throws Exception
+  {
+    if (list.length() == 0)
+      return null;
+
+    StringBuilder sb = new StringBuilder();
+    int index = 0;
+    while (true)
+    {
+      if (index != 0)
+        sb.append(",");
+      int newIndex = list.indexOf(",",index);
+      if (newIndex == -1)
+      {
+        sb.append(new Integer(mapToHour(list.substring(index))).toString());
+        break;
+      }
+      sb.append(new Integer(mapToHour(list.substring(index,newIndex))).toString());
+      index = newIndex+1;
+    }
+    return new EnumeratedValues(sb.toString());
+
+  }
+
+  protected static int mapToHour(String hour)
+    throws Exception
+  {
+    boolean isPM;
+    String value;
+    if (hour.endsWith("am"))
+    {
+      isPM = false;
+      value = hour.substring(0,hour.length()-2);
+    }
+    else if (hour.endsWith("pm"))
+    {
+      isPM = true;
+      value = hour.substring(0,hour.length()-2);
+    }
+    else
+    {
+      isPM = false;
+      value = hour;
+    }
+
+    int rval = new Integer(value).intValue();
+    if (rval == 12)
+      rval = 0;
+    if (isPM)
+      rval += 12;
+    return rval;
+  }
+
+  protected static EnumeratedValues parseMinutes(String list)
+    throws Exception
+  {
+    if (list.length() == 0)
+      return null;
 
-                return new EnumeratedValues(list);
-        }
+    return new EnumeratedValues(list);
+  }
 
 }

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/GetJobSchedule.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/GetJobSchedule.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/GetJobSchedule.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/GetJobSchedule.java Sat Mar 16 20:53:46 2013
@@ -41,7 +41,7 @@ public class GetJobSchedule
       System.err.println("Usage: GetJobSchedule <job_id>");
       System.err.println("");
       System.err.println("The result will be UTF-8 encoded and will consist of the following columns:");
-      System.err.println("    daysofweek,years,months,days,hours,minutes,timezone,duration");
+      System.err.println("    daysofweek,years,months,days,hours,minutes,timezone,duration,requestminimum");
       System.exit(1);
     }
 
@@ -70,7 +70,8 @@ public class GetJobSchedule
           enumerate(sr.getHourOfDay())+","+
           enumerate(sr.getMinutesOfHour())+","+
           ((sr.getTimezone()==null)?"":sr.getTimezone())+","+
-          presentInterval(sr.getDuration()));
+          presentInterval(sr.getDuration())+","+
+          (sr.getRequestMinimum()?"true":"false"));
       }
       System.err.println("Schedule list done");
     }

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java Sat Mar 16 20:53:46 2013
@@ -671,6 +671,15 @@ public interface IJobManager
   * will not cease until complete.  If the job is already running, this operation will assure that
   * the job does not pause when its window ends.  The job can be manually paused, or manually aborted.
   *@param jobID is the ID of the job to start.
+  *@param requestMinimum is true if a minimal job run is requested.
+  */
+  public void manualStart(Long jobID, boolean requestMinimum)
+    throws ManifoldCFException;
+
+  /** Manually start a job.  The specified job will be run REGARDLESS of the timed windows, and
+  * will not cease until complete.  If the job is already running, this operation will assure that
+  * the job does not pause when its window ends.  The job can be manually paused, or manually aborted.
+  *@param jobID is the ID of the job to start.
   */
   public void manualStart(Long jobID)
     throws ManifoldCFException;
@@ -685,6 +694,14 @@ public interface IJobManager
   /** Manually restart a running job.  The job will be stopped and restarted.  Any schedule affinity will be lost,
   * until the job finishes on its own.
   *@param jobID is the job to abort.
+  *@param requestMinimum is true if a minimal job run is requested.
+  */
+  public void manualAbortRestart(Long jobID, boolean requestMinimum)
+    throws ManifoldCFException;
+
+  /** Manually restart a running job.  The job will be stopped and restarted.  Any schedule affinity will be lost,
+  * until the job finishes on its own.
+  *@param jobID is the job to abort.
   */
   public void manualAbortRestart(Long jobID)
     throws ManifoldCFException;
@@ -732,7 +749,7 @@ public interface IJobManager
   *@return jobs that are active and are running in adaptive mode.  These will be seeded
   * based on what the connector says should be added to the queue.
   */
-  public JobStartRecord[] getJobsReadyForSeeding(long currentTime)
+  public JobSeedingRecord[] getJobsReadyForSeeding(long currentTime)
     throws ManifoldCFException;
 
   /** Reset a seeding job back to "active" state.
@@ -744,7 +761,7 @@ public interface IJobManager
   /** Get the list of jobs that are ready for deletion.
   *@return jobs that were in the "readyfordelete" state.
   */
-  public JobStartRecord[] getJobsReadyForDelete()
+  public JobDeleteRecord[] getJobsReadyForDelete()
     throws ManifoldCFException;
     
   /** Get the list of jobs that are ready for startup.
@@ -756,7 +773,7 @@ public interface IJobManager
   /** Find the list of jobs that need to have their connectors notified of job completion.
   *@return the ID's of jobs that need their output connectors notified in order to become inactive.
   */
-  public JobStartRecord[] getJobsReadyForInactivity()
+  public JobNotifyRecord[] getJobsReadyForInactivity()
     throws ManifoldCFException;
 
   /** Inactivate a job, from the notification state.
@@ -791,22 +808,23 @@ public interface IJobManager
   public void prepareDeleteScan(Long jobID)
     throws ManifoldCFException;
 
-  /** Prepare for a full scan.
-  *@param jobID is the job id.
-  *@param legalLinkTypes are the link types allowed for the job.
-  *@param hopcountMethod describes how to handle deletions for hopcount purposes.
-  */
-  public void prepareFullScan(Long jobID, String[] legalLinkTypes, int hopcountMethod)
-    throws ManifoldCFException;
-
-  /** Prepare for an incremental scan.
+  /** Prepare a job to be run.
+  * This method is called regardless of the details of the job; what differs is only the flags that are passed in.
+  * The code inside will determine the appropriate procedures.
+  * (This method replaces prepareFullScan() and prepareIncrementalScan(). )
   *@param jobID is the job id.
   *@param legalLinkTypes are the link types allowed for the job.
   *@param hopcountMethod describes how to handle deletions for hopcount purposes.
-  */
-  public void prepareIncrementalScan(Long jobID, String[] legalLinkTypes, int hopcountMethod)
+  *@param connectorModel is the model used by the connector for the job.
+  *@param continuousJob is true if the job is a continuous one.
+  *@param fromBeginningOfTime is true if the job is running starting from time 0.
+  *@param requestMinimum is true if the minimal amount of work is requested for the job run.
+  */
+  public void prepareJobScan(Long jobID, String[] legalLinkTypes, int hopcountMethod,
+    int connectorModel, boolean continuousJob, boolean fromBeginningOfTime,
+    boolean requestMinimum)
     throws ManifoldCFException;
-
+  
   /** Note job delete started.
   *@param jobID is the job id.
   *@param startTime is the job start time.

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnector.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnector.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnector.java Sat Mar 16 20:53:46 2013
@@ -69,9 +69,19 @@ public interface IRepositoryConnector ex
   // is the most restrictive that is still accurate.  For example, if MODEL_ADD_CHANGE_DELETE applies, you would
   // return that value rather than MODEL_ADD.
 
+  // For the CHAINED models, what the connector is describing are the documents that will be processed IF the seeded
+  // documents are followed to their leaves.  For instance, imagine a hierarchy where the root document is the only one ever
+  // seeded, but if that document is processed, and its discovered changed children are processed as well, then all documents
+  // that have been added, changed, or deleted will eventually be discovered.  In that case, model
+  // MODEL_CHAINED_ADD_CHANGE_DELETE would be appropriate.  But, if a changed node can only discover child
+  // additions and changes, then MODEL_CHAINED_ADD_CHANGE would be the right choice.
+
   /** Supply all seeds every time.  The connector does not pay any attention to the start time or end time
   * of the request, and simply returns a complete list of seeds. */
   public static final int MODEL_ALL = 0;
+  /** This indicates that the seeds are never complete; the previous seeds are lost and cannot be retrieved. */
+  public static final int MODEL_PARTIAL = 4;
+
   /** Supply at least the documents that have been added since the specified start time.  Connector is
   * aware of the start time and end time of the request, and supplies at least the documents that have been
   * added within the specified time range. */
@@ -80,9 +90,14 @@ public interface IRepositoryConnector ex
   public static final int MODEL_ADD_CHANGE = 2;
   /** Supply at least the documents that have been added, changed, or deleted within the specified time range. */
   public static final int MODEL_ADD_CHANGE_DELETE = 3;
-  /** This indicates that the seeds are never complete; the previous seeds are lost and cannot be retrieved. */
-  public static final int MODEL_PARTIAL = 4;
 
+  /** Like MODEL_ADD, except considering document discovery */
+  public static final int MODEL_CHAINED_ADD = 9;
+  /** Like MODEL_ADD_CHANGE, except considering document discovery */
+  public static final int MODEL_CHAINED_ADD_CHANGE = 10;
+  /** Like MODEL_ADD_CHANGE_DELETE, except considering document discovery */
+  public static final int MODEL_CHAINED_ADD_CHANGE_DELETE = 11;
+  
   // These are the job modes the connector may want to know about.
   // For a once-only job, it is essential that documents that are processed by processDocuments() always queue up their child links,
   // This is not true for continuous jobs, which never delete unreachable links because they never terminate.

Added: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java?rev=1457304&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java (added)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java Sat Mar 16 20:53:46 2013
@@ -0,0 +1,35 @@
+/* $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.
+*/
+package org.apache.manifoldcf.crawler.interfaces;
+
+
+/** This class is a paper object which contains a job ID.
+*/
+public class JobDeleteRecord extends JobRecord
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** Constructor.
+  */
+  public JobDeleteRecord(Long jobID)
+  {
+    super(jobID);
+  }
+
+}

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobDeleteRecord.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java?rev=1457304&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java (added)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java Sat Mar 16 20:53:46 2013
@@ -0,0 +1,35 @@
+/* $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.
+*/
+package org.apache.manifoldcf.crawler.interfaces;
+
+
+/** This class is a paper object which contains a job ID.
+*/
+public class JobNotifyRecord extends JobRecord
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** Constructor.
+  */
+  public JobNotifyRecord(Long jobID)
+  {
+    super(jobID);
+  }
+
+}

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobNotifyRecord.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java?rev=1457304&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java (added)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java Sat Mar 16 20:53:46 2013
@@ -0,0 +1,63 @@
+/* $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.
+*/
+package org.apache.manifoldcf.crawler.interfaces;
+
+
+/** This class is a paper object which contains a job ID.
+*/
+public class JobRecord
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** The job id. */
+  protected final Long jobID;
+  /** Whether this job was started or not */
+  protected boolean wasStarted = false;
+
+  /** Constructor.
+  */
+  public JobRecord(Long jobID)
+  {
+    this.jobID = jobID;
+  }
+
+  /** Get the job ID.
+  *@return the id.
+  */
+  public Long getJobID()
+  {
+    return jobID;
+  }
+
+  /** Note that the job was started.
+  */
+  public void noteStarted()
+  {
+    wasStarted = true;
+  }
+
+  /** Check whether job was started.
+  *@return true if started.
+  */
+  public boolean wasStarted()
+  {
+    return wasStarted;
+  }
+
+}

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobRecord.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java?rev=1457304&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java (added)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java Sat Mar 16 20:53:46 2013
@@ -0,0 +1,49 @@
+/* $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.
+*/
+package org.apache.manifoldcf.crawler.interfaces;
+
+
+/** This class is a paper object which contains a job ID and a last job start time (0 if none).
+*/
+public class JobSeedingRecord extends JobRecord
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** The last synch time */
+  protected final long synchTime;
+  /** Whether this job was started or not */
+  protected boolean wasStarted = false;
+
+  /** Constructor.
+  */
+  public JobSeedingRecord(Long jobID, long synchTime)
+  {
+    super(jobID);
+    this.synchTime = synchTime;
+  }
+
+  /** Get the synch time.
+  *@return the time.
+  */
+  public long getSynchTime()
+  {
+    return synchTime;
+  }
+
+}

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobSeedingRecord.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStartRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStartRecord.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStartRecord.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStartRecord.java Sat Mar 16 20:53:46 2013
@@ -19,33 +19,24 @@
 package org.apache.manifoldcf.crawler.interfaces;
 
 
-/** This class is a paper object which contains a job ID and a last job start time (0 if none).
+/** This class is a paper object which contains a job ID and a last job start time.
 */
-public class JobStartRecord
+public class JobStartRecord extends JobRecord
 {
   public static final String _rcsid = "@(#)$Id: JobStartRecord.java 988245 2010-08-23 18:39:35Z kwright $";
 
-  /** The job id. */
-  protected Long jobID;
   /** The last synch time */
-  protected long synchTime;
-  /** Whether this job was started or not */
-  protected boolean wasStarted = false;
+  protected final long synchTime;
+  /** The requestMinimum flag */
+  protected final boolean requestMinimum;
 
   /** Constructor.
   */
-  public JobStartRecord(Long jobID, long synchTime)
+  public JobStartRecord(Long jobID, long synchTime, boolean requestMinimum)
   {
-    this.jobID = jobID;
+    super(jobID);
     this.synchTime = synchTime;
-  }
-
-  /** Get the job ID.
-  *@return the id.
-  */
-  public Long getJobID()
-  {
-    return jobID;
+    this.requestMinimum = requestMinimum;
   }
 
   /** Get the synch time.
@@ -56,19 +47,12 @@ public class JobStartRecord
     return synchTime;
   }
 
-  /** Note that the job was started.
+  /** Get the requestMinimum flag.
+  *@return the flag.
   */
-  public void noteStarted()
+  public boolean getRequestMinimum()
   {
-    wasStarted = true;
+    return requestMinimum;
   }
-
-  /** Check whether job was started.
-  *@return true if started.
-  */
-  public boolean wasStarted()
-  {
-    return wasStarted;
-  }
-
+  
 }

Modified: manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ScheduleRecord.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ScheduleRecord.java?rev=1457304&r1=1457303&r2=1457304&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ScheduleRecord.java (original)
+++ manifoldcf/branches/CONNECTORS-663/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ScheduleRecord.java Sat Mar 16 20:53:46 2013
@@ -31,15 +31,16 @@ public class ScheduleRecord
   public static final String _rcsid = "@(#)$Id: ScheduleRecord.java 988245 2010-08-23 18:39:35Z kwright $";
 
   // Absolute job-triggering times
-  protected EnumeratedValues dayOfWeek = null;
-  protected EnumeratedValues monthOfYear = null;
-  protected EnumeratedValues dayOfMonth = null;
-  protected EnumeratedValues year = null;
-  protected EnumeratedValues hourOfDay = null;
-  protected EnumeratedValues minutesOfHour = null;
-  protected String timezone = null;
-  protected Long duration = null;
-
+  protected final EnumeratedValues dayOfWeek;
+  protected final EnumeratedValues monthOfYear;
+  protected final EnumeratedValues dayOfMonth;
+  protected final EnumeratedValues year;
+  protected final EnumeratedValues hourOfDay;
+  protected final EnumeratedValues minutesOfHour;
+  protected final String timezone;
+  protected final Long duration;
+  protected final boolean requestMinimum;
+  
   /** Constructor.
   *@param dayOfWeek is the day-of-week enumeration.
   *@param monthOfYear is the month-of-year enumeration.
@@ -57,7 +58,8 @@ public class ScheduleRecord
     EnumeratedValues hourOfDay,
     EnumeratedValues minutesOfHour,
     String timezone,
-    Long duration)
+    Long duration,
+    boolean requestMinimum)
   {
     this.dayOfWeek = dayOfWeek;
     this.monthOfYear = monthOfYear;
@@ -67,6 +69,7 @@ public class ScheduleRecord
     this.minutesOfHour = minutesOfHour;
     this.timezone = timezone;
     this.duration = duration;
+    this.requestMinimum = requestMinimum;
   }
 
   /** Get the day of week.
@@ -133,6 +136,12 @@ public class ScheduleRecord
     return duration;
   }
 
-
+  /** Get whether the schedule record corresponds to a minimal request or not.
+  *@return true if minimal request.
+  */
+  public boolean getRequestMinimum()
+  {
+    return requestMinimum;
+  }
 
 }