Hal, thanks , its good point, because i did not understand before the strange behavier (updated the SearchForm.clone())
thanks, DT www.ejinz.com ----- Original Message ----- From: "Hal Finkel" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Saturday, July 21, 2007 6:36 PM Subject: Re: web2 spellcheck problem - patch > 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
