Small bugfix for ItemSearchWidget
git-svn-id: https://svn.libreccm.org/ccm/trunk@5207 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
0a2ccde070
commit
2ce33985b8
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue