Small bugfix for ItemSearchWidget

git-svn-id: https://svn.libreccm.org/ccm/trunk@5207 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2018-01-19 19:03:58 +00:00
parent 0a2ccde070
commit 2ce33985b8
1 changed files with 89 additions and 42 deletions

View File

@ -52,14 +52,20 @@ import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.Folder; import com.arsdigita.cms.Folder;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.globalization.Globalization;
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.toolbox.ui.LayoutPanel; import com.arsdigita.toolbox.ui.LayoutPanel;
import com.arsdigita.util.LockableImpl; import com.arsdigita.util.LockableImpl;
import com.arsdigita.util.UncheckedWrapperException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* *
@ -75,7 +81,8 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
private final Table resultsTable; private final Table resultsTable;
private final Paginator paginator; private final Paginator paginator;
private final StringParameter queryParam; private final StringParameter queryParam;
private final QueryFieldsRequestLocal queryFields = new QueryFieldsRequestLocal(); private final QueryFieldsRequestLocal queryFields
= new QueryFieldsRequestLocal();
//private final List<String> queryFields = new ArrayList<String>(); //private final List<String> queryFields = new ArrayList<String>();
//private final Submit submit; //private final Submit submit;
private final static CMSConfig CMS_CONFIG = CMSConfig.getInstanceOf(); private final static CMSConfig CMS_CONFIG = CMSConfig.getInstanceOf();
@ -103,8 +110,10 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
mainPanel.setLeft(new FilterForm()); mainPanel.setLeft(new FilterForm());
resultsTable = new ResultsTable(); resultsTable = new ResultsTable();
paginator = new Paginator((PaginationModelBuilder) resultsTable.getModelBuilder(), paginator = new Paginator((PaginationModelBuilder) resultsTable
CMS_CONFIG.getItemSearchFlatBrowsePanePageSize()); .getModelBuilder(),
CMS_CONFIG
.getItemSearchFlatBrowsePanePageSize());
//mainPanel.add(paginator); //mainPanel.add(paginator);
final BoxPanel body = new BoxPanel(BoxPanel.VERTICAL); final BoxPanel body = new BoxPanel(BoxPanel.VERTICAL);
body.add(paginator); body.add(paginator);
@ -160,21 +169,25 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
public ResultsTable() { public ResultsTable() {
super(); super();
setEmptyView(new Label(GlobalizationUtil.globalize("cms.ui.item_search.flat.no_items"))); setEmptyView(new Label(GlobalizationUtil.globalize(
"cms.ui.item_search.flat.no_items")));
setClassAttr("dataTable"); setClassAttr("dataTable");
final TableColumnModel columnModel = getColumnModel(); final TableColumnModel columnModel = getColumnModel();
columnModel.add(new TableColumn(0, columnModel.add(new TableColumn(0,
GlobalizationUtil.globalize( GlobalizationUtil.globalize(
"cms.ui.item_search.flat.title").localize(), "cms.ui.item_search.flat.title")
.localize(),
TABLE_COL_TITLE)); TABLE_COL_TITLE));
columnModel.add(new TableColumn(1, columnModel.add(new TableColumn(1,
GlobalizationUtil.globalize( GlobalizationUtil.globalize(
"cms.ui.item_search.flat.place").localize(), "cms.ui.item_search.flat.place")
.localize(),
TABLE_COL_PLACE)); TABLE_COL_PLACE));
columnModel.add(new TableColumn(2, columnModel.add(new TableColumn(2,
GlobalizationUtil.globalize( GlobalizationUtil.globalize(
"cms.ui.item_search.flat.type").localize(), "cms.ui.item_search.flat.type")
.localize(),
TABLE_COL_TYPE)); TABLE_COL_TYPE));
setModelBuilder(new ResultsTableModelBuilder()); setModelBuilder(new ResultsTableModelBuilder());
@ -184,8 +197,9 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
} }
private class ResultsTableModelBuilder extends LockableImpl implements TableModelBuilder, private class ResultsTableModelBuilder extends LockableImpl implements
PaginationModelBuilder { TableModelBuilder,
PaginationModelBuilder {
//private DataCollection collection; //private DataCollection collection;
private final RequestLocal collection = new RequestLocal(); private final RequestLocal collection = new RequestLocal();
@ -197,10 +211,12 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
query(state); query(state);
} }
((DataCollection) collection.get(state)).setRange(paginator.getFirst(state), paginator. ((DataCollection) collection.get(state)).setRange(paginator
.getFirst(state), paginator.
getLast(state) + 1); getLast(state) + 1);
return new ResultsTableModel(table, state, (DataCollection) collection.get(state)); return new ResultsTableModel(table, state,
(DataCollection) collection.get(state));
} }
public int getTotalSize(final Paginator paginator, final PageState state) { public int getTotalSize(final Paginator paginator, final PageState state) {
@ -218,16 +234,20 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
private void query(final PageState state) { private void query(final PageState state) {
final Session session = SessionManager.getSession(); final Session session = SessionManager.getSession();
final BigDecimal typeId = (BigDecimal) state.getValue(new BigDecimalParameter( final BigDecimal typeId = (BigDecimal) state.getValue(
ItemSearch.SINGLE_TYPE_PARAM)); new BigDecimalParameter(
ItemSearch.SINGLE_TYPE_PARAM));
if (typeId == null) { if (typeId == null) {
collection.set(state, session.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE)); collection.set(state, session.retrieve(
ContentPage.BASE_DATA_OBJECT_TYPE));
} else { } else {
final ContentType type = new ContentType(typeId); final ContentType type = new ContentType(typeId);
collection.set(state, session.retrieve(type.getClassName())); collection.set(state, session.retrieve(type.getClassName()));
} }
((DataCollection) collection.get(state)).addFilter("version = 'draft'"); ((DataCollection) collection.get(state)).addFilter(
((DataCollection) collection.get(state)).addFilter("section is not null"); "version = 'draft'");
((DataCollection) collection.get(state)).addFilter(
"section is not null");
final String query = (String) state.getValue(queryParam); final String query = (String) state.getValue(queryParam);
if ((query != null) && !query.isEmpty()) { if ((query != null) && !query.isEmpty()) {
@ -237,11 +257,13 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
ContentPage.TITLE, query)); ContentPage.TITLE, query));
for (String field : queryFields.getQueryFields()) { for (String field : queryFields.getQueryFields()) {
buffer.append(String. buffer.append(String.
format(" or (lower(%s) like lower('%%%s%%'))", field, query)); format(" or (lower(%s) like lower('%%%s%%'))", field,
query));
} }
buffer.append(')'); buffer.append(')');
((DataCollection) collection.get(state)).addFilter(buffer.toString()); ((DataCollection) collection.get(state)).addFilter(buffer
.toString());
// ((DataCollection) collection.get(state)).addFilter(String.format( // ((DataCollection) collection.get(state)).addFilter(String.format(
// "((lower(%s) like lower('%%%s%%')) or (lower(%s) like lower('%%%s%%')))", // "((lower(%s) like lower('%%%s%%')) or (lower(%s) like lower('%%%s%%')))",
@ -249,7 +271,8 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
// ContentPage.TITLE, query)); // ContentPage.TITLE, query));
} }
((DataCollection) collection.get(state)).addOrder("title asc, name asc"); ((DataCollection) collection.get(state)).addOrder(
"title asc, name asc");
} }
} }
@ -276,8 +299,9 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
boolean ret; boolean ret;
if ((collection != null) && collection.next()) { if ((collection != null) && collection.next()) {
currentItem = (ContentItem) DomainObjectFactory.newInstance(collection. currentItem = (ContentItem) DomainObjectFactory.newInstance(
getDataObject()); collection.
getDataObject());
ret = true; ret = true;
} else { } else {
ret = false; ret = false;
@ -337,7 +361,8 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
} }
private class TitleCellRenderer extends LockableImpl implements TableCellRenderer { private class TitleCellRenderer extends LockableImpl implements
TableCellRenderer {
public Component getComponent(final Table table, public Component getComponent(final Table table,
final PageState state, final PageState state,
@ -353,29 +378,35 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
final Link link = new Link(value.toString(), ""); final Link link = new Link(value.toString(), "");
final String widget = (String) state.getValue(new StringParameter(WIDGET_PARAM)); final String widget = (String) state.getValue(new StringParameter(
final String searchWidget = (String) state.getValue(new StringParameter( WIDGET_PARAM));
SEARCHWIDGET_PARAM)); final String searchWidget = (String) state.getValue(
new StringParameter(
SEARCHWIDGET_PARAM));
final ContentPage page = new ContentPage((BigDecimal) key); final ContentPage page = new ContentPage((BigDecimal) key);
final boolean useURL = "true".equals(state.getValue(new StringParameter( final boolean useURL = "true".equals(state.getValue(
ItemSearchPopup.URL_PARAM))); new StringParameter(
ItemSearchPopup.URL_PARAM)));
final String targetValue; final String targetValue;
if (useURL) { if (useURL) {
targetValue = ItemSearchPopup.getItemURL(state.getRequest(), page.getOID()); targetValue = ItemSearchPopup.getItemURL(state.getRequest(),
page.getOID());
} else { } else {
targetValue = key.toString(); targetValue = key.toString();
} }
final StringBuffer buffer = new StringBuffer(30); final StringBuffer buffer = new StringBuffer(30);
buffer.append(String.format("window.opener.document.%s.value=\"%s\"; ", widget, buffer.append(String.format(
targetValue)); "window.opener.document.%s.value=\"%s\"; ", widget,
targetValue));
if (searchWidget != null) { if (searchWidget != null) {
buffer.append(String.format("window.opener.document.%s.value=\"%s\"; ", buffer.append(String.format(
searchWidget, "window.opener.document.%s.value=\"%s\"; ",
page.getTitle().replace("\"", "\\\""))); searchWidget,
page.getTitle().replace("\"", "\\\"")));
} }
buffer.append("self.close(); return false;"); buffer.append("self.close(); return false;");
@ -399,19 +430,23 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
// protected Submit getSubmit() { // protected Submit getSubmit() {
// return submit; // return submit;
// } // }
private class FilterForm extends Form implements FormInitListener, FormProcessListener { private class FilterForm extends Form implements FormInitListener,
FormProcessListener {
private final Submit submit; private final Submit submit;
public FilterForm() { public FilterForm() {
super("ItemSearchFlatBrowsePane"); super("ItemSearchFlatBrowsePane");
add(new Label(GlobalizationUtil.globalize("cms.ui.item_search.flat.filter"))); add(new Label(GlobalizationUtil.globalize(
final TextField filter = new TextField(new StringParameter(QUERY_PARAM)); "cms.ui.item_search.flat.filter")));
final TextField filter = new TextField(new StringParameter(
QUERY_PARAM));
add(filter); add(filter);
submit = new Submit(FILTER_SUBMIT, submit = new Submit(FILTER_SUBMIT,
GlobalizationUtil.globalize("cms.ui.item_search.flat.filter.submit")); GlobalizationUtil.globalize(
"cms.ui.item_search.flat.filter.submit"));
add(submit); add(submit);
addInitListener(this); addInitListener(this);
@ -424,19 +459,31 @@ public class ItemSearchFlatBrowsePane extends SimpleContainer {
final String query = (String) data.get(QUERY_PARAM); final String query = (String) data.get(QUERY_PARAM);
if ((query == null) || query.isEmpty()) { if ((query == null) || query.isEmpty()) {
final String value;
try {
value = new String(state.getRequest().getParameter(
ItemSearchPopup.QUERY).getBytes("UTF-8"));
} catch (UnsupportedEncodingException ex) {
throw new UncheckedWrapperException(ex);
}
data.setParameter(QUERY_PARAM, data.setParameter(QUERY_PARAM,
new ParameterData(queryParam, state.getValue(new StringParameter( new ParameterData(queryParam, value));
ItemSearchPopup.QUERY)))); // data.setParameter(QUERY_PARAM,
state.setValue(queryParam, data.getParameter(QUERY_PARAM).getValue()); // new ParameterData(queryParam, state.getValue(new StringParameter(
// ItemSearchPopup.QUERY))));
state.setValue(queryParam, data.getParameter(QUERY_PARAM)
.getValue());
} }
} }
public void process(final FormSectionEvent fse) throws FormProcessException { public void process(final FormSectionEvent fse) throws
FormProcessException {
final FormData data = fse.getFormData(); final FormData data = fse.getFormData();
final PageState state = fse.getPageState(); final PageState state = fse.getPageState();
state.setValue(queryParam, data.get(QUERY_PARAM)); state.setValue(queryParam, data.get(QUERY_PARAM));
state.setValue(new StringParameter(ItemSearchPopup.QUERY), data.get(QUERY_PARAM)); state.setValue(new StringParameter(ItemSearchPopup.QUERY), data.get(
QUERY_PARAM));
} }
} }