manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r955006 - in /incubator/lcf/branches/CONNECTORS-40/modules: connectors/gts/ connectors/gts/connector/org/apache/lcf/agents/output/gts/ connectors/gts/crawler-ui/output/ connectors/nulloutput/ connectors/nulloutput/crawler-ui/output/ framewo...
Date Tue, 15 Jun 2010 19:13:45 GMT
Author: kwright
Date: Tue Jun 15 19:13:44 2010
New Revision: 955006

URL: http://svn.apache.org/viewvc?rev=955006&view=rev
Log:
Do the output connector interface changes, and the first real output connector (GTS), so that others can review the model.

Added:
    incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java   (with props)
    incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java   (with props)
    incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/
    incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java   (with props)
Removed:
    incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/crawler-ui/output/
    incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/crawler-ui/output/
Modified:
    incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/build.xml
    incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/connector/org/apache/lcf/agents/output/gts/GTSConnector.java
    incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/build.xml
    incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/IOutputConnector.java
    incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java
    incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/output/BaseOutputConnector.java
    incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editjob.jsp
    incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editoutput.jsp
    incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/execute.jsp
    incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewjob.jsp
    incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewoutput.jsp
    incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/multipart/MultipartWrapper.java

Modified: incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/build.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/build.xml?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/build.xml (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/build.xml Tue Jun 15 19:13:44 2010
@@ -25,71 +25,12 @@
         </javac>
     </target>
 
-    <target name="compile-crawler-ui" depends="compile-connector">
-        <!-- Unpack the crawler war -->
-        <mkdir dir="build/crawler-ui-war"/>
-        <unwar src="war/lcf-crawler-ui.war" dest="build/crawler-ui-war"/>
-        <!-- Create a copy of everything in the proper environment -->
-        <mkdir dir="build/jsp-environment/WEB-INF/lib"/>
-        <mkdir dir="build/jsp-environment/WEB-INF/jsp"/>
-        <copy todir="build/jsp-environment/WEB-INF" file="build/crawler-ui-war/WEB-INF/web.xml"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/adminHeaders.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/adminDefaults.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/error.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/checkAdminLogin.jsp"/>
-
-        <copy todir="build/jsp-environment">
-            <fileset dir="crawler-ui" includes="**/*.jsp,**/*.css,**/*.png,**/*.html"/>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/lib">
-            <fileset dir="build/crawler-ui-war/WEB-INF/lib">
-                <include name="*.jar"/>
-            </fileset>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/jsp">
-            <fileset dir="build/crawler-ui-war/WEB-INF/jsp">
-                <include name="*.tld"/>
-            </fileset>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/classes">
-            <fileset dir="build/connector/classes"/>
-        </copy>
-        <!-- Compile to java, as a check -->
-        <mkdir dir="build/crawler-ui/java"/>
-        <!-- Define the jsp compilation task using web libraries -->
-        <taskdef classname="org.apache.jasper.JspC" name="jasper2" > 
-            <classpath id="jspc.classpath"> 
-                <pathelement location="${java.home}/../lib/tools.jar"/>
-                <fileset dir="lib"> 
-                    <include name="*.jar"/> 
-                </fileset> 
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/jstl.jar"/>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/standard.jar"/>
-                <pathelement location="build/connector/classes"/>
-            </classpath> 
-        </taskdef> 
-        <jasper2 validateXml="false" uriroot="build/jsp-environment" webXmlFragment="build/jsp-environment/WEB-INF/web-generated.xml" outputDir="build/crawler-ui/java" /> 
-        <!-- Compile java classes -->
-        <mkdir dir="build/crawler-ui/classes"/>
-        <javac srcdir="build/crawler-ui/java" destdir="build/crawler-ui/classes" target="1.5" source="1.4" debug="true" debuglevel="lines,vars,source">
-            <classpath id="classpath">
-                <pathelement location="${java.home}/../lib/tools.jar"/>
-                <fileset dir="lib"> 
-                    <include name="*.jar"/> 
-                </fileset>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/jstl.jar"/>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/standard.jar"/>
-                <pathelement location="build/connector/classes"/>
-            </classpath>
-        </javac>
-    </target>
-    
     <target name="jar-connector" depends="compile-connector">
         <mkdir dir="build/jar"/>
         <jar destfile="build/jar/lcf-gts-connector.jar" basedir="build/connector/classes"/>
     </target>
 
-    <target name="webapp-crawler-ui" depends="compile-crawler-ui,jar-connector">
+    <target name="webapp-crawler-ui" depends="jar-connector">
         <mkdir dir="build/webapp/crawler-ui/WEB-INF/lib"/>
         <copy todir="build/webapp/crawler-ui/WEB-INF/lib" file="build/jar/lcf-gts-connector.jar"/>
         <mkdir dir="build/webapp/crawler-ui"/>

Modified: incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/connector/org/apache/lcf/agents/output/gts/GTSConnector.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/connector/org/apache/lcf/agents/output/gts/GTSConnector.java?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/connector/org/apache/lcf/agents/output/gts/GTSConnector.java (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/connectors/gts/connector/org/apache/lcf/agents/output/gts/GTSConnector.java Tue Jun 15 19:13:44 2010
@@ -345,6 +345,433 @@ public class GTSConnector extends org.ap
     poster.deletePost(documentURI,activities);
   }
 
+  // UI support methods.
+  //
+  // These support methods come in two varieties.  The first bunch is involved in setting up connection configuration information.  The second bunch
+  // is involved in presenting and editing output specification information for a job.  The two kinds of methods are accordingly treated differently,
+  // in that the first bunch cannot assume that the current connector object is connected, while the second bunch can.  That is why the first bunch
+  // receives a thread context argument for all UI methods, while the second bunch does not need one (since it has already been applied via the connect()
+  // method, above).
+    
+  /** Output the configuration header section.
+  * This method is called in the head section of the connector's configuration page.  Its purpose is to add the required tabs to the list, and to output any
+  * javascript methods that might be needed by the configuration editing HTML.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, ArrayList tabsArray)
+    throws LCFException, IOException
+  {
+    tabsArray.add("Appliance");
+    out.print(
+"\n"+
+"<script type=\"text/javascript\">\n"+
+"<!--\n"+
+"function checkConfig()\n"+
+"{\n"+
+"  if (editconnection.ingesturi.value == \"\")\n"+
+"  {\n"+
+"    alert(\"Please supply a valid ingestion URI\");\n"+
+"    editconnection.ingesturi.focus();\n"+
+"    return false;\n"+
+"  }\n"+
+"  return true;\n"+
+"}\n"+
+"\n"+
+"function checkConfigForSave()\n"+
+"{\n"+
+"  if (editconnection.ingesturi.value == \"\")\n"+
+"  {\n"+
+"    alert(\"Please supply a valid ingestion URI\");\n"+
+"    SelectTab(\"Appliance\");\n"+
+"    editconnection.ingesturi.focus();\n"+
+"    return false;\n"+
+"  }\n"+
+"  return true;\n"+
+"}\n"+
+"\n"+
+"//-->\n"+
+"</script>\n"
+    );
+
+  }
+  
+  /** Output the configuration body section.
+  * This method is called in the body section of the connector's configuration page.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabName is the current tab name.
+  */
+  public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, String tabName)
+    throws LCFException, IOException
+  {
+    String ingestURI = parameters.getParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_INGESTURI);
+    if (ingestURI == null)
+      ingestURI = "http://localhost:7031/HTTPIngest";
+
+    String realm = parameters.getParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_REALM);
+    if (realm == null)
+      realm = "";
+
+    String userID = parameters.getParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_USERID);
+    if (userID == null)
+      userID = "";
+		
+    String password = parameters.getObfuscatedParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_PASSWORD);
+    if (password == null)
+      password = "";
+		
+    // "Appliance" tab
+    if (tabName.equals("Appliance"))
+    {
+      out.print(
+"\n"+
+"<table class=\"displaytable\">\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Ingest URI:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <input name=\"ingesturi\" type=\"text\" size=\"32\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(ingestURI)+"/>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Realm:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <input name=\"realm\" type=\"text\" size=\"32\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(realm)+"/>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>User ID:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <input name=\"userid\" type=\"text\" size=\"32\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(userID)+"/>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Password:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <input type=\"password\" size=\"32\" name=\"password\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(password)+"/>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"</table>\n"
+      );
+    }
+    else
+    {
+      // Appliance tab hiddens
+      out.print("\n"+
+"<input type=\"hidden\" name=\"ingesturi\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(ingestURI)+"/>\n"+
+"<input type=\"hidden\" name=\"userid\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(userID)+"/>\n"+
+"<input type=\"hidden\" name=\"password\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(password)+"/>\n"
+      );
+    }
+  }
+  
+  /** Process a configuration post.
+  * This method is called at the start of the connector's configuration page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the configuration parameters accordingly.
+  * The name of the posted form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param variableContext is the set of variables available from the post, including binary file post information.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the connection (and cause a redirection to an error page).
+  */
+  public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext, ConfigParams parameters)
+    throws LCFException
+  {
+    String ingestURI = variableContext.getParameter("ingesturi");
+    if (ingestURI != null)
+      parameters.setParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_INGESTURI,ingestURI);
+
+    String realm = variableContext.getParameter("realm");
+    if (realm != null)
+      parameters.setParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_REALM,realm);
+
+    String userID = variableContext.getParameter("userid");
+    if (userID != null)
+      parameters.setParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_USERID,userID);
+		
+    String password = variableContext.getParameter("password");
+    if (password != null)
+      parameters.setObfuscatedParameter(org.apache.lcf.agents.output.gts.GTSConfig.PARAM_PASSWORD,password);
+    
+    return null;
+  }
+  
+  /** View configuration.
+  * This method is called in the body section of the connector's view configuration page.  Its purpose is to present the connection information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  */
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters)
+    throws LCFException, IOException
+  {
+    out.print(
+"\n"+
+"<table class=\"displaytable\">\n"+
+"  <tr>\n"+
+"    <td class=\"description\" colspan=\"1\"><nobr>Parameters:</nobr></td>\n"+
+"    <td class=\"value\" colspan=\"3\">\n"
+    );
+    
+    Iterator iter = parameters.listParameters();
+    while (iter.hasNext())
+    {
+      String param = (String)iter.next();
+      String value = parameters.getParameter(param);
+      if (param.length() >= "password".length() && param.substring(param.length()-"password".length()).equalsIgnoreCase("password"))
+      {
+        out.print(
+"      <nobr>"+org.apache.lcf.ui.util.Encoder.bodyEscape(param)+"=********</nobr><br/>\n"
+        );
+      }
+      else if (param.length() >="keystore".length() && param.substring(param.length()-"keystore".length()).equalsIgnoreCase("keystore"))
+      {
+        IKeystoreManager kmanager = KeystoreManagerFactory.make("",value);
+        out.print(
+"      <nobr>"+org.apache.lcf.ui.util.Encoder.bodyEscape(param)+"=<"+Integer.toString(kmanager.getContents().length)+" certificate(s)</nobr><br/>\n"
+        );
+      }
+      else
+      {
+        out.print(
+"      <nobr>"+org.apache.lcf.ui.util.Encoder.bodyEscape(param)+"="+org.apache.lcf.ui.util.Encoder.bodyEscape(value)+"</nobr><br/>\n"
+        );
+      }
+    }
+    out.print(
+"    </td>\n"+
+"  </tr>\n"+
+"</table>\n"
+    );
+  }
+  
+  /** Output the specification header section.
+  * This method is called in the head section of a job page which has selected an output connection of the current type.  Its purpose is to add the required tabs
+  * to the list, and to output any javascript methods that might be needed by the job editing HTML.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputSpecificationHeader(IHTTPOutput out, OutputSpecification os, ArrayList tabsArray)
+    throws LCFException, IOException
+  {
+    tabsArray.add("Collections");
+    tabsArray.add("Template");
+    out.print(
+"\n"+
+"<script type=\"text/javascript\">\n"+
+"<!--\n"+
+"\n"+
+"function checkOutputSpecification()\n"+
+"{\n"+
+"  if (editjob.gts_collectionname.value.length > 230)\n"+
+"  {\n"+
+"    alert(\"Collection name must be less than or equal to 230 characters\");\n"+
+"    editjob.gts_collectionname.focus();\n"+
+"    return false;\n"+
+"  }\n"+
+"  return true;\n"+
+"}\n"+
+"\n"+
+"//-->\n"+
+"</script>\n"
+    );
+  }
+  
+  /** Output the specification body section.
+  * This method is called in the body section of a job page which has selected an output connection of the current type.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editjob".
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabName is the current tab name.
+  */
+  public void outputSpecificationBody(IHTTPOutput out, OutputSpecification os, String tabName)
+    throws LCFException, IOException
+  {
+    int i = 0;
+    String collectionName = null;
+    String documentTemplate = null;
+    while (i < os.getChildCount())
+    {
+      SpecificationNode sn = os.getChild(i++);
+      if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_COLLECTION))
+      {
+        collectionName = sn.getAttributeValue(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE);
+      }
+      else if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_DOCUMENTTEMPLATE))
+      {
+        documentTemplate = sn.getAttributeValue(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE);
+      }
+    }
+    if (collectionName == null)
+      collectionName = "";
+    if (documentTemplate == null)
+      documentTemplate = "";
+
+    // Collections tab
+    if (tabName.equals("Collections"))
+    {
+      out.print(
+"<table class=\"displaytable\">\n"+
+"  <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Collection name:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <input name=\"gts_collectionname\" type=\"text\" size=\"32\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(collectionName)+"\"/>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"</table>\n"
+      );
+    }
+    else
+    {
+      // Hiddens for collections
+      out.print(
+"<input type=\"hidden\" name=\"gts_collectionname\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(collectionName)+"\"/>\n"
+      );
+    }
+
+    // Template tab
+    if (tabName.equals("Template"))
+    {
+      out.print(
+"<table class=\"displaytable\">\n"+
+"  <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Document template:</nobr></td>\n"+
+"    <td class=\"value\">\n"+
+"      <textarea rows=\"10\" cols=\"96\" name=\"gts_documenttemplate\">"+org.apache.lcf.ui.util.Encoder.bodyEscape(documentTemplate)+"</textarea>\n"+
+"    </td>\n"+
+"  </tr>\n"+
+"</table>\n"
+      );
+    }
+    else
+    {
+      // Hiddens for document template
+      out.print(
+"<input type=\"hidden\" name=\"gts_documenttemplate\" value=\""+org.apache.lcf.ui.util.Encoder.attributeEscape(documentTemplate)+"\"/>\n"
+      );
+    }
+  }
+  
+  /** Process a specification post.
+  * This method is called at the start of job's edit or view page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the output specification accordingly.
+  * The name of the posted form is "editjob".
+  *@param variableContext contains the post data, including binary file-upload information.
+  *@param os is the current output specification for this job.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the job (and cause a redirection to an error page).
+  */
+  public String processSpecificationPost(IPostParameters variableContext, OutputSpecification os)
+    throws LCFException
+  {
+    // Collection name
+    String collectionName = variableContext.getParameter("gts_collectionname");
+    if (collectionName != null)
+    {
+      int i = 0;
+      while (i < os.getChildCount())
+      {
+        SpecificationNode sn = os.getChild(i);
+        if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_COLLECTION))
+          os.removeChild(i);
+        else
+          i++;
+      }
+      if (collectionName.length() > 0)
+      {
+        SpecificationNode newspec = new SpecificationNode(org.apache.lcf.agents.output.gts.GTSConfig.NODE_COLLECTION);
+        newspec.setAttribute(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE,collectionName);
+        os.addChild(os.getChildCount(),newspec);
+      }
+    }
+
+    // Document template
+    String documentTemplate = variableContext.getParameter("gts_documenttemplate");
+    if (documentTemplate != null)
+    {
+      int i = 0;
+      while (i < os.getChildCount())
+      {
+        SpecificationNode sn = os.getChild(i);
+        if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_DOCUMENTTEMPLATE))
+          os.removeChild(i);
+        else
+          i++;
+      }
+      SpecificationNode newspec = new SpecificationNode(org.apache.lcf.agents.output.gts.GTSConfig.NODE_DOCUMENTTEMPLATE);
+      newspec.setAttribute(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE,documentTemplate);
+      os.addChild(os.getChildCount(),newspec);
+    }
+
+    return null;
+  }
+  
+  /** View specification.
+  * This method is called in the body section of a job's view page.  Its purpose is to present the output specification information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  */
+  public void viewSpecification(IHTTPOutput out, OutputSpecification os)
+    throws LCFException, IOException
+  {
+    int i = 0;
+    String collectionName = null;
+    String documentTemplate = null;
+    while (i < os.getChildCount())
+    {
+      SpecificationNode sn = os.getChild(i++);
+      if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_COLLECTION))
+      {
+        collectionName = sn.getAttributeValue(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE);
+      }
+      else if (sn.getType().equals(org.apache.lcf.agents.output.gts.GTSConfig.NODE_DOCUMENTTEMPLATE))
+      {
+        documentTemplate = sn.getAttributeValue(org.apache.lcf.agents.output.gts.GTSConfig.ATTRIBUTE_VALUE);
+      }
+    }
+    if (collectionName == null)
+      collectionName = "";
+    if (documentTemplate == null)
+      documentTemplate = "";
+
+    // Display collections
+    out.print(
+"\n"+
+"<table class=\"displaytable\">\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Collection:</nobr></td>\n"+
+"    <td class=\"value\">"+org.apache.lcf.ui.util.Encoder.bodyEscape(collectionName)+"</td>\n"+
+"  </tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>Document template:</nobr></td>\n"+
+"    <td class=\"value\">\n"
+    );
+    if (documentTemplate == null || documentTemplate.length() == 0)
+      out.println("None specified");
+    else
+    {
+      out.print(
+"        <textarea name=\"documenttemplate\" cols=\"96\" rows=\"5\" readonly=\"true\">"+org.apache.lcf.ui.util.Encoder.bodyEscape(documentTemplate)+"</textarea>\n"
+      );
+    }
+    out.print(
+"    </td>\n"+
+"  </tr>\n"+
+"</table>\n"
+    );
+  }
+
+
   // Protected methods
 
   /** Stuffer for packing a single string with an end delimiter */

