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

svn commit: r1685010 [7/18] - /manifoldcf/trunk/framework/crawler-ui/src/main/webapp/

Modified: manifoldcf/trunk/framework/crawler-ui/src/main/webapp/execute.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/framework/crawler-ui/src/main/webapp/execute.jsp?rev=1685010&r1=1685009&r2=1685010&view=diff
==============================================================================
--- manifoldcf/trunk/framework/crawler-ui/src/main/webapp/execute.jsp (original)
+++ manifoldcf/trunk/framework/crawler-ui/src/main/webapp/execute.jsp Fri Jun 12 00:55:35 2015
@@ -2,1666 +2,1378 @@
 
 <%
 
-/* $Id$ */
+  /* $Id$ */
 
 /**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-* 
-* http://www.apache.org/licenses/LICENSE-2.0
-* 
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+%>
+
+<%
+  // The purpose of this jsp is to execute commands, and then dispatch to the right form or display page using
+  // jsp:forward.
+  // Note that, for errors, the logic must involve another step.  That step involves dispatching to the error
+  // page, and passing in the error and the name of the page to go to when the error is accepted by the user.
+  // This page must therefore NEVER cause text to be streamed, and must ALWAYS pass information to the page
+  // it forwards to using arguments and thread context only.
+  //
+  // The parameters that the page expects depend on the operation.  The operation is passed as the parameter "op".
+  // For many operations there is a secondary parameter determining the type of entity being operated on.
+  // This is passed in the parameter "type".
+  //
+  // Dispatches are handled within the logic for each operation type.  This includes dispatches to the error page.
+  // The error page receives the following argument values: "text" (the error text), and "target" (the page to go to
+  // on confirmation).
+  //
+  // If no operation at all is present, or if no dispatch occurs, then this code simply dispatches to the home admin page.
+
+  try {
+    // Make a few things we will need
+    // Get the job manager handle
+    IJobManager manager = JobManagerFactory.make(threadContext);
+    IAuthorityGroupManager authGroupManager = AuthorityGroupManagerFactory.make(threadContext);
+    IRepositoryConnectionManager connManager = RepositoryConnectionManagerFactory.make(threadContext);
+    INotificationConnectionManager notificationManager = NotificationConnectionManagerFactory.make(threadContext);
+    IAuthorityConnectionManager authConnManager = AuthorityConnectionManagerFactory.make(threadContext);
+    IMappingConnectionManager mappingConnManager = MappingConnectionManagerFactory.make(threadContext);
+    IOutputConnectionManager outputManager = OutputConnectionManagerFactory.make(threadContext);
+    ITransformationConnectionManager transformationManager = TransformationConnectionManagerFactory.make(threadContext);
+
+    IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
+    ITransformationConnectorPool transformationConnectorPool = TransformationConnectorPoolFactory.make(threadContext);
+    IRepositoryConnectorPool repositoryConnectorPool = RepositoryConnectorPoolFactory.make(threadContext);
+    INotificationConnectorPool notificationConnectorPool = NotificationConnectorPoolFactory.make(threadContext);
+
+    String type = variableContext.getParameter("type");
+    String op = variableContext.getParameter("op");
+    if (type != null && op != null && type.equals("connection")) {
+      // -- Connection editing operations --
+      if (op.equals("Save") || op.equals("Continue")) {
+        try {
+          // Set up a connection object that is a merge of an existing connection object plus what was posted.
+          IRepositoryConnection connection = null;
+          boolean isNew = true;
+          String x = variableContext.getParameter("isnewconnection");
+          if (x != null)
+            isNew = x.equals("true");
+
+          String connectionName = variableContext.getParameter("connname");
+          // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+          if (connectionName != null && connectionName.length() > 0 && !isNew) {
+            connection = connManager.load(connectionName);
+          }
+
+          if (connection == null) {
+            connection = connManager.create();
+            if (connectionName != null && connectionName.length() > 0)
+              connection.setName(connectionName);
+          }
+
+          // Fill in connection object from posted data
+          connection.setIsNew(isNew);
+          x = variableContext.getParameter("description");
+          if (x != null)
+            connection.setDescription(x);
+          x = variableContext.getParameter("classname");
+          if (x != null)
+            connection.setClassName(x);
+          x = variableContext.getParameter("authorityname");
+          if (x != null && x.length() > 0) {
+            if (x.equals("_none_"))
+              connection.setACLAuthority(null);
+            else
+              connection.setACLAuthority(x);
+          }
+          x = variableContext.getParameter("maxconnections");
+          if (x != null && x.length() > 0)
+            connection.setMaxConnections(Integer.parseInt(x));
+
+          // Gather and save throttles
+          x = variableContext.getParameter("throttlecount");
+          if (x != null) {
+            int throttleCount = Integer.parseInt(x);
+            connection.clearThrottleValues();
+            int j = 0;
+            while (j < throttleCount) {
+              String regexp = variableContext.getParameter("throttle_" + Integer.toString(j));
+              String desc = variableContext.getParameter("throttledesc_" + Integer.toString(j));
+              if (desc == null)
+                desc = "";
+              String value = variableContext.getParameter("throttlevalue_" + Integer.toString(j));
+              connection.addThrottleValue(regexp, desc, (float) (((double) new Long(value).longValue()) / (double) (60000.0)));
+              j++;
+            }
+            x = variableContext.getParameter("throttleop");
+            if (x != null && x.equals("Delete")) {
+              // Delete an item from the throttles list
+              x = variableContext.getParameter("throttlenumber");
+              String regexp = variableContext.getParameter("throttle_" + x);
+              connection.deleteThrottleValue(regexp);
+            } else if (x != null && x.equals("Add")) {
+              // Add an item to the throttles list
+              String regexp = variableContext.getParameter("throttle");
+              String desc = variableContext.getParameter("throttledesc");
+              if (desc == null)
+                desc = "";
+              Long value = new Long(variableContext.getParameter("throttlevalue"));
+              connection.addThrottleValue(regexp, desc, (float) (((double) value.longValue()) / (double) (60000.0)));
+            }
+          }
+
+          String error = RepositoryConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+          if (error != null) {
+            variableContext.setParameter("text", error);
+            variableContext.setParameter("target", "listconnections.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="editconnection.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  connManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewconnection.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listconnections.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    connManager.delete(connectionName);
+%>
+<jsp:forward page="listconnections.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listconnections.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listconnections.jsp"/>
+<%
+} else if (op.equals("ClearHistory")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    connManager.cleanUpHistoryData(connectionName);
+%>
+<jsp:forward page="listconnections.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listconnections.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to connection execution page");
+  variableContext.setParameter("target", "listconnections.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("group")) {
+  // -- Group editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      IAuthorityGroup group = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String groupName = variableContext.getParameter("groupname");
+      // If the groupname is not null, load the group and prepopulate everything with what comes from it.
+      if (groupName != null && groupName.length() > 0 && !isNew) {
+        group = authGroupManager.load(groupName);
+      }
+
+      if (group == null) {
+        group = authGroupManager.create();
+        if (groupName != null && groupName.length() > 0)
+          group.setName(groupName);
+      }
+
+      // Gather all the data from the form.
+      group.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        group.setDescription(x);
+
+      if (op.equals("Continue")) {
+        threadContext.save("GroupObject", group);
+%>
+<jsp:forward page="editgroup.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  authGroupManager.save(group);
+  variableContext.setParameter("groupname", groupName);
+%>
+<jsp:forward page="viewgroup.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listgroups.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String groupName = variableContext.getParameter("groupname");
+    if (groupName == null)
+      throw new ManifoldCFException("Missing group name parameter");
+    authGroupManager.delete(groupName);
+%>
+<jsp:forward page="listgroups.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listgroups.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listgroups.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to authority group execution page");
+  variableContext.setParameter("target", "listgroups.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+} else if (type != null && op != null && type.equals("authority")) {
+  // -- Authority editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      IAuthorityConnection connection = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String connectionName = variableContext.getParameter("connname");
+      // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+      if (connectionName != null && connectionName.length() > 0 && !isNew) {
+        connection = authConnManager.load(connectionName);
+      }
+
+      if (connection == null) {
+        connection = authConnManager.create();
+        if (connectionName != null && connectionName.length() > 0)
+          connection.setName(connectionName);
+      }
+
+      // Gather all the data from the form.
+      connection.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        connection.setDescription(x);
+      x = variableContext.getParameter("classname");
+      if (x != null)
+        connection.setClassName(x);
+      x = variableContext.getParameter("maxconnections");
+      if (x != null)
+        connection.setMaxConnections(Integer.parseInt(x));
+      x = variableContext.getParameter("prerequisites_present");
+      if (x != null && x.equals("true")) {
+        String y = variableContext.getParameter("prerequisites");
+        if (y != null && y.length() == 0)
+          y = null;
+        connection.setPrerequisiteMapping(y);
+      }
+      x = variableContext.getParameter("authdomain");
+      if (x != null)
+        connection.setAuthDomain(x);
+      x = variableContext.getParameter("authoritygroup");
+      if (x != null)
+        connection.setAuthGroup(x);
+
+      String error = AuthorityConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+      if (error != null) {
+        variableContext.setParameter("text", error);
+        variableContext.setParameter("target", "listauthorities.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="editauthority.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  authConnManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewauthority.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listauthorities.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    authConnManager.delete(connectionName);
+%>
+<jsp:forward page="listauthorities.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listauthorities.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listauthorities.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to authority execution page");
+  variableContext.setParameter("target", "listauthorities.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("mapper")) {
+  // -- Mapping editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      IMappingConnection connection = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String connectionName = variableContext.getParameter("connname");
+      // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+      if (connectionName != null && connectionName.length() > 0 && !isNew) {
+        connection = mappingConnManager.load(connectionName);
+      }
+
+      if (connection == null) {
+        connection = mappingConnManager.create();
+        if (connectionName != null && connectionName.length() > 0)
+          connection.setName(connectionName);
+      }
+
+      // Gather all the data from the form.
+      connection.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        connection.setDescription(x);
+      x = variableContext.getParameter("classname");
+      if (x != null)
+        connection.setClassName(x);
+      x = variableContext.getParameter("maxconnections");
+      if (x != null && x.length() > 0)
+        connection.setMaxConnections(Integer.parseInt(x));
+      x = variableContext.getParameter("prerequisites_present");
+      if (x != null && x.equals("true")) {
+        String y = variableContext.getParameter("prerequisites");
+        if (y != null && y.length() == 0)
+          y = null;
+        connection.setPrerequisiteMapping(y);
+      }
+
+      String error = MappingConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+      if (error != null) {
+        variableContext.setParameter("text", error);
+        variableContext.setParameter("target", "listmappers.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="editmapper.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  mappingConnManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewmapper.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listmappers.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    mappingConnManager.delete(connectionName);
+%>
+<jsp:forward page="listmappers.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listmappers.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listmappers.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to mapping execution page");
+  variableContext.setParameter("target", "listmappers.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("output")) {
+  // -- Output connection editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      IOutputConnection connection = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String connectionName = variableContext.getParameter("connname");
+      // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+      if (connectionName != null && connectionName.length() > 0 && !isNew) {
+        connection = outputManager.load(connectionName);
+      }
+
+      if (connection == null) {
+        connection = outputManager.create();
+        if (connectionName != null && connectionName.length() > 0)
+          connection.setName(connectionName);
+      }
+
+      // Gather all the data from the form.
+      connection.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        connection.setDescription(x);
+      x = variableContext.getParameter("classname");
+      if (x != null)
+        connection.setClassName(x);
+      x = variableContext.getParameter("maxconnections");
+      if (x != null && x.length() > 0)
+        connection.setMaxConnections(Integer.parseInt(x));
+
+      String error = OutputConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+      if (error != null) {
+        variableContext.setParameter("text", error);
+        variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="editoutput.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  outputManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewoutput.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    outputManager.delete(connectionName);
+%>
+<jsp:forward page="listoutputs.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listoutputs.jsp"/>
+<%
+} else if (op.equals("ReingestAll")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    org.apache.manifoldcf.agents.system.ManifoldCF.signalOutputConnectionRedo(threadContext, connectionName);
+%>
+<jsp:forward page="listoutputs.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("RemoveAll")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    org.apache.manifoldcf.agents.system.ManifoldCF.signalOutputConnectionRemoved(threadContext, connectionName);
+%>
+<jsp:forward page="listoutputs.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to output connection execution page");
+  variableContext.setParameter("target", "listoutputs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("transformation")) {
+  // -- Output connection editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      ITransformationConnection connection = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String connectionName = variableContext.getParameter("connname");
+      // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+      if (connectionName != null && connectionName.length() > 0 && !isNew) {
+        connection = transformationManager.load(connectionName);
+      }
+
+      if (connection == null) {
+        connection = transformationManager.create();
+        if (connectionName != null && connectionName.length() > 0)
+          connection.setName(connectionName);
+      }
+
+      // Gather all the data from the form.
+      connection.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        connection.setDescription(x);
+      x = variableContext.getParameter("classname");
+      if (x != null)
+        connection.setClassName(x);
+      x = variableContext.getParameter("maxconnections");
+      if (x != null && x.length() > 0)
+        connection.setMaxConnections(Integer.parseInt(x));
+
+      String error = TransformationConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+      if (error != null) {
+        variableContext.setParameter("text", error);
+        variableContext.setParameter("target", "listtransformations.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="edittransformation.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  transformationManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewtransformation.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listtransformations.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    transformationManager.delete(connectionName);
+%>
+<jsp:forward page="listtransformations.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listtransformations.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listtransformations.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to transformation connection execution page");
+  variableContext.setParameter("target", "listtransformations.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("notification")) {
+  // -- Notification connection editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      // Set up a connection object that is a merge of an existing connection object plus what was posted.
+      INotificationConnection connection = null;
+      boolean isNew = true;
+      String x = variableContext.getParameter("isnewconnection");
+      if (x != null)
+        isNew = x.equals("true");
+
+      String connectionName = variableContext.getParameter("connname");
+      // If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
+      if (connectionName != null && connectionName.length() > 0 && !isNew) {
+        connection = notificationManager.load(connectionName);
+      }
+
+      if (connection == null) {
+        connection = notificationManager.create();
+        if (connectionName != null && connectionName.length() > 0)
+          connection.setName(connectionName);
+      }
+
+      // Gather all the data from the form.
+      connection.setIsNew(isNew);
+      x = variableContext.getParameter("description");
+      if (x != null)
+        connection.setDescription(x);
+      x = variableContext.getParameter("classname");
+      if (x != null)
+        connection.setClassName(x);
+      x = variableContext.getParameter("maxconnections");
+      if (x != null && x.length() > 0)
+        connection.setMaxConnections(Integer.parseInt(x));
+
+      String error = NotificationConnectorFactory.processConfigurationPost(threadContext, connection.getClassName(), variableContext, pageContext.getRequest().getLocale(), connection.getConfigParams());
+
+      if (error != null) {
+        variableContext.setParameter("text", error);
+        variableContext.setParameter("target", "listnotifications.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("ConnectionObject", connection);
+%>
+<jsp:forward page="editnotification.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  notificationManager.save(connection);
+  variableContext.setParameter("connname", connectionName);
+%>
+<jsp:forward page="viewnotification.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listnotifications.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String connectionName = variableContext.getParameter("connname");
+    if (connectionName == null)
+      throw new ManifoldCFException("Missing connection parameter");
+    notificationManager.delete(connectionName);
+%>
+<jsp:forward page="listnotifications.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listnotifications.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+%>
+<jsp:forward page="listnotifications.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to notification connection execution page");
+  variableContext.setParameter("target", "listnotifications.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && type.equals("job")) {
+  // -- Job editing operations --
+  if (op.equals("Save") || op.equals("Continue")) {
+    try {
+      String jobID = variableContext.getParameter("jobid");
+      IJobDescription job = null;
+      if (jobID != null) {
+        job = manager.load(new Long(jobID));
+      }
+      if (job == null)
+        job = manager.createJob();
+
+      // Figure out what got posted.
+      String x = variableContext.getParameter("connectionpresent");
+      boolean connectionPresent = (x != null && x.equals("true"));
+
+      // Gather the rest of the data.
+      x = variableContext.getParameter("description");
+      if (x != null)
+        job.setDescription(x);
+      x = variableContext.getParameter("connectionname");
+      if (x != null)
+        job.setConnectionName(x);
+      x = variableContext.getParameter("scheduletype");
+      if (x != null)
+        job.setType(Integer.parseInt(x));
+      x = variableContext.getParameter("startmethod");
+      if (x != null)
+        job.setStartMethod(Integer.parseInt(x));
+      x = variableContext.getParameter("hopcountmode");
+      if (x != null)
+        job.setHopcountMode(Integer.parseInt(x));
+      x = variableContext.getParameter("pipeline_count");
+      if (x != null) {
+        // Do we need to keep the old specifications around, or can we destroy them?
+        // Not clear that retention is required., so I'm not wasting time trying to implement that.
+        int count = Integer.parseInt(x);
+        job.clearPipeline();
+        for (int j = 0; j < count; j++) {
+          // Gather everything first; we'll look at edits later
+          int precedent = Integer.parseInt(variableContext.getParameter("pipeline_" + j + "_precedent"));
+          boolean isOutput = variableContext.getParameter("pipeline_" + j + "_isoutput").equals("true");
+          String connectionName = variableContext.getParameter("pipeline_" + j + "_connectionname");
+          String description = variableContext.getParameter("pipeline_" + j + "_description");
+          job.addPipelineStage(precedent, isOutput, connectionName, description);
+        }
+      }
+      x = variableContext.getParameter("notification_count");
+      if (x != null) {
+        // Do we need to keep the old specifications around, or can we destroy them?
+        // Not clear that retention is required., so I'm not wasting time trying to implement that.
+        int count = Integer.parseInt(x);
+        job.clearNotifications();
+        for (int j = 0; j < count; j++) {
+          // Gather everything first; we'll look at edits later
+          String connectionName = variableContext.getParameter("notification_" + j + "_connectionname");
+          String description = variableContext.getParameter("notification_" + j + "_description");
+          job.addNotification(connectionName, description);
+        }
+      }
+
+      x = variableContext.getParameter("schedulerecords");
+      String[] y;
+
+      if (x != null) {
+        // Read records and put them into the job description
+        job.clearScheduleRecords();
+        int recordCount = Integer.parseInt(x);
+        int j = 0;
+        while (j < recordCount) {
+          String indexValue = Integer.toString(j);
+          EnumeratedValues srDayOfWeek = null;
+          EnumeratedValues srDayOfMonth = null;
+          EnumeratedValues srMonthOfYear = null;
+          EnumeratedValues srYear = null;
+          EnumeratedValues srHourOfDay = null;
+          EnumeratedValues srMinutesOfHour = null;
+          Long srDuration = null;
+          boolean srRequestMinimum = false;
+
+          y = variableContext.getParameterValues("dayofweek" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srDayOfWeek = null;
+            else
+              srDayOfWeek = new EnumeratedValues(y);
+          }
+          y = variableContext.getParameterValues("dayofmonth" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srDayOfMonth = null;
+            else
+              srDayOfMonth = new EnumeratedValues(y);
+          }
+          y = variableContext.getParameterValues("monthofyear" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srMonthOfYear = null;
+            else
+              srMonthOfYear = new EnumeratedValues(y);
+          }
+          y = variableContext.getParameterValues("year" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srYear = null;
+            else
+              srYear = new EnumeratedValues(y);
+          }
+          y = variableContext.getParameterValues("hourofday" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srHourOfDay = null;
+            else
+              srHourOfDay = new EnumeratedValues(y);
+          }
+          y = variableContext.getParameterValues("minutesofhour" + indexValue);
+          if (y != null) {
+            if (y.length >= 1 && y[0].equals("none"))
+              srMinutesOfHour = null;
+            else
+              srMinutesOfHour = new EnumeratedValues(y);
+          }
+          x = variableContext.getParameter("duration" + indexValue);
+          if (x != null) {
+            if (x.length() == 0)
+              srDuration = null;
+            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, srRequestMinimum);
+            job.addScheduleRecord(sr);
+          }
+          j++;
+        }
+      }
+
+      // Check for operation that adds to schedule
+      x = variableContext.getParameter("recordop");
+      if (x != null && x.equals("Add Scheduled Time")) {
+        EnumeratedValues srDayOfWeek = null;
+        EnumeratedValues srDayOfMonth = null;
+        EnumeratedValues srMonthOfYear = null;
+        EnumeratedValues srYear = null;
+        EnumeratedValues srHourOfDay = null;
+        EnumeratedValues srMinutesOfHour = null;
+        Long srDuration = null;
+        boolean srRequestMinimum = false;
+
+        y = variableContext.getParameterValues("dayofweek");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srDayOfWeek = null;
+          else
+            srDayOfWeek = new EnumeratedValues(y);
+        }
+        y = variableContext.getParameterValues("dayofmonth");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srDayOfMonth = null;
+          else
+            srDayOfMonth = new EnumeratedValues(y);
+        }
+        y = variableContext.getParameterValues("monthofyear");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srMonthOfYear = null;
+          else
+            srMonthOfYear = new EnumeratedValues(y);
+        }
+        y = variableContext.getParameterValues("year");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srYear = null;
+          else
+            srYear = new EnumeratedValues(y);
+        }
+        y = variableContext.getParameterValues("hourofday");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srHourOfDay = null;
+          else
+            srHourOfDay = new EnumeratedValues(y);
+        }
+        y = variableContext.getParameterValues("minutesofhour");
+        if (y != null) {
+          if (y.length >= 1 && y[0].equals("none"))
+            srMinutesOfHour = null;
+          else
+            srMinutesOfHour = new EnumeratedValues(y);
+        }
+        x = variableContext.getParameter("duration");
+        if (x != null) {
+          if (x.length() == 0)
+            srDuration = null;
+          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, srRequestMinimum);
+        job.addScheduleRecord(sr);
+      }
+
+      x = variableContext.getParameter("priority");
+      if (x != null)
+        job.setPriority(Integer.parseInt(x));
+      x = variableContext.getParameter("recrawlinterval");
+      if (x != null) {
+        if (x.length() == 0)
+          job.setInterval(null);
+        else
+          job.setInterval(new Long(new Long(x).longValue() * 60000L));
+      }
+      x = variableContext.getParameter("maxrecrawlinterval");
+      if (x != null) {
+        if (x.length() == 0)
+          job.setMaxInterval(null);
+        else
+          job.setMaxInterval(new Long(new Long(x).longValue() * 60000L));
+      }
+      x = variableContext.getParameter("reseedinterval");
+      if (x != null) {
+        if (x.length() == 0)
+          job.setReseedInterval(null);
+        else
+          job.setReseedInterval(new Long(new Long(x).longValue() * 60000L));
+      }
+      x = variableContext.getParameter("expirationinterval");
+      if (x != null) {
+        if (x.length() == 0)
+          job.setExpiration(null);
+        else
+          job.setExpiration(new Long(new Long(x).longValue() * 60000L));
+      }
+
+      IRepositoryConnection connection = null;
+      if (job.getConnectionName() != null && job.getConnectionName().length() > 0)
+        connection = connManager.load(job.getConnectionName());
+
+      if (connection != null) {
+        String[] relationshipTypes = RepositoryConnectorFactory.getRelationshipTypes(threadContext, connection.getClassName());
+
+        // Gather hopcount filters
+        x = variableContext.getParameter("hopfilters");
+        if (x != null && relationshipTypes != null) {
+          job.clearHopCountFilters();
+          int j = 0;
+          while (j < relationshipTypes.length) {
+            String relationshipType = relationshipTypes[j++];
+            x = variableContext.getParameter("hopmax_" + relationshipType);
+            if (x != null && x.length() > 0) {
+              job.addHopCountFilter(relationshipType, new Long(x));
+            }
+          }
+        }
+      }
+
+      if (connectionPresent && connection != null) {
+        IRepositoryConnector repositoryConnector = repositoryConnectorPool.grab(connection);
+        if (repositoryConnector != null) {
+          try {
+            String error = repositoryConnector.processSpecificationPost(variableContext, pageContext.getRequest().getLocale(), job.getSpecification(), 0);
+            if (error != null) {
+              variableContext.setParameter("text", error);
+              variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+        }
+      } finally {
+        repositoryConnectorPool.release(connection, repositoryConnector);
+      }
+    }
+  }
+
+  // Process all pipeline stages
+  for (int j = 0; j < job.countPipelineStages(); j++) {
+    if (job.getPipelineStageIsOutputConnection(j)) {
+      IOutputConnection outputConnection = outputManager.load(job.getPipelineStageConnectionName(j));
+      if (outputConnection != null) {
+        IOutputConnector outputConnector = outputConnectorPool.grab(outputConnection);
+        if (outputConnector != null) {
+          try {
+            String error = outputConnector.processSpecificationPost(variableContext, pageContext.getRequest().getLocale(), job.getPipelineStageSpecification(j), 1 + j);
+            if (error != null) {
+              variableContext.setParameter("text", error);
+              variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+        }
+      } finally {
+        outputConnectorPool.release(outputConnection, outputConnector);
+      }
+    }
+  }
+} else {
+  ITransformationConnection transformationConnection = transformationManager.load(job.getPipelineStageConnectionName(j));
+  if (transformationConnection != null) {
+    ITransformationConnector transformationConnector = transformationConnectorPool.grab(transformationConnection);
+    if (transformationConnector != null) {
+      try {
+        String error = transformationConnector.processSpecificationPost(variableContext, pageContext.getRequest().getLocale(), job.getPipelineStageSpecification(j), 1 + j);
+        if (error != null) {
+          variableContext.setParameter("text", error);
+          variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+            }
+          } finally {
+            transformationConnectorPool.release(transformationConnection, transformationConnector);
+          }
+        }
+      }
+    }
+  }
+
+  for (int j = 0; j < job.countNotifications(); j++) {
+    INotificationConnection notificationConnection = notificationManager.load(job.getNotificationConnectionName(j));
+    if (notificationConnection != null) {
+      INotificationConnector notificationConnector = notificationConnectorPool.grab(notificationConnection);
+      if (notificationConnector != null) {
+        try {
+          String error = notificationConnector.processSpecificationPost(variableContext, pageContext.getRequest().getLocale(), job.getNotificationSpecification(j), 1 + job.countPipelineStages() + j);
+          if (error != null) {
+            variableContext.setParameter("text", error);
+            variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+          }
+        } finally {
+          notificationConnectorPool.release(notificationConnection, notificationConnector);
+        }
+      }
+    }
+  }
+
+  // Now, after gathering is complete, consider doing changes to the pipeline.
+  int currentStage = 0;
+  for (int j = 0; j < job.countPipelineStages(); j++) {
+    // Look at the operation
+    x = variableContext.getParameter("pipeline_" + j + "_op");
+    if (x != null && x.equals("Delete")) {
+      // Delete this pipeline stage (and rewire other stages according to rules)
+      job.deletePipelineStage(currentStage);
+    } else if (x != null && x.equals("InsertTransformation")) {
+      // Insert a new stage before this one
+      String connectionName = variableContext.getParameter("transformation_connectionname");
+      String description = variableContext.getParameter("transformation_description");
+      job.insertPipelineStage(currentStage, false, connectionName, description);
+      currentStage++;
+    } else if (x != null && x.equals("InsertOutput")) {
+      // Insert a new stage before this one
+      String connectionName = variableContext.getParameter("output_connectionname");
+      String description = variableContext.getParameter("output_description");
+      job.insertPipelineStage(currentStage, true, connectionName, description);
+      currentStage++;
+    } else
+      currentStage++;
+  }
+
+  x = variableContext.getParameter("output_op");
+  if (x != null && x.equals("Add")) {
+    // Append a new stage at the end
+    int precedent = Integer.parseInt(variableContext.getParameter("output_precedent"));
+    String connectionName = variableContext.getParameter("output_connectionname");
+    String description = variableContext.getParameter("output_description");
+    job.addPipelineStage(precedent, true, connectionName, description);
+  }
+
+  currentStage = 0;
+  for (int j = 0; j < job.countNotifications(); j++) {
+    // Look at the operation
+    x = variableContext.getParameter("notification_" + j + "_op");
+    if (x != null && x.equals("Delete")) {
+      // Delete this pipeline stage (and rewire other stages according to rules)
+      job.deleteNotification(currentStage);
+    } else
+      currentStage++;
+  }
+  x = variableContext.getParameter("notification_op");
+  if (x != null && x.equals("Add")) {
+    // Append a new stage at the end
+    String connectionName = variableContext.getParameter("notification_connectionname");
+    String description = variableContext.getParameter("notification_description");
+    job.addNotification(connectionName, description);
+  }
+
+  if (op.equals("Continue")) {
+    threadContext.save("JobObject", job);
+%>
+<jsp:forward page="editjob.jsp"/>
+<%
+} else if (op.equals("Save")) {
+  manager.save(job);
+  // Reset the job schedule. We may want to make this explicit at some point; having
+  // this happen all the time seems wrong.
+  manager.resetJobSchedule(job.getID());
+  variableContext.setParameter("jobid", job.getID().toString());
+%>
+<jsp:forward page="viewjob.jsp"/>
+<%
+  }
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("StartOver")) {
+  try {
+    String jobID = variableContext.getParameter("jobid");
+    if (jobID == null)
+      throw new ManifoldCFException("Missing job parameter");
+    manager.clearJobSeedingState(new Long(jobID));
+%>
+<jsp:forward page="listjobs.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Delete")) {
+  try {
+    String jobID = variableContext.getParameter("jobid");
+    if (jobID == null)
+      throw new ManifoldCFException("Missing job parameter");
+    manager.deleteJob(new Long(jobID));
+%>
+<jsp:forward page="listjobs.jsp"/>
+<%
+} catch (ManifoldCFException e) {
+  e.printStackTrace();
+  variableContext.setParameter("text", e.getMessage());
+  variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op.equals("Cancel")) {
+  // Cancel operation
+%>
+<jsp:forward page="listjobs.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to job definition execution page: " + op);
+  variableContext.setParameter("target", "listjobs.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (type != null && op != null && (type.equals("simplereport") || type.equals("maxactivityreport") ||
+    type.equals("maxbandwidthreport") || type.equals("resultreport") ||
+    type.equals("documentstatus") || type.equals("queuestatus"))) {
+  // -- Report handling operations --
+  if (op.equals("Continue") || op.equals("Report") || op.equals("Status")) {
+%>
+<jsp:forward page='<%=type+".jsp"%>'/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to report/status execution page: " + op);
+  variableContext.setParameter("target", "index.jsp");
+%>
+<jsp:forward page="error.jsp"/>
+<%
+  }
+} else if (op != null && type != null && type.equals("jobstatus")) {
+  if (op.equals("Start") || op.equals("StartMinimal")) {
+    // -- Start a job --
+    String jobID = variableContext.getParameter("jobid");
+    manager.manualStart(new Long(jobID), op.equals("StartMinimal"));
+    // Forward to showjobstatus
+%>
+<jsp:forward page="showjobstatus.jsp"/>
+<%
+} else if (op.equals("Pause")) {
+  // -- Pause a job --
+  String jobID = variableContext.getParameter("jobid");
+  manager.pauseJob(new Long(jobID));
+  // Forward to showjobstatus
+%>
+<jsp:forward page="showjobstatus.jsp"/>
+<%
+} else if (op.equals("Abort")) {
+  // -- Abort a job --
+  String jobID = variableContext.getParameter("jobid");
+  manager.manualAbort(new Long(jobID));
+  // Forward to showjobstatus
+%>
+<jsp:forward page="showjobstatus.jsp"/>
+<%
+} else if (op.equals("Restart") || op.equals("RestartMinimal")) {
+  // -- Restart a job --
+  String jobID = variableContext.getParameter("jobid");
+  manager.manualAbortRestart(new Long(jobID), op.equals("RestartMinimal"));
+  // Forward to showjobstatus
+%>
+<jsp:forward page="showjobstatus.jsp"/>
+<%
+} else if (op.equals("Resume")) {
+  // -- Resume a job --
+  String jobID = variableContext.getParameter("jobid");
+  manager.restartJob(new Long(jobID));
+  // Forward to showjobstatus
+%>
+<jsp:forward page="showjobstatus.jsp"/>
+<%
+} else {
+  // Error
+  variableContext.setParameter("text", "Illegal parameter to jobstatus execution page: " + op);
+  variableContext.setParameter("target", "index.jsp");
 %>
-
-<%
-	// The purpose of this jsp is to execute commands, and then dispatch to the right form or display page using
-	// jsp:forward.
-	// Note that, for errors, the logic must involve another step.  That step involves dispatching to the error
-	// page, and passing in the error and the name of the page to go to when the error is accepted by the user.
-	// This page must therefore NEVER cause text to be streamed, and must ALWAYS pass information to the page
-	// it forwards to using arguments and thread context only.
-	//
-	// The parameters that the page expects depend on the operation.  The operation is passed as the parameter "op".
-	// For many operations there is a secondary parameter determining the type of entity being operated on.
-	// This is passed in the parameter "type".
-	//
-	// Dispatches are handled within the logic for each operation type.  This includes dispatches to the error page.
-	// The error page receives the following argument values: "text" (the error text), and "target" (the page to go to
-	// on confirmation).
-	//
-	// If no operation at all is present, or if no dispatch occurs, then this code simply dispatches to the home admin page.
-
-	try
-	{
-		// Make a few things we will need
-		// Get the job manager handle
-		IJobManager manager = JobManagerFactory.make(threadContext);
-		IAuthorityGroupManager authGroupManager = AuthorityGroupManagerFactory.make(threadContext);
-		IRepositoryConnectionManager connManager = RepositoryConnectionManagerFactory.make(threadContext);
-		INotificationConnectionManager notificationManager = NotificationConnectionManagerFactory.make(threadContext);
-		IAuthorityConnectionManager authConnManager = AuthorityConnectionManagerFactory.make(threadContext);
-		IMappingConnectionManager mappingConnManager = MappingConnectionManagerFactory.make(threadContext);
-		IOutputConnectionManager outputManager = OutputConnectionManagerFactory.make(threadContext);
-		ITransformationConnectionManager transformationManager = TransformationConnectionManagerFactory.make(threadContext);
-		
-		IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
-		ITransformationConnectorPool transformationConnectorPool = TransformationConnectorPoolFactory.make(threadContext);
-		IRepositoryConnectorPool repositoryConnectorPool = RepositoryConnectorPoolFactory.make(threadContext);
-		INotificationConnectorPool notificationConnectorPool = NotificationConnectorPoolFactory.make(threadContext);
-		
-		String type = variableContext.getParameter("type");
-		String op = variableContext.getParameter("op");
-		if (type != null && op != null && type.equals("connection"))
-		{
-			// -- Connection editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					IRepositoryConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = connManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = connManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-					
-					// Fill in connection object from posted data
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("authorityname");
-					if (x != null && x.length() > 0)
-					{
-						if (x.equals("_none_"))
-							connection.setACLAuthority(null);
-						else
-							connection.setACLAuthority(x);
-					}
-					x = variableContext.getParameter("maxconnections");
-					if (x != null && x.length() > 0)
-						connection.setMaxConnections(Integer.parseInt(x));
-
-					// Gather and save throttles
-					x = variableContext.getParameter("throttlecount");
-					if (x != null)
-					{
-						int throttleCount = Integer.parseInt(x);
-						connection.clearThrottleValues();
-						int j = 0;
-						while (j < throttleCount)
-						{
-							String regexp = variableContext.getParameter("throttle_"+Integer.toString(j));
-							String desc = variableContext.getParameter("throttledesc_"+Integer.toString(j));
-							if (desc == null)
-								desc = "";
-							String value = variableContext.getParameter("throttlevalue_"+Integer.toString(j));
-							connection.addThrottleValue(regexp,desc,(float)(((double)new Long(value).longValue())/(double)(60000.0)));
-							j++;
-						}
-						x = variableContext.getParameter("throttleop");
-						if (x != null && x.equals("Delete"))
-						{
-							// Delete an item from the throttles list
-							x = variableContext.getParameter("throttlenumber");
-							String regexp = variableContext.getParameter("throttle_"+x);
-							connection.deleteThrottleValue(regexp);
-						}
-						else if (x != null && x.equals("Add"))
-						{
-							// Add an item to the throttles list
-							String regexp = variableContext.getParameter("throttle");
-							String desc = variableContext.getParameter("throttledesc");
-							if (desc == null)
-								desc = "";
-							Long value = new Long(variableContext.getParameter("throttlevalue"));
-							connection.addThrottleValue(regexp,desc,(float)(((double)value.longValue())/(double)(60000.0)));
-						}
-					}
-
-					String error = RepositoryConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-						
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listconnections.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="editconnection.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						connManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewconnection.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listconnections.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					connManager.delete(connectionName);
-%>
-					<jsp:forward page="listconnections.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listconnections.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listconnections.jsp"/>
-<%
-			}
-			else if (op.equals("ClearHistory"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					connManager.cleanUpHistoryData(connectionName);
-%>
-					<jsp:forward page="listconnections.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listconnections.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to connection execution page");
-				variableContext.setParameter("target","listconnections.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("group"))
-		{
-			// -- Group editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					IAuthorityGroup group = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String groupName = variableContext.getParameter("groupname");
-					// If the groupname is not null, load the group and prepopulate everything with what comes from it.
-					if (groupName != null && groupName.length() > 0 && !isNew)
-					{
-						group = authGroupManager.load(groupName);
-					}
-					
-					if (group == null)
-					{
-						group = authGroupManager.create();
-						if (groupName != null && groupName.length() > 0)
-							group.setName(groupName);
-					}
-
-					// Gather all the data from the form.
-					group.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						group.setDescription(x);
-
-					if (op.equals("Continue"))
-					{
-						threadContext.save("GroupObject",group);
-%>
-						<jsp:forward page="editgroup.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						authGroupManager.save(group);
-						variableContext.setParameter("groupname",groupName);
-%>
-						<jsp:forward page="viewgroup.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listgroups.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String groupName = variableContext.getParameter("groupname");
-					if (groupName == null)
-						throw new ManifoldCFException("Missing group name parameter");
-					authGroupManager.delete(groupName);
-%>
-					<jsp:forward page="listgroups.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listgroups.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listgroups.jsp"/>
-<%
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to authority group execution page");
-				variableContext.setParameter("target","listgroups.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-
-		}
-		else if (type != null && op != null && type.equals("authority"))
-		{
-			// -- Authority editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					IAuthorityConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = authConnManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = authConnManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-
-					// Gather all the data from the form.
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("maxconnections");
-					if (x != null)
-						connection.setMaxConnections(Integer.parseInt(x));
-					x = variableContext.getParameter("prerequisites_present");
-					if (x != null && x.equals("true"))
-					{
-						String y = variableContext.getParameter("prerequisites");
-						if (y != null && y.length() == 0)
-							y = null;
-						connection.setPrerequisiteMapping(y);
-					}
-					x = variableContext.getParameter("authdomain");
-					if (x != null)
-						connection.setAuthDomain(x);
-					x = variableContext.getParameter("authoritygroup");
-					if (x != null)
-						connection.setAuthGroup(x);
-
-					String error = AuthorityConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-					
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listauthorities.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-					
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="editauthority.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						authConnManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewauthority.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listauthorities.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					authConnManager.delete(connectionName);
-%>
-					<jsp:forward page="listauthorities.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listauthorities.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listauthorities.jsp"/>
+<jsp:forward page="error.jsp"/>
 <%
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to authority execution page");
-				variableContext.setParameter("target","listauthorities.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("mapper"))
-		{
-			// -- Mapping editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					IMappingConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = mappingConnManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = mappingConnManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-
-					// Gather all the data from the form.
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("maxconnections");
-					if (x != null && x.length() > 0)
-						connection.setMaxConnections(Integer.parseInt(x));
-					x = variableContext.getParameter("prerequisites_present");
-					if (x != null && x.equals("true"))
-					{
-						String y = variableContext.getParameter("prerequisites");
-						if (y != null && y.length() == 0)
-							y = null;
-						connection.setPrerequisiteMapping(y);
-					}
-
-					String error = MappingConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-					
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listmappers.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-					
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="editmapper.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						mappingConnManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewmapper.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listmappers.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					mappingConnManager.delete(connectionName);
-%>
-					<jsp:forward page="listmappers.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listmappers.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listmappers.jsp"/>
-<%
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to mapping execution page");
-				variableContext.setParameter("target","listmappers.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("output"))
-		{
-			// -- Output connection editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					IOutputConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = outputManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = outputManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-
-					// Gather all the data from the form.
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("maxconnections");
-					if (x != null && x.length() > 0)
-						connection.setMaxConnections(Integer.parseInt(x));
-
-					String error = OutputConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-					
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listoutputs.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-					
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="editoutput.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						outputManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewoutput.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listoutputs.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					outputManager.delete(connectionName);
-%>
-					<jsp:forward page="listoutputs.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listoutputs.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listoutputs.jsp"/>
-<%
-			}
-			else if (op.equals("ReingestAll"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					org.apache.manifoldcf.agents.system.ManifoldCF.signalOutputConnectionRedo(threadContext,connectionName);
-%>
-					<jsp:forward page="listoutputs.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listoutputs.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("RemoveAll"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					org.apache.manifoldcf.agents.system.ManifoldCF.signalOutputConnectionRemoved(threadContext,connectionName);
-%>
-					<jsp:forward page="listoutputs.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listoutputs.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to output connection execution page");
-				variableContext.setParameter("target","listoutputs.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("transformation"))
-		{
-			// -- Output connection editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					ITransformationConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = transformationManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = transformationManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-
-					// Gather all the data from the form.
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("maxconnections");
-					if (x != null && x.length() > 0)
-						connection.setMaxConnections(Integer.parseInt(x));
-
-					String error = TransformationConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-					
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listtransformations.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-					
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="edittransformation.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						transformationManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewtransformation.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listtransformations.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					transformationManager.delete(connectionName);
-%>
-					<jsp:forward page="listtransformations.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listtransformations.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listtransformations.jsp"/>
-<%
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to transformation connection execution page");
-				variableContext.setParameter("target","listtransformations.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("notification"))
-		{
-			// -- Notification connection editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					// Set up a connection object that is a merge of an existing connection object plus what was posted.
-					INotificationConnection connection = null;
-					boolean isNew = true;
-					String x = variableContext.getParameter("isnewconnection");
-					if (x != null)
-						isNew = x.equals("true");
-
-					String connectionName = variableContext.getParameter("connname");
-					// If the connectionname is not null, load the connection description and prepopulate everything with what comes from it.
-					if (connectionName != null && connectionName.length() > 0 && !isNew)
-					{
-						connection = notificationManager.load(connectionName);
-					}
-					
-					if (connection == null)
-					{
-						connection = notificationManager.create();
-						if (connectionName != null && connectionName.length() > 0)
-							connection.setName(connectionName);
-					}
-
-					// Gather all the data from the form.
-					connection.setIsNew(isNew);
-					x = variableContext.getParameter("description");
-					if (x != null)
-						connection.setDescription(x);
-					x = variableContext.getParameter("classname");
-					if (x != null)
-						connection.setClassName(x);
-					x = variableContext.getParameter("maxconnections");
-					if (x != null && x.length() > 0)
-						connection.setMaxConnections(Integer.parseInt(x));
-
-					String error = NotificationConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,pageContext.getRequest().getLocale(),connection.getConfigParams());
-					
-					if (error != null)
-					{
-						variableContext.setParameter("text",error);
-						variableContext.setParameter("target","listnotifications.jsp");
-%>
-						<jsp:forward page="error.jsp"/>
-<%
-					}
-					
-					if (op.equals("Continue"))
-					{
-						threadContext.save("ConnectionObject",connection);
-%>
-						<jsp:forward page="editnotification.jsp"/>
-<%
-					}
-					else if (op.equals("Save"))
-					{
-						notificationManager.save(connection);
-						variableContext.setParameter("connname",connectionName);
-%>
-						<jsp:forward page="viewnotification.jsp"/>
-<%
-					}
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listnotifications.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Delete"))
-			{
-				try
-				{
-					String connectionName = variableContext.getParameter("connname");
-					if (connectionName == null)
-						throw new ManifoldCFException("Missing connection parameter");
-					notificationManager.delete(connectionName);
-%>
-					<jsp:forward page="listnotifications.jsp"/>
-<%
-				}
-				catch (ManifoldCFException e)
-				{
-					e.printStackTrace();
-					variableContext.setParameter("text",e.getMessage());
-					variableContext.setParameter("target","listnotifications.jsp");
-%>
-					<jsp:forward page="error.jsp"/>
-<%
-				}
-			}
-			else if (op.equals("Cancel"))
-			{
-%>
-				<jsp:forward page="listnotifications.jsp"/>
-<%
-			}
-			else
-			{
-				// Error
-				variableContext.setParameter("text","Illegal parameter to notification connection execution page");
-				variableContext.setParameter("target","listnotifications.jsp");
-%>
-				<jsp:forward page="error.jsp"/>
-<%
-			}
-		}
-		else if (type != null && op != null && type.equals("job"))
-		{
-			// -- Job editing operations --
-			if (op.equals("Save") || op.equals("Continue"))
-			{
-				try
-				{
-					String jobID = variableContext.getParameter("jobid");
-					IJobDescription job = null;
-					if (jobID != null)
-					{
-						job = manager.load(new Long(jobID));
-					}
-					if (job == null)
-						job = manager.createJob();
-
-					// Figure out what got posted.
-					String x = variableContext.getParameter("connectionpresent");
-					boolean connectionPresent = (x != null && x.equals("true"));
-					
-					// Gather the rest of the data.
-					x = variableContext.getParameter("description");
-					if (x != null)
-						job.setDescription(x);
-					x = variableContext.getParameter("connectionname");
-					if (x != null)
-						job.setConnectionName(x);
-					x = variableContext.getParameter("scheduletype");
-					if (x != null)
-						job.setType(Integer.parseInt(x));
-					x = variableContext.getParameter("startmethod");
-					if (x != null)
-						job.setStartMethod(Integer.parseInt(x));
-					x = variableContext.getParameter("hopcountmode");
-					if (x != null)
-						job.setHopcountMode(Integer.parseInt(x));
-					x = variableContext.getParameter("pipeline_count");
-					if (x != null)
-					{
-						// Do we need to keep the old specifications around, or can we destroy them?
-						// Not clear that retention is required., so I'm not wasting time trying to implement that.
-						int count = Integer.parseInt(x);
-						job.clearPipeline();
-						for (int j = 0; j < count; j++)
-						{
-							// Gather everything first; we'll look at edits later
-							int precedent = Integer.parseInt(variableContext.getParameter("pipeline_"+j+"_precedent"));
-							boolean isOutput = variableContext.getParameter("pipeline_"+j+"_isoutput").equals("true");
-							String connectionName = variableContext.getParameter("pipeline_"+j+"_connectionname");
-							String description = variableContext.getParameter("pipeline_"+j+"_description");
-							job.addPipelineStage(precedent, isOutput, connectionName, description);
-						}
-					}
-					x = variableContext.getParameter("notification_count");
-					if (x != null)
-					{
-						// Do we need to keep the old specifications around, or can we destroy them?
-						// Not clear that retention is required., so I'm not wasting time trying to implement that.
-						int count = Integer.parseInt(x);
-						job.clearNotifications();
-						for (int j = 0; j < count; j++)
-						{
-							// Gather everything first; we'll look at edits later
-							String connectionName = variableContext.getParameter("notification_"+j+"_connectionname");
-							String description = variableContext.getParameter("notification_"+j+"_description");
-							job.addNotification(connectionName, description);
-						}
-					}
-
-					x = variableContext.getParameter("schedulerecords");
-					String[] y;
-
-					if (x != null)
-					{
-						// Read records and put them into the job description
-						job.clearScheduleRecords();
-						int recordCount = Integer.parseInt(x);
-						int j = 0;
-						while (j < recordCount)
-						{
-							String indexValue = Integer.toString(j);
-							EnumeratedValues srDayOfWeek = null;
-							EnumeratedValues srDayOfMonth = null;
-							EnumeratedValues srMonthOfYear = null;
-							EnumeratedValues srYear = null;
-							EnumeratedValues srHourOfDay = null;
-							EnumeratedValues srMinutesOfHour = null;
-							Long srDuration = null;
-							boolean srRequestMinimum = false;
-
-							y = variableContext.getParameterValues("dayofweek"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srDayOfWeek = null;
-								else
-									srDayOfWeek = new EnumeratedValues(y);
-							}
-							y = variableContext.getParameterValues("dayofmonth"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srDayOfMonth = null;
-								else
-									srDayOfMonth = new EnumeratedValues(y);
-							}
-							y = variableContext.getParameterValues("monthofyear"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srMonthOfYear = null;
-								else
-									srMonthOfYear = new EnumeratedValues(y);
-							}
-							y = variableContext.getParameterValues("year"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srYear = null;
-								else
-									srYear = new EnumeratedValues(y);
-							}
-							y = variableContext.getParameterValues("hourofday"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srHourOfDay = null;
-								else
-									srHourOfDay = new EnumeratedValues(y);
-							}
-							y = variableContext.getParameterValues("minutesofhour"+indexValue);
-							if (y != null)
-							{
-								if (y.length >= 1 && y[0].equals("none"))
-									srMinutesOfHour = null;
-								else
-									srMinutesOfHour = new EnumeratedValues(y);
-							}
-							x = variableContext.getParameter("duration"+indexValue);
-							if (x != null)
-							{
-								if (x.length() == 0)
-									srDuration = null;
-								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,srRequestMinimum);
-								job.addScheduleRecord(sr);
-							}
-							j++;
-						}
-					}
-
-					// Check for operation that adds to schedule

[... 537 lines stripped ...]