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/13 00:54:44 UTC

svn commit: r1685187 [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=1685187&r1=1685186&r2=1685187&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 22:54:43 2015
@@ -2,1378 +2,1666 @@
 
 <%
 
-  /* $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.
- */
-%>
-
-<%
-  // 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");
+* 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.
+*/
 %>
-<jsp:forward page="error.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"/>
 <%
-  }
-} else {
+			}
+			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

[... 535 lines stripped ...]