svn commit: r153816 [1/2] - in incubator/beehive/trunk/netui: src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/filter/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sort/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/ 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/services/pager/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/ src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ test/src/junitTests/org/apache/beehive/netui/test/datagrid/ test/webapps/drt/coreWeb/WEB-INF/tags/org/apache/beehive/netui/test/databinding/tagfiles/

14 Feb 2005 18:05:28 -0000

Author: ekoneil
Date: Mon Feb 14 10:05:13 2005
New Revision: 153816

URL: http://svn.apache.org/viewcvs?view=rev&rev=153816
Log:
Cleanup some data grid APIs.

- remove IFilter and replace with Filter concrete class
- remove ISort and replace with Sort concrete class
- add a FilterOperation concrete class
- add a FilterOperationHint enum that provides some context to the operation 
that FilterOperation actually represents.  For example, a FilterOperation can 
be marked as "equals" now.
- move the publically exposed / stable APIs into datagrid/api
- move the internal APIs into datagrid/runtime
- delete a bunch of unused stuff

BB: self
DRT: NetUI pass / datagrid pass
BVT: NetUI pass


Added:
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/Filter.java
      - copied, changed from r153679, 
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/api/filter/FilterModel.java
      - copied, changed from r153679, 
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/api/filter/FilterOperation.java
   (with props)
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/PagerModel.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/Sort.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/DefaultSort.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java
   (with props)
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortModel.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
   (with props)
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java
   (with props)
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java
      - copied, changed from r153679, 
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/runtime/codec/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/FilterCodec.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/pager/PagerCodec.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java
      - copied, changed from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/filter/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sort/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java
   (with props)
