Author: ekoneil
Date: Sun Jan 30 14:15:58 2005
New Revision: 149169
URL: http://svn.apache.org/viewcvs?view=rev&rev=149169
Log:
Move the data grid filter support over to the codec model.
This moves the FilterModel to the FilterCodec and adds a test of the same.
BB: self
DRT: NetUI pass
Added:
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
- copied, changed from r149151,
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterService.java
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
(with props)
Removed:
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterService.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/IllegalFilterException.java
Modified:
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
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=149168&r2=149169
==============================================================================
---
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
Sun Jan 30 14:15:58 2005
@@ -82,21 +82,8 @@
return _value;
}
- public String getOperationText() {
- return _filterOperation.toString();
- }
-
- public String write(String namespace) {
- assert namespace != null;
- StringBuilder buf = new StringBuilder();
- buf.append(namespace);
- buf.append("\texpression: ");
- buf.append(getFilterExpression());
- buf.append("\toperation: ");
- buf.append(getOperation());
- buf.append("\tvalue: ");
- buf.append(getValue());
- return buf.toString();
+ public String getOperationString() {
+ return FILTER_TO_STRING.get(_filterOperation);
}
private static final FilterOperation mapStringToInt(String 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=149168&r2=149169
==============================================================================
---
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
Sun Jan 30 14:15:58 2005
@@ -23,7 +23,7 @@
import java.util.HashMap;
import javax.servlet.ServletRequest;
-import
org.apache.beehive.netui.databinding.datagrid.services.filter.FilterService;
+import
org.apache.beehive.netui.databinding.datagrid.services.filter.FilterCodec;
/**
*
@@ -38,18 +38,6 @@
_namespace = name;
}
- public void handleRequest(ServletRequest request) {
- FilterService filterService = FilterService.getInstance(request,
_namespace);
- _filters = filterService.getFilters();
- }
-
- public String getFilterParamKey() {
- if(_filterParamKey == null)
- return IFilter.FILTER_PARAM_KEY;
- else
- return _filterParamKey;
- }
-
public List<IFilter> getFilters(String filterExpression) {
if(_filters == null)
return null;
@@ -66,65 +54,6 @@
return true;
} else
return false;
- }
-
- /**
- * Build a map of query parameters that represent all filters available
- * in a data grid.
- *
- * @return
- */
- public Map<String, String[]> getFilterParamsMap() {
- return buildFilterParamsMapInternal(null);
- }
-
- public void removeFilters(String filterExpression) {
- if(_filters == null)
- return;
-
- _filters.remove(filterExpression);
- }
-
- public void removeAllFilters() {
- if(_filters == null)
- return;
-
- _filters.clear();
- }
-
- public void addFilters(IFilter[] filters) {
- throw new UnsupportedOperationException("NYI");
- }
-
- public void removeFilters(IFilter[] filters) {
- throw new UnsupportedOperationException("NYI");
- }
-
- public String toString() {
- throw new UnsupportedOperationException("NYI");
- }
-
- private Map<String, String[]> buildFilterParamsMapInternal(String
omitFilterExpression) {
- if(_filters == null)
- return null;
-
- ArrayList<String> params = new ArrayList<String>();
- for(String filterExpr : _filters.keySet()) {
- assert filterExpr != null;
-
- if(omitFilterExpression != null &&
filterExpr.equals(omitFilterExpression))
- continue;
-
- List<IFilter> filters = _filters.get(filterExpr);
- assert filters != null;
- for(IFilter filter : filters) {
- params.add(filter.write(_namespace));
- }
- }
-
- HashMap<String, String[]> map = new HashMap<String, String[]>();
- map.put(getFilterParamKey(), params.toArray(new String[0]));
- return map;
}
private List<IFilter> lookupFilters(String filterExpression) {
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=149168&r2=149169
==============================================================================
---
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
Sun Jan 30 14:15:58 2005
@@ -48,9 +48,9 @@
void setOperation(FilterOperation operation);
+ String getOperationString();
+
Object getValue();
void setValue(Object value);
-
- String write(String namespace);
}
Copied:
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
(from r149151,
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterService.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&rev=149169&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterService.java&r1=149151&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java&r2=149169
==============================================================================
---
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterService.java
(original)
+++
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
Sun Jan 30 14:15:58 2005
@@ -21,9 +21,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.JspContext;
+import java.util.Collections;
import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
import
org.apache.beehive.netui.databinding.datagrid.model.filter.DefaultFilter;
@@ -34,92 +32,95 @@
/**
*
*/
-public class FilterService {
+public final class FilterCodec {
- private static final Logger LOGGER =
Logger.getInstance(FilterService.class);
- private static final String FILTER_DELIM = "~";
+ private static final Logger LOGGER = Logger.getInstance(FilterCodec.class);
+ private static final String DELIM = "~";
- public static FilterService getInstance(JspContext jspContext, String
namespace) {
- if(jspContext instanceof PageContext) {
- ServletRequest request = ((PageContext)jspContext).getRequest();
- return getInstance(request, namespace);
- } else
- throw new IllegalArgumentException("Can not create a FilterService
from a JspContext of type " +
- (jspContext != null ? jspContext.getClass().getName() :
"null"));
+ public String getQueryParamKey() {
+ return IFilter.FILTER_PARAM_KEY;
}
- public static FilterService getInstance(ServletRequest request, String
namespace) {
- return new FilterService(request, namespace);
- }
+ public Map<String, List<IFilter>> decode(Map params) {
+ String[] queryParams = (String[])params.get(getQueryParamKey());
- private String _namespace = null;
- private HashMap<String, List<IFilter>> _filters = null;
- private ServletRequest _request = null;
-
- private FilterService(ServletRequest request, String namespace) {
- super();
- _request = request;
- _namespace = namespace;
- _filters = internalGetFilters();
- }
+ if(queryParams == null)
+ return null;
- public Map<String, List<IFilter>> getFilters() {
- return _filters;
- }
+ Map<String, List<IFilter>> map = new HashMap<String, List<IFilter>>();
- private HashMap<String, List<IFilter>> internalGetFilters() {
- String[] filters =
_request.getParameterValues(IFilter.FILTER_PARAM_KEY);
- return createFilters(_namespace, filters);
- }
+ for(String filterParam : queryParams) {
- private static final HashMap<String, List<IFilter>> createFilters(String
namespace, String[] queryParams) {
- if(queryParams == null) return null;
+ String namespace = null;
+ IFilter filter = null;
- HashMap<String, List<IFilter>> map = new HashMap<String,
List<IFilter>>();
- for(int i = 0; i < queryParams.length; i++) {
- /* todo: need to make this pluggable */
- if(!queryParams[i].startsWith(namespace + "~"))
- continue;
+ String[] terms = filterParam.split(DELIM);
- IFilter f = parse(namespace, queryParams[i]);
+ namespace = terms[0];
+
+ /* 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(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(msg);
+ continue;
+ }
- assert f != null;
+ assert filter != null;
- List<IFilter> list = map.get(f.getFilterExpression());
+ List<IFilter> list = map.get(namespace);
if(list == null) {
list = new ArrayList<IFilter>();
- map.put(f.getFilterExpression(), list);
+ map.put(namespace, list);
}
- list.add(f);
+ list.add(filter);
}
return map;
}
- private static final IFilter parse(String namespace, String filter) {
+ public Map encode(String namespace, List<IFilter> filters) {
+ HashMap params = new HashMap();
- /* todo: need to figure out how to handle this case */
- if(!filter.startsWith(namespace))
- return null;
+ if(filters == null || filters.size() == 0)
+ return Collections.EMPTY_MAP;
- // crack filter terms here
- String[] terms = filter.split(FILTER_DELIM);
+ StringBuilder builder = null;
+ String[] strFilters = new String[filters.size()];
+ for(int i = 0; i < filters.size(); i++) {
+ builder = new StringBuilder();
+ IFilter filter = filters.get(i);
+ strFilters[i] = write(builder, namespace, filter);
+ }
- /* 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
- DefaultFilter f = new DefaultFilter(terms[1], terms[2],
terms[3]);
- return f;
- } catch(NumberFormatException nfe) {
- if(LOGGER.isErrorEnabled())
- LOGGER.error("An error occurred parsing a URL filter with
syntax \"" + filter + "\".");
- throw new IllegalFilterException("An exception occurred
parsing the filter \"" + filter + "\". Cause: " + nfe, nfe);
- }
- } else
- throw new IllegalFilterException("The syntax of the filter \"" +
filter + "\" is illegal.");
+ HashMap<String, String[]> map = new HashMap<String, String[]>();
+ map.put(getQueryParamKey(), strFilters);
+ return map;
+ }
+
+ private String write(StringBuilder sb, String namespace, IFilter filter) {
+ assert namespace != null;
+ assert filter != null;
+
+ sb.append(namespace);
+ sb.append(DELIM);
+ sb.append(filter.getFilterExpression());
+ sb.append(DELIM);
+ sb.append(filter.getOperationString());
+ sb.append(DELIM);
+ sb.append(filter.getValue());
+ return sb.toString();
}
}
Added:
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=auto&rev=149169
==============================================================================
---
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
(added)
+++
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
Sun Jan 30 14:15:58 2005
@@ -0,0 +1,116 @@
+/*
+ * 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.test.datagrid;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletRequest;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import
org.apache.beehive.netui.databinding.datagrid.services.filter.FilterCodec;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
+import org.apache.beehive.netui.test.servlet.ServletFactory;
+
+/**
+ *
+ */
+public class FilterCodecTest
+ extends TestCase {
+
+ private String _namespace = "customers";
+ private ServletRequest _request;
+
+ public void testSimpleDecode() {
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" +
_namespace + "~CUSTOMERNAME~eq~homer");
+ FilterCodec codec = new FilterCodec();
+
+ Map<String, List<IFilter>> allFilters =
codec.decode(_request.getParameterMap());
+ List<IFilter> filters = allFilters.get(_namespace);
+
+ assertTrue(filters != null);
+ assertEquals(1, filters.size());
+ assertEquals(IFilter.FilterOperation.EQUAL,
filters.get(0).getOperation());
+ assertEquals("homer", filters.get(0).getValue());
+ assertEquals("CUSTOMERNAME", filters.get(0).getFilterExpression());
+ }
+
+ public void testDecode1() {
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" +
_namespace + "~CUSTOMERNAME~eq~homer&netui_filter=products~ID~ne~1234");
+ FilterCodec codec = new FilterCodec();
+
+ Map<String, List<IFilter>> allFilters =
codec.decode(_request.getParameterMap());
+ List<IFilter> filters = allFilters.get(_namespace);
+
+ assertTrue(filters != null);
+ assertEquals(1, filters.size());
+ assertEquals(IFilter.FilterOperation.EQUAL,
filters.get(0).getOperation());
+ assertEquals("homer", filters.get(0).getValue());
+ assertEquals("CUSTOMERNAME", filters.get(0).getFilterExpression());
+
+ filters = allFilters.get("products");
+ assertTrue(filters != null);
+ assertEquals(1, filters.size());
+ assertEquals(IFilter.FilterOperation.NOT_EQUAL,
filters.get(0).getOperation());
+ assertEquals("1234", filters.get(0).getValue());
+ assertEquals("ID", filters.get(0).getFilterExpression());
+ }
+
+ public void testEncode1() {
+ String customerNameParam = _namespace + "~CUSTOMERNAME~eq~homer";
+ DataGridTestUtil.initQueryString(_request, "netui_filter=" +
customerNameParam + "&netui_filter=products~ID~ne~1234");
+ FilterCodec codec = new FilterCodec();
+
+ Map<String, List<IFilter>> allFilters =
codec.decode(_request.getParameterMap());
+
+ Map<String, String[]> queryParams = codec.encode(_namespace,
allFilters.get(_namespace));
+ String[] params = queryParams.get(codec.getQueryParamKey());
+
+ assertNotNull(queryParams);
+ assertNotNull(queryParams.get(codec.getQueryParamKey()));
+ assertEquals(1, params.length);
+ assertEquals(customerNameParam, params[0]);
+ }
+
+ private ServletRequest getRequest() {
+ return _request;
+ }
+
+ protected void setUp() {
+ _request = ServletFactory.getServletRequest();
+ }
+
+ protected void tearDown() {
+ _request = null;
+ }
+
+ public FilterCodecTest(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+ return new TestSuite(FilterCodecTest.class);
+ }
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
+}
\ No newline at end of file
Propchange:
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterCodecTest.java
------------------------------------------------------------------------------
svn:eol-style = native