Modified: incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/build.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/build.xml?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/build.xml (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/connectors/nulloutput/build.xml Tue Jun 15 19:13:44 2010
@@ -25,71 +25,12 @@
         </javac>
     </target>
 
-    <target name="compile-crawler-ui" depends="compile-connector">
-        <!-- Unpack the crawler war -->
-        <mkdir dir="build/crawler-ui-war"/>
-        <unwar src="war/lcf-crawler-ui.war" dest="build/crawler-ui-war"/>
-        <!-- Create a copy of everything in the proper environment -->
-        <mkdir dir="build/jsp-environment/WEB-INF/lib"/>
-        <mkdir dir="build/jsp-environment/WEB-INF/jsp"/>
-        <copy todir="build/jsp-environment/WEB-INF" file="build/crawler-ui-war/WEB-INF/web.xml"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/adminHeaders.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/adminDefaults.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/error.jsp"/>
-        <copy todir="build/jsp-environment" file="build/crawler-ui-war/checkAdminLogin.jsp"/>
-
-        <copy todir="build/jsp-environment">
-            <fileset dir="crawler-ui" includes="**/*.jsp,**/*.css,**/*.png,**/*.html"/>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/lib">
-            <fileset dir="build/crawler-ui-war/WEB-INF/lib">
-                <include name="*.jar"/>
-            </fileset>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/jsp">
-            <fileset dir="build/crawler-ui-war/WEB-INF/jsp">
-                <include name="*.tld"/>
-            </fileset>
-        </copy>
-        <copy todir="build/jsp-environment/WEB-INF/classes">
-            <fileset dir="build/connector/classes"/>
-        </copy>
-        <!-- Compile to java, as a check -->
-        <mkdir dir="build/crawler-ui/java"/>
-        <!-- Define the jsp compilation task using web libraries -->
-        <taskdef classname="org.apache.jasper.JspC" name="jasper2" > 
-            <classpath id="jspc.classpath"> 
-                <pathelement location="${java.home}/../lib/tools.jar"/>
-                <fileset dir="lib"> 
-                    <include name="*.jar"/> 
-                </fileset> 
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/jstl.jar"/>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/standard.jar"/>
-                <pathelement location="build/connector/classes"/>
-            </classpath> 
-        </taskdef> 
-        <jasper2 validateXml="false" uriroot="build/jsp-environment" webXmlFragment="build/jsp-environment/WEB-INF/web-generated.xml" outputDir="build/crawler-ui/java" /> 
-        <!-- Compile java classes -->
-        <mkdir dir="build/crawler-ui/classes"/>
-        <javac srcdir="build/crawler-ui/java" destdir="build/crawler-ui/classes" target="1.5" source="1.4" debug="true" debuglevel="lines,vars,source">
-            <classpath id="classpath">
-                <pathelement location="${java.home}/../lib/tools.jar"/>
-                <fileset dir="lib"> 
-                    <include name="*.jar"/> 
-                </fileset>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/jstl.jar"/>
-                <pathelement location="build/crawler-ui-war/WEB-INF/lib/standard.jar"/>
-                <pathelement location="build/connector/classes"/>
-            </classpath>
-        </javac>
-    </target>
-    
     <target name="jar-connector" depends="compile-connector">
         <mkdir dir="build/jar"/>
         <jar destfile="build/jar/lcf-nulloutput-connector.jar" basedir="build/connector/classes"/>
     </target>
 
-    <target name="webapp-crawler-ui" depends="compile-crawler-ui,jar-connector">
+    <target name="webapp-crawler-ui" depends="jar-connector">
         <mkdir dir="build/webapp/crawler-ui/WEB-INF/lib"/>
         <copy todir="build/webapp/crawler-ui/WEB-INF/lib" file="build/jar/lcf-nulloutput-connector.jar"/>
         <mkdir dir="build/webapp/crawler-ui"/>

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/IOutputConnector.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/IOutputConnector.java?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/IOutputConnector.java (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/IOutputConnector.java Tue Jun 15 19:13:44 2010
@@ -73,15 +73,6 @@ public interface IOutputConnector
   public void deinstall(IThreadContext threadContext)
     throws LCFException;
 
-  /** Return the path for the UI interface JSP elements.
-  * These JSP's must be provided to allow the connector to be configured, and to
-  * permit it to present connector-specific metadata specification information in the UI.
-  * This method should return the name of the folder, under the <webapp>/output/
-  * area, where the appropriate JSP's can be found.  The name should NOT have a slash in it.
-  *@return the folder part
-  */
-  public String getJSPFolder();
-
   /** Return a list of activities that this connector generates.
   *@return the set of activities.
   */
@@ -186,6 +177,100 @@ public interface IOutputConnector
   public void removeDocument(String documentURI, String outputDescription, IOutputRemoveActivity activities)
     throws LCFException, ServiceInterruption;
 
+  // UI support methods.
+  //
+  // These support methods come in two varieties.  The first bunch is involved in setting up connection configuration information.  The second bunch
+  // is involved in presenting and editing output specification information for a job.  The two kinds of methods are accordingly treated differently,
+  // in that the first bunch cannot assume that the current connector object is connected, while the second bunch can.  That is why the first bunch
+  // receives a thread context argument for all UI methods, while the second bunch does not need one (since it has already been applied via the connect()
+  // method, above).
+    
+  /** Output the configuration header section.
+  * This method is called in the head section of the connector's configuration page.  Its purpose is to add the required tabs to the list, and to output any
+  * javascript methods that might be needed by the configuration editing HTML.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, ArrayList tabsArray)
+    throws LCFException, IOException;
+  
+  /** Output the configuration body section.
+  * This method is called in the body section of the connector's configuration page.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabName is the current tab name.
+  */
+  public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, String tabName)
+    throws LCFException, IOException;
+  
+  /** Process a configuration post.
+  * This method is called at the start of the connector's configuration page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the configuration parameters accordingly.
+  * The name of the posted form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param variableContext is the set of variables available from the post, including binary file post information.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the connection (and cause a redirection to an error page).
+  */
+  public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext, ConfigParams parameters)
+    throws LCFException;
+  
+  /** View configuration.
+  * This method is called in the body section of the connector's view configuration page.  Its purpose is to present the connection information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  */
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters)
+    throws LCFException, IOException;
+  
+  /** Output the specification header section.
+  * This method is called in the head section of a job page which has selected an output connection of the current type.  Its purpose is to add the required tabs
+  * to the list, and to output any javascript methods that might be needed by the job editing HTML.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputSpecificationHeader(IHTTPOutput out, OutputSpecification os, ArrayList tabsArray)
+    throws LCFException, IOException;
+  
+  /** Output the specification body section.
+  * This method is called in the body section of a job page which has selected an output connection of the current type.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editjob".
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabName is the current tab name.
+  */
+  public void outputSpecificationBody(IHTTPOutput out, OutputSpecification os, String tabName)
+    throws LCFException, IOException;
+  
+  /** Process a specification post.
+  * This method is called at the start of job's edit or view page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the output specification accordingly.
+  * The name of the posted form is "editjob".
+  *@param variableContext contains the post data, including binary file-upload information.
+  *@param os is the current output specification for this job.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the job (and cause a redirection to an error page).
+  */
+  public String processSpecificationPost(IPostParameters variableContext, OutputSpecification os)
+    throws LCFException;
+  
+  /** View specification.
+  * This method is called in the body section of a job's view page.  Its purpose is to present the output specification information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  */
+  public void viewSpecification(IHTTPOutput out, OutputSpecification os)
+    throws LCFException, IOException;
+  
 }
 
 

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java Tue Jun 15 19:13:44 2010
@@ -21,6 +21,7 @@ package org.apache.lcf.agents.interfaces
 import org.apache.lcf.core.interfaces.*;
 
 import java.util.*;
