You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/02/07 21:35:46 UTC
svn commit: r151747 - in incubator/beehive/trunk/netui:
src/bootstrap/org/apache/beehive/netui/tools/
src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/
src/javascript/tags-datagrid/
src/pageflow/org/apache/beehive/netui/script/common/ src/tags-databinding/
src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/
src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/
src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/
src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/
src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/
test/src/junitTests/org/apache/beehive/netui/test/datagrid/
Author: ekoneil
Date: Mon Feb 7 12:35:42 2005
New Revision: 151747
URL: http://svn.apache.org/viewcvs?view=rev&rev=151747
Log:
Start of filter support in the data grid.
This checkin includes the netui-datagrid.js file, which provides JavaScript support for parsing filters from URLs, adding new filters, and building new filter URLs.
Implement support for additional filter operations on the IFilter interface; this interface needs to be reworked a little to support other query languages (XQuery, for example).
Implement support for <function>s in JSP 2.0 TLDs.
Add three JSP 2.0 functions to support filtering; these perform the following operations:
- lookupFilterOperations
- lookupDefaultFilterOperation
- ensureFilters
and these functions can be used to build JSP UIs that support adding / removing filter query parameters.
Tests are on their way...
BB: self
BVT: NetUI pass
Added:
incubator/beehive/trunk/netui/src/javascript/tags-datagrid/
incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js (with props)
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java (with props)
Modified:
incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java
incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java
incubator/beehive/trunk/netui/src/tags-databinding/build.xml
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/IFilter.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/StylePolicy.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java
Modified: incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java (original)
+++ incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/NetUITldTagsHandler.java Mon Feb 7 12:35:42 2005
@@ -43,7 +43,6 @@
import xjavadoc.XClass;
import xjavadoc.XMember;
-
/**
*
* @xdoclet.taghandler namespace="NetUITldGen"
@@ -198,9 +197,9 @@
if(packageName != null && !currentClass.getQualifiedName().startsWith(packageName))
continue;
-// System.out.println("currentClass=" + currentClass.getQualifiedName());
-// System.out.println(" packageName: " + packageName);
-// System.out.println(" startsWith: " + currentClass.getQualifiedName().startsWith(packageName));
+ //System.out.println("currentClass=" + currentClass.getQualifiedName());
+ //System.out.println(" packageName: " + packageName);
+ //System.out.println(" startsWith: " + currentClass.getQualifiedName().startsWith(packageName));
setCurrentClass(currentClass);
@@ -214,9 +213,10 @@
{
if (TypeTagsHandler.isOfType(currentClass, typeName, extent))
{
- logger.debug("isOfType true, generate().");
-
- if(DEBUG) logger.debug("handling type: " + currentClass.getQualifiedName());
+ if(DEBUG) {
+ logger.debug("isOfType true, generate().");
+ logger.debug("handling type: " + currentClass.getQualifiedName());
+ }
generate(template);
}
@@ -227,6 +227,62 @@
if(DEBUG) logger.debug("typeName=null, generate().");
generate(template);
}
+ }
+ }
+
+ /**
+ * @param template Describe what the parameter does
+ * @param attributes Describe what the parameter does
+ * @exception XDocletException Describe the exception
+ * @doc:tag type="block"
+ * @doc:tag name="tagName" optional="false" values="netui:jspfunction"
+ */
+ public void forAllMethods(String template, Properties attributes)
+ throws XDocletException {
+ String tagName = attributes.getProperty("tagName");
+
+ if(DEBUG)
+ logger.debug("Handling tagName: " + tagName);
+
+ setCurrentTagName(tagName);
+
+ try {
+ XClass currentClass = getCurrentClass();
+
+ if (currentClass == null)
+ throw new XDocletException("currentClass == null!!!");
+
+ Collection members = currentClass.getMethods(true);
+
+ List sortedMembers = new ArrayList(members);
+ Collections.sort(sortedMembers, memberComparator);
+ members = sortedMembers;
+
+ Iterator methods = members.iterator();
+ while(methods.hasNext())
+ {
+ XMethod xm = (XMethod)methods.next();
+
+ if(DEBUG)
+ logger.debug("handle method: " + xm.getName());
+
+ XTag attribute = getFirstTag(getCurrentClass(), xm.getName(), tagName);
+
+ setCurrentMethod(xm);
+ setCurrentMethodTag(attribute);
+
+ if(getCurrentMethod() != null && attribute != null)
+ generate(template);
+
+ setCurrentMethodTag(null);
+ setCurrentClassTag(null);
+ setCurrentMethod(null);
+ }
+ setCurrentClass(currentClass);
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ throw new XDocletException(e, "An error occurred in the forAllAttributes tag: " + e);
}
}
Modified: incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt (original)
+++ incubator/beehive/trunk/netui/src/bootstrap/org/apache/beehive/netui/tools/tld/xdoclet/tld.xdt Mon Feb 7 12:35:42 2005
@@ -75,5 +75,17 @@
</tag>
</XDtClass:ifHasClassTag>
</XDtNetUITldGen:forAllClasses>
+
+ <XDtNetUITldGen:forAllClasses type="java.lang.Object" abstract="false" extent="hierarchy">
+ <XDtClass:ifHasClassTag tagName="netui:jspfunctions">
+ <XDtNetUITldGen:forAllMethods tagName="netui:jspfunction">
+ <function>
+ <name><XDtNetUITldGen:paramValue paramName="name"/></name>
+ <function-class><XDtClass:fullClassName/></function-class>
+ <function-signature><XDtNetUITldGen:paramValue paramName="signature"/></function-signature>
+ </function>
+ </XDtNetUITldGen:forAllMethods>
+ </XDtClass:ifHasClassTag>
+ </XDtNetUITldGen:forAllClasses>
</taglib>
Added: incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js?view=auto&rev=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js (added)
+++ incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js Mon Feb 7 12:35:42 2005
@@ -0,0 +1,295 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+/* ==========================================================
+ *
+ *
+ *
+ * ==========================================================
+ */
+function NetUIFilterURL() {
+ this._urlParams = new Array();
+ this._filters = new Array();
+}
+
+/* return void */
+NetUIFilterURL.prototype.init = function(search) {
+ /* todo: parse the URL into its component key/value pairs */
+ var qIndex = search.indexOf('?') + 1;
+ var paramsArray = search.substring(qIndex).split('&');
+ var array = new Array();
+ for(var i = 0; i < paramsArray.length; i++) {
+ var eIndex = paramsArray[i].indexOf('=');
+ var key = paramsArray[i].substring(0,eIndex);
+ var value = paramsArray[i].substring(eIndex+1);
+
+ if(key == NetUIFilterList.FILTER_KEY) {
+ alert('add filter: ' + value);
+ var filter = NetUIFilterList.parse(value);
+ this._filters[this._filters.length] = filter;
+ }
+ else {
+ //alert('add URL param: ' + value);
+ var param = new NetUIUrlParam(key,value);
+ this._urlParams[this._urlParams.length] = param;
+ }
+ }
+}
+
+/* todo: remove this method in favor of processing by the caller */
+NetUIFilterURL.prototype.removeUrlParam = function(key) {
+ for(var i = 0; i < this._urlParams.length; i++) {
+ if(this._urlParams[i].getKey() == key) {
+ /*
+ this is a hack to simulate removing an element from the array
+ todo: need to implement real delete here
+ */
+ this._urlParams[i].setKey('');
+ }
+ }
+}
+
+/* return NetUIFilterList */
+NetUIFilterURL.prototype.lookupFiltersForDataGrid = function(dataGridName) {
+
+ for(var i = 0; i < this._filters.length; i++) {
+ //alert('check filter: ' + this._filters[i].toUrlParam());
+ if(this._filters[i].getDataGridName() == dataGridName)
+ return this._filters[i];
+ }
+
+ return null;
+}
+
+NetUIFilterURL.prototype.hasFiltersForDataGrid = function(dataGridName) {
+ var filters = this.lookupFiltersForDataGrid(dataGridName);
+ return (filters != null ? true : false);
+}
+
+/* return String */
+NetUIFilterURL.prototype.toQueryString = function() {
+
+ qs = '?';
+ for(var i = 0; i < this._urlParams.length; i++) {
+ var p = this._urlParams[i].toUrlParam();
+ if(p == null)
+ continue;
+
+ if(i > 0)
+ qs += '&';
+ qs += this._urlParams[i].toUrlParam();
+ }
+
+ for(var i = 0; i < this._filters.length; i++) {
+ /* allow parameters to return null to indicate that there's no parameter to add */
+ var p = this._filters[i].toUrlParam();
+ if(p == null)
+ continue;
+
+ if(i > 0)
+ qs += '&';
+ //alert('NetUIFilterURL::toQueryString:filter:\"' + p + '\"');
+ qs += p;
+ }
+
+ return qs;
+}
+
+NetUIFilterURL.prototype.addFilterList = function(netuiFilterList) {
+ this._filters[this._filters.length] = netuiFilterList;
+}
+
+/* ==========================================================
+ *
+ *
+ *
+ * ==========================================================
+ */
+function NetUIUrlParam(key,value) {
+ this._key = key;
+ this._value = value;
+}
+
+NetUIUrlParam.prototype.getKey = function() {
+ return this._key;
+}
+
+NetUIUrlParam.prototype.setKey = function(key) {
+ this._key = key;
+}
+
+NetUIUrlParam.prototype.getValue = function() {
+ return this._value;
+}
+
+NetUIParam.prototype.setValue = function(value) {
+ this._value = value;
+}
+
+NetUIUrlParam.prototype.toUrlParam = function() {
+ if(this._key == null || this._key == '')
+ return null;
+ else return this._key + '=' + this._value;
+}
+
+/* ==========================================================
+ *
+ *
+ *
+ * ==========================================================
+ */
+function NetUIFilterList(dataGridName) {
+ this._dataGridName = dataGridName;
+ this._filters = new Array();
+}
+
+function NetUIFilterList_parse(value) {
+ var scIndex = value.indexOf(';');
+ var dataGridName = value.substring(0, scIndex);
+ var filter = new NetUIFilterList(dataGridName);
+
+ var filterArray = value.substring(scIndex+1).split(',');
+ for(var i = 0; i < filterArray.length; i++) {
+ var parts = filterArray[i].split('~');
+ filter.addFilter(parts[0],parts[1],parts[2]);
+ }
+
+ return filter;
+}
+
+NetUIFilterList.parse = NetUIFilterList_parse;
+NetUIFilterList.FILTER_KEY = "netui_filter";
+
+NetUIFilterList.prototype.getDataGridName = function() {
+ return this._dataGridName;
+}
+
+/* return void */
+NetUIFilterList.prototype.addFilter = function(fExpr,fOp,fVal) {
+ this._filters[this._filters.length] = new NetUIFilter(fExpr,fOp,fVal);
+}
+
+NetUIFilterList.prototype.replaceFilters = function(netuiFilterArray) {
+ this._filters = netuiFilterArray;
+}
+
+/* return String */
+NetUIFilterList.prototype.toUrlParam = function() {
+ if(this._filters == null || this._filters.length == 0)
+ return null;
+
+ var paramValue = '';
+ var foundFilter = false;
+
+ paramValue += this._dataGridName;
+ paramValue += ';';
+ for(var i = 0; i < this._filters.length; i++) {
+ var p = this._filters[i].toUrlParam();
+ if(p == null)
+ continue;
+
+ if(i > 0)
+ paramValue += ',';
+ paramValue += p;
+ foundFilter = true;
+ }
+
+ if(!foundFilter)
+ return null;
+ else return NetUIFilterList.FILTER_KEY + '=' + paramValue;
+}
+
+/* return NetUIFilterList */
+NetUIFilterList.prototype.lookupFiltersForFilterExpression = function(filterExpression) {
+ var filters = new Array();
+ for(var i = 0; i < this._filters.length; i++) {
+ if(this._filters[i].getFilterExpression() == filterExpression)
+ filters[filters.length] = this._filters[i];
+ }
+
+ return filters;
+}
+
+/* ==========================================================
+ *
+ *
+ *
+ * ==========================================================
+ */
+function NetUIFilter(fExpr,fOp,fVal) {
+ this._fExpr = fExpr;
+ this._fOp = fOp;
+ this._fVal = fVal;
+}
+
+NetUIFilter.prototype.getFilterExpression = function() {
+ return this._fExpr;
+}
+
+NetUIFilter.prototype.getFilterOperation = function() {
+ return this._fOp;
+}
+
+NetUIFilter.prototype.getFilterValue = function() {
+ return this._fVal;
+}
+
+NetUIFilter.prototype.toUrlParam = function() {
+ if(this._fVal == null || this._fVal == '' ||
+ this._fOp == null || this._fOp == '' ||
+ this._fExpr == null || this._fExpr == '')
+ return null;
+
+ var val = this._fVal;
+ if(this._fOp == 'isempty' || this._fOp == 'isnotempty')
+ val = '*';
+
+ var op = (this._fOp != null ? this._fOp : '');
+
+ var filter = this._fExpr + '~' + op + '~' + val
+
+ return filter;
+}
+
+/* ==========================================================
+ *
+ *
+ *
+ * ==========================================================
+ */
+ /*
+ todo: switch over to using this URL method once the urlParams / filters have
+ been merged in the NetUIFilterUrl class
+ */
+function buildURL(params) {
+ if(params == null || params.length == 0)
+ return '';
+
+ var qs = '?';
+ for(var i = 0; i < params.length; i++) {
+ var p = params[i].toUrlParam();
+ if(p == null)
+ continue;
+
+ if(i > 0)
+ qs += '&';
+ qs += params[i].toUrlParam();
+ }
+
+ return qs;
+}
\ No newline at end of file
Propchange: incubator/beehive/trunk/netui/src/javascript/tags-datagrid/netui-datagrid.js
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java Mon Feb 7 12:35:42 2005
@@ -24,6 +24,7 @@
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import java.util.Collections;
import org.apache.beehive.netui.util.logging.Logger;
@@ -84,7 +85,7 @@
public Iterator getBundleNames() {
if(bundles == null)
- return org.apache.beehive.netui.util.iterator.IteratorFactory.EMPTY_ITERATOR;
+ return Collections.EMPTY_LIST.iterator();
else
return bundles.keySet().iterator();
}
Modified: incubator/beehive/trunk/netui/src/tags-databinding/build.xml
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/build.xml?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/build.xml (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/build.xml Mon Feb 7 12:35:42 2005
@@ -58,16 +58,15 @@
<netuitldgen
xmlencoding="UTF-8"
taglibversion="1.0"
- jspversion="1.2"
+ jspversion="1.2"
shortname="netui-data"
uri="http://beehive.apache.org/netui/tags-databinding-1.0"
description="NetUI Databinding Tag Library."
filename="${netui-tags-databinding.tld.name}"
destdir="${build.lib.dir}"
validateXml="true"
- packageName="org.apache.beehive.netui.tags.databinding"
+ packageName="org.apache.beehive.netui"
/>
-
<netuitldxgen
xmlencoding="UTF-8"
paletteGenerator="workshop.netui.jspdesigner.generators.NetuiDatabindingPaletteGenerator"
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java Mon Feb 7 12:35:42 2005
@@ -17,7 +17,7 @@
*/
package org.apache.beehive.netui.databinding.datagrid.model.filter;
-import java.util.HashMap;
+import org.apache.beehive.netui.databinding.datagrid.exceptions.IllegalFilterException;
/**
*
@@ -25,20 +25,6 @@
public class DefaultFilter
implements IFilter {
- private static final HashMap<String, FilterOperation> STRING_TO_FILTER;
- private static final HashMap<FilterOperation, String> FILTER_TO_STRING;
-
- /* todo: additional operations */
- static {
- STRING_TO_FILTER = new HashMap<String, FilterOperation>();
- STRING_TO_FILTER.put("eq", FilterOperation.EQUAL);
- STRING_TO_FILTER.put("ne", FilterOperation.NOT_EQUAL);
-
- FILTER_TO_STRING = new HashMap<FilterOperation, String>();
- FILTER_TO_STRING.put(FilterOperation.EQUAL, "eq");
- FILTER_TO_STRING.put(FilterOperation.NOT_EQUAL, "ne");
- }
-
private String _filterExpression;
private FilterOperation _filterOperation;
private Object _value;
@@ -83,15 +69,15 @@
}
public String getOperationString() {
- return FILTER_TO_STRING.get(_filterOperation);
+ return _filterOperation.getAbbreviation();
}
private static final FilterOperation mapStringToInt(String operation) {
- assert STRING_TO_FILTER.get(operation) != null : "Found a null FilterOperation in the filter operation map.";
- return STRING_TO_FILTER.get(operation);
- }
+ for(FilterOperation fOp : FilterOperation.values()) {
+ if(fOp.getAbbreviation().equals(operation))
+ return fOp;
+ }
- private static final String mapIntToString(FilterOperation operation) {
- return FILTER_TO_STRING.get(operation.getId());
+ throw new IllegalFilterException("Can not map the operation name \"" + operation + "\" to a filter operation");
}
}
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java Mon Feb 7 12:35:42 2005
@@ -21,6 +21,7 @@
import java.util.List;
import java.util.Map;
import java.util.HashMap;
+import java.util.Collections;
import javax.servlet.ServletRequest;
import org.apache.beehive.netui.databinding.datagrid.services.filter.FilterCodec;
@@ -31,25 +32,30 @@
public class FilterModel {
private String _namespace = null;
- private Map<String, List<IFilter>> _filters = null;
+ private List<IFilter> _filters = null;
- public FilterModel(String name, Map<String, List<IFilter>> filters) {
+ public FilterModel(String name, List<IFilter> filters) {
_namespace = name;
_filters = filters;
}
- public List<IFilter> getFilters(String filterExpression) {
+ public List<IFilter> getFilters() {
if(_filters == null)
return null;
+ else return Collections.unmodifiableList(_filters);
+ }
- return lookupFilters(filterExpression);
+ public List<IFilter> getFilters(String filterExpression) {
+ if(_filters == null)
+ return null;
+ else return Collections.unmodifiableList(lookupFilters(filterExpression));
}
public boolean isFiltered(String filterExpression) {
if(_filters == null)
return false;
- if(_filters.containsKey(filterExpression) && lookupFilters(filterExpression).size() > 0)
+ if(lookupFilters(filterExpression).size() > 0)
return true;
else return false;
}
@@ -58,7 +64,13 @@
assert filterExpression != null;
assert !filterExpression.equals("");
- List<IFilter> filters = _filters.get(filterExpression);
+ /* todo: perf. need to do this with FilterModelArrayList */
+ ArrayList<IFilter> filters = new ArrayList<IFilter>();
+ for(IFilter filter : _filters) {
+ if(filter.getFilterExpression().equals(filterExpression))
+ filters.add(filter);
+ }
+
return filters;
}
}
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/IFilter.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/IFilter.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/IFilter.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/IFilter.java Mon Feb 7 12:35:42 2005
@@ -22,21 +22,34 @@
*/
public interface IFilter {
- String FILTER_PARAM_KEY = "netui_filter";
-
enum FilterOperation {
-
- EQUAL(1),
- NOT_EQUAL(2);
+ NONE(0, "*"),
+ EQUAL(1, "eq"),
+ NOT_EQUAL(2, "ne"),
+ GREATER_THAN(3, "gt"),
+ LESS_THAN(4, "lt"),
+ GREATER_THAN_OR_EQUAL(5, "ge"),
+ LESS_THAN_OR_EQUAL(6, "le"),
+ IS_ONE_OF(7, "in"),
+ STARTS_WITH(8, "startswith"),
+ CONTAINS(9, "contains"),
+ IS_EMPTY(10, "isempty"),
+ IS_NOT_EMPTY(11, "isnotempty");
private int _id;
+ private String _abbrev;
- FilterOperation(int id) {
+ FilterOperation(int id, String abbrev) {
_id = id;
+ _abbrev = abbrev;
}
public int getId() {
return _id;
+ }
+
+ public String getAbbreviation() {
+ return _abbrev;
}
}
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/StylePolicy.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/StylePolicy.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/StylePolicy.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/style/StylePolicy.java Mon Feb 7 12:35:42 2005
@@ -24,18 +24,6 @@
*/
public abstract class StylePolicy {
-/*
- public static final int TABLE_CLASS = 1;
- public static final int HEADER_ROW_CLASS = 2;
- public static final int FOOTER_ROW_CLASS = 3;
- public static final int ROW_CLASS = 4;
- public static final int ALT_ROW_CLASS = 5;
- public static final int HEADER_CELL_CLASS = 6;
- public static final int DATA_CELL_CLASS = 7;
- public static final int FOOTER_CELL_CLASS = 8;
- public static final int HEADER_CELL_SORTED_CLASS = 9;
-*/
-
private static final String DELIM = "-";
private String _stylePrefix = null;
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java Mon Feb 7 12:35:42 2005
@@ -81,7 +81,7 @@
private Map<String, PagerModel> _pagers = null;
private FilterCodec _filterCodec = null;
- private Map<String, Map<String, List<IFilter>>> _filters = null;
+ private Map<String, List<IFilter>> _filters = null;
private DataGridStateService(ServletRequest request) {
_urlParams = request.getParameterMap();
@@ -96,6 +96,10 @@
_filters = _filterCodec.decode(_urlParams);
}
+ public String getPagerRowQueryParamKey() {
+ return _pagerCodec.getRowQueryParamKey();
+ }
+
public PagerModel getPagerModel(String namespace) {
PagerModel pm = _pagers.get(namespace);
if(pm == null) {
@@ -116,6 +120,11 @@
return new FilterModel(namespace, getFilters(namespace));
}
+ /* --------------------------------------------------
+
+ Sort Methods
+
+ -------------------------------------------------- */
public Map buildSortQueryParamsMap(String namespace) {
List<ISort> sorts = getSorts(namespace);
@@ -150,8 +159,12 @@
return buildQueryParamMap_sort(namespace, sortParamValue);
}
+ /* --------------------------------------------------
+
+ Pager Methods
+
+ -------------------------------------------------- */
public Map getQueryParamsForFirstPage(String namespace) {
- PagerModel pagerModel = getPagerModel(namespace);
return buildQueryParamMap_pager(namespace, FIRST_PAGE);
}
@@ -184,10 +197,78 @@
return params;
}
- public String getPagerRowQueryParamKey() {
- return _pagerCodec.getRowQueryParamKey();
+ /* --------------------------------------------------
+
+ Filter Methods
+
+ -------------------------------------------------- */
+ /**
+ * Get a query parameter map but omit the filters for the
+ * given namespace with the given filter expression.
+ *
+ * @param namespace
+ * @param filterExpression
+ * @return
+ */
+ public Map getQueryParamsOmitFilter(String namespace, String filterExpression) {
+ Map params = new HashMap();
+
+ for(Object key : _urlParams.keySet()) {
+ if(key.equals(_filterCodec.getQueryParamKey()))
+ continue;
+ else params.put(key, _urlParams.get(key));
+ }
+
+ if(_filters != null) {
+ ArrayList filterList = new ArrayList();
+ for(String curNamespace : _filters.keySet()) {
+ List<IFilter> filters = _filters.get(curNamespace);
+
+ filterList.add(_filterCodec.encode(curNamespace, filters, filterExpression));
+ }
+
+ params.put(_filterCodec.getQueryParamKey(), (String[])filterList.toArray(new String[0]));
+ }
+
+ return params;
+ }
+
+ /**
+ *
+ * @param namespace
+ * @return
+ */
+ public Map getQueryParamsOmitAllFilters(String namespace) {
+ Map params = new HashMap();
+
+ for(Object key : _urlParams.keySet()) {
+ if(key.equals(_filterCodec.getQueryParamKey()))
+ continue;
+ else params.put(key, _urlParams.get(key));
+ }
+
+ if(_filters != null) {
+ ArrayList filterList = new ArrayList();
+ for(String curNamespace : _filters.keySet()) {
+ if(curNamespace.equals(namespace))
+ continue;
+
+ List<IFilter> filters = _filters.get(curNamespace);
+ String filterParamValue = _filterCodec.encode(curNamespace, filters);
+ filterList.add(filterParamValue);
+ }
+ params.put(_filterCodec.getQueryParamKey(), (String[])filterList.toArray(new String[0]));
+ }
+
+ return params;
}
+ /* --------------------------------------------------
+
+ Implementation details
+
+ -------------------------------------------------- */
+
private List<ISort> getSorts(String namespace) {
if(_sorts != null)
return _sorts.get(namespace);
@@ -195,12 +276,12 @@
return null;
}
- private Map<String, List<IFilter>> getFilters(String namespace) {
+ private List<IFilter> getFilters(String namespace) {
if(_filters != null)
return _filters.get(namespace);
else return null;
}
-
+
private Map buildQueryParamMap_pager(String namespace, int page) {
PagerModel pagerModel = getPagerModel(namespace);
Map params = new HashMap();
@@ -217,7 +298,9 @@
/* handle pager URL parameters */
if(_pagers != null) {
ArrayList<String> rowValues = new ArrayList<String>();
+/*
ArrayList<String> pageSizes = new ArrayList<String>();
+*/
for(String n : _pagers.keySet()) {
if(n.equals(namespace)) {
if(newRowParamValue != null && newRow != 0)
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java Mon Feb 7 12:35:42 2005
@@ -22,12 +22,13 @@
import java.util.List;
import java.util.Map;
import java.util.Collections;
+import java.util.LinkedHashMap;
import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
import org.apache.beehive.netui.databinding.datagrid.model.filter.DefaultFilter;
import org.apache.beehive.netui.util.logging.Logger;
-/* Beehive filter format: netui_filter=<namespace>~<filterExpr>~<op>~<value> */
+/* Beehive filter format: netui_filter=<namespace>;<fExpr>~<fOp>~<fVal>,<fExpr>~<fOp>~<fVal> */
/**
*
@@ -35,97 +36,92 @@
public final class FilterCodec {
private static final Logger LOGGER = Logger.getInstance(FilterCodec.class);
- private static final String DELIM = "~";
+ private static final String GRID_NAME_DELIM = ";";
+ private static final String FILTER_DELIM = ",";
+ private static final String FILTER_TERM_DELIM = "~";
public String getQueryParamKey() {
- return IFilter.FILTER_PARAM_KEY;
+ return "netui_filter";
}
- public Map<String, Map<String, List<IFilter>>> decode(Map params) {
+ public Map<String, List<IFilter>> decode(Map params) {
String[] queryParams = (String[])params.get(getQueryParamKey());
if(queryParams == null)
return null;
- Map<String, Map<String, List<IFilter>>> map = new HashMap<String, Map<String, List<IFilter>>>();
+ LinkedHashMap<String, List<IFilter>> map = new LinkedHashMap<String, List<IFilter>>();
for(String filterParam : queryParams) {
+ String[] nameAndFilters = filterParam.split(GRID_NAME_DELIM);
- String namespace = null;
- IFilter filter = null;
+ assert nameAndFilters.length == 2;
- String[] terms = filterParam.split(DELIM);
+ String namespace = nameAndFilters[0];
+ String[] filters = nameAndFilters[1].split(FILTER_DELIM);
- namespace = terms[0];
+ ArrayList<IFilter> gridFilters = new ArrayList<IFilter>();
+ for(int i = 0; i < filters.length; i++) {
+ String[] terms = filters[i].split(FILTER_TERM_DELIM);
+ IFilter filter = null;
- /* todo: what did this mean? */
- if(terms.length == 3 && terms[2].equals("*"))
- return null;
- else if(terms.length == 4) {
- try {
- // the namespace is ignored here since all filter terms are scoped into a namespace already
- filter = new DefaultFilter(terms[1], terms[2], terms[3]);
- } catch(NumberFormatException nfe) {
+ if(terms.length == 2 && terms[1].equals("*"))
+ continue;
+ else if(terms.length == 3) {
+ try {
+ // the namespace is ignored here since all filter terms are scoped into a namespace already
+ filter = new DefaultFilter(terms[0], terms[1], terms[2]);
+ } catch(NumberFormatException nfe) {
+ if(LOGGER.isErrorEnabled())
+ LOGGER.error("An error occurred parsing a URL filter with syntax \"" + filter + "\".");
+ continue;
+ }
+ } else {
+ String msg = "The syntax of the filter \"" + filter + "\" is illegal.";
if(LOGGER.isErrorEnabled())
- LOGGER.error("An error occurred parsing a URL filter with syntax \"" + filter + "\".");
+ LOGGER.error(msg);
continue;
}
- } else {
- String msg = "The syntax of the filter \"" + filter + "\" is illegal.";
- if(LOGGER.isErrorEnabled())
- LOGGER.error(msg);
- continue;
- }
- assert filter != null;
-
- Map<String, List<IFilter>> allFilters = map.get(namespace);
- if(allFilters == null) {
- allFilters = new HashMap<String, List<IFilter>>();
- map.put(namespace, allFilters);
- }
+ assert filter != null;
- List<IFilter> filters = allFilters.get(filter.getFilterExpression());
- if(filters == null) {
- filters = new ArrayList<IFilter>();
- allFilters.put(filter.getFilterExpression(), filters);
+ gridFilters.add(filter);
}
-
- filters.add(filter);
+ map.put(namespace, gridFilters);
}
return map;
}
- public Map<String, String[]> encode(String namespace, Map<String, List<IFilter>> allFilters) {
- if(allFilters == null || allFilters.size() == 0)
- return Collections.EMPTY_MAP;
-
- ArrayList<String> filterStrings = new ArrayList<String>();
- for(String filterExpr : allFilters.keySet()) {
- List<IFilter> filters = allFilters.get(filterExpr);
- for(int i = 0; i < filters.size(); i++) {
- StringBuilder builder = new StringBuilder();
- IFilter filter = filters.get(i);
- filterStrings.add(write(builder, namespace, filter));
- }
- }
-
- HashMap<String, String[]> map = new HashMap<String, String[]>();
- map.put(getQueryParamKey(), (String[])filterStrings.toArray(new String[0]));
- return map;
+ public String encode(String namespace, List<IFilter> filters) {
+ return encode(namespace, filters, null);
}
- private String write(StringBuilder sb, String namespace, IFilter filter) {
- assert namespace != null;
- assert filter != null;
+ public String encode(String namespace, List<IFilter> filters, String omitFilterExpression) {
+
+ if(filters == null || filters.size() == 0)
+ return null;
+ boolean filterWritten = false;
+ StringBuilder sb = new StringBuilder();
sb.append(namespace);
- sb.append(DELIM);
- sb.append(filter.getFilterExpression());
- sb.append(DELIM);
- sb.append(filter.getOperationString());
- sb.append(DELIM);
- sb.append(filter.getValue());
+ sb.append(GRID_NAME_DELIM);
+ for(int i = 0; i < filters.size(); i++) {
+ IFilter filter = filters.get(i);
+ if(omitFilterExpression != null && filter.getFilterExpression().equals(omitFilterExpression))
+ continue;
+
+ if(filterWritten)
+ sb.append(FILTER_DELIM);
+
+ sb.append(filter.getFilterExpression());
+ sb.append(FILTER_TERM_DELIM);
+ sb.append(filter.getOperationString());
+ sb.append(FILTER_TERM_DELIM);
+ sb.append(filter.getValue());
+
+ filterWritten = true;
+ }
+
return sb.toString();
}
}
Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java?view=auto&rev=151747
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java (added)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java Mon Feb 7 12:35:42 2005
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.databinding.datagrid.util;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import javax.servlet.jsp.JspContext;
+
+import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.DefaultFilter;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter.FilterOperation;
+
+/**
+ * @netui:jspfunctions
+ */
+public class FilterUtil {
+
+ private static final List<IFilter> DEFAULT_FILTER_LIST;
+ private static final IFilter DEFAULT_FILTER = new DefaultFilter();
+
+ private static final String TYPE_HINT_STRING = "string";
+ private static final String TYPE_HINT_DATE = "date";
+
+ private static final FilterOperation STRING_FILTER_OPERATION = FilterOperation.CONTAINS;
+ private static final FilterOperation OTHER_FILTER_OPERATION = FilterOperation.EQUAL;
+
+ static {
+ DEFAULT_FILTER_LIST = new ArrayList<IFilter>();
+ DEFAULT_FILTER_LIST.add(DEFAULT_FILTER);
+ DEFAULT_FILTER_LIST.add(DEFAULT_FILTER);
+ }
+
+ private FilterUtil() {}
+
+ /**
+ * @param typeHint
+ * @return
+ * @netui:jspfunction name="lookupFilterOperations"
+ * signature="java.util.Map lookupFilterOperations(java.lang.String)"
+ */
+ public static Map lookupFilterOperations(String typeHint) {
+ LinkedHashMap ops = new LinkedHashMap<String, String>();
+
+ /* todo: i18n */
+ ops.put(FilterOperation.NOT_EQUAL.getAbbreviation(), "No Filter");
+ ops.put(FilterOperation.EQUAL.getAbbreviation(), "Equals");
+ ops.put(FilterOperation.NOT_EQUAL.getAbbreviation(), "Not Equal");
+ ops.put(FilterOperation.GREATER_THAN.getAbbreviation(), "Greater Than");
+ ops.put(FilterOperation.LESS_THAN.getAbbreviation(), "Less Than");
+ ops.put(FilterOperation.GREATER_THAN_OR_EQUAL.getAbbreviation(), "Is Greater Than or Equal To");
+ ops.put(FilterOperation.LESS_THAN_OR_EQUAL.getAbbreviation(), "Is Less Than or Equal To");
+
+ if(!typeHint.equals(TYPE_HINT_DATE)) {
+ ops.put(FilterOperation.IS_ONE_OF.getAbbreviation(), "Is One Of (eg: 1;2;3)");
+ }
+
+ if(typeHint == null || typeHint.equals(TYPE_HINT_STRING)) {
+ ops.put(FilterOperation.STARTS_WITH.getAbbreviation(), "Starts With");
+ ops.put(FilterOperation.CONTAINS.getAbbreviation(), "Contains");
+ ops.put(FilterOperation.IS_EMPTY.getAbbreviation(), "Is Empty");
+ ops.put(FilterOperation.IS_NOT_EMPTY.getAbbreviation(), "Is Not Empty");
+ }
+
+ return ops;
+ }
+
+ /**
+ * @param typeHint
+ * @return
+ * @netui:jspfunction name="lookupDefaultFilterOperation"
+ * signature="java.lang.String lookupDefaultFilterOperations(java.lang.String)"
+ */
+ public static String lookupDefaultFilterOperation(String typeHint) {
+ FilterOperation fOp = OTHER_FILTER_OPERATION;
+ if(typeHint == null || typeHint.equals(TYPE_HINT_STRING))
+ fOp = STRING_FILTER_OPERATION;
+
+ return fOp.getAbbreviation();
+ }
+
+ /**
+ * Function that normalizes the data set that is used to render the
+ * filter window UI. This function is needed because the NetUI
+ * tags require that dataSource expressions evaluate to live values
+ * and can't be null.
+ *
+ * @param jspContext
+ * @param attrName
+ * @netui:jspfunction name="ensureFilters"
+ * signature="void ensureFilters(javax.servlet.jsp.JspContext java.lang.String)"
+ */
+ public static void ensureFilters(JspContext jspContext, String attrName) {
+ List<IFilter> filters = (List<IFilter>)jspContext.getAttribute("filters");
+ List<IFilter> pcFilters = new ArrayList<IFilter>();
+
+ if(filters == null || filters.size() == 0)
+ pcFilters = DEFAULT_FILTER_LIST;
+ else if(filters.size() == 1) {
+ pcFilters.add(filters.get(0));
+ pcFilters.add(DEFAULT_FILTER);
+ }
+ else pcFilters = filters;
+
+ assert pcFilters.size() == 2;
+
+ jspContext.setAttribute(attrName, pcFilters);
+ }
+}
Propchange: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java (original)
+++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java Mon Feb 7 12:35:42 2005
@@ -27,6 +27,7 @@
import junit.framework.TestSuite;
import org.apache.beehive.netui.databinding.datagrid.services.filter.FilterCodec;
+import org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
import org.apache.beehive.netui.test.servlet.ServletFactory;
@@ -40,12 +41,11 @@
private ServletRequest _request;
public void testSimpleDecode() {
- DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + "~CUSTOMERNAME~eq~homer");
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + ";CUSTOMERNAME~eq~homer");
FilterCodec codec = new FilterCodec();
- Map<String, Map<String, List<IFilter>>> allFilters = codec.decode(_request.getParameterMap());
- Map<String, List<IFilter>> gridFilters = allFilters.get(_namespace);
- List<IFilter> filters = gridFilters.get("CUSTOMERNAME");
+ Map<String, List<IFilter>> allFilters = codec.decode(_request.getParameterMap());
+ List<IFilter> filters = allFilters.get(_namespace);
assertTrue(filters != null);
assertEquals(1, filters.size());
@@ -55,12 +55,11 @@
}
public void testDecode1() {
- DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + "~CUSTOMERNAME~eq~homer&netui_filter=products~ID~ne~1234");
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + ";CUSTOMERNAME~eq~homer&netui_filter=products;ID~ne~1234");
FilterCodec codec = new FilterCodec();
- Map<String, Map<String, List<IFilter>>> allFilters = codec.decode(_request.getParameterMap());
- Map<String, List<IFilter>> gridFilters = allFilters.get(_namespace);
- List<IFilter> filters = gridFilters.get("CUSTOMERNAME");
+ Map<String, List<IFilter>> allFilters = codec.decode(_request.getParameterMap());
+ List<IFilter> filters = allFilters.get(_namespace);
assertTrue(filters != null);
assertEquals(1, filters.size());
@@ -68,8 +67,7 @@
assertEquals("homer", filters.get(0).getValue());
assertEquals("CUSTOMERNAME", filters.get(0).getFilterExpression());
- gridFilters = allFilters.get("products");
- filters = gridFilters.get("ID");
+ filters = allFilters.get("products");
assertTrue(filters != null);
assertEquals(1, filters.size());
assertEquals(IFilter.FilterOperation.NOT_EQUAL, filters.get(0).getOperation());
@@ -77,25 +75,60 @@
assertEquals("ID", filters.get(0).getFilterExpression());
}
+ public void testDataGridStateService1() {
+ DataGridTestUtil.initQueryString(_request,
+ "netui_filter=" + _namespace + ";ZIP~eq~12345,CUSTOMERNAME~eq~homer&netui_filter=products;ID~ne~1234");
+ DataGridStateService dgss = DataGridStateService.getInstance(_request);
+
+ Map queryParams = null;
+ String[] qp = null;
+
+ queryParams = dgss.getQueryParamsOmitAllFilters(_namespace);
+ assertEquals(1, queryParams.keySet().size());
+ assertNotNull(queryParams.get("netui_filter"));
+ qp = (String[])queryParams.get("netui_filter");
+ assertEquals("products;ID~ne~1234", qp[0]);
+
+ queryParams = dgss.getQueryParamsOmitFilter(_namespace, "CUSTOMERNAME");
+ assertEquals(1, queryParams.keySet().size());
+ qp = (String[])queryParams.get("netui_filter");
+ assertEquals(2, qp.length);
+ }
+
+ public void testDataGridStateService2() {
+ DataGridTestUtil.initQueryString(_request,
+ "netui_filter=" + _namespace + ";ZIP~eq~12345,CUSTOMERNAME~eq~homer&netui_filter=products;ID~ne~1234");
+ DataGridStateService dgss = DataGridStateService.getInstance(_request);
+
+ Map queryParams = null;
+ String[] qp = null;
+
+ queryParams = dgss.getQueryParamsOmitAllFilters(_namespace);
+ assertEquals(1, queryParams.keySet().size());
+ assertNotNull(queryParams.get("netui_filter"));
+ qp = (String[])queryParams.get("netui_filter");
+ assertEquals("products;ID~ne~1234", qp[0]);
+
+ queryParams = dgss.getQueryParamsOmitFilter(_namespace, "CUSTOMERNAME");
+ assertEquals(1, queryParams.keySet().size());
+ qp = (String[])queryParams.get("netui_filter");
+ assertEquals(2, qp.length);
+ assertEquals(_namespace + ";ZIP~eq~12345", qp[0]);
+ assertEquals("products;ID~ne~1234", qp[1]);
+ }
+
public void testEncode1() {
- String customerNameParam = _namespace + "~CUSTOMERNAME~eq~homer";
- DataGridTestUtil.initQueryString(_request, "netui_filter=" + customerNameParam + "&netui_filter=products~ID~ne~1234");
+ String customerNameParam = _namespace + ";CUSTOMERNAME~eq~homer";
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" + customerNameParam + "&netui_filter=products;ID~ne~1234");
FilterCodec codec = new FilterCodec();
- Map<String, Map<String, List<IFilter>>> allFilters = codec.decode(_request.getParameterMap());
- Map<String, List<IFilter>> gridFilters = allFilters.get(_namespace);
-
- Map<String, String[]> queryParams = codec.encode(_namespace, gridFilters);
- String[] params = queryParams.get(codec.getQueryParamKey());
+ Map<String, List<IFilter>> allFilters = codec.decode(_request.getParameterMap());
+ List<IFilter> gridFilters = allFilters.get(_namespace);
- assertNotNull(queryParams);
- assertNotNull(queryParams.get(codec.getQueryParamKey()));
- assertEquals(1, params.length);
- assertEquals(customerNameParam, params[0]);
- }
+ String filterQueryValue = codec.encode(_namespace, gridFilters);
- private ServletRequest getRequest() {
- return _request;
+ assertNotNull(filterQueryValue);
+ assertEquals(customerNameParam, filterQueryValue);
}
protected void setUp() {
Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java?view=diff&r1=151746&r2=151747
==============================================================================
--- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java (original)
+++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java Mon Feb 7 12:35:42 2005
@@ -43,7 +43,7 @@
private String _namespace = "bugs";
public void testSortModelSimple() {
- DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + "~CUSTOMERNAME~eq~homer&netui_filter=products~ID~ne~1234");
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" + _namespace + ";CUSTOMERNAME~eq~homer&netui_filter=products;ID~ne~1234");
DataGridStateService dgss = DataGridStateService.getInstance(_request);
FilterModel fm = dgss.getFilterModel(_namespace);