Hello again,
I finally figured out what the problem is (SearchForm.clone() needs to
deep copy the KeyValue objects), and so I have attached a patch. The
patch also fixes a problem with the setValue() method which leads to an
incorrect proposal URL being generated.
-Hal
Hal Finkel wrote:
> Hello,
>
> I have come across an odd problem with the web2 spellcheck plugin. When
> there is a spelling suggestion, the value of the "query" parameter in
> the form which provides the next button is not set to the original query
> but rather the query suggested by the spellcheck plugin.
>
> I have enabled the plugin on a website I'm setting up:
> http://utilitysearch.info, so you can observe the behavior yourself. I
> am using a trunk checkout from 2007-06-27.
>
> As a quick thought, it seems that even though the spell check controller
> is cloning the form object, the original object is still being contaminated:
> SearchForm form=(SearchForm)serviceLocator.getSearchForm().clone();
>
> If anyone has any ideas as to what could be causing this problem, I
> would appreciate some assistance.
>
> Thank you,
> Hal
>
--- contrib/web2/src/main/java/org/apache/nutch/webapp/common/SearchForm.java.orig 2007-06-27 11:17:34.000000000 -0700
+++ contrib/web2/src/main/java/org/apache/nutch/webapp/common/SearchForm.java 2007-07-21 16:20:14.000000000 -0700
@@ -126,6 +126,13 @@
public String toString() {
return value.toString();
}
+
+ public boolean equals(Object other) {
+ if (this == other) return true;
+ if (!(other instanceof KeyValue)) return false;
+ KeyValue okv = (KeyValue) other;
+ return this.key.equals(okv.key) && this.value.equals(okv.value);
+ }
}
/**
@@ -149,6 +156,9 @@
*/
public void setValue(String key, String value) {
if (n_values.containsKey(key)) {
+ if(active.contains(n_values.get(key)))
+ active.remove(active.indexOf(n_values.get(key)));
+
((KeyValue) n_values.get(key)).setValue(value);
} else {
n_values.put(key, new KeyValue(key, value));
@@ -303,9 +313,21 @@
public Object clone(){
SearchForm newForm=new SearchForm(new HashMap());
- newForm.active.addAll(active);
newForm.o_values.putAll(o_values);
- newForm.n_values.putAll(n_values);
+
+ // make sure we have a deep copy of all KeyValue objects which can be modified
+ Iterator j = n_values.entrySet().iterator();
+ while (j.hasNext()) {
+ KeyValue kv = (KeyValue) ((Map.Entry) j.next()).getValue();
+ newForm.n_values.put(kv.getKey(), new KeyValue(kv.getKey(), kv.getValue()));
+ }
+
+ Iterator i = active.iterator();
+ while (i.hasNext()) {
+ KeyValue kv = (KeyValue) i.next();
+ newForm.active.add(new KeyValue(kv.getKey(), kv.getValue()));
+ }
+
return newForm;
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Nutch-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nutch-general