+import java.io.*;
 import java.lang.reflect.*;
 
 /** This is the factory class for IOutputConnector objects.
@@ -74,17 +75,49 @@ public class OutputConnectorFactory
     return values;
   }
 
-  /** Get the JSP folder for a connector.
-  *@param className is the class name.
-  *@return the folder string.
+  /** Output the configuration header section.
   */
-  public static String getJSPFolder(IThreadContext threadContext, String className)
+  public static void outputConfigurationHeader(IThreadContext threadContext, String className, IHTTPOutput out, ConfigParams parameters, ArrayList tabsArray)
+    throws LCFException, IOException
+  {
+    IOutputConnector connector = getConnector(threadContext, className);
+    if (connector == null)
+      return;
+    connector.outputConfigurationHeader(threadContext,out,parameters,tabsArray);
+  }
+
+  /** Output the configuration body section.
+  */
+  public static void outputConfigurationBody(IThreadContext threadContext, String className, IHTTPOutput out, ConfigParams parameters, String tabName)
+    throws LCFException, IOException
+  {
+    IOutputConnector connector = getConnector(threadContext, className);
+    if (connector == null)
+      return;
+    connector.outputConfigurationBody(threadContext,out,parameters,tabName);
+  }
+
+  /** Process configuration post data for a connector.
+  */
+  public static String processConfigurationPost(IThreadContext threadContext, String className, IPostParameters variableContext, ConfigParams configParams)
     throws LCFException
   {
     IOutputConnector connector = getConnector(threadContext, className);
     if (connector == null)
       return null;
-    return connector.getJSPFolder();
+    return connector.processConfigurationPost(threadContext,variableContext,configParams);
+  }
+  
+  /** View connector configuration.
+  */
+  public static void viewConfiguration(IThreadContext threadContext, String className, IHTTPOutput out, ConfigParams configParams)
+    throws LCFException, IOException
+  {
+    IOutputConnector connector = getConnector(threadContext, className);
+    // We want to be able to view connections even if they have unregistered connectors.
+    if (connector == null)
+      return;
+    connector.viewConfiguration(threadContext,out,configParams);
   }
 
   /** Get an output connector instance, without checking for installed connector.

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/output/BaseOutputConnector.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/output/BaseOutputConnector.java?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/output/BaseOutputConnector.java (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/agents/org/apache/lcf/agents/output/BaseOutputConnector.java Tue Jun 15 19:13:44 2010
@@ -166,6 +166,118 @@ public abstract class BaseOutputConnecto
     return true;
   }
 
+  // UI support methods.
+  //
+  // These support methods come in two varieties.  The first bunch is involved in setting up connection configuration information.  The second bunch
+  // is involved in presenting and editing output specification information for a job.  The two kinds of methods are accordingly treated differently,
+  // in that the first bunch cannot assume that the current connector object is connected, while the second bunch can.  That is why the first bunch
+  // receives a thread context argument for all UI methods, while the second bunch does not need one (since it has already been applied via the connect()
+  // method, above).
+    
+  /** Output the configuration header section.
+  * This method is called in the head section of the connector's configuration page.  Its purpose is to add the required tabs to the list, and to output any
+  * javascript methods that might be needed by the configuration editing HTML.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, ArrayList tabsArray)
+    throws LCFException, IOException
+  {
+  }
+  
+  /** Output the configuration body section.
+  * This method is called in the body section of the connector's configuration page.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@param tabName is the current tab name.
+  */
+  public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters, String tabName)
+    throws LCFException, IOException
+  {
+  }
+  
+  /** Process a configuration post.
+  * This method is called at the start of the connector's configuration page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the configuration parameters accordingly.
+  * The name of the posted form is "editconnection".
+  *@param threadContext is the local thread context.
+  *@param variableContext is the set of variables available from the post, including binary file post information.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the connection (and cause a redirection to an error page).
+  */
+  public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext, ConfigParams parameters)
+    throws LCFException
+  {
+    return null;
+  }
+  
+  /** View configuration.
+  * This method is called in the body section of the connector's view configuration page.  Its purpose is to present the connection information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param threadContext is the local thread context.
+  *@param out is the output to which any HTML should be sent.
+  *@param parameters are the configuration parameters, as they currently exist, for this connection being configured.
+  */
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, ConfigParams parameters)
+    throws LCFException, IOException
+  {
+  }
+  
+  /** Output the specification header section.
+  * This method is called in the head section of a job page which has selected an output connection of the current type.  Its purpose is to add the required tabs
+  * to the list, and to output any javascript methods that might be needed by the job editing HTML.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabsArray is an array of tab names.  Add to this array any tab names that are specific to the connector.
+  */
+  public void outputSpecificationHeader(IHTTPOutput out, OutputSpecification os, ArrayList tabsArray)
+    throws LCFException, IOException
+  {
+  }
+  
+  /** Output the specification body section.
+  * This method is called in the body section of a job page which has selected an output connection of the current type.  Its purpose is to present the required form elements for editing.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags.  The name of the
+  * form is "editjob".
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  *@param tabName is the current tab name.
+  */
+  public void outputSpecificationBody(IHTTPOutput out, OutputSpecification os, String tabName)
+    throws LCFException, IOException
+  {
+  }
+  
+  /** Process a specification post.
+  * This method is called at the start of job's edit or view page, whenever there is a possibility that form data for a connection has been
+  * posted.  Its purpose is to gather form information and modify the output specification accordingly.
+  * The name of the posted form is "editjob".
+  *@param variableContext contains the post data, including binary file-upload information.
+  *@param os is the current output specification for this job.
+  *@return null if all is well, or a string error message if there is an error that should prevent saving of the job (and cause a redirection to an error page).
+  */
+  public String processSpecificationPost(IPostParameters variableContext, OutputSpecification os)
+    throws LCFException
+  {
+    return null;
+  }
+  
+  /** View specification.
+  * This method is called in the body section of a job's view page.  Its purpose is to present the output specification information to the user.
+  * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags.
+  *@param out is the output to which any HTML should be sent.
+  *@param os is the current output specification for this job.
+  */
+  public void viewSpecification(IHTTPOutput out, OutputSpecification os)
+    throws LCFException, IOException
+  {
+  }
+
 }
 
 