Removed:
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java
    
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/sort/DefaultSort.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/ISort.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.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/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/pager/
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/
Modified:
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PagerRenderer.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlTableCell.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java
    
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.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
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerCodecTest.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerRendererTest.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java
    
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java
    
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/tags/org/apache/beehive/netui/test/databinding/tagfiles/jumpToPage.tag

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/Filter.java
 (from r153679, 
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/api/filter/Filter.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/DefaultFilter.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/Filter.java&r2=153816
==============================================================================
--- 
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/api/filter/Filter.java
 Mon Feb 14 10:05:13 2005
@@ -15,28 +15,21 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.model.filter;
-
-import 
org.apache.beehive.netui.databinding.datagrid.exceptions.IllegalFilterException;
+package org.apache.beehive.netui.databinding.datagrid.api.filter;
 
 /**
  *
  */
-public class DefaultFilter
-    implements IFilter {
+public class Filter {
 
     private String _filterExpression;
     private FilterOperation _filterOperation;
     private Object _value;
 
-    public DefaultFilter() {
-    }
-
-    public DefaultFilter(String filterExpression, String filterOperation, 
Object value) {
-        this(filterExpression, mapStringToInt(filterOperation), value);
+    public Filter() {
     }
 
-    public DefaultFilter(String filterExpression, FilterOperation 
filterOperation, Object value) {
+    public Filter(String filterExpression, FilterOperation filterOperation, 
Object value) {
         this();
 
         _filterExpression = filterExpression;
@@ -66,18 +59,5 @@
 
     public Object getValue() {
         return _value;
-    }
-
-    public String getOperationString() {
-        return _filterOperation != null ? _filterOperation.getAbbreviation() : 
"";
-    }
-
-    private static final FilterOperation mapStringToInt(String operation) {
-        for(FilterOperation fOp : FilterOperation.values()) {
-            if(fOp.getAbbreviation().equals(operation))
-                return fOp;
-        }
-
-        throw new IllegalFilterException("Can not map the operation name \"" + 
operation + "\" to a filter operation");
     }
 }

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterModel.java
 (from r153679, 
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/api/filter/FilterModel.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/filter/FilterModel.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterModel.java&r2=153816
==============================================================================
--- 
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/api/filter/FilterModel.java
 Mon Feb 14 10:05:13 2005
@@ -15,37 +15,30 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.model.filter;
+package org.apache.beehive.netui.databinding.datagrid.api.filter;
 
 import java.util.ArrayList;
 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;
 
 /**
  *
  */
 public class FilterModel {
 
-    private String _namespace = null;
-    private List<IFilter> _filters = null;
+    private List<Filter> _filters = null;
 
-    public FilterModel(String name, List<IFilter> filters) {
-        _namespace = name;
+    public FilterModel(List<Filter> filters) {
         _filters = filters;
     }
 
-    public List<IFilter> getFilters() {
+    public List<Filter> getFilters() {
         if(_filters == null)
             return null;
         else return Collections.unmodifiableList(_filters);
     }
 
-    public List<IFilter> getFilters(String filterExpression) {
+    public List<Filter> getFilters(String filterExpression) {
         if(_filters == null)
             return null;
         else return 
Collections.unmodifiableList(lookupFilters(filterExpression));
@@ -60,13 +53,13 @@
         else return false;
     }
 
-    private List<IFilter> lookupFilters(String filterExpression) {
+    private List<Filter> lookupFilters(String filterExpression) {
         assert filterExpression != null;
         assert !filterExpression.equals("");
 
         /* todo: perf.  need to do this with FilterModelArrayList */
-        ArrayList<IFilter> filters = new ArrayList<IFilter>();
-        for(IFilter filter : _filters) {
+        ArrayList<Filter> filters = new ArrayList<Filter>();
+        for(Filter filter : _filters) {
             if(filter.getFilterExpression().equals(filterExpression))
                 filters.add(filter);
         }

Added: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterOperation.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterOperation.java?view=auto&rev=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterOperation.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterOperation.java
 Mon Feb 14 10:05:13 2005
@@ -0,0 +1,53 @@
+/*
+ * 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.api.filter;
+
+/**
+ *
+ */
+public class FilterOperation {
+
+    private int _id;
+    private String _abbreviation;
+    private String _resourceKey;
+
+    private FilterOperationHint _operationHint;
+
+    public FilterOperation(int id, String abbreviation, String resourceKey, 
FilterOperationHint operationHint) {
+        _id = id;
+        _abbreviation = abbreviation;
+        _operationHint = operationHint;
+        _resourceKey = resourceKey;
+    }
+
+    public int getId() {
+        return _id;
+    }
+
+    public String getAbbreviation() {
+        return _abbreviation;
+    }
+
+    public String getResourceKey() {
+        return _resourceKey;
+    }
+
+    public FilterOperationHint getOperationHint() {
+        return _operationHint;
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/filter/FilterOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/PagerModel.java
 (from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/PagerModel.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/PagerModel.java&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/pager/PagerModel.java
 Mon Feb 14 10:05:13 2005
@@ -15,7 +15,7 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.model;
+package org.apache.beehive.netui.databinding.datagrid.api.pager;
 
 /**
  *

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/Sort.java
 (from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/DefaultSort.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/Sort.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/DefaultSort.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/Sort.java&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/DefaultSort.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/Sort.java
 Mon Feb 14 10:05:13 2005
@@ -15,23 +15,22 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.model.sort;
+package org.apache.beehive.netui.databinding.datagrid.api.sort;
 
 /**
  *
  */
-public class DefaultSort
-    implements ISort {
+public class Sort {
 
     private String _sortExpression;
     private SortDirection _sortDirection;
 
-    public DefaultSort() {
-        super();
+    public Sort() {
     }
 
-    public DefaultSort(String sortExpression, SortDirection sortDirection) {
+    public Sort(String sortExpression, SortDirection sortDirection) {
         this();
+        
         _sortExpression = sortExpression;
         _sortDirection = sortDirection;
     }

Added: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java?view=auto&rev=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java
 Mon Feb 14 10:05:13 2005
@@ -0,0 +1,32 @@
+/*
+ * 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.api.sort;
+
+/**
+ */
+public enum SortDirection {
+    ASCENDING, DESCENDING, NONE;
+
+    public SortDirection flipDirection() {
+        if(this == SortDirection.ASCENDING)
+            return SortDirection.DESCENDING;
+        else if(this == SortDirection.DESCENDING)
+            return SortDirection.ASCENDING;
+        else return SortDirection.ASCENDING;
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortDirection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortModel.java
 (from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortModel.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortModel.java&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/sort/SortModel.java
 Mon Feb 14 10:05:13 2005
@@ -15,27 +15,23 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.model.sort;
+package org.apache.beehive.netui.databinding.datagrid.api.sort;
 
 import java.util.List;
 import java.util.Collections;
 
-import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
-
 /**
  *
  */
 public class SortModel {
 
-    private String _name = null;
-    private List<ISort> _sorts = null;
+    private List<Sort> _sorts = null;
 
-    public SortModel(String name, List<ISort> sorts) {
-        _name = name;
+    public SortModel(List<Sort> sorts) {
         _sorts = sorts;
     }
 
-    public List<ISort> getSorts() {
+    public List<Sort> getSorts() {
         if(_sorts != null)
             return Collections.unmodifiableList(_sorts);
         else return null;
@@ -52,7 +48,7 @@
     }
 
     public boolean isSorted(String sortExpression) {
-        ISort term = findSort(sortExpression);
+        Sort term = findSort(sortExpression);
         if(term == null || term.getDirection() == SortDirection.NONE)
             return false;
         else
@@ -60,28 +56,14 @@
     }
 
     public SortDirection getSortDirection(String sortExpression) {
-        ISort term = findSort(sortExpression);
+        Sort term = findSort(sortExpression);
         return term == null ? SortDirection.NONE : term.getDirection();
     }
 
-    public boolean removeSort(String sortExpression) {
-        ISort term = findSort(sortExpression);
-        if(term != null) {
-            _sorts.remove(term);
-            return true;
-        } else
-            return false;
-    }
-
-    public void addSort(String sortExpression, SortDirection sortDirection) {
-        DefaultSort sort = new DefaultSort(sortExpression, sortDirection);
-        _sorts.add(sort);
-    }
-
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("SortModel:\n");
-        for(ISort sort : _sorts) {
+        for(Sort sort : _sorts) {
             sb.append("\t");
             sb.append(sort.toString());
             sb.append("\n");
@@ -89,11 +71,11 @@
         return sb.toString();
     }
 
-    private ISort findSort(String sortExpression) {
+    private Sort findSort(String sortExpression) {
         if(_sorts == null)
             return null;
 
-        for(ISort sort : _sorts) {
+        for(Sort sort : _sorts) {
             if(sort.getSortExpression().equals(sortExpression))
                 return sort;
         }

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java
 Mon Feb 14 10:05:13 2005
@@ -17,33 +17,33 @@
  */
 package org.apache.beehive.netui.databinding.datagrid.model;
 
-import java.util.ResourceBundle;
 import java.util.Map;
-import java.text.MessageFormat;
 import javax.servlet.jsp.JspContext;
-import javax.servlet.jsp.PageContext;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.beehive.netui.databinding.datagrid.model.style.StylePolicy;
-import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
-import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
-import org.apache.beehive.netui.databinding.datagrid.model.filter.FilterModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.table.TableRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.PagerRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.PreviousNextPagerRenderer;
+import 
org.apache.beehive.netui.databinding.datagrid.runtime.DataGridURLService;
+import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
 import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
 import 
org.apache.beehive.netui.databinding.datagrid.util.DataGridResourceProvider;
-import 
org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
-import org.apache.beehive.netui.util.Bundle;
 
 /**
  *
  */
 public class DataGridModel {
 
+    /*
+      todo: refactor.
+      need a DataGridURL type that hides URL keys / creation.
+     */
     public static final int START_RENDER_STATE = 10;
     public static final int CAPTION_RENDER_STATE = 20;
     public static final int GRID_RENDER_STATE = 30;
@@ -58,8 +58,9 @@
     private PagerRenderer _pagerRenderer = null;
     private PagedDataSet _dataSet = null;
     private TableRenderer _tableRenderer = null;
-    private DataGridStateService _dgss = null;
+    private DataGridURLService _dgss = null;
     private DataGridResourceProvider _resourceProvider = null;
+    private DataGridState _dataGridState = null;
 
     private JspContext _jspContext = null;
     private HttpServletRequest _request = null;
@@ -67,10 +68,13 @@
     public DataGridModel(JspContext jspContext, String name, PagedDataSet 
dataSet) {
         super();
 
+        /* todo: refactor. this assembly could should be externalized */
         _name = name;
         _jspContext = jspContext;
         _dataSet = dataSet;
-        _dgss = DataGridStateService.getInstance(jspContext);
+        _dgss = DataGridURLService.getInstance(jspContext);
+        _dataGridState = _dgss.getDataGridState(name);
+        _dataGridState.getPagerModel().setDataSetSize(_dataSet.getSize());
 
         _request = JspUtil.getRequest(_jspContext);
 
@@ -185,13 +189,18 @@
         appender.append(getPagerRenderer().render());
     }
 
+    /* -------------------------------------------------------------
+
+       Move these methods to a DataGridURL class.
+
+       ------------------------------------------------------------- */
 
     public Map buildSortQueryParamsMap() {
         return _dgss.buildSortQueryParamsMap(_name);
     }
 
     public Map<String, String[]> getSortQueryParamsMap(String sortExpression) {
-        SortModel sortModel = _dgss.getSortModel(_name);
+        SortModel sortModel = _dataGridState.getSortModel();
         SortDirection sortDirection = 
sortModel.getSortDirection(sortExpression);
 
         if(sortDirection == SortDirection.NONE)
@@ -203,18 +212,8 @@
         else throw new IllegalStateException("Received invalid sort direction 
\"" + sortDirection + "\"");
     }
 
-    public SortModel getSortModel() {
-        return _dgss.getSortModel(_name);
-    }
-
-    public FilterModel getFilterModel() {
-        return _dgss.getFilterModel(_name);
-    }
-
-    public PagerModel getPagerModel() {
-        PagerModel pm = _dgss.getPagerModel(_name);
-        pm.setDataSetSize(_dataSet.getSize());
-        return pm;
+    public DataGridState getDataGridState() {
+        return _dataGridState;
     }
 
     public Map getQueryParamsForFirstPage() {

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java
 Mon Feb 14 10:05:13 2005
@@ -32,8 +32,8 @@
 import org.apache.beehive.netui.databinding.datagrid.model.CellModel;
 import 
org.apache.beehive.netui.databinding.datagrid.model.cell.HeaderCellModel;
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
-import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
-import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
 import org.apache.beehive.netui.util.logging.Logger;
 
@@ -72,7 +72,7 @@
         DataGridModel dgm = cellModel.getDataGridModel();
         assert dgm != null;
 
-        SortModel sortModel = dgm.getSortModel();
+        SortModel sortModel = dgm.getDataGridState().getSortModel();
 
         StringBuilder builder = new StringBuilder();
         AbstractRenderAppender appender = new 
StringBuilderRenderAppender(builder);

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java
 Mon Feb 14 10:05:13 2005
@@ -17,9 +17,8 @@
  */
 package org.apache.beehive.netui.databinding.datagrid.rendering.pager;
 
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
-import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 
 /**
  * 

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PagerRenderer.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PagerRenderer.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PagerRenderer.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PagerRenderer.java
 Mon Feb 14 10:05:13 2005
@@ -20,14 +20,12 @@
 import java.util.Map;
 import java.net.URISyntaxException;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.jsp.PageContext;
 
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
 import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecoratorException;
-import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.tags.rendering.AnchorTag;
 import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
@@ -59,7 +57,7 @@
         assert gridModel != null;
 
         _gridModel = gridModel;
-        _pagerModel = _gridModel.getPagerModel();
+        _pagerModel = _gridModel.getDataGridState().getPagerModel();
         _request = JspUtil.getRequest(_gridModel.getJspContext());
         _anchorTag = 
TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, _request);
     }

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java
 Mon Feb 14 10:05:13 2005
@@ -17,9 +17,8 @@
  */
 package org.apache.beehive.netui.databinding.datagrid.rendering.pager;
 
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
-import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 
 public class PreviousNextPagerRenderer
     extends PagerRenderer {

Added: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java?view=auto&rev=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
 Mon Feb 14 10:05:13 2005
@@ -0,0 +1,56 @@
+/*
+ * 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.runtime;
+
+import org.apache.beehive.netui.databinding.datagrid.api.filter.FilterModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
+
+/**
+ *
+ */
+public class DataGridState {
+
+    private FilterModel _filterModel;
+    private SortModel _sortModel;
+    private PagerModel _pagerModel;
+
+    public SortModel getSortModel() {
+        return _sortModel;
+    }
+
+    public void setSortModel(SortModel sortModel) {
+        _sortModel = sortModel;
+    }
+
+    public FilterModel getFilterModel() {
+        return _filterModel;
+    }
+
+    public void setFilterModel(FilterModel filterModel) {
+        _filterModel = filterModel;
+    }
+
+    public PagerModel getPagerModel() {
+        return _pagerModel;
+    }
+
+    public void setPagerModel(PagerModel pagerModel) {
+        _pagerModel = pagerModel;
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java?view=auto&rev=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java
 Mon Feb 14 10:05:13 2005
@@ -0,0 +1,35 @@
+/*
+ * 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.runtime;
+
+import javax.servlet.ServletRequest;
+
+/**
+ *
+ */
+public class DataGridStateFactory {
+
+    private DataGridStateFactory() {
+    }
+
+    public static Object instantiate(ServletRequest request, Class type) {
+        if(type == DataGridState.class)
+            return new DataGridState();
+        else throw new IllegalArgumentException("Could not find a factory for 
type \"" + type + "\"");
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridStateFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java
 (from r153679, 
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/runtime/DataGridURLService.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java&r2=153816
==============================================================================
--- 
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/runtime/DataGridURLService.java
 Mon Feb 14 10:05:13 2005
@@ -15,7 +15,7 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.services;
+package org.apache.beehive.netui.databinding.datagrid.runtime;
 
 import java.util.Map;
 import java.util.List;
@@ -26,15 +26,15 @@
 import javax.servlet.jsp.JspContext;
 import javax.servlet.jsp.PageContext;
 
-import org.apache.beehive.netui.databinding.datagrid.model.sort.ISort;
-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;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.Sort;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.FilterModel;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.Filter;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.runtime.codec.SortCodec;
+import org.apache.beehive.netui.databinding.datagrid.runtime.codec.FilterCodec;
+import org.apache.beehive.netui.databinding.datagrid.runtime.codec.PagerCodec;
 
 /**
  * A DataGridStateService is an object that is shared between all data grids
@@ -46,44 +46,55 @@
  * The DataGridStateService is scoped to a single ServletRequest and is
  * able to cache the ServletRequest object itself.
  */
-public class DataGridStateService {
+public class DataGridURLService {
+
+    /*
+        todo: this class isn't right yet...
+        requirements:
+          - URLs that are *cheap* to construct
+          - each data grid is responsible for its own URL state
+          - Sort / Filter objects can be constructed for each grid
+     */
 
     private static final int FIRST_PAGE = 0;
 
-    private static final String KEY = DataGridStateService.class.getName() + 
"REQUEST_KEY";
+    private static final String KEY = DataGridURLService.class.getName() + 
"REQUEST_KEY";
     private static final String EMPTY_STRING = "";
 
-    public static DataGridStateService getInstance(JspContext jspContext) {
+    public static DataGridURLService getInstance(JspContext jspContext) {
         assert jspContext instanceof PageContext;
 
         return getInstance(((PageContext)jspContext).getRequest());
     }
 
-    public static DataGridStateService getInstance(ServletRequest request) {
+    public static DataGridURLService getInstance(ServletRequest request) {
         Object obj = request.getAttribute(KEY);
         if(obj != null) {
-            assert obj instanceof DataGridStateService;
+            assert obj instanceof DataGridURLService;
 
-            return (DataGridStateService)obj;
+            return (DataGridURLService)obj;
         } else {
-            DataGridStateService dgss = new DataGridStateService(request);
+            DataGridURLService dgss = new DataGridURLService(request);
             request.setAttribute(KEY, dgss);
             return dgss;
         }
     }
 
+    private ServletRequest _request = null;
     private Map _urlParams = null;
+    private HashMap<String, DataGridState> _state = null;
 
+    /* start: need to delete these */
     private SortCodec _sortCodec = null;
-    private Map<String, List<ISort>> _sorts = null;
-
+    private Map<String, List<Sort>> _sorts = null;
     private PagerCodec _pagerCodec = null;
     private Map<String, PagerModel> _pagers = null;
-
     private FilterCodec _filterCodec = null;
-    private Map<String, List<IFilter>> _filters = null;
+    private Map<String, List<Filter>> _filters = null;
+    /* end: need to delete these */
 
-    private DataGridStateService(ServletRequest request) {
+    private DataGridURLService(ServletRequest request) {
+        _request = request;
         _urlParams = request.getParameterMap();
 
         _sortCodec = new SortCodec();
@@ -94,30 +105,28 @@
 
         _filterCodec = new FilterCodec();
         _filters = _filterCodec.decode(_urlParams);
-    }
 
-    public String getPagerRowQueryParamKey() {
-        return _pagerCodec.getRowQueryParamKey();
+        _state = new HashMap<String, DataGridState>();
     }
 
-    public PagerModel getPagerModel(String namespace) {
-        PagerModel pm = _pagers.get(namespace);
-        if(pm == null) {
-            pm = new PagerModel();
-            _pagers.put(namespace, pm);
-        }
+    public DataGridState getDataGridState(String name) {
+        if(name == null || name.equals(""))
+            throw new IllegalArgumentException("Unable to create data grid 
state for invalid name: " + name);
 
-        return pm;
-    }
+        DataGridState dgs = _state.get(name);
+        if(dgs == null) {
+            dgs = (DataGridState)DataGridStateFactory.instantiate(_request, 
DataGridState.class);
+            dgs.setPagerModel(getPagerModel(name));
+            dgs.setFilterModel(new FilterModel(getFilters(name)));
+            dgs.setSortModel(new SortModel(getSorts(name)));
+            _state.put(name, dgs);
+        }
 
-    public SortModel getSortModel(String namespace) {
-        /* todo: caching */
-        return new SortModel(namespace, getSorts(namespace));
+        return dgs;
     }
 
-    public FilterModel getFilterModel(String namespace) {
-        /* todo: caching */
-        return new FilterModel(namespace, getFilters(namespace));
+    public String getPagerRowQueryParamKey() {
+        return _pagerCodec.getRowQueryParamKey();
     }
 
     /* --------------------------------------------------
@@ -126,7 +135,7 @@
 
        -------------------------------------------------- */
     public Map buildSortQueryParamsMap(String namespace) {
-        List<ISort> sorts = getSorts(namespace);
+        List<Sort> sorts = getSorts(namespace);
 
         if(sorts == null)
             return buildQueryParamMap_sort(null, null);
@@ -140,9 +149,9 @@
         assert sortExpression != null;
         assert sortDirection != null;
 
-        List<ISort> sorts = getSorts(namespace);
+        List<Sort> sorts = getSorts(namespace);
         String sortParamValue = null;
-        boolean isSorted = getSortModel(namespace).isSorted(sortExpression);
+        boolean isSorted = 
getDataGridState(namespace).getSortModel().isSorted(sortExpression);
         if(sorts != null) {
             sortParamValue = _sortCodec.encode(namespace, sorts, 
sortExpression, sortDirection, isSorted);
         } else if(sortDirection != SortDirection.NONE && !isSorted) {
@@ -169,22 +178,22 @@
     }
 
     public Map getQueryParamsForPreviousPage(String namespace) {
-        PagerModel pagerModel = getPagerModel(namespace);
+        PagerModel pagerModel = getDataGridState(namespace).getPagerModel();
         return buildQueryParamMap_pager(namespace, 
pagerModel.getPreviousPage());
     }
 
     public Map getQueryParamsForNextPage(String namespace) {
-        PagerModel pagerModel = getPagerModel(namespace);
+        PagerModel pagerModel = getDataGridState(namespace).getPagerModel();
         return buildQueryParamMap_pager(namespace, pagerModel.getNextPage());
     }
 
     public Map getQueryParamsForLastPage(String namespace) {
-        PagerModel pagerModel = getPagerModel(namespace);
+        PagerModel pagerModel = getDataGridState(namespace).getPagerModel();
         return buildQueryParamMap_pager(namespace, pagerModel.getLastPage());
     }
 
     public String[] getPagerParamValues(String namespace) {
-        PagerModel pagerModel = getPagerModel(namespace);
+        PagerModel pagerModel = getDataGridState(namespace).getPagerModel();
 
         String[] params = new String[pagerModel.getLastPage() + 1];
 
@@ -222,7 +231,7 @@
         if(_filters != null) {
             ArrayList filterList = new ArrayList();
             for(String curNamespace : _filters.keySet()) {
-                List<IFilter> filters = _filters.get(curNamespace);
+                List<Filter> filters = _filters.get(curNamespace);
 
                  filterList.add(_filterCodec.encode(curNamespace, filters, 
filterExpression));
             }
@@ -253,7 +262,7 @@
                 if(curNamespace.equals(namespace))
                     continue;
 
-                List<IFilter> filters = _filters.get(curNamespace);
+                List<Filter> filters = _filters.get(curNamespace);
                 String filterParamValue = _filterCodec.encode(curNamespace, 
filters);
                 filterList.add(filterParamValue);
             }
@@ -269,14 +278,14 @@
 
        -------------------------------------------------- */
 
-    private List<ISort> getSorts(String namespace) {
+    private List<Sort> getSorts(String namespace) {
         if(_sorts != null)
             return _sorts.get(namespace);
         else
             return null;
     }
 
-    private List<IFilter> getFilters(String namespace) {
+    private List<Filter> getFilters(String namespace) {
         if(_filters != null)
             return _filters.get(namespace);
         else return null;
@@ -360,5 +369,15 @@
             params.put(_sortCodec.getQueryParamKey(), new String[] 
{paramValue});
 
         return params;
+    }
+
+    private PagerModel getPagerModel(String namespace) {
+        PagerModel pm = _pagers.get(namespace);
+        if(pm == null) {
+            pm = new PagerModel();
+            _pagers.put(namespace, pm);
+        }
+
+        return pm;
     }
 }

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/FilterCodec.java
 (from r153679, 
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/runtime/codec/FilterCodec.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/filter/FilterCodec.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/FilterCodec.java&r2=153816
==============================================================================
--- 
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/runtime/codec/FilterCodec.java
 Mon Feb 14 10:05:13 2005
@@ -15,17 +15,16 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.services.filter;
+package org.apache.beehive.netui.databinding.datagrid.runtime.codec;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Collections;
+import java.util.List;
 import java.util.LinkedHashMap;
+import java.util.ArrayList;
 
-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.api.filter.Filter;
+import 
org.apache.beehive.netui.databinding.datagrid.api.filter.FilterOperation;
+import 
org.apache.beehive.netui.databinding.datagrid.runtime.sql.SQLFilterService;
 import org.apache.beehive.netui.util.logging.Logger;
 
 /* Beehive filter format: 
netui_filter=<namespace>;<fExpr>~<fOp>~<fVal>,<fExpr>~<fOp>~<fVal> */
@@ -44,13 +43,13 @@
         return "netui_filter";
     }
 
-    public Map<String, List<IFilter>> decode(Map params) {
+    public Map<String, List<Filter>> decode(Map params) {
         String[] queryParams = (String[])params.get(getQueryParamKey());
 
         if(queryParams == null)
             return null;
 
-        LinkedHashMap<String, List<IFilter>> map = new LinkedHashMap<String, 
List<IFilter>>();
+        LinkedHashMap<String, List<Filter>> map = new LinkedHashMap<String, 
List<Filter>>();
 
         for(String filterParam : queryParams) {
             String[] nameAndFilters = filterParam.split(GRID_NAME_DELIM);
@@ -60,17 +59,18 @@
             String namespace = nameAndFilters[0];
             String[] filters = nameAndFilters[1].split(FILTER_DELIM);
 
-            ArrayList<IFilter> gridFilters = new ArrayList<IFilter>();
+            ArrayList<Filter> gridFilters = new ArrayList<Filter>();
             for(int i = 0; i < filters.length; i++) {
                 String[] terms = filters[i].split(FILTER_TERM_DELIM);
-                IFilter filter = null;
+                Filter filter = null;
 
                 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]);
+                        /* todo: refactor.  need to map String to 
FilterOperation */
+                        FilterOperation fOp = 
SQLFilterService.mapStringToOperation(terms[1]);
+                        filter = new Filter(terms[0], fOp, terms[2]);
                     } catch(NumberFormatException nfe) {
                         if(LOGGER.isErrorEnabled())
                             LOGGER.error("An error occurred parsing a URL 
filter with syntax \"" + filter + "\".");
@@ -92,11 +92,11 @@
         return map;
     }
 
-    public String encode(String namespace, List<IFilter> filters) {
+    public String encode(String namespace, List<Filter> filters) {
         return encode(namespace, filters, null);
     }
 
-    public String encode(String namespace, List<IFilter> filters, String 
omitFilterExpression) {
+    public String encode(String namespace, List<Filter> filters, String 
omitFilterExpression) {
 
         if(filters == null || filters.size() == 0)
             return null;
@@ -106,7 +106,7 @@
         sb.append(namespace);
         sb.append(GRID_NAME_DELIM);
         for(int i = 0; i < filters.size(); i++) {
-            IFilter filter = filters.get(i);
+            Filter filter = filters.get(i);
             if(omitFilterExpression != null && 
filter.getFilterExpression().equals(omitFilterExpression))
                 continue;
 
@@ -115,7 +115,7 @@
 
             sb.append(filter.getFilterExpression());
             sb.append(FILTER_TERM_DELIM);
-            sb.append(filter.getOperationString());
+            sb.append(filter.getOperation().getAbbreviation());
             sb.append(FILTER_TERM_DELIM);
             sb.append(filter.getValue());
 

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java
 (from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/pager/PagerCodec.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/pager/PagerCodec.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/pager/PagerCodec.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java
 Mon Feb 14 10:05:13 2005
@@ -15,13 +15,13 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.services.pager;
+package org.apache.beehive.netui.databinding.datagrid.runtime.codec;
 
 import java.util.Map;
 import java.util.HashMap;
 
 import org.apache.beehive.netui.util.logging.Logger;
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 
 /**
  *

Copied: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java
 (from r153679, 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java?view=diff&rev=153816&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java&r1=153679&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java
 Mon Feb 14 10:05:13 2005
@@ -15,16 +15,15 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.services.sort;
+package org.apache.beehive.netui.databinding.datagrid.runtime.codec;
 
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.HashMap;
 
-import org.apache.beehive.netui.databinding.datagrid.model.sort.ISort;
-import org.apache.beehive.netui.databinding.datagrid.model.sort.DefaultSort;
-import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.Sort;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
 
 /**
  *
@@ -37,17 +36,17 @@
     private static final String SORT_TERM_DELIM = ",";
 
     public String getQueryParamKey() {
-        return ISort.SORT_PARAM_KEY;
+        return "netui_sort";
     }
 
-    public Map<String, List<ISort>> decode(Map params) {
+    public Map<String, List<Sort>> decode(Map params) {
 
         String[] queryParams = (String[])params.get(getQueryParamKey());
 
         if(queryParams == null)
             return null;
 
-        Map<String, List<ISort>> map = new HashMap<String, List<ISort>>();
+        Map<String, List<Sort>> map = new HashMap<String, List<Sort>>();
 
         for(String sortParam : queryParams) {
             String[] terms = sortParam.split(SORT_DELIM);
@@ -59,7 +58,7 @@
             // two columns of the bugs grid would be sorted as:
             //
             // netui_sort=bugs~id,-priority
-            ArrayList<ISort> sorts = new ArrayList<ISort>();
+            ArrayList<Sort> sorts = new ArrayList<Sort>();
             String[] cols = terms[1].split(SORT_TERM_DELIM);
             for(String sortExpr : cols) {
                 SortDirection sortDirection = SortDirection.NONE;
@@ -68,8 +67,7 @@
                 else sortDirection = SortDirection.ASCENDING;
                 String sortExpression = (sortDirection == 
SortDirection.DESCENDING ? sortExpr.substring(1) : sortExpr);
 
-                /* todo: pluggability */
-                ISort sort = new DefaultSort(sortExpression, sortDirection);
+                Sort sort = new Sort(sortExpression, sortDirection);
 
                 sorts.add(sort);
             }
@@ -81,22 +79,22 @@
         return map;
     }
 
-    public String encode(String namespace, List<ISort> sorts) {
+    public String encode(String namespace, List<Sort> sorts) {
         return buildSortParamValue(namespace, sorts, null, null, false);
     }
 
-    public String encode(String namespace, List<ISort> sorts, String 
sortExpression, SortDirection sortDirection, boolean isSorted) {
+    public String encode(String namespace, List<Sort> sorts, String 
sortExpression, SortDirection sortDirection, boolean isSorted) {
         return buildSortParamValue(namespace, sorts, sortExpression, 
sortDirection, isSorted);
     }
 
-    private String buildSortParamValue(String namespace, List<ISort> sorts, 
String sortExpression, SortDirection sortDirection, boolean isSorted) {
+    private String buildSortParamValue(String namespace, List<Sort> sorts, 
String sortExpression, SortDirection sortDirection, boolean isSorted) {
         StringBuilder sb = new StringBuilder();
         sb.append(namespace);
         sb.append("~");
 
         boolean hasTerms = false;
         for(int i = 0; i < sorts.size(); i++) {
-            ISort sort = sorts.get(i);
+            Sort sort = sorts.get(i);
 
             if(sortExpression != null && 
sortExpression.equals(sort.getSortExpression())) {
                 if(sortDirection != SortDirection.NONE) {

Added: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java?view=auto&rev=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java
 Mon Feb 14 10:05:13 2005
@@ -0,0 +1,184 @@
+/*
+ * 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.runtime.sql;
+
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import 
org.apache.beehive.netui.databinding.datagrid.api.filter.FilterOperation;
+import 
org.apache.beehive.netui.databinding.datagrid.api.filter.FilterOperationHint;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.Filter;
+import 
org.apache.beehive.netui.databinding.datagrid.exceptions.IllegalFilterException;
+
+/**
+ * @netui:jspfunctions
+ */
+public class SQLFilterService {
+
+    private static final String EMPTY_STRING = "";
+    private static final FilterOperation[] FILTER_OPERATIONS;
+
+    static {
+        FILTER_OPERATIONS = new FilterOperation[] {
+            new FilterOperation(0, "*", "filter.sql.none.", 
FilterOperationHint.NONE),
+            new FilterOperation(1, "eq", "filter.sql.equal", 
FilterOperationHint.EQUAL),
+            new FilterOperation(2, "ne", "filter.sql.notequal", 
FilterOperationHint.NOT_EQUAL),
+            new FilterOperation(3, "gt", "filter.sql.greaterthan", 
FilterOperationHint.GREATER_THAN),
+            new FilterOperation(4, "lt", "filter.sql.lessthan", 
FilterOperationHint.LESS_THAN),
+            new FilterOperation(5, "ge", "filter.sql.greaterthanorequal", 
FilterOperationHint.GREATER_THAN_OR_EQUAL),
+            new FilterOperation(6, "le", "filter.sql.lessthanorequal", 
FilterOperationHint.LESS_THAN_OR_EQUAL),
+            new FilterOperation(7, "in", "filter.sql.isoneof", 
FilterOperationHint.IS_ONE_OF),
+            new FilterOperation(8, "startswith", "filter.sql.startswith", 
FilterOperationHint.STARTS_WITH),
+            new FilterOperation(9, "contains", "filter.sql.contains", 
FilterOperationHint.CONTAINS),
+            new FilterOperation(10, "isempty", "filter.sql.isempty", 
FilterOperationHint.IS_EMPTY),
+            new FilterOperation(11, "isnotempty", "filter.sql.isnotempty", 
FilterOperationHint.IS_NOT_EMPTY)
+        };
+    }
+
+    private static final String TYPE_HINT_STRING = "string";
+    private static final String TYPE_HINT_DATE = "date";
+
+    private static final FilterOperation STRING_FILTER_OPERATION = 
FILTER_OPERATIONS[9];
+    private static final FilterOperation OTHER_FILTER_OPERATION = 
FILTER_OPERATIONS[1];
+
+    private SQLFilterService() {}
+
+    /**
+     * @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(FILTER_OPERATIONS[0].getAbbreviation(), "No Filter");
+        ops.put(FILTER_OPERATIONS[1].getAbbreviation(), "Equals");
+        ops.put(FILTER_OPERATIONS[2].getAbbreviation(), "Not Equal");
+        ops.put(FILTER_OPERATIONS[3].getAbbreviation(), "Greater Than");
+        ops.put(FILTER_OPERATIONS[4].getAbbreviation(), "Less Than");
+        ops.put(FILTER_OPERATIONS[5].getAbbreviation(), "Is Greater Than or 
Equal To");
+        ops.put(FILTER_OPERATIONS[6].getAbbreviation(), "Is Less Than or Equal 
To");
+
+        if(!typeHint.equals(TYPE_HINT_DATE)) {
+            ops.put(FILTER_OPERATIONS[7].getAbbreviation(), "Is One Of (eg: 
1;2;3)");
+        }
+
+        if(typeHint == null || typeHint.equals(TYPE_HINT_STRING)) {
+            ops.put(FILTER_OPERATIONS[8].getAbbreviation(), "Starts With");
+            ops.put(FILTER_OPERATIONS[9].getAbbreviation(), "Contains");
+            ops.put(FILTER_OPERATIONS[10].getAbbreviation(), "Is Empty");
+            ops.put(FILTER_OPERATIONS[11].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();
+    }
+
+    public String createWhereFragment(List<Filter> filters) {
+        if(filters == null || filters.size() == 0)
+            return EMPTY_STRING;
+
+        StringBuilder sb = new StringBuilder(64);
+        internalCreateWhereFragment(sb, filters);
+        return sb.toString();
+    }
+
+    public String createWhereClause(List<Filter> filters) {
+        if(filters == null || filters.size() == 0)
+            return EMPTY_STRING;
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("WHERE ");
+        internalCreateWhereFragment(sb, filters);
+        return sb.toString();
+    }
+
+    public static final FilterOperation mapStringToOperation(String abbrev) {
+        for(FilterOperation fOp : FILTER_OPERATIONS) {
+            if(fOp.getAbbreviation().equals(abbrev))
+                return fOp;
+        }
+        return null;
+    }
+
+    private void internalCreateWhereFragment(StringBuilder sb, List<Filter> 
filters) {
+
+        for(int i = 0; i < filters.size(); i++) {
+            Filter filter = filters.get(i);
+
+            /* todo: pluggable conjunctions AND and OR here */
+            if(i > 0)
+                sb.append(" AND ");
+
+            sb.append(filter.getFilterExpression());
+            FilterOperation op = filter.getOperation();
+            sb.append(" ");
+
+            /* todo: need to map the ID to an operator in a 
filter-implementation specific way */
+            sb.append(mapIdToOperator(op));
+            sb.append(" ");
+
+            /* todo: handling type hints and quoting */
+            sb.append("\"");
+            sb.append(filter.getValue());
+            sb.append("\"");
+        }
+    }
+
+    private String mapIdToOperator(FilterOperation op) {
+        if(op.getOperationHint() == FilterOperationHint.EQUAL)
+            return "=";
+        else if(op.getOperationHint() == FilterOperationHint.NOT_EQUAL)
+            return "!=";
+        else if(op.getOperationHint() == FilterOperationHint.GREATER_THAN)
+            return ">";
+        else if(op.getOperationHint() == FilterOperationHint.LESS_THAN)
+            return "<";
+        else if(op.getOperationHint() == 
FilterOperationHint.GREATER_THAN_OR_EQUAL)
+            return ">=";
+        else if(op.getOperationHint() == 
FilterOperationHint.LESS_THAN_OR_EQUAL)
+            return "<=";
+        else if(op.getOperationHint() == FilterOperationHint.IS_ONE_OF)
+            return "NYI";
+        else if(op.getOperationHint() == FilterOperationHint.STARTS_WITH)
+            return "NYI";
+        else if(op.getOperationHint() == FilterOperationHint.CONTAINS)
+            return "NYI";
+        else if(op.getOperationHint() == FilterOperationHint.IS_EMPTY)
+            return "NYI";
+        else if(op.getOperationHint() == FilterOperationHint.IS_NOT_EMPTY)
+            return "NYI";
+        else throw new IllegalFilterException("Can not create a SQL statement 
from the unknown filter operation " + op);
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLFilterService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
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=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/FilterUtil.java
 Mon Feb 14 10:05:13 2005
@@ -19,30 +19,20 @@
 
 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;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.Filter;
 
 /**
  * @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;
+    private static final List<Filter> DEFAULT_FILTER_LIST;
+    private static final Filter DEFAULT_FILTER = new Filter();
 
     static {
-        DEFAULT_FILTER_LIST = new ArrayList<IFilter>();
+        DEFAULT_FILTER_LIST = new ArrayList<Filter>();
         DEFAULT_FILTER_LIST.add(DEFAULT_FILTER);
         DEFAULT_FILTER_LIST.add(DEFAULT_FILTER);
     }
@@ -50,52 +40,6 @@
     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
@@ -107,8 +51,8 @@
      *                    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>();
+        List<Filter> filters = 
(List<Filter>)jspContext.getAttribute("filters");
+        List<Filter> pcFilters = new ArrayList<Filter>();
 
         if(filters == null || filters.size() == 0)
             pcFilters = DEFAULT_FILTER_LIST;

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlTableCell.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlTableCell.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlTableCell.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlTableCell.java
 Mon Feb 14 10:05:13 2005
@@ -24,8 +24,8 @@
 import javax.servlet.jsp.JspException;
 
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
-import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.table.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
 import org.apache.beehive.netui.tags.IAttributeConsumer;
 import org.apache.beehive.netui.tags.html.HtmlConstants;
 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
@@ -283,7 +283,7 @@
 
         /* todo: extensibility in supporting style decorators */
         ArrayList<String> styleClasses = new ArrayList<String>();
-        SortModel sortModel = dataGridModel.getSortModel();
+        SortModel sortModel = dataGridModel.getDataGridState().getSortModel();
         if(sortModel.isSorted(_sortExpression))
             
styleClasses.add(dataGridModel.getStylePolicy().getDataCellSortedClass());
 

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java
 Mon Feb 14 10:05:13 2005
@@ -21,12 +21,12 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.PagerRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.FirstPreviousNextLastPagerRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.PreviousNextPagerRenderer;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
 import 
org.apache.beehive.netui.databinding.datagrid.exceptions.DataGridExtensionException;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.util.logging.Logger;
 
@@ -114,7 +114,7 @@
         DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
         assert dgm != null;
 
-        PagerModel pm = dgm.getPagerModel();
+        PagerModel pm = dgm.getDataGridState().getPagerModel();
         assert pm != null;
 
         PagerRenderer pagerRenderer = null;

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java
 Mon Feb 14 10:05:13 2005
@@ -28,12 +28,12 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
-import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.model.style.StylePolicy;
 import 
org.apache.beehive.netui.databinding.datagrid.model.style.DefaultStylePolicy;
 import 
org.apache.beehive.netui.databinding.datagrid.model.style.EmptyStylePolicy;
 import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.table.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.script.common.IDataAccessProvider;
 import org.apache.beehive.netui.script.common.DataAccessProviderStack;
 import org.apache.beehive.netui.tags.ExpressionHandling;
@@ -176,7 +176,7 @@
             fragment.invoke(sw);
 
             /* todo: this needs to move into the DataGridModel */
-            PagerModel pm = _gridModel.getPagerModel();
+            PagerModel pm = _gridModel.getDataGridState().getPagerModel();
             _gridModel.getDataSet().createWindow(pm.getRow(), pm.getRow() + 
pm.getPageSize());
 
             /* now that the model objects have been initialized, it's time to 
start rendering */

Modified: 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java?view=diff&r1=153815&r2=153816
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
 Mon Feb 14 10:05:13 2005
@@ -31,12 +31,12 @@
 import 
org.apache.beehive.netui.databinding.datagrid.model.cell.HeaderCellModel;
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.model.CellModel;
-import org.apache.beehive.netui.databinding.datagrid.model.sort.SortModel;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecorator;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.cell.HeaderCellDecorator;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.cell.SortedCellDecorator;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.table.TableRenderer;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
 import org.apache.beehive.netui.util.Bundle;
 
 /**
@@ -47,16 +47,20 @@
     extends AbstractCell
     implements IAttributeConsumer {
 
+    private static final String TAG_NAME = "HeaderCell";
+
     private static final String FACET_HEADER_NAME = "header";
     private static final String FACET_RENDERER_NAME = "renderer";
-    private static final String FACET_RENDERER_NAME_NEW = "extends";
+    private static final String FACET_RENDERER_NAME_DEFAULT = "default";
+    private static final String FACET_RENDERER_NAME_SORT = "sort";
+    private static final String FACET_RENDERER_NAME_EXTENDS = "extends";
 
-    private static final CellDecorator DEFAULT_HEADER_RENDERER;
-    private static final CellDecorator SORTED_HEADER_RENDERER;
+    private static final CellDecorator DECORATOR_HEADER_DEFAULT;
+    private static final CellDecorator DECORATOR_HEADER_SORTED;
 
     static {
-        DEFAULT_HEADER_RENDERER = new HeaderCellDecorator();
-        SORTED_HEADER_RENDERER = new 
SortedCellDecorator(DEFAULT_HEADER_RENDERER);
+        DECORATOR_HEADER_DEFAULT = new HeaderCellDecorator();
+        DECORATOR_HEADER_SORTED = new 
SortedCellDecorator(DECORATOR_HEADER_DEFAULT);
     }
 
     private String _headerText = null;
@@ -65,7 +69,7 @@
     private CellDecorator _cellDecorator = null;
 
     public String getTagName() {
-        return "HeaderCell";
+        return TAG_NAME;
     }
 
     /**
@@ -356,13 +360,22 @@
         }
         else if(facet != null && facet.equals(FACET_RENDERER_NAME)) {
             /* provides a way to extend the existing decorators */
-            if(name.equals(FACET_RENDERER_NAME_NEW)) {
+            if(name.equals(FACET_RENDERER_NAME_EXTENDS)) {
                 CellDecorator cellDecorator = 
(CellDecorator)DataGridUtil.instantiateClass(value, CellDecorator.class);
                 cellDecorator.setNestedDecorator(getCellDecorator());
                 _cellDecorator = cellDecorator;
                 return;
             }
-            /* todo: provide a way to override the existing decorators 
(core/sorted/etc) */
+            else if(name.equals(FACET_RENDERER_NAME_SORT)) {
+                CellDecorator cellDecorator = 
(CellDecorator)DataGridUtil.instantiateClass(value, CellDecorator.class);
+                cellDecorator.setNestedDecorator(DECORATOR_HEADER_SORTED);
+                _cellDecorator = cellDecorator;
+            }
+            /* replace the core cell decorator with a new default */
+            else if(name.equals(FACET_RENDERER_NAME_DEFAULT)) {
+                CellDecorator cellDecorator = 
(CellDecorator)DataGridUtil.instantiateClass(value, CellDecorator.class);
+                _cellDecorator = cellDecorator;
+            }
         }
 
         String s = Bundle.getString("Tags_AttributeFacetNotSupported", new 
Object[]{facet});
@@ -383,7 +396,7 @@
         assert tableRenderer != null;
 
         ArrayList<String> styleClasses = new ArrayList<String>();
-        SortModel sortModel = dataGridModel.getSortModel();
+        SortModel sortModel = dataGridModel.getDataGridState().getSortModel();
         if(sortModel.isSorted(_headerCellModel.getSortExpression()))
             
styleClasses.add(dataGridModel.getStylePolicy().getHeaderCellSortedClass());
 
@@ -453,8 +466,8 @@
         if(_cellDecorator != null)
             return _cellDecorator;
         else {
-            assert SORTED_HEADER_RENDERER != null;
-            return SORTED_HEADER_RENDERER;
+            assert DECORATOR_HEADER_SORTED != null;
+            return DECORATOR_HEADER_SORTED;
         }
     }
 }


Reply via email to