Umlaute in der Suche werden jetzt beim Seitewechsel übergeben (Ticket #1069)

git-svn-id: https://svn.libreccm.org/ccm/trunk@1604 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-04-18 11:05:07 +00:00
parent b5fcd9efe8
commit 1430a1b1bb
3 changed files with 87 additions and 35 deletions

View File

@ -18,13 +18,13 @@
*/ */
package com.arsdigita.globalization; package com.arsdigita.globalization;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.dispatcher.RequestContext;
import com.arsdigita.kernel.Kernel;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.Session; import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.persistence.TransactionContext; import com.arsdigita.persistence.TransactionContext;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.dispatcher.RequestContext;
import com.arsdigita.kernel.Kernel;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.MessageFormat; import java.text.MessageFormat;

View File

@ -27,6 +27,7 @@ import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormModel; import com.arsdigita.bebop.FormModel;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.globalization.Globalization;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
@ -126,7 +127,9 @@ public class BaseQueryComponent extends QueryComponent {
Element terms = Search.newElement("terms"); Element terms = Search.newElement("terms");
terms.addAttribute("param", m_terms.getName()); terms.addAttribute("param", m_terms.getName());
terms.addAttribute("value", getTerms(state)); terms.addAttribute("value",
Globalization.decodeParameter(state.getRequest(),
m_terms.getName()));
generateErrorXML(state, terms); generateErrorXML(state, terms);
content.addContent(terms); content.addContent(terms);

View File

@ -21,6 +21,7 @@ package com.arsdigita.search.ui;
import com.arsdigita.bebop.SimpleComponent; import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.parameters.IntegerParameter; import com.arsdigita.bebop.parameters.IntegerParameter;
import com.arsdigita.globalization.Globalization;
import com.arsdigita.kernel.Party; import com.arsdigita.kernel.Party;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
@ -34,6 +35,7 @@ import com.arsdigita.search.ResultSet;
import com.arsdigita.web.URL; import com.arsdigita.web.URL;
import com.arsdigita.web.ParameterMap; import com.arsdigita.web.ParameterMap;
import com.arsdigita.web.Web; import com.arsdigita.web.Web;
import java.io.UnsupportedEncodingException;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
@ -84,7 +86,8 @@ public class ResultsPane extends SimpleComponent {
try { try {
resultSet = m_engine == null resultSet = m_engine == null
? Search.process(spec) ? Search.process(spec)
: Search.process(spec, Search.DEFAULT_RESULT_CACHE, m_engine); : Search.process(spec, Search.DEFAULT_RESULT_CACHE,
m_engine);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Got result set " + resultSet.getClass() s_log.debug("Got result set " + resultSet.getClass()
@ -93,10 +96,12 @@ public class ResultsPane extends SimpleComponent {
if (resultSet.getCount() > 0) { if (resultSet.getCount() > 0) {
Integer page = (Integer) m_pageNumber.transformValue(state.getRequest()); Integer page = (Integer) m_pageNumber.transformValue(state.
getRequest());
int pageNumber = (page == null ? 1 : page.intValue()); int pageNumber = (page == null ? 1 : page.intValue());
long objectCount = resultSet.getCount(); long objectCount = resultSet.getCount();
int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize); int pageCount = (int) Math.ceil((double) objectCount
/ (double) m_pageSize);
if (pageNumber < 1) { if (pageNumber < 1) {
pageNumber = 1; pageNumber = 1;
@ -117,7 +122,8 @@ public class ResultsPane extends SimpleComponent {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Paginator stats\n page number:" + pageNumber s_log.debug("Paginator stats\n page number:" + pageNumber
+ "\n page count: " + pageCount + "\n page size: " + "\n page count: " + pageCount
+ "\n page size: "
+ m_pageSize + "\n start " + begin + "\n end: " + m_pageSize + "\n start " + begin + "\n end: "
+ end + "\n count: " + objectCount); + end + "\n count: " + objectCount);
} }
@ -175,11 +181,15 @@ public class ResultsPane extends SimpleComponent {
if (key.equals(pageParam)) { if (key.equals(pageParam)) {
continue; continue;
} }
map.setParameterValues(key, url.getParameterValues(key)); //map.setParameterValues(key, url.getParameterValues(key));
map.setParameterValues(key,
decodeParameters(url.getParameterValues(key),
state));
} }
paginator.addAttribute("pageParam", m_pageNumber.getName()); paginator.addAttribute("pageParam", m_pageNumber.getName());
paginator.addAttribute("baseURL", URL.there(url.getPathInfo(), map).toString()); paginator.addAttribute("baseURL", URL.there(url.getPathInfo(), map).
toString());
paginator.addAttribute("pageNumber", XML.format(new Integer(pageNumber))); paginator.addAttribute("pageNumber", XML.format(new Integer(pageNumber)));
paginator.addAttribute("pageCount", XML.format(new Integer(pageCount))); paginator.addAttribute("pageCount", XML.format(new Integer(pageCount)));
paginator.addAttribute("pageSize", XML.format(new Integer(pageSize))); paginator.addAttribute("pageSize", XML.format(new Integer(pageSize)));
@ -189,6 +199,40 @@ public class ResultsPane extends SimpleComponent {
return paginator; return paginator;
} }
private String[] decodeParameters(final String[] parameters,
final PageState state) {
final String[] decoded = new String[parameters.length];
for (int i = 0; i < parameters.length; i++) {
decoded[i] = decodeParameter(parameters[i], state);
}
return decoded;
}
private String decodeParameter(final String parameter,
final PageState state) {
String re = state.getRequest().getParameter(Globalization.ENCODING_PARAM_NAME);
if ((re == null) || (re.isEmpty())) {
re = Globalization.getDefaultCharset();
}
if ((parameter == null) || (parameter.isEmpty())) {
return parameter;
} else if(Globalization.getDefaultCharset(state.getRequest()).equals(re)) {
return parameter;
} else {
try {
return new String(parameter.getBytes(Globalization.getDefaultCharset(
state.getRequest())), re);
} catch(UnsupportedEncodingException ex) {
s_log.warn("Unsupported encoding.", ex);
return parameter;
}
}
}
protected Element generateDocumentsXML(PageState state, protected Element generateDocumentsXML(PageState state,
Iterator results) { Iterator results) {
Element documents = Search.newElement("documents"); Element documents = Search.newElement("documents");
@ -216,7 +260,9 @@ public class ResultsPane extends SimpleComponent {
java.net.URL url = doc.getURL(); java.net.URL url = doc.getURL();
entry.addAttribute("oid", XML.format(doc.getOID())); entry.addAttribute("oid", XML.format(doc.getOID()));
entry.addAttribute("url", XML.format(m_relative ? url.getPath() + "?" + url.getQuery() : url.toString())); entry.addAttribute("url", XML.format(m_relative ? url.getPath() + "?"
+ url.getQuery()
: url.toString()));
entry.addAttribute("score", XML.format(doc.getScore())); entry.addAttribute("score", XML.format(doc.getScore()));
entry.addAttribute("title", XML.format(doc.getTitle())); entry.addAttribute("title", XML.format(doc.getTitle()));
if (summary != null) { if (summary != null) {
@ -227,7 +273,8 @@ public class ResultsPane extends SimpleComponent {
Date creationDate = doc.getCreationDate(); Date creationDate = doc.getCreationDate();
if (creationDate != null) { if (creationDate != null) {
entry.addAttribute("creationDate", XML.format(creationDate.toString())); entry.addAttribute("creationDate", XML.format(
creationDate.toString()));
} }
Party creationParty = doc.getCreationParty(); Party creationParty = doc.getCreationParty();
if (creationParty != null) { if (creationParty != null) {
@ -246,8 +293,10 @@ public class ResultsPane extends SimpleComponent {
XML.format(lastModifiedParty.getDisplayName())); XML.format(lastModifiedParty.getDisplayName()));
} }
s_log.debug("about to add the contentSectionName from search index Doc to search result xml"); s_log.debug(
entry.addAttribute("contentSectionName", XML.format(doc.getContentSection())); "about to add the contentSectionName from search index Doc to search result xml");
entry.addAttribute("contentSectionName", XML.format(doc.
getContentSection()));
return entry; return entry;
} }