Added: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java?rev=955006&view=auto
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java (added)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java Tue Jun 15 19:13:44 2010
@@ -0,0 +1,110 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.lcf.core.interfaces;
+
+import java.io.*;
+
+/** This interface abstracts from the output character stream used to construct
+* HTML output for a web interface.
+*/
+public interface IHTTPOutput
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** Flush the stream */
+  public void flush()
+    throws IOException;
+  
+  /** Write a newline */
+  public void newLine()
+    throws IOException;
+  
+  /** Write a boolean */
+  public void print(boolean b)
+    throws IOException;
+  
+  /** Write a char */
+  public void print(char c)
+    throws IOException;
+  
+  /** Write an array of chars */
+  public void print(char[] c)
+    throws IOException;
+  
+  /** Write a double */
+  public void print(double d)
+    throws IOException;
+  
+  /** Write a float */
+  public void print(float f)
+    throws IOException;
+  
+  /** Write an int */
+  public void print(int i)
+    throws IOException;
+  
+  /** Write a long */
+  public void print(long l)
+    throws IOException;
+  
+  /** Write an object */
+  public void print(Object o)
+    throws IOException;
+  
+  /** Write a string */
+  public void print(String s)
+    throws IOException;
+  
+  /** Write a boolean */
+  public void println(boolean b)
+    throws IOException;
+  
+  /** Write a char */
+  public void println(char c)
+    throws IOException;
+  
+  /** Write an array of chars */
+  public void println(char[] c)
+    throws IOException;
+  
+  /** Write a double */
+  public void println(double d)
+    throws IOException;
+  
+  /** Write a float */
+  public void println(float f)
+    throws IOException;
+  
+  /** Write an int */
+  public void println(int i)
+    throws IOException;
+  
+  /** Write a long */
+  public void println(long l)
+    throws IOException;
+  
+  /** Write an object */
+  public void println(Object o)
+    throws IOException;
+  
+  /** Write a string */
+  public void println(String s)
+    throws IOException;
+
+}

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IHTTPOutput.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java?rev=955006&view=auto
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java (added)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java Tue Jun 15 19:13:44 2010
@@ -0,0 +1,66 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.lcf.core.interfaces;
+
+import java.util.*;
+
+/** This interface represents parameters that get posted during UI interaction.
+*/
+public interface IPostParameters
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  /** Read an array of parameter values.
+  *@param name is the parameter name.
+  *@return the array of values, or null if it doesn't exist.
+  */
+  public String[] getParameterValues(String name);
+  
+  /** Get single parameter value.
+  *@param name is the parameter name.
+  *@return the value, or null if it doesn't exist.
+  */
+  public String getParameter(String name);
+  
+  /** Get a file parameter, as a binary input stream.
+  *@param name is the parameter name.
+  *@return the value, or null if it doesn't exist.
+  */
+  public BinaryInput getBinaryStream(String name)
+    throws LCFException;
+  
+  /** Get file parameter, as a byte array.
+  *@param name is the parameter name.
+  *@return the binary parameter as an array of bytes.
+  */
+  public byte[] getBinaryBytes(String name);
+  
+  /** Set a parameter value.
+  *@param name is the parameter name.
+  *@param value is the desired value.
+  */
+  public void setParameter(String name, String value);
+  
+  /** Set an array of parameter values.
+  *@param name is the parameter name.
+  *@param values is the array of desired values.
+  */
+  public void setParameterValues(String name, String[] values);
+
+}

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/core/org/apache/lcf/core/interfaces/IPostParameters.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editjob.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editjob.jsp?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editjob.jsp (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editjob.jsp Tue Jun 15 19:13:44 2010
@@ -325,11 +325,12 @@
 	// 3) a jobid and a connection name, which indicates that we are editing an existing connection.
 	// There are similar combinations for output connections.
 
-	String JSPFolder = null;
-	String outputJSPFolder = null;
 	int model = IRepositoryConnector.MODEL_ADD_CHANGE_DELETE;
 	String[] relationshipTypes = null;
 	ArrayList tabsArray = new ArrayList();
+	
+	String JSPFolder = null;
+	IOutputConnection outputConnection = null;
 	if (connectionName.length() > 0)
 	{
 
@@ -343,11 +344,9 @@
 	}
 	if (outputName.length() > 0)
 	{
-		IOutputConnection connection = outputMgr.load(outputName);
-		outputJSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,connection.getClassName());
-		
-		threadContext.save("OutputSpecification",outputSpecification);
-		threadContext.save("OutputConnection",connection);
+		outputConnection = outputMgr.load(outputName);
+		//threadContext.save("OutputSpecification",outputSpecification);
+		//threadContext.save("OutputConnection",connection);
 	}
 
 	// Assert the following variables regardless of connection choice/non-choice
