Modified: manifoldcf/branches/dev_1x/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/RSSConnector.java URL: http://svn.apache.org/viewvc/manifoldcf/branches/dev_1x/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/RSSConnector.java?rev=1626026&r1=1626025&r2=1626026&view=diff ============================================================================== --- manifoldcf/branches/dev_1x/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/RSSConnector.java (original) +++ manifoldcf/branches/dev_1x/connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/RSSConnector.java Thu Sep 18 16:56:59 2014 @@ -1926,15 +1926,42 @@ public class RSSConnector extends org.ap ); } + /** Obtain the name of the form check javascript method to call. + *@param connectionSequenceNumber is the unique number of this connection within the job. + *@return the name of the form check javascript method. + */ + @Override + public String getFormCheckJavascriptMethodName(int connectionSequenceNumber) + { + return "s"+connectionSequenceNumber+"_checkSpecification"; + //return "checkSpecification"; + } + + /** Obtain the name of the form presave check javascript method to call. + *@param connectionSequenceNumber is the unique number of this connection within the job. + *@return the name of the form presave check javascript method. + */ + @Override + public String getFormPresaveCheckJavascriptMethodName(int connectionSequenceNumber) + { + return "s"+connectionSequenceNumber+"_checkSpecificationForSave"; + //return "checkSpecificationForSave"; + } + /** Output the specification header section. - * This method is called in the head section of a job page which has selected a repository 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. + * This method is called in the head section of a job page which has selected a repository 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. + * The connector will be connected before this method can be called. *@param out is the output to which any HTML should be sent. + *@param locale is the locale the output is preferred to be in. *@param ds is the current document specification for this job. + *@param connectionSequenceNumber is the unique number of this connection within the job. *@param tabsArray is an array of tab names. Add to this array any tab names that are specific to the connector. */ @Override - public void outputSpecificationHeader(IHTTPOutput out, Locale locale, DocumentSpecification ds, List<String> tabsArray) + public void outputSpecificationHeader(IHTTPOutput out, Locale locale, Specification ds, + int connectionSequenceNumber, List<String> tabsArray) throws ManifoldCFException, IOException { tabsArray.add(Messages.getString(locale,"RSSConnector.URLs")); @@ -1945,96 +1972,98 @@ public class RSSConnector extends org.ap tabsArray.add(Messages.getString(locale,"RSSConnector.Security")); tabsArray.add(Messages.getString(locale,"RSSConnector.Metadata")); tabsArray.add(Messages.getString(locale,"RSSConnector.DechromedContent")); + String seqPrefix = "s"+connectionSequenceNumber+"_"; + out.print( "<script type=\"text/javascript\">\n"+ "<!--\n"+ -"function SpecOp(n, opValue, anchorvalue)\n"+ +"function "+seqPrefix+"SpecOp(n, opValue, anchorvalue)\n"+ "{\n"+ " eval(\"editjob.\"+n+\".value = \\\"\"+opValue+\"\\\"\");\n"+ " postFormSetAnchor(anchorvalue);\n"+ "}\n"+ "\n"+ -"function AddRegexp(anchorvalue)\n"+ +"function "+seqPrefix+"AddRegexp(anchorvalue)\n"+ "{\n"+ -" if (editjob.rssmatch.value == \"\")\n"+ +" if (editjob."+seqPrefix+"rssmatch.value == \"\")\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.MatchMustHaveARegexpValue")+"\");\n"+ -" editjob.rssmatch.focus();\n"+ +" editjob."+seqPrefix+"rssmatch.focus();\n"+ " return;\n"+ " }\n"+ "\n"+ -" SpecOp(\"rssop\",\"Add\",anchorvalue);\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"rssop\",\"Add\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function RemoveRegexp(index, anchorvalue)\n"+ +"function "+seqPrefix+"RemoveRegexp(index, anchorvalue)\n"+ "{\n"+ -" editjob.rssindex.value = index;\n"+ -" SpecOp(\"rssop\",\"Delete\",anchorvalue);\n"+ +" editjob."+seqPrefix+"rssindex.value = index;\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"rssop\",\"Delete\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function SpecAddToken(anchorvalue)\n"+ +"function "+seqPrefix+"SpecAddToken(anchorvalue)\n"+ "{\n"+ -" if (editjob.spectoken.value == \"\")\n"+ +" if (editjob."+seqPrefix+"spectoken.value == \"\")\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.TypeInAnAccessToken")+"\");\n"+ -" editjob.spectoken.focus();\n"+ +" editjob."+seqPrefix+"spectoken.focus();\n"+ " return;\n"+ " }\n"+ -" SpecOp(\"accessop\",\"Add\",anchorvalue);\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"accessop\",\"Add\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function SpecAddMetadata(anchorvalue)\n"+ +"function "+seqPrefix+"SpecAddMetadata(anchorvalue)\n"+ "{\n"+ -" if (editjob.specmetaname.value == \"\")\n"+ +" if (editjob."+seqPrefix+"specmetaname.value == \"\")\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.TypeInMetadataName")+"\");\n"+ -" editjob.specmetaname.focus();\n"+ +" editjob."+seqPrefix+"specmetaname.focus();\n"+ " return;\n"+ " }\n"+ -" if (editjob.specmetavalue.value == \"\")\n"+ +" if (editjob."+seqPrefix+"specmetavalue.value == \"\")\n"+ " {\n"+ " alert(\""+Messages.getString(locale,"RSSConnector.TypeInMetadataValue")+"\");\n"+ -" editjob.specmetavalue.focus();\n"+ +" editjob."+seqPrefix+"specmetavalue.focus();\n"+ " return;\n"+ " }\n"+ -" SpecOp(\"metadataop\",\"Add\",anchorvalue);\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"metadataop\",\"Add\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function URLRegexpDelete(index, anchorvalue)\n"+ +"function "+seqPrefix+"URLRegexpDelete(index, anchorvalue)\n"+ "{\n"+ -" editjob.urlregexpnumber.value = index;\n"+ -" SpecOp(\"urlregexpop\",\"Delete\",anchorvalue);\n"+ +" editjob."+seqPrefix+"urlregexpnumber.value = index;\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"urlregexpop\",\"Delete\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function URLRegexpAdd(anchorvalue)\n"+ +"function "+seqPrefix+"URLRegexpAdd(anchorvalue)\n"+ "{\n"+ -" SpecOp(\"urlregexpop\",\"Add\",anchorvalue);\n"+ +" "+seqPrefix+"SpecOp(\""+seqPrefix+"urlregexpop\",\"Add\",anchorvalue);\n"+ "}\n"+ "\n"+ -"function checkSpecification()\n"+ +"function "+seqPrefix+"checkSpecification()\n"+ "{\n"+ -" if (editjob.feedtimeout.value == \"\" || !isInteger(editjob.feedtimeout.value))\n"+ +" if (editjob."+seqPrefix+"feedtimeout.value == \"\" || !isInteger(editjob."+seqPrefix+"feedtimeout.value))\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.ATimeoutValueInSecondsIsRequired")+"\");\n"+ -" editjob.feedtimeout.focus();\n"+ +" editjob."+seqPrefix+"feedtimeout.focus();\n"+ " return false;\n"+ " }\n"+ -" if (editjob.feedrefetch.value == \"\" || !isInteger(editjob.feedrefetch.value))\n"+ +" if (editjob."+seqPrefix+"feedrefetch.value == \"\" || !isInteger(editjob."+seqPrefix+"feedrefetch.value))\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.ARefetchIntervalInMinutesIsRequired")+"\");\n"+ -" editjob.feedrefetch.focus();\n"+ +" editjob."+seqPrefix+"feedrefetch.focus();\n"+ " return false;\n"+ " }\n"+ -" if (editjob.minfeedrefetch.value == \"\" || !isInteger(editjob.minfeedrefetch.value))\n"+ +" if (editjob."+seqPrefix+"minfeedrefetch.value == \"\" || !isInteger(editjob."+seqPrefix+"minfeedrefetch.value))\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.AMinimumRefetchIntervalInMinutesIsRequire")+"\");\n"+ -" editjob.minfeedrefetch.focus();\n"+ +" editjob."+seqPrefix+"minfeedrefetch.focus();\n"+ " return false;\n"+ " }\n"+ -" if (editjob.badfeedrefetch.value != \"\" && !isInteger(editjob.badfeedrefetch.value))\n"+ +" if (editjob."+seqPrefix+"badfeedrefetch.value != \"\" && !isInteger(editjob."+seqPrefix+"badfeedrefetch.value))\n"+ " {\n"+ " alert(\""+Messages.getBodyJavascriptString(locale,"RSSConnector.ABadFeedRefetchIntervalInMinutesIsRequired")+"\");\n"+ -" editjob.badfeedrefetch.focus();\n"+ +" editjob."+seqPrefix+"badfeedrefetch.focus();\n"+ " return false;\n"+ " }\n"+ "\n"+ @@ -2047,17 +2076,26 @@ public class RSSConnector extends org.ap } /** Output the specification body section. - * This method is called in the body section of a job page which has selected a repository 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". + * This method is called in the body section of a job page which has selected a repository 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 always "editjob". + * The connector will be connected before this method can be called. *@param out is the output to which any HTML should be sent. + *@param locale is the locale the output is preferred to be in. *@param ds is the current document specification for this job. - *@param tabName is the current tab name. + *@param connectionSequenceNumber is the unique number of this connection within the job. + *@param actualSequenceNumber is the connection within the job that has currently been selected. + *@param tabName is the current tab name. (actualSequenceNumber, tabName) form a unique tuple within + * the job. */ @Override - public void outputSpecificationBody(IHTTPOutput out, Locale locale, DocumentSpecification ds, String tabName) + public void outputSpecificationBody(IHTTPOutput out, Locale locale, Specification ds, + int connectionSequenceNumber, int actualSequenceNumber, String tabName) throws ManifoldCFException, IOException { + String seqPrefix = "s"+connectionSequenceNumber+"_"; + int i; int k; @@ -2127,14 +2165,14 @@ public class RSSConnector extends org.ap // URLs tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.URLs"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.URLs")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ " <tr>\n"+ " <td class=\"value\" colspan=\"2\">\n"+ -" <textarea rows=\"25\" cols=\"80\" name=\"rssurls\">"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(sb.toString())+"</textarea>\n"+ +" <textarea rows=\"25\" cols=\"80\" name=\""+seqPrefix+"rssurls\">"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(sb.toString())+"</textarea>\n"+ " </td>\n"+ " </tr>\n"+ "</table>\n" @@ -2143,12 +2181,12 @@ public class RSSConnector extends org.ap else { out.print( -"<input type=\"hidden\" name=\"rssurls\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sb.toString())+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"rssurls\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sb.toString())+"\"/>\n" ); } // Exclusions tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.Exclusions"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.Exclusions")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ @@ -2156,7 +2194,7 @@ public class RSSConnector extends org.ap " <tr>\n"+ " <td class=\"description\" colspan=\"1\"><nobr>" + Messages.getBodyString(locale,"RSSConnector.Exclude") + "</nobr></td>\n"+ " <td class=\"value\" colspan=\"1\">\n"+ -" <textarea rows=\"25\" cols=\"60\" name=\"exclusions\">"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(exclusions)+"</textarea>\n"+ +" <textarea rows=\"25\" cols=\"60\" name=\""+seqPrefix+"exclusions\">"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(exclusions)+"</textarea>\n"+ " </td>\n"+ " </tr>\n"+ "</table>\n" @@ -2165,20 +2203,20 @@ public class RSSConnector extends org.ap else { out.print( -"<input type=\"hidden\" name=\"exclusions\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(exclusions)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"exclusions\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(exclusions)+"\"/>\n" ); } // Canonicalization tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.Canonicalization"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.Canonicalization")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ " <tr>\n"+ " <td class=\"boxcell\" colspan=\"2\">\n"+ -" <input type=\"hidden\" name=\"urlregexpop\" value=\"Continue\"/>\n"+ -" <input type=\"hidden\" name=\"urlregexpnumber\" value=\"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpop\" value=\"Continue\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpnumber\" value=\"\"/>\n"+ " <table class=\"formtable\">\n"+ " <tr class=\"formheaderrow\">\n"+ " <td class=\"formcolumnheader\"></td>\n"+ @@ -2221,18 +2259,18 @@ public class RSSConnector extends org.ap out.print( " <tr class=\""+(((l % 2)==0)?"evenformrow":"oddformrow")+"\">\n"+ " <td class=\"formcolumncell\">\n"+ -" <a name=\""+"urlregexp_"+Integer.toString(l)+"\">\n"+ -" <input type=\"button\" value=\"Delete\" alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteUrlRegexp")+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\" onclick='javascript:URLRegexpDelete("+Integer.toString(l)+",\"urlregexp_"+Integer.toString(l)+"\");'/>\n"+ +" <a name=\""+seqPrefix+"urlregexp_"+Integer.toString(l)+"\">\n"+ +" <input type=\"button\" value=\"Delete\" alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteUrlRegexp")+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\" onclick='javascript:"+seqPrefix+"URLRegexpDelete("+Integer.toString(l)+",\""+seqPrefix+"urlregexp_"+Integer.toString(l)+"\");'/>\n"+ " </a>\n"+ " </td>\n"+ " <td class=\"formcolumncell\">\n"+ -" <input type=\"hidden\" name=\""+"urlregexp_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpdesc_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(description)+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpreorder_"+Integer.toString(l)+"\" value=\""+allowReorder+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpjava_"+Integer.toString(l)+"\" value=\""+allowJavaSessionRemoval+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpasp_"+Integer.toString(l)+"\" value=\""+allowASPSessionRemoval+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpphp_"+Integer.toString(l)+"\" value=\""+allowPHPSessionRemoval+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"urlregexpbv_"+Integer.toString(l)+"\" value=\""+allowBVSessionRemoval+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexp_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpdesc_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(description)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpreorder_"+Integer.toString(l)+"\" value=\""+allowReorder+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpjava_"+Integer.toString(l)+"\" value=\""+allowJavaSessionRemoval+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpasp_"+Integer.toString(l)+"\" value=\""+allowASPSessionRemoval+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpphp_"+Integer.toString(l)+"\" value=\""+allowPHPSessionRemoval+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpbv_"+Integer.toString(l)+"\" value=\""+allowBVSessionRemoval+"\"/>\n"+ " <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(regexpString)+"</nobr>\n"+ " </td>\n"+ " <td class=\"formcolumncell\">"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)+"</td>\n"+ @@ -2257,18 +2295,18 @@ public class RSSConnector extends org.ap " <tr class=\"formrow\"><td colspan=\"8\" class=\"formseparator\"><hr/></td></tr>\n"+ " <tr class=\"formrow\">\n"+ " <td class=\"formcolumncell\">\n"+ -" <a name=\""+"urlregexp_"+Integer.toString(l)+"\">\n"+ -" <input type=\"button\" value=\"Add\" alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddUlRegexp")+"\" onclick='javascript:URLRegexpAdd(\"urlregexp_"+Integer.toString(l+1)+"\");'/>\n"+ -" <input type=\"hidden\" name=\"urlregexpcount\" value=\""+Integer.toString(l)+"\"/>\n"+ +" <a name=\""+seqPrefix+"urlregexp_"+Integer.toString(l)+"\">\n"+ +" <input type=\"button\" value=\"Add\" alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddUlRegexp")+"\" onclick='javascript:"+seqPrefix+"URLRegexpAdd(\""+seqPrefix+"urlregexp_"+Integer.toString(l+1)+"\");'/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"urlregexpcount\" value=\""+Integer.toString(l)+"\"/>\n"+ " </a>\n"+ " </td>\n"+ -" <td class=\"formcolumncell\"><input type=\"text\" name=\"urlregexp\" size=\"30\" value=\"\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"text\" name=\"urlregexpdesc\" size=\"30\" value=\"\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\"urlregexpreorder\" value=\"yes\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\"urlregexpjava\" value=\"yes\" checked=\"true\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\"urlregexpasp\" value=\"yes\" checked=\"true\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\"urlregexpphp\" value=\"yes\" checked=\"true\"/></td>\n"+ -" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\"urlregexpbv\" value=\"yes\" checked=\"true\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"text\" name=\""+seqPrefix+"urlregexp\" size=\"30\" value=\"\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"text\" name=\""+seqPrefix+"urlregexpdesc\" size=\"30\" value=\"\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\""+seqPrefix+"urlregexpreorder\" value=\"yes\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\""+seqPrefix+"urlregexpjava\" value=\"yes\" checked=\"true\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\""+seqPrefix+"urlregexpasp\" value=\"yes\" checked=\"true\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\""+seqPrefix+"urlregexpphp\" value=\"yes\" checked=\"true\"/></td>\n"+ +" <td class=\"formcolumncell\"><input type=\"checkbox\" name=\""+seqPrefix+"urlregexpbv\" value=\"yes\" checked=\"true\"/></td>\n"+ " </tr>\n"+ " </table>\n"+ " </td>\n"+ @@ -2307,30 +2345,30 @@ public class RSSConnector extends org.ap if (allowBVSessionRemoval == null || allowBVSessionRemoval.length() == 0) allowBVSessionRemoval = RSSConfig.VALUE_NO; out.print( -"<input type=\"hidden\" name=\""+"urlregexp_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpdesc_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(description)+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpreorder_"+Integer.toString(l)+"\" value=\""+allowReorder+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpjava_"+Integer.toString(l)+"\" value=\""+allowJavaSessionRemoval+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpasp_"+Integer.toString(l)+"\" value=\""+allowASPSessionRemoval+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpphp_"+Integer.toString(l)+"\" value=\""+allowPHPSessionRemoval+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"urlregexpbv_"+Integer.toString(l)+"\" value=\""+allowBVSessionRemoval+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexp_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(regexpString)+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpdesc_"+Integer.toString(l)+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(description)+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpreorder_"+Integer.toString(l)+"\" value=\""+allowReorder+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpjava_"+Integer.toString(l)+"\" value=\""+allowJavaSessionRemoval+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpasp_"+Integer.toString(l)+"\" value=\""+allowASPSessionRemoval+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpphp_"+Integer.toString(l)+"\" value=\""+allowPHPSessionRemoval+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpbv_"+Integer.toString(l)+"\" value=\""+allowBVSessionRemoval+"\"/>\n" ); l++; } } out.print( -"<input type=\"hidden\" name=\"urlregexpcount\" value=\""+Integer.toString(l)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"urlregexpcount\" value=\""+Integer.toString(l)+"\"/>\n" ); } // Mappings tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.URLMappings"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.URLMappings")) && connectionSequenceNumber == actualSequenceNumber) { out.print( -"<input type=\"hidden\" name=\"rssop\" value=\"\"/>\n"+ -"<input type=\"hidden\" name=\"rssindex\" value=\"\"/>\n"+ -"<input type=\"hidden\" name=\"rssmapcount\" value=\""+Integer.toString(regexp.size())+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"rssop\" value=\"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"rssindex\" value=\"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"rssmapcount\" value=\""+Integer.toString(regexp.size())+"\"/>\n"+ "\n"+ "<table class=\"displaytable\">\n"+ " <tr><td class=\"separator\" colspan=\"4\"><hr/></td></tr>\n" @@ -2339,12 +2377,12 @@ public class RSSConnector extends org.ap i = 0; while (i < regexp.size()) { - String prefix = "rssregexp_"+Integer.toString(i)+"_"; + String prefix = seqPrefix+"rssregexp_"+Integer.toString(i)+"_"; out.print( " <tr>\n"+ " <td class=\"value\">\n"+ -" <a name=\""+"regexp_"+Integer.toString(i)+"\">\n"+ -" <input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Remove")+"\" onclick='javascript:RemoveRegexp("+Integer.toString(i)+",\"regexp_"+Integer.toString(i)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.RemoveRegexp")+Integer.toString(i)+"\"/>\n"+ +" <a name=\""+seqPrefix+"regexp_"+Integer.toString(i)+"\">\n"+ +" <input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Remove")+"\" onclick='javascript:"+seqPrefix+"RemoveRegexp("+Integer.toString(i)+",\""+seqPrefix+"regexp_"+Integer.toString(i)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.RemoveRegexp")+Integer.toString(i)+"\"/>\n"+ " </a>\n"+ " </td>\n"+ " <td class=\"value\"><input type=\"hidden\" name=\""+prefix+"match"+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape((String)regexp.get(i))+"\"/>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape((String)regexp.get(i))+"</td>\n"+ @@ -2375,10 +2413,10 @@ public class RSSConnector extends org.ap } out.print( " <tr>\n"+ -" <td class=\"value\"><a name=\""+"regexp_"+Integer.toString(i)+"\"><input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Add")+"\" onclick='javascript:AddRegexp(\"regexp_"+Integer.toString(i+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddRegexp")+"\"/></a></td>\n"+ -" <td class=\"value\"><input type=\"text\" name=\"rssmatch\" size=\"16\" value=\"\"/></td>\n"+ +" <td class=\"value\"><a name=\""+seqPrefix+"regexp_"+Integer.toString(i)+"\"><input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Add")+"\" onclick='javascript:"+seqPrefix+"AddRegexp(\""+seqPrefix+"regexp_"+Integer.toString(i+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddRegexp")+"\"/></a></td>\n"+ +" <td class=\"value\"><input type=\"text\" name=\""+seqPrefix+"rssmatch\" size=\"16\" value=\"\"/></td>\n"+ " <td class=\"value\">--></td>\n"+ -" <td class=\"value\"><input type=\"text\" name=\"rssmap\" size=\"16\" value=\"\"/></td>\n"+ +" <td class=\"value\"><input type=\"text\" name=\""+seqPrefix+"rssmap\" size=\"16\" value=\"\"/></td>\n"+ " </tr>\n"+ "</table>\n" ); @@ -2386,12 +2424,12 @@ public class RSSConnector extends org.ap else { out.print( -"<input type=\"hidden\" name=\"rssmapcount\" value=\""+Integer.toString(regexp.size())+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"rssmapcount\" value=\""+Integer.toString(regexp.size())+"\"/>\n" ); i = 0; while (i < regexp.size()) { - String prefix = "rssregexp_"+Integer.toString(i)+"_"; + String prefix = seqPrefix+"rssregexp_"+Integer.toString(i)+"_"; String match = (String)matchStrings.get(i); out.print( "<input type=\"hidden\" name=\""+prefix+"match"+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape((String)regexp.get(i))+"\"/>\n"+ @@ -2402,28 +2440,28 @@ public class RSSConnector extends org.ap } // Timeout Value tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.TimeValues"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.TimeValues")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ " <tr>\n"+ " <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"RSSConnector.FeedConnectTimeout")+"</nobr></td>\n"+ -" <td class=\"value\"><input type=\"text\" size=\"5\" name=\"feedtimeout\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedTimeoutValue))+"\"/></td>\n"+ +" <td class=\"value\"><input type=\"text\" size=\"5\" name=\""+seqPrefix+"feedtimeout\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedTimeoutValue))+"\"/></td>\n"+ " </tr>\n"+ " <tr>\n"+ " <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"RSSConnector.DefaultFeedRefetchTime")+"</nobr></td>\n"+ -" <td class=\"value\"><input type=\"text\" size=\"5\" name=\"feedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedRefetchValue))+"\"/></td>\n"+ +" <td class=\"value\"><input type=\"text\" size=\"5\" name=\""+seqPrefix+"feedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedRefetchValue))+"\"/></td>\n"+ " </tr>\n"+ " <tr>\n"+ " <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"RSSConnector.MinimumFeedRefetchTime")+"</nobr></td>\n"+ -" <td class=\"value\"><input type=\"text\" size=\"5\" name=\"minfeedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(minFeedRefetchValue))+"\"/></td>\n"+ +" <td class=\"value\"><input type=\"text\" size=\"5\" name=\""+seqPrefix+"minfeedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(minFeedRefetchValue))+"\"/></td>\n"+ " </tr>\n"+ " <tr>\n"+ " <td class=\"description\"><nobr>"+Messages.getBodyString(locale,"RSSConnector.BadFeedRefetchTime")+"</nobr></td>\n"+ " <td class=\"value\">\n"+ -" <input type=\"hidden\" name=\"badfeedrefetch_present\" value=\"true\"/>\n"+ -" <input type=\"text\" size=\"5\" name=\"badfeedrefetch\" value=\""+((badFeedRefetchValue==null)?"":org.apache.manifoldcf.ui.util.Encoder.attributeEscape(badFeedRefetchValue.toString()))+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"badfeedrefetch_present\" value=\"true\"/>\n"+ +" <input type=\"text\" size=\"5\" name=\""+seqPrefix+"badfeedrefetch\" value=\""+((badFeedRefetchValue==null)?"":org.apache.manifoldcf.ui.util.Encoder.attributeEscape(badFeedRefetchValue.toString()))+"\"/>\n"+ " </td>\n"+ " </tr>\n"+ "\n"+ @@ -2433,11 +2471,11 @@ public class RSSConnector extends org.ap else { out.print( -"<input type=\"hidden\" name=\"feedtimeout\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedTimeoutValue))+"\"/>\n"+ -"<input type=\"hidden\" name=\"feedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedRefetchValue))+"\"/>\n"+ -"<input type=\"hidden\" name=\"minfeedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(minFeedRefetchValue))+"\"/>\n"+ -"<input type=\"hidden\" name=\"badfeedrefetch_present\" value=\"true\"/>\n"+ -"<input type=\"hidden\" name=\"badfeedrefetch\" value=\""+((badFeedRefetchValue==null)?"":org.apache.manifoldcf.ui.util.Encoder.attributeEscape(badFeedRefetchValue.toString()))+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"feedtimeout\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedTimeoutValue))+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"feedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(feedRefetchValue))+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"minfeedrefetch\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(Integer.toString(minFeedRefetchValue))+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"badfeedrefetch_present\" value=\"true\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"badfeedrefetch\" value=\""+((badFeedRefetchValue==null)?"":org.apache.manifoldcf.ui.util.Encoder.attributeEscape(badFeedRefetchValue.toString()))+"\"/>\n" ); } @@ -2453,31 +2491,31 @@ public class RSSConnector extends org.ap else if (sn.getType().equals(RSSConfig.NODE_CHROMEDMODE)) chromedMode = sn.getAttributeValue(RSSConfig.ATTR_MODE); } - if (tabName.equals(Messages.getString(locale,"RSSConnector.DechromedContent"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.DechromedContent")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ " <tr><td class=\"separator\" colspan=\"1\"><hr/></td></tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"dechromedmode\" value=\"none\" "+(dechromedMode.equals(RSSConfig.VALUE_NONE)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NoDechromedContent")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"dechromedmode\" value=\"none\" "+(dechromedMode.equals(RSSConfig.VALUE_NONE)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NoDechromedContent")+"</nobr></td>\n"+ " </tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"dechromedmode\" value=\"description\" "+(dechromedMode.equals(RSSConfig.VALUE_DESCRIPTION)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.DechromedContentIfPresentInDescriptionField")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"dechromedmode\" value=\"description\" "+(dechromedMode.equals(RSSConfig.VALUE_DESCRIPTION)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.DechromedContentIfPresentInDescriptionField")+"</nobr></td>\n"+ " </tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"dechromedmode\" value=\"content\" "+(dechromedMode.equals(RSSConfig.VALUE_CONTENT)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.DechromedContentIfPresentInContentField")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"dechromedmode\" value=\"content\" "+(dechromedMode.equals(RSSConfig.VALUE_CONTENT)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.DechromedContentIfPresentInContentField")+"</nobr></td>\n"+ " </tr>\n"+ " <tr>\n"+ " <td class=\"separator\"><hr/></td>\n"+ " </tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"chromedmode\" value=\"use\" "+(chromedMode.equals(RSSConfig.VALUE_USE)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.UseChromedContentIfNoDechromedContentFound")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"chromedmode\" value=\"use\" "+(chromedMode.equals(RSSConfig.VALUE_USE)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.UseChromedContentIfNoDechromedContentFound")+"</nobr></td>\n"+ " </tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"chromedmode\" value=\"skip\" "+(chromedMode.equals(RSSConfig.VALUE_SKIP)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NeverUseChromedContent")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"chromedmode\" value=\"skip\" "+(chromedMode.equals(RSSConfig.VALUE_SKIP)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NeverUseChromedContent")+"</nobr></td>\n"+ " </tr>\n"+ " <tr>\n"+ -" <td class=\"value\"><nobr><input type=\"radio\" name=\"chromedmode\" value=\"metadata\" "+(chromedMode.equals(RSSConfig.VALUE_METADATA)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NoContentMetadataOnly")+"</nobr></td>\n"+ +" <td class=\"value\"><nobr><input type=\"radio\" name=\""+seqPrefix+"chromedmode\" value=\"metadata\" "+(chromedMode.equals(RSSConfig.VALUE_METADATA)?"checked=\"true\"":"")+"/>"+Messages.getBodyString(locale,"RSSConnector.NoContentMetadataOnly")+"</nobr></td>\n"+ " </tr>\n"+ "</table>\n" ); @@ -2485,8 +2523,8 @@ public class RSSConnector extends org.ap else { out.print( -"<input type=\"hidden\" name=\"dechromedmode\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dechromedMode)+"\"/>\n"+ -"<input type=\"hidden\" name=\"chromedmode\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(chromedMode)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"dechromedmode\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dechromedMode)+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"chromedmode\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(chromedMode)+"\"/>\n" ); } @@ -2494,7 +2532,7 @@ public class RSSConnector extends org.ap // There is no native security, so all we care about are the tokens. i = 0; - if (tabName.equals(Messages.getString(locale,"RSSConnector.Security"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.Security")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ @@ -2509,15 +2547,15 @@ public class RSSConnector extends org.ap if (sn.getType().equals(RSSConfig.NODE_ACCESS)) { String accessDescription = "_"+Integer.toString(k); - String accessOpName = "accessop"+accessDescription; + String accessOpName = seqPrefix+"accessop"+accessDescription; String token = sn.getAttributeValue(RSSConfig.ATTR_TOKEN); out.print( " <tr>\n"+ " <td class=\"description\">\n"+ " <input type=\"hidden\" name=\""+accessOpName+"\" value=\"\"/>\n"+ -" <input type=\"hidden\" name=\""+"spectoken"+accessDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(token)+"\"/>\n"+ -" <a name=\""+"token_"+Integer.toString(k)+"\">\n"+ -" <input type=\"button\" value=\"Delete\" onClick='Javascript:SpecOp(\""+accessOpName+"\",\"Delete\",\"token_"+Integer.toString(k)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteToken")+Integer.toString(k)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"spectoken"+accessDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(token)+"\"/>\n"+ +" <a name=\""+seqPrefix+"token_"+Integer.toString(k)+"\">\n"+ +" <input type=\"button\" value=\"Delete\" onClick='Javascript:"+seqPrefix+"SpecOp(\""+accessOpName+"\",\"Delete\",\""+seqPrefix+"token_"+Integer.toString(k)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteToken")+Integer.toString(k)+"\"/>\n"+ " </a> \n"+ " </td>\n"+ " <td class=\"value\">\n"+ @@ -2540,14 +2578,14 @@ public class RSSConnector extends org.ap " <tr><td class=\"lightseparator\" colspan=\"2\"><hr/></td></tr>\n"+ " <tr>\n"+ " <td class=\"description\">\n"+ -" <input type=\"hidden\" name=\"tokencount\" value=\""+Integer.toString(k)+"\"/>\n"+ -" <input type=\"hidden\" name=\"accessop\" value=\"\"/>\n"+ -" <a name=\""+"token_"+Integer.toString(k)+"\">\n"+ -" <input type=\"button\" value=\"Add\" onClick='Javascript:SpecAddToken(\"token_"+Integer.toString(k+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddAccessToken")+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"tokencount\" value=\""+Integer.toString(k)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"accessop\" value=\"\"/>\n"+ +" <a name=\""+seqPrefix+"token_"+Integer.toString(k)+"\">\n"+ +" <input type=\"button\" value=\"Add\" onClick='Javascript:"+seqPrefix+"SpecAddToken(\""+seqPrefix+"token_"+Integer.toString(k+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddAccessToken")+"\"/>\n"+ " </a> \n"+ " </td>\n"+ " <td class=\"value\">\n"+ -" <input type=\"text\" size=\"30\" name=\"spectoken\" value=\"\"/>\n"+ +" <input type=\"text\" size=\"30\" name=\""+seqPrefix+"spectoken\" value=\"\"/>\n"+ " </td>\n"+ " </tr>\n"+ "</table>\n" @@ -2566,18 +2604,18 @@ public class RSSConnector extends org.ap String accessDescription = "_"+Integer.toString(k); String token = sn.getAttributeValue(RSSConfig.ATTR_TOKEN); out.print( -"<input type=\"hidden\" name=\""+"spectoken"+accessDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(token)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"spectoken"+accessDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(token)+"\"/>\n" ); k++; } } out.print( -"<input type=\"hidden\" name=\"tokencount\" value=\""+Integer.toString(k)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"tokencount\" value=\""+Integer.toString(k)+"\"/>\n" ); } // "Metadata" tab - if (tabName.equals(Messages.getString(locale,"RSSConnector.Metadata"))) + if (tabName.equals(Messages.getString(locale,"RSSConnector.Metadata")) && connectionSequenceNumber == actualSequenceNumber) { out.print( "<table class=\"displaytable\">\n"+ @@ -2592,17 +2630,17 @@ public class RSSConnector extends org.ap if (sn.getType().equals(RSSConfig.NODE_METADATA)) { String metadataDescription = "_"+Integer.toString(k); - String metadataOpName = "metadataop"+metadataDescription; + String metadataOpName = seqPrefix+"metadataop"+metadataDescription; String name = sn.getAttributeValue(RSSConfig.ATTR_NAME); String value = sn.getAttributeValue(RSSConfig.ATTR_VALUE); out.print( " <tr>\n"+ " <td class=\"description\">\n"+ " <input type=\"hidden\" name=\""+metadataOpName+"\" value=\"\"/>\n"+ -" <input type=\"hidden\" name=\""+"specmetaname"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(name)+"\"/>\n"+ -" <input type=\"hidden\" name=\""+"specmetavalue"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(value)+"\"/>\n"+ -" <a name=\""+"metadata_"+Integer.toString(k)+"\">\n"+ -" <input type=\"button\" value=\"Delete\" onClick='Javascript:SpecOp(\""+metadataOpName+"\",\"Delete\",\"metadata_"+Integer.toString(k)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteMetadata")+Integer.toString(k)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"specmetaname"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(name)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"specmetavalue"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(value)+"\"/>\n"+ +" <a name=\""+seqPrefix+"metadata_"+Integer.toString(k)+"\">\n"+ +" <input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Delete")+"\" onClick='Javascript:"+seqPrefix+"SpecOp(\""+metadataOpName+"\",\"Delete\",\""+seqPrefix+"metadata_"+Integer.toString(k)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.DeleteMetadata")+Integer.toString(k)+"\"/>\n"+ " </a> \n"+ " </td>\n"+ " <td class=\"value\">\n"+ @@ -2630,18 +2668,18 @@ public class RSSConnector extends org.ap " <tr><td class=\"lightseparator\" colspan=\"4\"><hr/></td></tr>\n"+ " <tr>\n"+ " <td class=\"description\">\n"+ -" <input type=\"hidden\" name=\"metadatacount\" value=\""+Integer.toString(k)+"\"/>\n"+ -" <input type=\"hidden\" name=\"metadataop\" value=\"\"/>\n"+ -" <a name=\""+"metadata_"+Integer.toString(k)+"\">\n"+ -" <input type=\"button\" value=\"Add\" onClick='Javascript:SpecAddMetadata(\"metadata_"+Integer.toString(k+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddMetadata")+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"metadatacount\" value=\""+Integer.toString(k)+"\"/>\n"+ +" <input type=\"hidden\" name=\""+seqPrefix+"metadataop\" value=\"\"/>\n"+ +" <a name=\""+seqPrefix+"metadata_"+Integer.toString(k)+"\">\n"+ +" <input type=\"button\" value=\""+Messages.getAttributeString(locale,"RSSConnector.Add")+"\" onClick='Javascript:"+seqPrefix+"SpecAddMetadata(\""+seqPrefix+"metadata_"+Integer.toString(k+1)+"\")' alt=\""+Messages.getAttributeString(locale,"RSSConnector.AddMetadata")+"\"/>\n"+ " </a> \n"+ " </td>\n"+ " <td class=\"value\">\n"+ -" <input type=\"text\" size=\"30\" name=\"specmetaname\" value=\"\"/>\n"+ +" <input type=\"text\" size=\"30\" name=\""+seqPrefix+"specmetaname\" value=\"\"/>\n"+ " </td>\n"+ " <td class=\"value\">=</td>\n"+ " <td class=\"value\">\n"+ -" <input type=\"text\" size=\"80\" name=\"specmetavalue\" value=\"\"/>\n"+ +" <input type=\"text\" size=\"80\" name=\""+seqPrefix+"specmetavalue\" value=\"\"/>\n"+ " </td>\n"+ " </tr>\n"+ "</table>\n" @@ -2662,33 +2700,40 @@ public class RSSConnector extends org.ap String name = sn.getAttributeValue(RSSConfig.ATTR_NAME); String value = sn.getAttributeValue(RSSConfig.ATTR_VALUE); out.print( -"<input type=\"hidden\" name=\""+"specmetaname"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(name)+"\"/>\n"+ -"<input type=\"hidden\" name=\""+"specmetavalue"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(value)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"specmetaname"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(name)+"\"/>\n"+ +"<input type=\"hidden\" name=\""+seqPrefix+"specmetavalue"+metadataDescription+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(value)+"\"/>\n" ); k++; } } out.print( -"<input type=\"hidden\" name=\"metadatacount\" value=\""+Integer.toString(k)+"\"/>\n" +"<input type=\"hidden\" name=\""+seqPrefix+"metadatacount\" value=\""+Integer.toString(k)+"\"/>\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 document specification accordingly. - * The name of the posted form is "editjob". + * 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 + * document specification accordingly. The name of the posted form is always "editjob". + * The connector will be connected before this method can be called. *@param variableContext contains the post data, including binary file-upload information. + *@param locale is the locale the output is preferred to be in. *@param ds is the current document 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). + *@param connectionSequenceNumber is the unique number of this connection within the 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). */ @Override - public String processSpecificationPost(IPostParameters variableContext, Locale locale, DocumentSpecification ds) + public String processSpecificationPost(IPostParameters variableContext, Locale locale, Specification ds, + int connectionSequenceNumber) throws ManifoldCFException { + String seqPrefix = "s"+connectionSequenceNumber+"_"; + // Get the map - String value = variableContext.getParameter("rssmapcount"); + String value = variableContext.getParameter(seqPrefix+"rssmapcount"); if (value != null) { int mapsize = Integer.parseInt(value); @@ -2708,7 +2753,7 @@ public class RSSConnector extends org.ap j = 0; while (j < mapsize) { - String prefix = "rssregexp_"+Integer.toString(j)+"_"; + String prefix = seqPrefix+"rssregexp_"+Integer.toString(j)+"_"; String match = variableContext.getParameter(prefix+"match"); String map = variableContext.getParameter(prefix+"map"); if (map == null) @@ -2724,7 +2769,7 @@ public class RSSConnector extends org.ap } // Get the cgiPath - String rssURLSequence = variableContext.getParameter("rssurls"); + String rssURLSequence = variableContext.getParameter(seqPrefix+"rssurls"); if (rssURLSequence != null) { // Delete all url specs first @@ -2770,12 +2815,12 @@ public class RSSConnector extends org.ap } catch (java.io.IOException e) { - throw new ManifoldCFException("IO error",e); + throw new ManifoldCFException("IO error: "+e.getMessage(),e); } } // Read the url specs - String urlRegexpCount = variableContext.getParameter("urlregexpcount"); + String urlRegexpCount = variableContext.getParameter(seqPrefix+"urlregexpcount"); if (urlRegexpCount != null && urlRegexpCount.length() > 0) { int regexpCount = Integer.parseInt(urlRegexpCount); @@ -2790,12 +2835,12 @@ public class RSSConnector extends org.ap } // Grab the operation and the index (if any) - String operation = variableContext.getParameter("urlregexpop"); + String operation = variableContext.getParameter(seqPrefix+"urlregexpop"); if (operation == null) operation = "Continue"; int opIndex = -1; if (operation.equals("Delete")) - opIndex = Integer.parseInt(variableContext.getParameter("urlregexpnumber")); + opIndex = Integer.parseInt(variableContext.getParameter(seqPrefix+"urlregexpnumber")); // Reconstruct urlspec nodes j = 0; @@ -2805,13 +2850,13 @@ public class RSSConnector extends org.ap if (!operation.equals("Delete") || j != opIndex) { // Add the jth node - String regexp = variableContext.getParameter("urlregexp_"+Integer.toString(j)); - String regexpDescription = variableContext.getParameter("urlregexpdesc_"+Integer.toString(j)); - String reorder = variableContext.getParameter("urlregexpreorder_"+Integer.toString(j)); - String javaSession = variableContext.getParameter("urlregexpjava_"+Integer.toString(j)); - String aspSession = variableContext.getParameter("urlregexpasp_"+Integer.toString(j)); - String phpSession = variableContext.getParameter("urlregexpphp_"+Integer.toString(j)); - String bvSession = variableContext.getParameter("urlregexpbv_"+Integer.toString(j)); + String regexp = variableContext.getParameter(seqPrefix+"urlregexp_"+Integer.toString(j)); + String regexpDescription = variableContext.getParameter(seqPrefix+"urlregexpdesc_"+Integer.toString(j)); + String reorder = variableContext.getParameter(seqPrefix+"urlregexpreorder_"+Integer.toString(j)); + String javaSession = variableContext.getParameter(seqPrefix+"urlregexpjava_"+Integer.toString(j)); + String aspSession = variableContext.getParameter(seqPrefix+"urlregexpasp_"+Integer.toString(j)); + String phpSession = variableContext.getParameter(seqPrefix+"urlregexpphp_"+Integer.toString(j)); + String bvSession = variableContext.getParameter(seqPrefix+"urlregexpbv_"+Integer.toString(j)); SpecificationNode newSn = new SpecificationNode(RSSConfig.NODE_URLSPEC); newSn.setAttribute(RSSConfig.ATTR_REGEXP,regexp); if (regexpDescription != null && regexpDescription.length() > 0) @@ -2832,13 +2877,13 @@ public class RSSConnector extends org.ap } if (operation.equals("Add")) { - String regexp = variableContext.getParameter("urlregexp"); - String regexpDescription = variableContext.getParameter("urlregexpdesc"); - String reorder = variableContext.getParameter("urlregexpreorder"); - String javaSession = variableContext.getParameter("urlregexpjava"); - String aspSession = variableContext.getParameter("urlregexpasp"); - String phpSession = variableContext.getParameter("urlregexpphp"); - String bvSession = variableContext.getParameter("urlregexpbv"); + String regexp = variableContext.getParameter(seqPrefix+"urlregexp"); + String regexpDescription = variableContext.getParameter(seqPrefix+"urlregexpdesc"); + String reorder = variableContext.getParameter(seqPrefix+"urlregexpreorder"); + String javaSession = variableContext.getParameter(seqPrefix+"urlregexpjava"); + String aspSession = variableContext.getParameter(seqPrefix+"urlregexpasp"); + String phpSession = variableContext.getParameter(seqPrefix+"urlregexpphp"); + String bvSession = variableContext.getParameter(seqPrefix+"urlregexpbv"); // Add a new node at the end SpecificationNode newSn = new SpecificationNode(RSSConfig.NODE_URLSPEC); @@ -2860,7 +2905,7 @@ public class RSSConnector extends org.ap } // Get the exclusions - String exclusions = variableContext.getParameter("exclusions"); + String exclusions = variableContext.getParameter(seqPrefix+"exclusions"); if (exclusions != null) { // Delete existing exclusions record first @@ -2880,7 +2925,7 @@ public class RSSConnector extends org.ap } // Read the feed timeout, if present - String feedTimeoutValue = variableContext.getParameter("feedtimeout"); + String feedTimeoutValue = variableContext.getParameter(seqPrefix+"feedtimeout"); if (feedTimeoutValue != null && feedTimeoutValue.length() > 0) { int j = 0; @@ -2898,7 +2943,7 @@ public class RSSConnector extends org.ap } // Read the feed refetch interval, if present - String feedRefetchValue = variableContext.getParameter("feedrefetch"); + String feedRefetchValue = variableContext.getParameter(seqPrefix+"feedrefetch"); if (feedRefetchValue != null && feedRefetchValue.length() > 0) { int j = 0; @@ -2916,7 +2961,7 @@ public class RSSConnector extends org.ap } // Read the minimum feed refetch interval, if present - String minFeedRefetchValue = variableContext.getParameter("minfeedrefetch"); + String minFeedRefetchValue = variableContext.getParameter(seqPrefix+"minfeedrefetch"); if (minFeedRefetchValue != null && minFeedRefetchValue.length() > 0) { int j = 0; @@ -2934,10 +2979,10 @@ public class RSSConnector extends org.ap } // Read the bad feed refetch interval (which is allowed to be null) - String badFeedRefetchValuePresent = variableContext.getParameter("badfeedrefetch_present"); + String badFeedRefetchValuePresent = variableContext.getParameter(seqPrefix+"badfeedrefetch_present"); if (badFeedRefetchValuePresent != null && badFeedRefetchValuePresent.length() > 0) { - String badFeedRefetchValue = variableContext.getParameter("badfeedrefetch"); + String badFeedRefetchValue = variableContext.getParameter(seqPrefix+"badfeedrefetch"); int k = 0; while (k < ds.getChildCount()) { @@ -2956,7 +3001,7 @@ public class RSSConnector extends org.ap } // Read the dechromed mode - String dechromedMode = variableContext.getParameter("dechromedmode"); + String dechromedMode = variableContext.getParameter(seqPrefix+"dechromedmode"); if (dechromedMode != null && dechromedMode.length() > 0) { int j = 0; @@ -2974,7 +3019,7 @@ public class RSSConnector extends org.ap } // Read the chromed mode - String chromedMode = variableContext.getParameter("chromedmode"); + String chromedMode = variableContext.getParameter(seqPrefix+"chromedmode"); if (chromedMode != null && chromedMode.length() > 0) { int j = 0; @@ -2992,12 +3037,12 @@ public class RSSConnector extends org.ap } // Now, do whatever action we were told to do. - String rssop = variableContext.getParameter("rssop"); + String rssop = variableContext.getParameter(seqPrefix+"rssop"); if (rssop != null && rssop.equals("Add")) { // Add a match to the end - String match = variableContext.getParameter("rssmatch"); - String map = variableContext.getParameter("rssmap"); + String match = variableContext.getParameter(seqPrefix+"rssmatch"); + String map = variableContext.getParameter(seqPrefix+"rssmap"); SpecificationNode node = new SpecificationNode(RSSConfig.NODE_MAP); node.setAttribute(RSSConfig.ATTR_MATCH,match); node.setAttribute(RSSConfig.ATTR_MAP,map); @@ -3005,7 +3050,7 @@ public class RSSConnector extends org.ap } else if (rssop != null && rssop.equals("Delete")) { - int index = Integer.parseInt(variableContext.getParameter("rssindex")); + int index = Integer.parseInt(variableContext.getParameter(seqPrefix+"rssindex")); int j = 0; while (j < ds.getChildCount()) { @@ -3023,7 +3068,7 @@ public class RSSConnector extends org.ap } } - String xc = variableContext.getParameter("tokencount"); + String xc = variableContext.getParameter(seqPrefix+"tokencount"); if (xc != null) { // Delete all tokens first @@ -3042,7 +3087,7 @@ public class RSSConnector extends org.ap while (i < accessCount) { String accessDescription = "_"+Integer.toString(i); - String accessOpName = "accessop"+accessDescription; + String accessOpName = seqPrefix+"accessop"+accessDescription; xc = variableContext.getParameter(accessOpName); if (xc != null && xc.equals("Delete")) { @@ -3051,24 +3096,24 @@ public class RSSConnector extends org.ap continue; } // Get the stuff we need - String accessSpec = variableContext.getParameter("spectoken"+accessDescription); + String accessSpec = variableContext.getParameter(seqPrefix+"spectoken"+accessDescription); SpecificationNode node = new SpecificationNode(RSSConfig.NODE_ACCESS); node.setAttribute(RSSConfig.ATTR_TOKEN,accessSpec); ds.addChild(ds.getChildCount(),node); i++; } - String op = variableContext.getParameter("accessop"); + String op = variableContext.getParameter(seqPrefix+"accessop"); if (op != null && op.equals("Add")) { - String accessspec = variableContext.getParameter("spectoken"); + String accessspec = variableContext.getParameter(seqPrefix+"spectoken"); SpecificationNode node = new SpecificationNode(RSSConfig.NODE_ACCESS); node.setAttribute(RSSConfig.ATTR_TOKEN,accessspec); ds.addChild(ds.getChildCount(),node); } } - xc = variableContext.getParameter("metadatacount"); + xc = variableContext.getParameter(seqPrefix+"metadatacount"); if (xc != null) { // Delete all tokens first @@ -3087,7 +3132,7 @@ public class RSSConnector extends org.ap while (i < metadataCount) { String metadataDescription = "_"+Integer.toString(i); - String metadataOpName = "metadataop"+metadataDescription; + String metadataOpName = seqPrefix+"metadataop"+metadataDescription; xc = variableContext.getParameter(metadataOpName); if (xc != null && xc.equals("Delete")) { @@ -3096,8 +3141,8 @@ public class RSSConnector extends org.ap continue; } // Get the stuff we need - String metaNameSpec = variableContext.getParameter("specmetaname"+metadataDescription); - String metaValueSpec = variableContext.getParameter("specmetavalue"+metadataDescription); + String metaNameSpec = variableContext.getParameter(seqPrefix+"specmetaname"+metadataDescription); + String metaValueSpec = variableContext.getParameter(seqPrefix+"specmetavalue"+metadataDescription); SpecificationNode node = new SpecificationNode(RSSConfig.NODE_METADATA); node.setAttribute(RSSConfig.ATTR_NAME,metaNameSpec); node.setAttribute(RSSConfig.ATTR_VALUE,metaValueSpec); @@ -3105,11 +3150,11 @@ public class RSSConnector extends org.ap i++; } - String op = variableContext.getParameter("metadataop"); + String op = variableContext.getParameter(seqPrefix+"metadataop"); if (op != null && op.equals("Add")) { - String metaNameSpec = variableContext.getParameter("specmetaname"); - String metaValueSpec = variableContext.getParameter("specmetavalue"); + String metaNameSpec = variableContext.getParameter(seqPrefix+"specmetaname"); + String metaValueSpec = variableContext.getParameter(seqPrefix+"specmetavalue"); SpecificationNode node = new SpecificationNode(RSSConfig.NODE_METADATA); node.setAttribute(RSSConfig.ATTR_NAME,metaNameSpec); @@ -3122,13 +3167,18 @@ public class RSSConnector extends org.ap } /** View specification. - * This method is called in the body section of a job's view page. Its purpose is to present the document 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. + * This method is called in the body section of a job's view page. Its purpose is to present the document + * 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. + * The connector will be connected before this method can be called. *@param out is the output to which any HTML should be sent. + *@param locale is the locale the output is preferred to be in. *@param ds is the current document specification for this job. + *@param connectionSequenceNumber is the unique number of this connection within the job. */ @Override - public void viewSpecification(IHTTPOutput out, Locale locale, DocumentSpecification ds) + public void viewSpecification(IHTTPOutput out, Locale locale, Specification ds, + int connectionSequenceNumber) throws ManifoldCFException, IOException { String exclusions = "";
Modified: manifoldcf/branches/dev_1x/connectors/rss/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/rss/tests/NavigationDerbyUI.java URL: http://svn.apache.org/viewvc/manifoldcf/branches/dev_1x/connectors/rss/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/rss/tests/NavigationDerbyUI.java?rev=1626026&r1=1626025&r2=1626026&view=diff ============================================================================== --- manifoldcf/branches/dev_1x/connectors/rss/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/rss/tests/NavigationDerbyUI.java (original) +++ manifoldcf/branches/dev_1x/connectors/rss/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/rss/tests/NavigationDerbyUI.java Thu Sep 18 16:56:59 2014 @@ -207,7 +207,7 @@ public class NavigationDerbyUI extends B link.click(); window = testerInstance.findWindow(null); form = window.findForm(testerInstance.createStringDescription("editjob")); - textarea = form.findTextarea(testerInstance.createStringDescription("rssurls")); + textarea = form.findTextarea(testerInstance.createStringDescription("s0_rssurls")); textarea.setValue(testerInstance.createStringDescription("http://www.cnn.com")); // Canonicalization tab link = window.findLink(testerInstance.createStringDescription("Canonicalization tab")); Propchange: manifoldcf/branches/dev_1x/connectors/sharepoint/ ------------------------------------------------------------------------------ Merged /manifoldcf/trunk/connectors/sharepoint:r1621855,1622740
