Author: ekoneil
Date: Tue Feb  1 07:56:39 2005
New Revision: 149411

URL: http://svn.apache.org/viewcvs?view=rev&rev=149411
Log:
Rebuild filter support in the codec / model way that sort and paging are built.

Add / update tests for the filter codec and filter model.

BB: self
DRT: NetUI pass


Added:
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java
   (with props)
Modified:
    
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/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

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=149410&r2=149411
==============================================================================
--- 
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
 Tue Feb  1 07:56:39 2005
@@ -31,11 +31,11 @@
 public class FilterModel {
 
     private String _namespace = null;
-    private String _filterParamKey = null;
     private Map<String, List<IFilter>> _filters = null;
 
-    public FilterModel(String name) {
+    public FilterModel(String name, Map<String, List<IFilter>> filters) {
         _namespace = name;
+        _filters = filters;
     }
 
     public List<IFilter> getFilters(String filterExpression) {
@@ -49,20 +49,16 @@
         if(_filters == null)
             return false;
 
-        if(_filters.containsKey(filterExpression)) {
-            assert _filters.get(filterExpression).size() > 0;
+        if(_filters.containsKey(filterExpression) && 
lookupFilters(filterExpression).size() > 0)
             return true;
-        } else
-            return false;
+        else return false;
     }
 
     private List<IFilter> lookupFilters(String filterExpression) {
         assert filterExpression != null;
         assert !filterExpression.equals("");
 
-        if(_filters == null)
-            return null;
-
-        return _filters.get(filterExpression);
+        List<IFilter> filters = _filters.get(filterExpression);
+        return filters;
     }
 }

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=149410&r2=149411
==============================================================================
--- 
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
 Tue Feb  1 07:56:39 2005
@@ -30,8 +30,11 @@
 import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
 import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
 import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.FilterModel;
 import org.apache.beehive.netui.databinding.datagrid.services.sort.SortCodec;
 import org.apache.beehive.netui.databinding.datagrid.services.pager.PagerCodec;
+import 
org.apache.beehive.netui.databinding.datagrid.services.filter.FilterCodec;
 
 /**
  * A DataGridStateService is an object that is shared between all data grids
@@ -77,6 +80,9 @@
     private PagerCodec _pagerCodec = null;
     private Map<String, PagerModel> _pagers = null;
 
+    private FilterCodec _filterCodec = null;
+    private Map<String, Map<String, List<IFilter>>> _filters = null;
+
     private DataGridStateService(ServletRequest request) {
         _urlParams = request.getParameterMap();
 
@@ -85,11 +91,9 @@
 
         _pagerCodec = new PagerCodec();
         _pagers = _pagerCodec.decode(_urlParams);
-    }
 
-    public SortModel getSortModel(String namespace) {
-        /* todo: caching */
-        return new SortModel(namespace, getSorts(namespace));
+        _filterCodec = new FilterCodec();
+        _filters = _filterCodec.decode(_urlParams);
     }
 
     public PagerModel getPagerModel(String namespace) {
@@ -102,11 +106,14 @@
         return pm;
     }
 
-    private List<ISort> getSorts(String namespace) {
-        if(_sorts != null)
-            return _sorts.get(namespace);
-        else
-            return null;
+    public SortModel getSortModel(String namespace) {
+        /* todo: caching */
+        return new SortModel(namespace, getSorts(namespace));
+    }
+
+    public FilterModel getFilterModel(String namespace) {
+        /* todo: caching */
+        return new FilterModel(namespace, getFilters(namespace));
     }
 
     public Map buildSortQueryParamsMap(String namespace) {
@@ -181,6 +188,19 @@
         return _pagerCodec.getRowQueryParamKey();
     }
 
+    private List<ISort> getSorts(String namespace) {
+        if(_sorts != null)
+            return _sorts.get(namespace);
+        else
+            return null;
+    }
+
+    private Map<String, 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();

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=149410&r2=149411
==============================================================================
--- 
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
 Tue Feb  1 07:56:39 2005
@@ -41,13 +41,13 @@
         return IFilter.FILTER_PARAM_KEY;
     }
 