@@ -386,11 +385,29 @@
 %>
 
 <%
-	if (outputJSPFolder != null)
+	if (outputConnection != null)
 	{
+		IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
+			outputConnection.getMaxConnections());
+		if (outputConnector != null)
+		{
+			try
+			{
+				String error = outputConnector.processSpecificationPost(variableContext,outputSpecification);
+				if (error != null)
+				{
+					variableContext.setParameter("text",error);
+					variableContext.setParameter("target","listjobs.jsp");
 %>
-		<jsp:include page='<%="/output/"+outputJSPFolder+"/postspec.jsp"%>' flush="true"/>
+					<jsp:forward page="error.jsp"/>
 <%
+				}
+			}
+			finally
+			{
+				OutputConnectorFactory.release(outputConnector);
+			}
+		}
 	}
 %>
 
@@ -619,11 +636,21 @@
 	//-->
 	</script>
 <%
-	if (outputJSPFolder != null)
+	if (outputConnection != null)
 	{
-%>
-		<jsp:include page='<%="/output/"+outputJSPFolder+"/headerspec.jsp"%>' flush="true"/>
-<%
+		IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
+			outputConnection.getMaxConnections());
+		if (outputConnector != null)
+		{
+			try
+			{
+				outputConnector.outputSpecificationHeader(new org.apache.lcf.ui.jsp.JspWrapper(out),outputSpecification,tabsArray);
+			}
+			finally
+			{
+				OutputConnectorFactory.release(outputConnector);
+			}
+		}
 	}
 %>
 
