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


Reply via email to