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 2015/06/04 14:05:10 UTC

svn commit: r1683529 - in /manifoldcf/trunk: ./ connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/ connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/ connectors/e...

Author: kwright
Date: Thu Jun  4 12:05:10 2015
New Revision: 1683529

URL: http://svn.apache.org/r1683529
Log:
Fix for CONNECTORS-1208.

Modified:
    manifoldcf/trunk/CHANGES.txt
    manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConfig.java
    manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConnector.java
    manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_en_US.properties
    manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_ja_JP.properties
    manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_zh_CN.properties
    manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationHeader.js
    manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationView.html
    manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/Specification_Message.html

Modified: manifoldcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Thu Jun  4 12:05:10 2015
@@ -3,6 +3,9 @@ $Id$
 
 ======================= 2.2-dev =====================
 
+CONNECTORS-1208: Provide more full-featured notification ability.
+(Karl Wright)
+
 CONNECTORS-1204: Add ability to post original binary length of document
 to Solr from JCIFS connector.  Also improve efficiency of JCIFS connector.
 (Karl Wright)

Modified: manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConfig.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConfig.java?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConfig.java (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConfig.java Thu Jun  4 12:05:10 2015
@@ -74,6 +74,13 @@ public class EmailConfig {
 
   // Specification nodes
   
+  public static final String NODE_FINISHED = "finished";
+  public static final String NODE_ERRORABORTED = "erroraborted";
+  public static final String NODE_MANUALABORTED = "manualaborted";
+  public static final String NODE_MANUALPAUSED = "manualpaused";
+  public static final String NODE_SCHEDULEPAUSED = "schedulepaused";
+  public static final String NODE_RESTARTED = "restarted";
+  
   public static final String NODE_TO = "to";
   public static final String NODE_FROM = "from";
   public static final String NODE_SUBJECT = "subject";

Modified: manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConnector.java?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConnector.java (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/email/EmailConnector.java Thu Jun  4 12:05:10 2015
@@ -216,28 +216,63 @@ public class EmailConnector extends org.
 
   //////////////////////////////Start of Notification Connector Method///////////////////////////////////
 
-  /** Notify of job stop.
+  /** Notify of job stop due to error abort.
   *@param spec is the notification specification.
   */
   @Override
-  public void notifyOfJobStop(Specification spec)
+  public void notifyOfJobStopErrorAbort(final Specification spec)
     throws ManifoldCFException, ServiceInterruption {
-    sendMail(spec);
+    sendMail(spec, EmailConfig.NODE_ERRORABORTED);
   }
-  
+
+  /** Notify of job stop due to manual abort.
+  *@param spec is the notification specification.
+  */
+  @Override
+  public void notifyOfJobStopManualAbort(final Specification spec)
+    throws ManifoldCFException, ServiceInterruption {
+    sendMail(spec, EmailConfig.NODE_MANUALABORTED);
+  }
+
+  /** Notify of job stop due to manual pause.
+  *@param spec is the notification specification.
+  */
+  @Override
+  public void notifyOfJobStopManualPause(final Specification spec)
+    throws ManifoldCFException, ServiceInterruption {
+    sendMail(spec, EmailConfig.NODE_MANUALPAUSED);
+  }
+
+  /** Notify of job stop due to schedule pause.
+  *@param spec is the notification specification.
+  */
+  @Override
+  public void notifyOfJobStopSchedulePause(final Specification spec)
+    throws ManifoldCFException, ServiceInterruption {
+    sendMail(spec, EmailConfig.NODE_SCHEDULEPAUSED);
+  }
+
+  /** Notify of job stop due to restart.
+  *@param spec is the notification specification.
+  */
+  @Override
+  public void notifyOfJobStopRestart(final Specification spec)
+    throws ManifoldCFException, ServiceInterruption {
+    sendMail(spec, EmailConfig.NODE_RESTARTED);
+  }
+
   /** Notify of job end.
   *@param spec is the notification specification.
   */
   @Override
-  public void notifyOfJobEnd(Specification spec)
+  public void notifyOfJobEnd(final Specification spec)
     throws ManifoldCFException, ServiceInterruption {
-    sendMail(spec);
+    sendMail(spec, EmailConfig.NODE_FINISHED);
   }
 
-  protected void sendMail(Specification spec)
+  protected void sendMail(final Specification spec, final String nodeType)
     throws ManifoldCFException, ServiceInterruption
   {
-    // Grab the necessary info from the spec
     final List<String> to = new ArrayList<String>();
     String from = null;
     String subject = "";
@@ -253,6 +288,30 @@ public class EmailConnector extends org.
       else if (sn.getType().equals(EmailConfig.NODE_BODY))
         body = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
     }
+    // Look for node of the specified type
+    if (nodeType != null)
+    {
+      for (int i = 0; i < spec.getChildCount(); i++) {
+        SpecificationNode childNode = spec.getChild(i);
+        if (childNode.getType().equals(nodeType))
+        {
+          for (int j = 0; j < childNode.getChildCount(); i++) {
+            SpecificationNode sn = childNode.getChild(j);
+            if (sn.getType().equals(EmailConfig.NODE_TO))
+              to.add(sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE));
+            else if (sn.getType().equals(EmailConfig.NODE_FROM))
+              from = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            else if (sn.getType().equals(EmailConfig.NODE_SUBJECT))
+              subject = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            else if (sn.getType().equals(EmailConfig.NODE_BODY))
+              body = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+          }
+        }
+      }
+    }
+    
+    if (to.size() == 0)
+      return;
     
     // Construct and send an email
     getSession();
@@ -519,13 +578,14 @@ public class EmailConnector extends org.
   */
   protected static void fillInMessageTab(Map<String, Object> paramMap,
     Specification ds) {
+      
+    // Preload default values, for backwards compatibility
     String toValue = "";
     String fromValue = "";
     String subjectValue = "";
     String bodyValue = "";
-    int i = 0;
-    while (i < ds.getChildCount()) {
-      SpecificationNode sn = ds.getChild(i++);
+    for (int i = 0; i < ds.getChildCount(); i++) {
+      SpecificationNode sn = ds.getChild(i);
       if (sn.getType().equals(EmailConfig.NODE_TO)) {
         toValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
       } else if (sn.getType().equals(EmailConfig.NODE_FROM)) {
@@ -536,13 +596,65 @@ public class EmailConnector extends org.
         bodyValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
       }
     }
-    paramMap.put("TO", toValue);
-    paramMap.put("FROM", fromValue);
-    paramMap.put("SUBJECT", subjectValue);
-    paramMap.put("BODY", bodyValue);
-
+    // If ANY of the above are non-empty, we create a new dummy record
+    if (toValue.length() > 0) {
+      // Add the dummy records
+      addRecord(paramMap, EmailConfig.NODE_FINISHED, toValue, fromValue, subjectValue, bodyValue);
+      addRecord(paramMap, EmailConfig.NODE_ERRORABORTED, toValue, fromValue, subjectValue, bodyValue);
+      addRecord(paramMap, EmailConfig.NODE_MANUALABORTED, toValue, fromValue, subjectValue, bodyValue);
+      addRecord(paramMap, EmailConfig.NODE_MANUALPAUSED, toValue, fromValue, subjectValue, bodyValue);
+      addRecord(paramMap, EmailConfig.NODE_SCHEDULEPAUSED, toValue, fromValue, subjectValue, bodyValue);
+      addRecord(paramMap, EmailConfig.NODE_RESTARTED, toValue, fromValue, subjectValue, bodyValue);
+      
+    }
+    else
+    {
+      // Initialize all records with blanks
+      addRecord(paramMap, EmailConfig.NODE_FINISHED, "", "", "", "");
+      addRecord(paramMap, EmailConfig.NODE_ERRORABORTED, "", "", "", "");
+      addRecord(paramMap, EmailConfig.NODE_MANUALABORTED, "", "", "", "");
+      addRecord(paramMap, EmailConfig.NODE_MANUALPAUSED, "", "", "", "");
+      addRecord(paramMap, EmailConfig.NODE_SCHEDULEPAUSED, "", "", "", "");
+      addRecord(paramMap, EmailConfig.NODE_RESTARTED, "", "", "" ,"");
+
+      // Loop through nodes and pick them out that way
+      for (int i = 0; i < ds.getChildCount(); i++) {
+        SpecificationNode childNode = ds.getChild(i);
+        if (childNode.getType().equals(EmailConfig.NODE_FINISHED) ||
+          childNode.getType().equals(EmailConfig.NODE_ERRORABORTED) ||
+          childNode.getType().equals(EmailConfig.NODE_MANUALABORTED) ||
+          childNode.getType().equals(EmailConfig.NODE_MANUALPAUSED) ||
+          childNode.getType().equals(EmailConfig.NODE_SCHEDULEPAUSED) ||
+          childNode.getType().equals(EmailConfig.NODE_RESTARTED)) {
+          toValue = "";
+          fromValue = "";
+          subjectValue = "";
+          bodyValue = "";
+          for (int j = 0; j < childNode.getChildCount(); j++) {
+            SpecificationNode sn = childNode.getChild(j);
+            if (sn.getType().equals(EmailConfig.NODE_TO)) {
+              toValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            } else if (sn.getType().equals(EmailConfig.NODE_FROM)) {
+              fromValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            } else if (sn.getType().equals(EmailConfig.NODE_SUBJECT)) {
+              subjectValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            } else if (sn.getType().equals(EmailConfig.NODE_BODY)) {
+              bodyValue = sn.getAttributeValue(EmailConfig.ATTRIBUTE_VALUE);
+            }
+          }
+          addRecord(paramMap, childNode.getType(), toValue, fromValue, subjectValue, bodyValue);
+        }
+      }
+    }
   }
 
+  protected static void addRecord(Map<String,Object> paramMap, String nodeType, String toValue, String fromValue, String subjectValue, String bodyValue) {
+    paramMap.put(nodeType+"_TO", toValue);
+    paramMap.put(nodeType+"_FROM", fromValue);
+    paramMap.put(nodeType+"_SUBJECT", subjectValue);
+    paramMap.put(nodeType+"_BODY", bodyValue);
+  }
+  
   /** Process a specification post.
   * This method is called at the start of job's edit or view page, whenever there is a possibility that form
   * data for a connection has been posted.  Its purpose is to gather form information and modify the
@@ -569,31 +681,47 @@ public class EmailConnector extends org.
 
     String seqPrefix = "s"+connectionSequenceNumber+"_";
     
-    String toString = variableContext.getParameter(seqPrefix + "to");
+    // Remove legacy nodes always
+    removeNodes(ds, EmailConfig.NODE_TO);
+    removeNodes(ds, EmailConfig.NODE_FROM);
+    removeNodes(ds, EmailConfig.NODE_SUBJECT);
+    removeNodes(ds, EmailConfig.NODE_BODY);
+    
+    // Gather all different kinds.
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_FINISHED);
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_ERRORABORTED);
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_MANUALABORTED);
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_MANUALPAUSED);
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_SCHEDULEPAUSED);
+    gatherRecord(ds, seqPrefix, variableContext, EmailConfig.NODE_RESTARTED);
+    
+    return null;
+  }
+
+  protected static void gatherRecord(Specification ds, String seqPrefix, IPostParameters variableContext, String nodeType) {
+    removeNodes(ds, nodeType);
+    SpecificationNode sn = new SpecificationNode(nodeType);
+    String toString = variableContext.getParameter(seqPrefix + nodeType + "_to");
     if (toString != null)
     {
-      removeNodes(ds, EmailConfig.NODE_TO);
-      addNodeValue(ds, EmailConfig.NODE_TO, toString);
+      addNodeValue(sn, EmailConfig.NODE_TO, toString);
     }
-    String fromString = variableContext.getParameter(seqPrefix + "from");
+    String fromString = variableContext.getParameter(seqPrefix + nodeType + "_from");
     if (fromString != null)
     {
-      removeNodes(ds, EmailConfig.NODE_FROM);
-      addNodeValue(ds, EmailConfig.NODE_FROM, fromString);
+      addNodeValue(sn, EmailConfig.NODE_FROM, fromString);
     }
-    String subjectString = variableContext.getParameter(seqPrefix + "subject");
+    String subjectString = variableContext.getParameter(seqPrefix + nodeType + "_subject");
     if (subjectString != null)
     {
-      removeNodes(ds, EmailConfig.NODE_SUBJECT);
-      addNodeValue(ds, EmailConfig.NODE_SUBJECT, subjectString);
+      addNodeValue(sn, EmailConfig.NODE_SUBJECT, subjectString);
     }
-    String bodyString = variableContext.getParameter(seqPrefix + "body");
+    String bodyString = variableContext.getParameter(seqPrefix + nodeType + "_body");
     if (bodyString != null)
     {
-      removeNodes(ds, EmailConfig.NODE_BODY);
-      addNodeValue(ds, EmailConfig.NODE_BODY, bodyString);
+      addNodeValue(sn, EmailConfig.NODE_BODY, bodyString);
     }
-    return null;
+    ds.addChild(ds.getChildCount(),sn);
   }
 
   /** View specification.
@@ -626,8 +754,7 @@ public class EmailConnector extends org.
     parameters.addChild(parameters.getChildCount(), cn);
   }
 
-  protected static void removeNodes(ConfigParams parameters,
-                    String nodeTypeName) {
+  protected static void removeNodes(ConfigParams parameters, String nodeTypeName) {
     int i = 0;
     while (i < parameters.getChildCount()) {
       ConfigNode cn = parameters.getChild(i);
@@ -638,8 +765,7 @@ public class EmailConnector extends org.
     }
   }
 
-  protected static void removeNodes(Specification ds,
-                    String nodeTypeName) {
+  protected static void removeNodes(Specification ds, String nodeTypeName) {
     int i = 0;
     while (i < ds.getChildCount()) {
       SpecificationNode sn = ds.getChild(i);
@@ -650,7 +776,7 @@ public class EmailConnector extends org.
     }
   }
 
-  protected static void addNodeValue(Specification ds, String nodeType, String value)
+  protected static void addNodeValue(SpecificationNode ds, String nodeType, String value)
   {
     SpecificationNode sn = new SpecificationNode(nodeType);
     sn.setAttribute(EmailConfig.ATTRIBUTE_VALUE,value);

Modified: manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_en_US.properties?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_en_US.properties (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_en_US.properties Thu Jun  4 12:05:10 2015
@@ -36,6 +36,13 @@ EmailConnector.Add=Add
 EmailConnector.DeletePropertyNumber=Delete property #
 EmailConnector.Delete=Delete
 
+EmailConnector.JobFinished=Job finished
+EmailConnector.JobStopErrorAbort=Job stopped due to error abort
+EmailConnector.JobStopManualAbort=Job stopped due to manual abort
+EmailConnector.JobStopManualPause=Job stopped due to manual pause
+EmailConnector.JobStopSchedulePause=Job stopped due to scheduled pause
+EmailConnector.JobStopRestart=Job stopped due to job restart
+
 EmailConnector.ToColon=To:
 EmailConnector.FromColon=From:
 EmailConnector.SubjectColon=Subject:

Modified: manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_ja_JP.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_ja_JP.properties?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_ja_JP.properties (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_ja_JP.properties Thu Jun  4 12:05:10 2015
@@ -36,6 +36,13 @@ EmailConnector.Add=Add
 EmailConnector.DeletePropertyNumber=Delete property #
 EmailConnector.Delete=Delete
 
+EmailConnector.JobFinished=Job finished
+EmailConnector.JobStopErrorAbort=Job stopped due to error abort
+EmailConnector.JobStopManualAbort=Job stopped due to manual abort
+EmailConnector.JobStopManualPause=Job stopped due to manual pause
+EmailConnector.JobStopSchedulePause=Job stopped due to scheduled pause
+EmailConnector.JobStopRestart=Job stopped due to job restart
+
 EmailConnector.ToColon=To:
 EmailConnector.FromColon=From:
 EmailConnector.SubjectColon=Subject:

Modified: manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_zh_CN.properties
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_zh_CN.properties?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_zh_CN.properties (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/email/common_zh_CN.properties Thu Jun  4 12:05:10 2015
@@ -36,6 +36,13 @@ EmailConnector.Add=Add
 EmailConnector.DeletePropertyNumber=Delete property #
 EmailConnector.Delete=Delete
 
+EmailConnector.JobFinished=Job finished
+EmailConnector.JobStopErrorAbort=Job stopped due to error abort
+EmailConnector.JobStopManualAbort=Job stopped due to manual abort
+EmailConnector.JobStopManualPause=Job stopped due to manual pause
+EmailConnector.JobStopSchedulePause=Job stopped due to scheduled pause
+EmailConnector.JobStopRestart=Job stopped due to job restart
+
 EmailConnector.ToColon=To:
 EmailConnector.FromColon=From:
 EmailConnector.SubjectColon=Subject:

Modified: manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationHeader.js
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationHeader.js?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationHeader.js (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationHeader.js Thu Jun  4 12:05:10 2015
@@ -33,19 +33,112 @@ function s${SeqNum}_SpecOp(n, opValue, a
 
 function s${SeqNum}_checkMessageTabForSave()
 {
-  if (editjob.s${SeqNum}_to.value == "")
+  if (editjob.s${SeqNum}_finished_subject.value != "" || editjob.s${SeqNum}_finished_body.value != "")
   {
-    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
-    SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
-    editjob.s${SeqNum}_to.focus();
-    return false;
-  }
-  if (editjob.s${SeqNum}_from.value == "")
-  {
-    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
-    SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
-    editjob.s${SeqNum}_from.focus();
-    return false;
+    if (editjob.s${SeqNum}_finished_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_finished_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_finished_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_finished_from.focus();
+      return false;
+    }
+  }
+
+  if (editjob.s${SeqNum}_erroraborted_subject.value != "" || editjob.s${SeqNum}_erroraborted_body.value != "")
+  {
+    if (editjob.s${SeqNum}_erroraborted_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_erroraborted_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_erroraborted_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_erroraborted_from.focus();
+      return false;
+    }
+  }
+
+  if (editjob.s${SeqNum}_manualaborted_subject.value != "" || editjob.s${SeqNum}_manualaborted_body.value != "")
+  {
+    if (editjob.s${SeqNum}_manualaborted_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_manualaborted_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_manualaborted_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_manualaborted_from.focus();
+      return false;
+    }
+  }
+  
+  if (editjob.s${SeqNum}_manualpaused_subject.value != "" || editjob.s${SeqNum}_manualpaused_body.value != "")
+  {
+    if (editjob.s${SeqNum}_manualpaused_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_manualpaused_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_manualpaused_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_manualpaused_from.focus();
+      return false;
+    }
+  }
+
+  if (editjob.s${SeqNum}_schedulepaused_subject.value != "" || editjob.s${SeqNum}_schedulepaused_body.value != "")
+  {
+    if (editjob.s${SeqNum}_schedulepaused_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_schedulepaused_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_schedulepaused_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_schedulepaused_from.focus();
+      return false;
+    }
+  }
+
+  if (editjob.s${SeqNum}_restarted_subject.value != "" || editjob.s${SeqNum}_restarted_body.value != "")
+  {
+    if (editjob.s${SeqNum}_restarted_to.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.ToFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_restarted_to.focus();
+      return false;
+    }
+    if (editjob.s${SeqNum}_restarted_from.value == "")
+    {
+      alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('EmailConnector.FromFieldCannotBeBlank'))");
+      SelectSequencedTab("$Encoder.attributeJavascriptEscape($ResourceBundle.getString('EmailConnector.Message'))",${SeqNum})
+      editjob.s${SeqNum}_restarted_from.focus();
+      return false;
+    }
   }
 
   return true;

Modified: manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationView.html
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationView.html?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationView.html (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/SpecificationView.html Thu Jun  4 12:05:10 2015
@@ -16,28 +16,161 @@ limitations under the License.
 -->
 
 <table class="displaytable">
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobFinished'))</nobr></td></tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($finished_TO)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($finished_FROM)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($finished_SUBJECT)
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($finished_BODY)
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopErrorAbort'))</nobr></td></tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($erroraborted_TO)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($erroraborted_FROM)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($erroraborted_SUBJECT)
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($erroraborted_BODY)
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopManualAbort'))</nobr></td></tr>
   <tr>
     <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
     <td class="value">
-      <nobr>$Encoder.bodyEscape($TO)</nobr>
+      <nobr>$Encoder.bodyEscape($manualaborted_TO)</nobr>
     </td>
   </tr>
   <tr>
     <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
     <td class="value">
-      <nobr>$Encoder.bodyEscape($FROM)</nobr>
+      <nobr>$Encoder.bodyEscape($manualaborted_FROM)</nobr>
     </td>
   </tr>
   <tr>
     <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
     <td class="value">
-      $Encoder.bodyEscape($SUBJECT)
+      $Encoder.bodyEscape($manualaborted_SUBJECT)
     </td>
   </tr>
   <tr>
     <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
     <td class="value">
-      $Encoder.bodyEscape($BODY)
+      $Encoder.bodyEscape($manualaborted_BODY)
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopManualPause'))</nobr></td></tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($manualpaused_TO)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($manualpaused_FROM)</nobr>
     </td>
   </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($manualpaused_SUBJECT)
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($manualpaused_BODY)
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopSchedulePause'))</nobr></td></tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($schedulepaused_TO)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($schedulepaused_FROM)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($schedulepaused_SUBJECT)
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($schedulepaused_BODY)
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopRestart'))</nobr></td></tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($restarted_TO)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr></td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($restarted_FROM)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($restarted_SUBJECT)
+    </td>
+  </tr>
+  <tr>
+    <td class="description"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr></td>
+    <td class="value">
+      $Encoder.bodyEscape($restarted_BODY)
+    </td>
+  </tr>
+
 </table>

Modified: manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/Specification_Message.html
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/Specification_Message.html?rev=1683529&r1=1683528&r2=1683529&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/Specification_Message.html (original)
+++ manifoldcf/trunk/connectors/email/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/email/Specification_Message.html Thu Jun  4 12:05:10 2015
@@ -18,13 +18,82 @@ limitations under the License.
 #if($TabName == $ResourceBundle.getString('EmailConnector.Message') && ${SeqNum} == ${SelectedNum})
 
 <table class="displaytable">
-  <tr><td class="separator" colspan="2"><hr/></td></tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobFinished'))</nobr></td></tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_finished_to" size="32" value="$Encoder.attributeEscape($finished_TO)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_finished_from" size="32" value="$Encoder.attributeEscape($finished_FROM)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_finished_subject" size="50" value="$Encoder.attributeEscape($finished_SUBJECT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
+    </td>
+    <td class="value">
+      <textarea name="s${SeqNum}_finished_body" rows="10" cols="50">$Encoder.bodyEscape($finished_BODY)</textarea>
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopErrorAbort'))</nobr></td></tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_erroraborted_to" size="32" value="$Encoder.attributeEscape($erroraborted_TO)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_erroraborted_from" size="32" value="$Encoder.attributeEscape($erroraborted_FROM)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_erroraborted_subject" size="50" value="$Encoder.attributeEscape($erroraborted_SUBJECT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
+    </td>
+    <td class="value">
+      <textarea name="s${SeqNum}_erroraborted_body" rows="10" cols="50">$Encoder.bodyEscape($erroraborted_BODY)</textarea>
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopManualAbort'))</nobr></td></tr>
   <tr>
     <td class="description">
       <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
     </td>
     <td class="value">
-      <input type="text" name="s${SeqNum}_to" size="32" value="$Encoder.attributeEscape($TO)"/>
+      <input type="text" name="s${SeqNum}_manualaborted_to" size="32" value="$Encoder.attributeEscape($manualaborted_TO)"/>
     </td>
   </tr>
   <tr>
@@ -32,7 +101,7 @@ limitations under the License.
       <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
     </td>
     <td class="value">
-      <input type="text" name="s${SeqNum}_from" size="32" value="$Encoder.attributeEscape($FROM)"/>
+      <input type="text" name="s${SeqNum}_manualaborted_from" size="32" value="$Encoder.attributeEscape($manualaborted_FROM)"/>
     </td>
   </tr>
   <tr>
@@ -40,7 +109,7 @@ limitations under the License.
       <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
     </td>
     <td class="value">
-      <input type="text" name="s${SeqNum}_subject" size="50" value="$Encoder.attributeEscape($SUBJECT)"/>
+      <input type="text" name="s${SeqNum}_manualaborted_subject" size="50" value="$Encoder.attributeEscape($manualaborted_SUBJECT)"/>
     </td>
   </tr>
   <tr>
@@ -48,7 +117,109 @@ limitations under the License.
       <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
     </td>
     <td class="value">
-      <textarea name="s${SeqNum}_body" rows="10" cols="50">$Encoder.bodyEscape($BODY)</textarea>
+      <textarea name="s${SeqNum}_manualaborted_body" rows="10" cols="50">$Encoder.bodyEscape($manualaborted_BODY)</textarea>
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopManualPause'))</nobr></td></tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_manualpaused_to" size="32" value="$Encoder.attributeEscape($manualpaused_TO)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_manualpaused_from" size="32" value="$Encoder.attributeEscape($manualpaused_FROM)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_manualpaused_subject" size="50" value="$Encoder.attributeEscape($manualpaused_SUBJECT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
+    </td>
+    <td class="value">
+      <textarea name="s${SeqNum}_manualpaused_body" rows="10" cols="50">$Encoder.bodyEscape($manualpaused_BODY)</textarea>
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopSchedulePause'))</nobr></td></tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_schedulepaused_to" size="32" value="$Encoder.attributeEscape($schedulepaused_TO)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_schedulepaused_from" size="32" value="$Encoder.attributeEscape($schedulepaused_FROM)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_schedulepaused_subject" size="50" value="$Encoder.attributeEscape($schedulepaused_SUBJECT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
+    </td>
+    <td class="value">
+      <textarea name="s${SeqNum}_schedulepaused_body" rows="10" cols="50">$Encoder.bodyEscape($schedulepaused_BODY)</textarea>
+    </td>
+  </tr>
+
+  <tr><td class="message" colspan="2"><nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.JobStopRestart'))</nobr></td></tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.ToColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_restarted_to" size="32" value="$Encoder.attributeEscape($restarted_TO)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.FromColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_restarted_from" size="32" value="$Encoder.attributeEscape($restarted_FROM)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.SubjectColon'))</nobr>
+    </td>
+    <td class="value">
+      <input type="text" name="s${SeqNum}_restarted_subject" size="50" value="$Encoder.attributeEscape($restarted_SUBJECT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('EmailConnector.BodyColon'))</nobr>
+    </td>
+    <td class="value">
+      <textarea name="s${SeqNum}_restarted_body" rows="10" cols="50">$Encoder.bodyEscape($restarted_BODY)</textarea>
     </td>
   </tr>
 
@@ -56,9 +227,34 @@ limitations under the License.
 
 #else
 
-<input type="hidden" name="s${SeqNum}_to" value="$Encoder.attributeEscape($TO)"/>
-<input type="hidden" name="s${SeqNum}_from" value="$Encoder.attributeEscape($FROM)"/>
-<input type="hidden" name="s${SeqNum}_subject" value="$Encoder.attributeEscape($SUBJECT)"/>
-<input type="hidden" name="s${SeqNum}_body" value="$Encoder.attributeEscape($BODY)"/>
+<input type="hidden" name="s${SeqNum}_finished_to" value="$Encoder.attributeEscape($finished_TO)"/>
+<input type="hidden" name="s${SeqNum}_finished_from" value="$Encoder.attributeEscape($finished_FROM)"/>
+<input type="hidden" name="s${SeqNum}_finished_subject" value="$Encoder.attributeEscape($finished_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_finished_body" value="$Encoder.attributeEscape($finished_BODY)"/>
+
+<input type="hidden" name="s${SeqNum}_erroraborted_to" value="$Encoder.attributeEscape($erroraborted_TO)"/>
+<input type="hidden" name="s${SeqNum}_erroraborted_from" value="$Encoder.attributeEscape($erroraborted_FROM)"/>
+<input type="hidden" name="s${SeqNum}_erroraborted_subject" value="$Encoder.attributeEscape($erroraborted_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_erroraborted_body" value="$Encoder.attributeEscape($erroraborted_BODY)"/>
+
+<input type="hidden" name="s${SeqNum}_manualaborted_to" value="$Encoder.attributeEscape($manualaborted_TO)"/>
+<input type="hidden" name="s${SeqNum}_manualaborted_from" value="$Encoder.attributeEscape($manualaborted_FROM)"/>
+<input type="hidden" name="s${SeqNum}_manualaborted_subject" value="$Encoder.attributeEscape($manualaborted_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_manualaborted_body" value="$Encoder.attributeEscape($manualaborted_BODY)"/>
+
+<input type="hidden" name="s${SeqNum}_manualpaused_to" value="$Encoder.attributeEscape($manualpaused_TO)"/>
+<input type="hidden" name="s${SeqNum}_manualpaused_from" value="$Encoder.attributeEscape($manualpaused_FROM)"/>
+<input type="hidden" name="s${SeqNum}_manualpaused_subject" value="$Encoder.attributeEscape($manualpaused_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_manualpaused_body" value="$Encoder.attributeEscape($manualpaused_BODY)"/>
+
+<input type="hidden" name="s${SeqNum}_schedulepaused_to" value="$Encoder.attributeEscape($schedulepaused_TO)"/>
+<input type="hidden" name="s${SeqNum}_schedulepaused_from" value="$Encoder.attributeEscape($schedulepaused_FROM)"/>
+<input type="hidden" name="s${SeqNum}_schedulepaused_subject" value="$Encoder.attributeEscape($schedulepaused_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_schedulepaused_body" value="$Encoder.attributeEscape($schedulepaused_BODY)"/>
+
+<input type="hidden" name="s${SeqNum}_restarted_to" value="$Encoder.attributeEscape($restarted_TO)"/>
+<input type="hidden" name="s${SeqNum}_restarted_from" value="$Encoder.attributeEscape($restarted_FROM)"/>
+<input type="hidden" name="s${SeqNum}_restarted_subject" value="$Encoder.attributeEscape($restarted_SUBJECT)"/>
+<input type="hidden" name="s${SeqNum}_restarted_body" value="$Encoder.attributeEscape($restarted_BODY)"/>
 
 #end