@@ -1326,11 +1353,21 @@
 	      }
 	}
 
-	if (outputJSPFolder != null)
+	if (outputConnection != null)
 	{
-%>
-		  <jsp:include page='<%="/output/"+outputJSPFolder+"/editspec.jsp"%>' flush="true"/>
-<%
+		IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
+			outputConnection.getMaxConnections());
+		if (outputConnector != null)
+		{
+			try
+			{
+				outputConnector.outputSpecificationBody(new org.apache.lcf.ui.jsp.JspWrapper(out),outputSpecification,tabName);
+			}
+			finally
+			{
+				OutputConnectorFactory.release(outputConnector);
+			}
+		}
 	}
 
 	if (JSPFolder != null)

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editoutput.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editoutput.jsp?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editoutput.jsp (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/editoutput.jsp Tue Jun 15 19:13:44 2010
@@ -75,17 +75,8 @@
 		maxConnections = Integer.parseInt(x);
 	}
 
-	String JSPFolder = null;
 	ArrayList tabsArray = new ArrayList();
 
-	if (className.length() > 0)
-	{
-		JSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,className);
-		threadContext.save("Parameters",parameters);
-		threadContext.save("Tabs",tabsArray);
-		threadContext.save("TabName",tabName);
-	}
-
 	// Set up the predefined tabs
 	tabsArray.add("Name");
 	tabsArray.add("Type");