-    public Map<String, List<IFilter>> decode(Map params) {
+    public Map<String, Map<String, List<IFilter>>> decode(Map params) {
         String[] queryParams = (String[])params.get(getQueryParamKey());
 
         if(queryParams == null)
             return null;
 
-        Map<String, List<IFilter>> map = new HashMap<String, List<IFilter>>();
+        Map<String, Map<String, List<IFilter>>> map = new HashMap<String, 
Map<String, List<IFilter>>>();
 
         for(String filterParam : queryParams) {
 
@@ -79,34 +79,39 @@
 
             assert filter != null;
 
-            List<IFilter> list = map.get(namespace);
-            if(list == null) {
-                list = new ArrayList<IFilter>();
-                map.put(namespace, list);
+            Map<String, List<IFilter>> allFilters = map.get(namespace);
+            if(allFilters == null) {
+                allFilters = new HashMap<String, List<IFilter>>();
+                map.put(namespace, allFilters);
             }
 
-            list.add(filter);
-        }
+            List<IFilter> filters = 
allFilters.get(filter.getFilterExpression());
+            if(filters == null) {
+                filters = new ArrayList<IFilter>();
+                allFilters.put(filter.getFilterExpression(), filters);
+            }
 
+            filters.add(filter);
+        }
         return map;
     }
 
-    public Map encode(String namespace, List<IFilter> filters) {
-        HashMap params = new HashMap();
-
-        if(filters == null || filters.size() == 0)
+    public Map<String, String[]> encode(String namespace, Map<String, 
List<IFilter>> allFilters) {
+        if(allFilters == null || allFilters.size() == 0)
             return Collections.EMPTY_MAP;
 
-        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);
+        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(), strFilters);
+        map.put(getQueryParamKey(), (String[])filterStrings.toArray(new 
String[0]));
         return map;
     }
 

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=149410&r2=149411
==============================================================================
--- 
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
 Tue Feb  1 07:56:39 2005
@@ -43,8 +43,9 @@
         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);
+        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");
 
         assertTrue(filters != null);
         assertEquals(1, filters.size());
@@ -57,8 +58,9 @@
         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);
+        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");
 
         assertTrue(filters != null);
         assertEquals(1, filters.size());
@@ -66,7 +68,8 @@
         assertEquals("homer", filters.get(0).getValue());
         assertEquals("CUSTOMERNAME", filters.get(0).getFilterExpression());
 
-        filters = allFilters.get("products");
+        gridFilters = allFilters.get("products");
+        filters = gridFilters.get("ID");
         assertTrue(filters != null);
         assertEquals(1, filters.size());
         assertEquals(IFilter.FilterOperation.NOT_EQUAL, 
filters.get(0).getOperation());
@@ -79,9 +82,10 @@
         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, Map<String, List<IFilter>>> allFilters = 
codec.decode(_request.getParameterMap());
+        Map<String, List<IFilter>> gridFilters = allFilters.get(_namespace);
 
-        Map<String, String[]> queryParams = codec.encode(_namespace, 
allFilters.get(_namespace));
+        Map<String, String[]> queryParams = codec.encode(_namespace, 
gridFilters);
         String[] params = queryParams.get(codec.getQueryParamKey());
 
         assertNotNull(queryParams);

Added: 
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=auto&rev=149411
==============================================================================
--- 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java
 (added)
+++ 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/FilterModelTest.java
 Tue Feb  1 07:56:39 2005
@@ -0,0 +1,85 @@
+/*
+ * 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.http.HttpServletRequest;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import 
org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
+import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.model.sort.ISort;
+import org.apache.beehive.netui.databinding.datagrid.model.filter.FilterModel;
+import 
org.apache.beehive.netui.databinding.datagrid.model.filter.IFilter.FilterOperation;
+import org.apache.beehive.netui.test.servlet.ServletFactory;
+
+/**
+ *
+ */
+public class FilterModelTest
+    extends TestCase {
+
+    private HttpServletRequest _request = null;
+    private String _namespace = "bugs";
+
+    public void testSortModelSimple() {
+        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);
+
+        assertNotNull(fm);
+        assertNotNull(fm.getFilters("CUSTOMERNAME"));
+        assertTrue(fm.isFiltered("CUSTOMERNAME"));
+        assertEquals(FilterOperation.EQUAL, 
fm.getFilters("CUSTOMERNAME").get(0).getOperation());
+
+        fm = dgss.getFilterModel("products");
+        assertNotNull(fm);
+        assertNotNull(fm.getFilters("ID"));
+        assertTrue(fm.isFiltered("ID"));
+        assertEquals(FilterOperation.NOT_EQUAL, 
fm.getFilters("ID").get(0).getOperation());
+    }
+
+    public void testSortModelSimple2() {
+        DataGridTestUtil.initQueryString(_request, "foo=bar");
+    }
+
+    protected void setUp() {
+        _request = ServletFactory.getServletRequest();
+    }
+
+    protected void tearDown() {
+        _request = null;
+    }
+
+    public FilterModelTest(String name) {
+        super(name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(FilterModelTest.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/FilterModelTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to