diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
index 75f7e3b23..6005932f2 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
@@ -1099,3 +1099,4 @@ cms.ui.item_search.flat.place=Place
cms.ui.item_search.flat.type=Type
cms.ui.item_search.flatBrowse=Select item
cms.ui.category.undeletable=This category can't be deleted.
+cms.ui.item_search.flat.filter.submit=Filter
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
index 7f714c8e0..557f7c3c1 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
@@ -1090,3 +1090,4 @@ cms.ui.item_search.flat.place=Ort
cms.ui.item_search.flat.type=Typ
cms.ui.item_search.flatBrowse=Item ausw\u00e4hlen
cms.ui.category.undeletable=Diese Kategorie kann nicht gel\u00f6scht werden.
+cms.ui.item_search.flat.filter.submit=Filtern
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
index 5d45e2307..2d38bb9e8 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
@@ -38,3 +38,4 @@ cms.ui.item_search.flat.place=Place
cms.ui.item_search.flat.type=Type
cms.ui.item_search.flatBrowse=Select item
cms.ui.category.undeletable=
+cms.ui.item_search.flat.filter.submit=
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
index 17e31db4d..65ca5858c 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
@@ -569,3 +569,4 @@ cms.ui.item_search.flat.place=Place
cms.ui.item_search.flat.type=Type
cms.ui.item_search.flatBrowse=Select item
cms.ui.category.undeletable=
+cms.ui.item_search.flat.filter.submit=
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFlatBrowsePane.java b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFlatBrowsePane.java
index 38dc03d93..08a32e031 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFlatBrowsePane.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFlatBrowsePane.java
@@ -5,18 +5,23 @@ import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.GridPanel;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.PaginationModelBuilder;
+import com.arsdigita.bebop.Paginator;
+import com.arsdigita.bebop.RequestLocal;
+import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
-import com.arsdigita.bebop.event.PrintEvent;
-import com.arsdigita.bebop.event.PrintListener;
+import com.arsdigita.bebop.form.Submit;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.BigDecimalParameter;
+import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
@@ -31,11 +36,14 @@ import com.arsdigita.cms.Folder;
import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
-import com.arsdigita.persistence.DataObject;
+import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager;
+import com.arsdigita.toolbox.ui.DataQueryBuilder;
+import com.arsdigita.toolbox.ui.DataTable;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
+import org.bouncycastle.asn1.ess.ContentIdentifier;
/**
*
@@ -44,47 +52,36 @@ import java.math.BigDecimal;
*/
public class ItemSearchFlatBrowsePane extends Form implements FormInitListener, FormProcessListener {
- private static final String QUERY_PARAM = "query";
+ private static final String QUERY_PARAM = "queryStr";
public static final String WIDGET_PARAM = "widget";
public static final String SEARCHWIDGET_PARAM = "searchWidget";
+ public static final String FILTER_SUBMIT = "filterSubmit";
private final Table resultsTable;
+ private final Paginator paginator;
private final StringParameter queryParam;
- private final Label jsLabel;
-
public ItemSearchFlatBrowsePane(final String name) {
super(name);
+ final BoxPanel mainPanel = new BoxPanel(BoxPanel.VERTICAL);
+
queryParam = new StringParameter(QUERY_PARAM);
- final BoxPanel boxPanel = new BoxPanel(BoxPanel.HORIZONTAL);
+ final BoxPanel boxPanel = new BoxPanel(BoxPanel.HORIZONTAL);
boxPanel.add(new Label(GlobalizationUtil.globalize("cms.ui.item_search.flat.filter")));
- final TextField filter = new TextField(new StringParameter(QUERY_PARAM));
- boxPanel.add(filter);
- jsLabel = new Label("", false);
- jsLabel.addPrintListener(new PrintListener() {
-
- public void prepare(final PrintEvent event) {
- final PageState state = event.getPageState();
- final String searchWidget = (String) state.getValue(new StringParameter(SEARCHWIDGET_PARAM));
- ((Label)event.getTarget()).setLabel(String.format(
- " ",
- filter.getName(),
- searchWidget));
-
- }
- });
- boxPanel.add(jsLabel);
- add(boxPanel);
+ final TextField filter = new TextField(new StringParameter(QUERY_PARAM));
+ boxPanel.add(filter);
+ boxPanel.add(new Submit(FILTER_SUBMIT, GlobalizationUtil.globalize("cms.ui.item_search.flat.filter.submit")));
+ mainPanel.add(boxPanel);
resultsTable = new ResultsTable();
- add(resultsTable);
-
+ paginator = new Paginator((PaginationModelBuilder) resultsTable.getModelBuilder(), 5);
+ mainPanel.add(paginator);
+
+ mainPanel.add(resultsTable);
+
+ add(mainPanel);
+
addInitListener(this);
addProcessListener(this);
}
@@ -95,8 +92,15 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
page.addComponentStateParam(this, queryParam);
}
- public void init(final FormSectionEvent fse) throws FormProcessException {
-
+ public void init(final FormSectionEvent fse) throws FormProcessException {
+ final PageState state = fse.getPageState();
+ final FormData data = fse.getFormData();
+
+ final String query = (String) data.get(QUERY_PARAM);
+ if ((query == null) || query.isEmpty()) {
+ data.setParameter(QUERY_PARAM,
+ new ParameterData(queryParam, state.getValue(new StringParameter(ItemSearchPopup.QUERY))));
+ }
}
public void process(final FormSectionEvent fse) throws FormProcessException {
@@ -104,6 +108,7 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
final PageState state = fse.getPageState();
state.setValue(queryParam, data.get(QUERY_PARAM));
+ state.setValue(new StringParameter(ItemSearchPopup.QUERY), data.get(QUERY_PARAM));
}
private class ResultsTable extends Table {
@@ -115,6 +120,7 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
public ResultsTable() {
super();
setEmptyView(new Label(GlobalizationUtil.globalize("cms.ui.item_search.flat.no_items")));
+ setClassAttr("dataTable");
final TableColumnModel columnModel = getColumnModel();
columnModel.add(new TableColumn(0,
@@ -128,16 +134,61 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
TABLE_COL_TYPE));
setModelBuilder(new ResultsTableModelBuilder());
-
+
columnModel.get(0).setCellRenderer(new TitleCellRenderer());
}
}
- private class ResultsTableModelBuilder extends LockableImpl implements TableModelBuilder {
+ private class ResultsTableModelBuilder extends LockableImpl implements TableModelBuilder, PaginationModelBuilder {
+
+ //private DataCollection collection;
+ private RequestLocal collection = new RequestLocal();
public TableModel makeModel(final Table table, final PageState state) {
- return new ResultsTableModel(table, state);
+
+ if (collection.get(state) == null) {
+ query(state);
+ }
+
+ ((DataCollection) collection.get(state)).setRange(paginator.getFirst(state), paginator.getLast(state) + 1);
+
+ return new ResultsTableModel(table, state, (DataCollection) collection.get(state));
+ }
+
+ public int getTotalSize(final Paginator paginator, final PageState state) {
+ if (collection.get(state) == null) {
+ query(state);
+ }
+
+ //((DataCollection)collection.get(state)).setRange(paginator.getFirst(state), paginator.getLast(state) + 1);
+
+ return (int) ((DataCollection)collection.get(state)).size();
+ }
+
+ public boolean isVisible(PageState state) {
+ return true;
+ }
+
+ private void query(final PageState state) {
+ final Session session = SessionManager.getSession();
+ final BigDecimal typeId = (BigDecimal) state.getValue(new BigDecimalParameter(ItemSearch.SINGLE_TYPE_PARAM));
+ if (typeId == null) {
+ collection.set(state, session.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE));
+ } else {
+ final ContentType type = new ContentType(typeId);
+ collection.set(state, session.retrieve(type.getClassName()));
+ }
+
+ final String query = (String) state.getValue(queryParam);
+ if ((query != null) && !query.isEmpty()) {
+ ((DataCollection)collection.get(state)).addFilter(String.format(
+ "(lower(%s) like lower('%%%s%%')) or (lower(%s) like lower('%%%s%%'))",
+ ContentItem.NAME, query,
+ ContentPage.TITLE, query));
+ }
+
+ ((DataCollection) collection.get(state)).addOrder("title asc, name asc");
}
}
@@ -148,23 +199,22 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
private final DataCollection collection;
private ContentItem currentItem;
- public ResultsTableModel(final Table table, final PageState state) {
+ public ResultsTableModel(final Table table, final PageState state, final DataCollection collection) {
this.table = table;
- final Session session = SessionManager.getSession();
- final BigDecimal typeId = (BigDecimal) state.getValue(new BigDecimalParameter(ItemSearch.SINGLE_TYPE_PARAM));
- if (typeId == null) {
- collection = session.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE);
- } else {
- final ContentType type = new ContentType(typeId);
- collection = session.retrieve(type.getClassName());
- }
- final String query = (String) state.getValue(queryParam);
- if ((query != null) && !query.isEmpty()) {
- collection.addFilter(String.format("(lower(%s) like lower('%%%s%%')) or (lower(%s) like lower('%%%s%%'))",
- ContentItem.NAME, query,
- ContentPage.TITLE, query));
+ this.collection = collection;
+
+ /*
+ * final Session session = SessionManager.getSession(); final BigDecimal typeId = (BigDecimal)
+ * state.getValue(new BigDecimalParameter(ItemSearch.SINGLE_TYPE_PARAM)); if (typeId == null) { collection =
+ * session.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE); } else { final ContentType type = new
+ * ContentType(typeId); collection = session.retrieve(type.getClassName()); }
+ *
+ * final String query = (String) state.getValue(queryParam); if ((query != null) && !query.isEmpty()) {
+ * collection.addFilter(String.format( "(lower(%s) like lower('%%%s%%')) or (lower(%s) like
+ * lower('%%%s%%'))", ContentItem.NAME, query, ContentPage.TITLE, query));
}
+ */
}
public int getColumnCount() {
@@ -227,35 +277,39 @@ public class ItemSearchFlatBrowsePane extends Form implements FormInitListener,
public Object getKeyAt(final int columnIndex) {
return currentItem.getID();
}
+
}
-
+
private class TitleCellRenderer extends LockableImpl implements TableCellRenderer {
- public Component getComponent(final Table table,
- final PageState state,
- final Object value,
- final boolean isSelected,
+ public Component getComponent(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
final Object key,
- final int row,
+ final int row,
final int column) {
+
+ if (value == null) {
+ return new Label("???");
+ }
+
final Link link = new Link(value.toString(), "");
-
+
final String widget = (String) state.getValue(new StringParameter(WIDGET_PARAM));
final String searchWidget = (String) state.getValue(new StringParameter(SEARCHWIDGET_PARAM));
-
+
final ContentPage page = new ContentPage((BigDecimal) key);
-
+
link.setOnClick(String.format(
"window.opener.document.%s.value=\"%s\";window.opener.document.%s.value=\"%s\";self.close();return false;",
- widget,
- key.toString(),
- searchWidget,
- page.getTitle()));
-
+ widget,
+ key.toString(),
+ searchWidget,
+ page.getTitle()));
+
return link;
}
-
-
-
+
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFolderBrowser.java b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFolderBrowser.java
index 10414a823..1e960fc2d 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFolderBrowser.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchFolderBrowser.java
@@ -43,6 +43,7 @@ import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem;
+import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.Folder;
@@ -347,6 +348,7 @@ public class ItemSearchFolderBrowser extends Table {
String widget =
(String) state.getValue(new StringParameter(
ItemSearchPopup.WIDGET_PARAM));
+ String searchWidget = (String) state.getValue(new StringParameter("searchWidget"));
boolean useURL =
"true".equals(state.getValue(new StringParameter(
ItemSearchPopup.URL_PARAM)));
@@ -358,9 +360,9 @@ public class ItemSearchFolderBrowser extends Table {
getDomainObject().getOID())
: id
+ " (" + name + ")";
+ String title = ((ContentPage) coll.getDomainObject()).getTitle();
- Label js = new Label(generateJSLabel(id, widget,
- fillString),
+ Label js = new Label(generateJSLabel(id, widget, searchWidget, fillString, title),
false);
container.add(js);
@@ -377,15 +379,13 @@ public class ItemSearchFolderBrowser extends Table {
}
}
- private String generateJSLabel(BigDecimal id, String widget, String fill) {
+ private String generateJSLabel(BigDecimal id, String widget, String searchWidget, String fill, String title) {
StringBuilder buffer = new StringBuilder();
- buffer.append(" ";
+ + " \n"
+ + " ";
}
+
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchWidget.java b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchWidget.java
index 52c9357c0..c56f5ad78 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchWidget.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ItemSearchWidget.java
@@ -85,6 +85,7 @@ public class ItemSearchWidget extends FormSection
//this.setReadOnly();
this.setSize(35);
}
+
}
private class SearchFragment extends Submit {
@@ -105,6 +106,7 @@ public class ItemSearchWidget extends FormSection
|| parent.m_searchComponent.hasQuery(ps))
&& super.isVisible(ps));
}
+
}
private class ClearFragment extends Submit {
@@ -118,6 +120,7 @@ public class ItemSearchWidget extends FormSection
+ ".value = \"\"; return false;");
this.setAttribute("value", "Clear");
}
+
}
private class LabelFragment extends Label {
@@ -129,6 +132,7 @@ public class ItemSearchWidget extends FormSection
super(name, escaping);
this.parent = parent;
}
+
}
private class ItemSearchFragment extends ItemSearchSectionInline {
@@ -156,6 +160,7 @@ public class ItemSearchWidget extends FormSection
|| hasQuery(ps))
&& super.isVisible(ps));
}
+
}
private class HRLabel extends Label {
@@ -170,6 +175,7 @@ public class ItemSearchWidget extends FormSection
|| m_searchComponent.hasQuery(ps))
&& super.isVisible(ps));
}
+
}
/**
@@ -204,7 +210,7 @@ public class ItemSearchWidget extends FormSection
} else {
typeURLFrag = null;
}
-
+
m_searchModel = new StringParameter(SEARCH);
m_contentType = contentType;
@@ -226,7 +232,7 @@ public class ItemSearchWidget extends FormSection
CMS.getContext().getContentSection().getID());
params.setParameter("widget", formName + ".elements['" + m_selected. //m_item.
getName() + "']");
- params.setParameter("searchWidget", formName + ".elements['" + m_item.getName() + "']");
+ params.setParameter("searchWidget", formName + ".elements['" + m_item.getName() + "']");
if (typeURLFrag != null) {
params.setParameter("single_type", typeURLFrag);
}
@@ -248,13 +254,15 @@ public class ItemSearchWidget extends FormSection
//+ m_item.getName().replace('.', '_')
+ m_selected.getName().replace('.', '_')
+ "Popup(theForm) { \n"
- + " aWindow = window.open(\"" + url + "\", "
- + "\"search\", \"toolbar=no,width=800,height=600,status=no,scrollbars=yes,resize=yes\");\n"
+ + " aWindow = window.open(\"" + url + "&query=\" + document.getElementById('" + m_item.getName() + "').value , "
+ //+ "\"search\", \"toolbar=no,width=800,height=600,status=no,scrollbars=yes,resize=yes\");\n"
+ + "\"search\", \"toolbar=yes,width=\" + screen.width*0.5 + \",height=\" + screen.height*0.5 + \",status=no,scrollbars=yes,resize=yes\");\n"
+ "return false;\n"
+ " } \n"
+ " --> \n"
+ " ");
}
+
});
m_topHR = new HRLabel();
add(m_topHR);
@@ -417,4 +425,5 @@ public class ItemSearchWidget extends FormSection
}
}
}
+
}