@@ -95,12 +86,9 @@
 %>
 
 <%
-	if (JSPFolder != null)
-	{
-%>
-		<jsp:include page='<%="/output/"+JSPFolder+"/postconfig.jsp"%>' flush="false"/>
-<%
-	}
+	if (className.length() > 0)
+		OutputConnectorFactory.processConfigurationPost(threadContext,className,variableContext,parameters);
+		
 %>
 
 <?xml version="1.0" encoding="utf-8"?>
@@ -229,14 +217,7 @@
 	//-->
 	</script>
 <%
-	if (JSPFolder != null)
-	{
-%>
-		<jsp:include page='<%="/output/"+JSPFolder+"/headerconfig.jsp"%>' flush="true"/>
-<%
-	}
-
-
+	OutputConnectorFactory.outputConfigurationHeader(threadContext,className,new org.apache.lcf.ui.jsp.JspWrapper(out),parameters,tabsArray);
 %>
 
 </head>
@@ -435,12 +416,9 @@
 <%
 	  }
 
-	  if (JSPFolder != null)
-	  {
-%>
-		    <jsp:include page='<%="/output/"+JSPFolder+"/editconfig.jsp"%>' flush="true"/>
-<%
-	  }
+	  if (className.length() > 0)
+		OutputConnectorFactory.outputConfigurationBody(threadContext,className,new org.apache.lcf.ui.jsp.JspWrapper(out),parameters,tabName);
+
 %>
 		    <table class="displaytable">
 			<tr><td class="separator" colspan="4"><hr/></td></tr>

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/execute.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/execute.jsp?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/execute.jsp (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/execute.jsp Tue Jun 15 19:13:44 2010
@@ -218,7 +218,6 @@
 					IRepositoryConnection connection = connManager.load(job.getConnectionName());
 					IOutputConnection outputConnection = outputManager.load(job.getOutputConnectionName());
 					String JSPFolder = RepositoryConnectorFactory.getJSPFolder(threadContext,connection.getClassName());
-					String outputJSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,outputConnection.getClassName());
 					String[] relationshipTypes = RepositoryConnectorFactory.getRelationshipTypes(threadContext,connection.getClassName());
 
 					// Gather hopcount filters
@@ -238,16 +237,29 @@
 							}
 						}
 					}
-						
-					if (outputJSPFolder != null)
+					
+					IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,
+						outputConnection.getClassName(),outputConnection.getConfigParams(),outputConnection.getMaxConnections());
+					if (outputConnector != null)
 					{
-						threadContext.save("OutputSpecification",job.getOutputSpecification());
-						threadContext.save("OutputConnection",outputConnection);
+						try
+						{
+							String error = outputConnector.processSpecificationPost(variableContext,job.getOutputSpecification());
+							if (error != null)
+							{
+								variableContext.setParameter("text",error);
+								variableContext.setParameter("target","listjobs.jsp");
 %>
-					<jsp:include page='<%="/output/"+outputJSPFolder+"/postspec.jsp"%>' flush="false"/>
+								<jsp:forward page="error.jsp"/>
 <%
+							}
+						}
+						finally
+						{
+							OutputConnectorFactory.release(outputConnector);
+						}
 					}
-
+						
 					if (JSPFolder != null)
 					{
 						threadContext.save("DocumentSpecification",job.getSpecification());
@@ -300,13 +312,14 @@
 					if (x != null && x.length() > 0)
 						connection.setMaxConnections(Integer.parseInt(x));
 
-					String JSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,connection.getClassName());
-
-					threadContext.save("Parameters",connection.getConfigParams());
-					if (JSPFolder != null)
+					String error = OutputConnectorFactory.processConfigurationPost(threadContext,connection.getClassName(),variableContext,connection.getConfigParams());
+					
+					if (error != null)
 					{
+						variableContext.setParameter("text",error);
+						variableContext.setParameter("target","listoutputs.jsp");
 %>
-					<jsp:include page='<%="/output/"+JSPFolder+"/postconfig.jsp"%>' flush="false"/>
+						<jsp:forward page="error.jsp"/>
 <%
 					}
 					outputManager.save(connection);

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewjob.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewjob.jsp?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewjob.jsp (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewjob.jsp Tue Jun 15 19:13:44 2010
@@ -121,14 +121,13 @@
 		IRepositoryConnection connection = connManager.load(job.getConnectionName());
 		IOutputConnection outputConnection = outputManager.load(job.getOutputConnectionName());
 		String JSPFolder = RepositoryConnectorFactory.getJSPFolder(threadContext,connection.getClassName());
-		String outputJSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,outputConnection.getClassName());
 		int model = RepositoryConnectorFactory.getConnectorModel(threadContext,connection.getClassName());
 		String[] relationshipTypes = RepositoryConnectorFactory.getRelationshipTypes(threadContext,connection.getClassName());
 		Map hopCountFilters = job.getHopCountFilters();
 		int hopcountMode = job.getHopcountMode();
 
-		threadContext.save("OutputSpecification",job.getOutputSpecification());
-		threadContext.save("OutputConnection",outputConnection);
+		//threadContext.save("OutputSpecification",job.getOutputSpecification());
+		//threadContext.save("OutputConnection",outputConnection);
 		threadContext.save("DocumentSpecification",job.getSpecification());
 		threadContext.save("RepositoryConnection",connection);
 %>
@@ -546,11 +545,21 @@
 			<tr>
 				<td colspan="4">
 <%
-		if (outputJSPFolder != null)
+		if (outputConnection != null)
 		{
-%>
-				<jsp:include page='<%="/output/"+outputJSPFolder+"/viewspec.jsp"%>' flush="true"/>
-<%
+			IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
+				outputConnection.getMaxConnections());
+			if (outputConnector != null)
+			{
+				try
+				{
+					outputConnector.viewSpecification(new org.apache.lcf.ui.jsp.JspWrapper(out),job.getOutputSpecification());
+				}
+				finally
+				{
+					OutputConnectorFactory.release(outputConnector);
+				}
+			}
 		}
 %>
 				</td>

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewoutput.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewoutput.jsp?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewoutput.jsp (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/crawler-ui/viewoutput.jsp Tue Jun 15 19:13:44 2010
@@ -97,8 +97,8 @@
 		ConfigParams parameters = connection.getConfigParams();
 
 		// Do stuff so we can call out to display the parameters
-		String JSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,className);
-		threadContext.save("Parameters",parameters);
+		//String JSPFolder = OutputConnectorFactory.getJSPFolder(threadContext,className);
+		//threadContext.save("Parameters",parameters);
 
 		// Now, test the connection.
 		String connectionStatus;
@@ -145,12 +145,7 @@
 			<tr>
 				<td colspan="4">
 <%
-		if (JSPFolder != null)
-		{
-%>
-				<jsp:include page='<%="/output/"+JSPFolder+"/viewconfig.jsp"%>' flush="true"/>
-<%
-		}
+		OutputConnectorFactory.viewConfiguration(threadContext,className,new org.apache.lcf.ui.jsp.JspWrapper(out),parameters);
 %>
 				</td>
 			</tr>

Added: incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java?rev=955006&view=auto
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java (added)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java Tue Jun 15 19:13:44 2010
@@ -0,0 +1,181 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.lcf.ui.jsp;
+
+import org.apache.lcf.core.interfaces.*;
+import javax.servlet.jsp.*;
+import java.io.*;
+
+/** This class provides an implementation of IHTTPOutput, which provides output
+* services to connector UI interfaces.
+*/
+public class JspWrapper implements IHTTPOutput
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  protected JspWriter writer;
+
+  /** Constructor.
+  */
+  public JspWrapper(JspWriter writer)
+  {
+    this.writer = writer;
+  }
+
+  /** Flush the stream */
+  public void flush()
+    throws IOException
+  {
+    writer.flush();
+  }
+  
+  /** Write a newline */
+  public void newLine()
+    throws IOException
+  {
+    writer.newLine();
+  }
+  
+  /** Write a boolean */
+  public void print(boolean b)
+    throws IOException
+  {
+    writer.print(b);
+  }
+  
+  /** Write a char */
+  public void print(char c)
+    throws IOException
+  {
+    writer.print(c);
+  }
+  
+  /** Write an array of chars */
+  public void print(char[] c)
+    throws IOException
+  {
+    writer.print(c);
+  }
+  
+  /** Write a double */
+  public void print(double d)
+    throws IOException
+  {
+    writer.print(d);
+  }
+  
+  /** Write a float */
+  public void print(float f)
+    throws IOException
+  {
+    writer.print(f);
+  }
+  
+  /** Write an int */
+  public void print(int i)
+    throws IOException
+  {
+    writer.print(i);
+  }
+  
+  /** Write a long */
+  public void print(long l)
+    throws IOException
+  {
+    writer.print(l);
+  }
+  
+  /** Write an object */
+  public void print(Object o)
+    throws IOException
+  {
+    writer.print(o);
+  }
+  
+  /** Write a string */
+  public void print(String s)
+    throws IOException
+  {
+    writer.print(s);
+  }
+  
+  /** Write a boolean */
+  public void println(boolean b)
+    throws IOException
+  {
+    writer.println(b);
+  }
+  
+  /** Write a char */
+  public void println(char c)
+    throws IOException
+  {
+    writer.println(c);
+  }
+  
+  /** Write an array of chars */
+  public void println(char[] c)
+    throws IOException
+  {
+    writer.println(c);
+  }
+  
+  /** Write a double */
+  public void println(double d)
+    throws IOException
+  {
+    writer.println(d);
+  }
+  
+  /** Write a float */
+  public void println(float f)
+    throws IOException
+  {
+    writer.println(f);
+  }
+  
+  /** Write an int */
+  public void println(int i)
+    throws IOException
+  {
+    writer.println(i);
+  }
+  
+  /** Write a long */
+  public void println(long l)
+    throws IOException
+  {
+    writer.println(l);
+  }
+  
+  /** Write an object */
+  public void println(Object o)
+    throws IOException
+  {
+    writer.println(o);
+  }
+  
+  /** Write a string */
+  public void println(String s)
+    throws IOException
+  {
+    writer.println(s);
+  }
+
+}

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/jsp/JspWrapper.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/multipart/MultipartWrapper.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/multipart/MultipartWrapper.java?rev=955006&r1=955005&r2=955006&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/multipart/MultipartWrapper.java (original)
+++ incubator/lcf/branches/CONNECTORS-40/modules/framework/ui-core/org/apache/lcf/ui/multipart/MultipartWrapper.java Tue Jun 15 19:13:44 2010
@@ -29,7 +29,7 @@ import java.io.*;
 * multipart forms.  It is styled much like HttpServletRequest, but wraps this interface so
 * that code can access either standard post data or multipart data transparently.
 */
-public class MultipartWrapper
+public class MultipartWrapper implements IPostParameters
 {
   public static final String _rcsid = "@(#)$Id$";
 
@@ -134,7 +134,6 @@ public class MultipartWrapper
     return rval;
   }
 
-  /** We need to be able to set a parameter
   /** Get single parameter value.
   */
   public String getParameter(String name)



Mime
View raw message