Author: ekoneil
Date: Fri Jan 21 14:26:34 2005
New Revision: 125974

URL: http://svn.apache.org/viewcvs?view=rev&rev=125974
Log:
Data grid state management might be closer to right now.  :)

Now, there's a Codec that handles encode / decode of the URL parameters.  This 
is used by a DataGridStateService, which parses the URL once for all grids and 
is stored in the request.  This can then return a SortModel which provides an 
API for dealing with sorts for a specific grid.

BB: self
DRT: NetUI pass


Added:
   
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java
      - copied, changed from r125927, 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java
Removed:
   
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridState.java
   
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortFactory.java
   
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortService.java
   
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java
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/model/sort/SortModel.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/tags/databinding/datagrid/DataGrid.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/SortModelTest.java

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&rev=125974&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r1=125973&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r2=125974
==============================================================================
--- 
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
   Fri Jan 21 14:26:34 2005
@@ -18,15 +18,18 @@
 package org.apache.beehive.netui.databinding.datagrid.model;
 
 import java.util.ResourceBundle;
+import java.util.Map;
 import javax.servlet.jsp.JspContext;
 import javax.servlet.jsp.PageContext;
 
 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.rendering.table.TableRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.IPagerRenderer;
 import 
org.apache.beehive.netui.databinding.datagrid.rendering.pager.PreviousNextPagerRenderer;
 import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
+import 
org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 import org.apache.beehive.netui.util.Bundle;
 
@@ -51,8 +54,8 @@
     private PagerModel _pagerModel = null;
     private PagedDataSet _dataSet = null;
     private TableRenderer _tableRenderer = null;
-    private DataGridState _dataGridState = null;
     private ResourceBundle _resourceBundle = null;
+    private DataGridStateService _dgss = null;
 
     private JspContext _jspContext = null;
 
@@ -63,6 +66,7 @@
         _jspContext = jspContext;
         _dataSet = dataSet;
         _pagerModel = new PagerModel(this);
+        _dgss = DataGridStateService.getInstance(jspContext);
     }
 
     public String getName() {
@@ -140,7 +144,7 @@
     public void setResourceBundlePath(String resourceBundlePath) {
         _resourceBundlePath = resourceBundlePath;
     }
-
+/*
     public DataGridState getDataGridState() {
         if(_dataGridState == null)
             _dataGridState = 
DataGridState.createInstance(((PageContext)_jspContext).getRequest(), 
getName());
@@ -151,7 +155,7 @@
     public void setDataGridState(DataGridState dataGridState) {
         _dataGridState = dataGridState;
     }
-
+*/
     public String getString(String key) {
         if(_resourceBundlePath == null)
             return Bundle.getString(key);
@@ -189,13 +193,35 @@
     public String getDefaultSortImagePath(String contextPath) {
         /* todo: need to allow external configuration of this image path */
         return contextPath + "/resources/images/sortable.gif";
-    }    
+    }
 
     public void renderPager(AbstractRenderAppender appender) {
         assert getPagerRenderer() != null : "Received a null PagerRenderer";
         appender.append(getPagerRenderer().render());
     }
 
+    public Map buildSortQueryParamsMap() {
+        return _dgss.buildSortQueryParamsMap(_name);
+    }
+
+    public Map<String, String[]> getSortQueryParamsMap(String sortExpression) {
+        SortModel sortModel = _dgss.getSortModel(_name);
+        SortDirection sortDirection = 
sortModel.getSortDirection(sortExpression);
+
+        if(sortDirection == SortDirection.NONE)
+            return buildSortQueryParamsMap(sortExpression, 
SortDirection.ASCENDING);
+        else if(sortDirection == SortDirection.ASCENDING)
+            return buildSortQueryParamsMap(sortExpression, 
SortDirection.DESCENDING);
+        else if(sortDirection == SortDirection.DESCENDING)
+            return buildSortQueryParamsMap(sortExpression, SortDirection.NONE);
+        else throw new IllegalStateException("Received invalid sort direction 
\"" + sortDirection + "\"");
+    }
+
+    public SortModel getSortModel() {
+        return _dgss.getSortModel(_name);
+    }
+
+    /* these should go away in favor of calling them on the PagedDataSet */
     public int getCurrentIndex() {
         return _dataSet.getCurrentIndex();
     }
@@ -214,5 +240,9 @@
 
     public boolean hasNextDataItem() {
         return _dataSet.hasNext();
+    }
+
+    private Map buildSortQueryParamsMap(String sortExpression, SortDirection 
sortDirection) {
+        return _dgss.buildSortQueryParamsMap(_name, sortExpression, 
sortDirection);
     }
 }

Deleted: 
/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridState.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridState.java?view=auto&rev=125973
==============================================================================

Modified: 
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/model/sort/SortModel.java?view=diff&rev=125974&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java&r1=125973&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/sort/SortModel.java&r2=125974
==============================================================================
--- 
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/model/sort/SortModel.java
  Fri Jan 21 14:26:34 2005
@@ -17,144 +17,28 @@
  */
 package org.apache.beehive.netui.databinding.datagrid.model.sort;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import javax.servlet.ServletRequest;
+import java.util.Collections;
 
 import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
-import org.apache.beehive.netui.databinding.datagrid.services.sort.SortService;
-import org.apache.beehive.netui.databinding.datagrid.util.ParameterUtil;
 
 /**
  *
  */
 public class SortModel {
 
-    /* Default sort syntax: netui_sort=<gridNamespace>~[+|-]<expr> */
-
     private String _name = null;
-    private String _sortParamKey = null;
     private List<ISort> _sorts = null;
-    private Map _existingParams = null;
 
-    public SortModel(String name) {
+    public SortModel(String name, List<ISort> sorts) {
         _name = name;
-    }
-
-    public void handleRequest(ServletRequest request) {
-        SortService sortService = SortService.getInstance(request);
-
-        _sorts = sortService.getSorts(_name);
-        _existingParams = ParameterUtil.getParameters(request, 
getSortParamKey());
-
-        /* todo: this is going to be problematic when generating URLs that
-                 could contain sort information for grids where that
-                 data has been programatically altered
-         */
-/*
-        List<ISort> sorts = sortService.getOtherSorts(_name);
-        if(sorts != null && sorts.size() > 0)
-            _existingParams.put(getSortParamKey(), buildSortParams(sorts));
-*/
+        _sorts = sorts;
     }
 
     public List<ISort> getSorts() {
-        return _sorts;
-    }
-
-    public String getSortParamKey() {
-        if(_sortParamKey != null)
-            return _sortParamKey;
-        else
-            return ISort.SORT_PARAM_KEY;
-    }
-
-    public Map buildSortQueryParamsMap() {
-        List<ISort> sorts = getSorts();
-        if(sorts == null)
-            return _existingParams;
-
-        String sortParamValue = buildSortParamValue(sorts, null, null);
-
-        HashMap map = new HashMap(_existingParams.size() + 1);
-        map.putAll(_existingParams);
-        if(sortParamValue != null)
-            map.put(getSortParamKey(), new String[] {sortParamValue});
-        return map;
-    }
-
-    private String buildSortParamValue(List<ISort> sorts, String 
sortExpression, SortDirection sortDirection) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(_name);
-        sb.append("~");
-
-        boolean hasTerms = false;
-        for(int i = 0; i < sorts.size(); i++) {
-            ISort sort = sorts.get(i);
-
-            if(sortExpression != null && 
sortExpression.equals(sort.getSortExpression())) {
-                if(sortDirection != SortDirection.NONE) {
-                    if(hasTerms)
-                        sb.append(",");
-                    else hasTerms = true;
-
-                    if(sortDirection == SortDirection.DESCENDING)
-                        sb.append("-");
-                    sb.append(sortExpression);
-                    hasTerms = true;
-                }
-            }
-            else {
-                if(hasTerms)
-                    sb.append(",");
-                else hasTerms = true;
-
-                if(sort.getDirection() == SortDirection.DESCENDING)
-                    sb.append("-");
-                sb.append(sort.getSortExpression());
-            }
-        }
-
-        /* any new sorts are added at the end of the current sorts. */
-        if(sortExpression != null && sortDirection != SortDirection.NONE && 
!isSorted(sortExpression)) {
-            if(hasTerms)
-                sb.append(",");
-            if(sortDirection == SortDirection.DESCENDING)
-                sb.append("-");
-            sb.append(sortExpression);
-        }
-
-        if(!hasTerms)
-            return null;
-
-        return sb.toString();
-    }
-
-    public Map buildSortQueryParamsMap(String sortExpression, SortDirection 
sortDirection) {
-        assert sortExpression != null;
-        assert sortDirection != null;
-
-        List<ISort> sorts = getSorts();
-        String sortParamValue = null;
-        if(sorts != null) {
-            sortParamValue = buildSortParamValue(sorts, sortExpression, 
sortDirection);
-        }
-        else if(sortDirection != SortDirection.NONE && 
!isSorted(sortExpression)) {
-            StringBuilder sb = new StringBuilder();
-            sb.append(_name);
-            sb.append("~");
-            if(sortDirection == SortDirection.DESCENDING)
-                sb.append("-");
-            sb.append(sortExpression);
-            sortParamValue = sb.toString();
-        }
-
-        HashMap map = new HashMap(_existingParams.size() + 1);
-        map.putAll(_existingParams);
-        if(sortParamValue != null)
-            map.put(getSortParamKey(), new String[] {sortParamValue});
-        return map;
+        if(_sorts != null)
+            return Collections.unmodifiableList(_sorts);
+        else return null;
     }
 
     public boolean isPrimarySort(String sortExpression) {

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&rev=125974&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java&r1=125973&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java&r2=125974
==============================================================================
--- 
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
    Fri Jan 21 14:26:34 2005
@@ -35,7 +35,6 @@
 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.util.JspUtil;
-import org.apache.beehive.netui.databinding.datagrid.model.DataGridState;
 import org.apache.beehive.netui.util.logging.Logger;
 
 /**
@@ -73,8 +72,7 @@
         DataGridModel dgm = cellModel.getDataGridModel();
         assert dgm != null;
 
-        DataGridState dgss = dgm.getDataGridState();
-        SortModel sortModel = dgss.getSortModel();
+        SortModel sortModel = dgm.getSortModel();
 
         StringBuilder builder = new StringBuilder();
         AbstractRenderAppender appender = new 
StringBuilderRenderAppender(builder);
@@ -95,7 +93,7 @@
 
         imgTag.registerAttribute(AbstractHtmlState.ATTR_GENERAL, 
HtmlConstants.BORDER, "false");
 
-        Map queryParams = 
dgss.getSortQueryParamsMap(cellModel.getSortExpression());
+        Map queryParams = 
dgm.getSortQueryParamsMap(cellModel.getSortExpression());
 
         String href = null;
         try {

Added: 
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=auto&rev=125974
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java
 Fri Jan 21 14:26:34 2005
@@ -0,0 +1,154 @@
+/*
+ * 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.services;
+
+import java.util.Map;
+import java.util.List;
+import java.util.HashMap;
+import java.util.ArrayList;
+
+import javax.servlet.ServletRequest;
+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.services.sort.SortCodec;
+
+/**
+ * A DataGridStateService is an object that is shared between all data grids
+ * and stores state information that is parsed off of the URL.  This
+ * provides a single parsing location, which improves performance, and
+ * a single place to track sort, filter, and other grid state that impacts
+ * URLs generated by all data grids.
+ * <p/>
+ * The DataGridStateService is scoped to a single ServletRequest and is
+ * able to cache the ServletRequest object itself.
+ */
+public class DataGridStateService {
+
+    private static final String KEY = DataGridStateService.class.getName() + 
"REQUEST_KEY";
+
+    public static DataGridStateService getInstance(JspContext jspContext) {
+        assert jspContext instanceof PageContext;
+
+        return getInstance(((PageContext)jspContext).getRequest());
+    }
+
+    public static DataGridStateService getInstance(ServletRequest request) {
+        Object obj = request.getAttribute(KEY);
+        if(obj != null) {
+            assert obj instanceof DataGridStateService;
+
+            return (DataGridStateService)obj;
+        } else {
+            DataGridStateService dgss = new DataGridStateService(request);
+            request.setAttribute(KEY, dgss);
+            return dgss;
+        }
+    }
+
+    private SortCodec _sortCodec = null;
+    private Map<String, List<ISort>> _sorts = null;
+    private Map _urlParams = null;
+
+    private DataGridStateService(ServletRequest request) {
+        _sortCodec = new SortCodec();
+        String[] sortParams = 
request.getParameterValues(_sortCodec.getQueryParamKey());
+        _sorts = _sortCodec.decode(sortParams);
+        _urlParams = request.getParameterMap();
+    }
+
+    public SortModel getSortModel(String namespace) {
+        /* todo: caching */
+        return new SortModel(namespace, getSorts(namespace));
+    }
+
+    private List<ISort> getSorts(String namespace) {
+        if(_sorts != null)
+            return _sorts.get(namespace);
+        else
+            return null;
+    }
+
+    public Map buildSortQueryParamsMap(String namespace) {
+        List<ISort> sorts = getSorts(namespace);
+
+        if(sorts == null)
+            return buildQueryParamMap(null, null);
+        else {
+            String sortParamValue = _sortCodec.encode(namespace, sorts, null, 
null, false);
+            return buildQueryParamMap(namespace, sortParamValue);
+        }
+    }
+
+    public Map buildSortQueryParamsMap(String namespace, String 
sortExpression, SortDirection sortDirection) {
+        assert sortExpression != null;
+        assert sortDirection != null;
+
+        List<ISort> sorts = getSorts(namespace);
+        String sortParamValue = null;
+        boolean isSorted = getSortModel(namespace).isSorted(sortExpression);
+        if(sorts != null) {
+            sortParamValue = _sortCodec.encode(namespace, sorts, 
sortExpression, sortDirection, isSorted);
+        } else if(sortDirection != SortDirection.NONE && !isSorted) {
+            /* todo: move to SortCodec */
+            StringBuilder sb = new StringBuilder();
+            sb.append(namespace);
+            sb.append("~");
+            if(sortDirection == SortDirection.DESCENDING)
+                sb.append("-");
+            sb.append(sortExpression);
+            sortParamValue = sb.toString();
+        }
+
+        return buildQueryParamMap(namespace, sortParamValue);
+    }
+
+    private Map buildQueryParamMap(String namespace, String paramValue) {
+        Map params = new HashMap();
+
+        for(Object key : _urlParams.keySet()) {
+            if(key.equals(_sortCodec.getQueryParamKey()))
+                continue;
+            else
+                params.put(key, _urlParams.get(key));
+        }
+
+        if(_sorts != null) {
+            ArrayList<String> paramValues = new ArrayList<String>();
+            for(Object key : _sorts.keySet()) {
+                if(namespace != null && key.equals(namespace)) {
+                    if(paramValue != null)
+                        paramValues.add(paramValue);
+                }
+                /* todo: performance.  need to cache here */
+                else
+                    paramValues.add(_sortCodec.encode((String)key, 
_sorts.get(key), null, null, false));
+            }
+
+            if(paramValues.size() > 0)
+                params.put(_sortCodec.getQueryParamKey(), 
paramValues.toArray(new String[0]));
+        }
+        else if(paramValue != null)
+            params.put(_sortCodec.getQueryParamKey(), new String[] 
{paramValue});
+
+        return params;
+    }
+}

Added: 
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/services/sort/SortCodec.java?view=auto&rev=125974
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortCodec.java
       Fri Jan 21 14:26:34 2005
@@ -0,0 +1,137 @@
+/*
+ * 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.services.sort;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+
+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;
+
+/**
+ *
+ */
+public class SortCodec {
+
+    /* Default sort syntax: netui_sort=<gridNamespace>~[+|-]<expr> */
+
+    private static final String SORT_DELIM = "~";
+    private static final String SORT_TERM_DELIM = ",";
+
+    public String getQueryParamKey() {
+        return ISort.SORT_PARAM_KEY;
+    }
+
+    public Map<String, List<ISort>> decode(String[] queryParams) {
+
+        if(queryParams == null)
+            return null;
+
+        Map<String, List<ISort>> map = new HashMap<String, List<ISort>>();
+
+        for(String sortParam : queryParams) {
+            String[] terms = sortParam.split(SORT_DELIM);
+            assert terms != null && terms.length == 2;
+
+            String namespace = terms[0];
+
+            // find the list of sorted columns
+            // two columns of the bugs grid would be sorted as:
+            //
+            // netui_sort=bugs~id,-priority
+            ArrayList<ISort> sorts = new ArrayList<ISort>();
+            String[] cols = terms[1].split(SORT_TERM_DELIM);
+            for(String sortExpr : cols) {
+                SortDirection sortDirection = SortDirection.NONE;
+                if(sortExpr.startsWith("-"))
+                    sortDirection = SortDirection.DESCENDING;
+                else sortDirection = SortDirection.ASCENDING;
+                String sortExpression = (sortDirection == 
SortDirection.DESCENDING ? sortExpr.substring(1) : sortExpr);
+
+                /* todo: pluggability */
+                ISort sort = new DefaultSort(sortExpression, sortDirection);
+
+                sorts.add(sort);
+            }
+
+            if(sorts.size() > 0)
+                map.put(namespace, sorts);
+        }
+
+        return map;
+    }
+
+    public String encode(String namespace, List<ISort> sorts) {
+        return buildSortParamValue(namespace, sorts, null, null, false);
+    }
+
+    public String encode(String namespace, List<ISort> 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) {
+        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);
+
+            if(sortExpression != null && 
sortExpression.equals(sort.getSortExpression())) {
+                if(sortDirection != SortDirection.NONE) {
+                    if(hasTerms)
+                        sb.append(",");
+                    else hasTerms = true;
+
+                    if(sortDirection == SortDirection.DESCENDING)
+                        sb.append("-");
+                    sb.append(sortExpression);
+                    hasTerms = true;
+                }
+            }
+            else {
+                if(hasTerms)
+                    sb.append(",");
+                else hasTerms = true;
+
+                if(sort.getDirection() == SortDirection.DESCENDING)
+                    sb.append("-");
+                sb.append(sort.getSortExpression());
+            }
+        }
+
+        /* any new sorts are added at the end of the current sorts. */
+        if(sortExpression != null && sortDirection != SortDirection.NONE && 
!isSorted) {
+            if(hasTerms)
+                sb.append(",");
+            if(sortDirection == SortDirection.DESCENDING)
+                sb.append("-");
+            sb.append(sortExpression);
+        }
+
+        if(!hasTerms)
+            return null;
+
+        return sb.toString();
+    }
+}

Deleted: 
/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortFactory.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortFactory.java?view=auto&rev=125973
==============================================================================

Deleted: 
/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortService.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/sort/SortService.java?view=auto&rev=125973
==============================================================================

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&rev=125974&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java&r1=125973&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java&r2=125974
==============================================================================
--- 
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
 Fri Jan 21 14:26:34 2005
@@ -33,7 +33,6 @@
 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.model.DataGridState;
 import org.apache.beehive.netui.script.common.IDataAccessProvider;
 import org.apache.beehive.netui.script.common.DataAccessProviderStack;
 import org.apache.beehive.netui.tags.ExpressionHandling;
@@ -64,7 +63,6 @@
     private String _dataSource = null;
     private String _resourceBundlePath = null;
     private DataGridModel _gridModel = null;
-    private DataGridState _dataGridState = null;
 
     public String getTagName() {
         return "DataGrid";
@@ -135,13 +133,6 @@
         _gridModel.setCssPolicy(stylePolicy);
         _gridModel.setTableRenderer(tableRenderer);
         _gridModel.setResourceBundlePath(_resourceBundlePath);
-
-        if(_dataGridState != null) {
-            if(_name != null)
-                throw new JspException("The data grid's \"name\" attribute 
should not be set when using a DataGridState");
-
-            _gridModel.setDataGridState(_dataGridState);
-        }
 
         JspFragment fragment = getJspBody();
         if(fragment != null) {

Modified: 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java?view=diff&rev=125974&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java&r1=125973&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java&r2=125974
==============================================================================
--- 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java
       (original)
+++ 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DefaultSortTest.java
       Fri Jan 21 14:26:34 2005
@@ -20,7 +20,6 @@
 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.services.sort.SortFactory;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -33,7 +32,7 @@
     extends TestCase {
 
     private ISort createSort() {
-        return SortFactory.getInstance();
+        return new DefaultSort();
     }
 
     public void testChangeSortDirection() {

Copied: 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java
 (from r125927, 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java?view=diff&rev=125974&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java&r1=125927&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java&r2=125974
==============================================================================
--- 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java
       (original)
+++ 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortCodecTest.java
 Fri Jan 21 14:26:34 2005
@@ -17,16 +17,15 @@
  */
 package org.apache.beehive.netui.test.datagrid;
 
-import java.lang.reflect.Proxy;
 import java.util.List;
+import java.util.Map;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.beehive.netui.databinding.datagrid.services.sort.SortService;
+import org.apache.beehive.netui.databinding.datagrid.services.sort.SortCodec;
 import org.apache.beehive.netui.databinding.datagrid.model.sort.ISort;
 import 
org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection;
 import org.apache.beehive.netui.test.servlet.ServletFactory;
-import org.apache.beehive.netui.test.servlet.HttpServletRequestHandler;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -35,7 +34,7 @@
 /**
  *
  */
-public class SortServiceTest
+public class SortCodecTest
     extends TestCase {
 
     private HttpServletRequest _request = null;
@@ -46,16 +45,18 @@
     }
 
     public void testEmptySortService() {
-        SortService svc = SortService.getInstance(getRequest());
-        assert svc.getSorts(_namespace) == null;
+        SortCodec codec = new SortCodec();
+        Map<String, List<ISort>> allSorts = 
codec.decode(_request.getParameterValues(codec.getQueryParamKey()));
+        assert allSorts == null;
     }
 
     public void testSingleAscendingSort() {
         DataGridTestUtil.initQueryString(_request, "netui_sort=" + _namespace 
+ "~CUSTOMERNAME");
-        SortService svc = SortService.getInstance(getRequest());
-        List<ISort> sorts = svc.getSorts(_namespace);
+        SortCodec codec = new SortCodec();
+        Map<String, List<ISort>> allSorts = 
codec.decode(_request.getParameterValues(codec.getQueryParamKey()));
 
-        assert svc.getSorts(_namespace) != null;
+        List<ISort> sorts = allSorts.get(_namespace);
+        assert sorts != null;
         assert sorts.size() == 1;
         assert sorts.get(0).getDirection() == SortDirection.ASCENDING;
         assert sorts.get(0).getSortExpression().equals("CUSTOMERNAME");
@@ -65,30 +66,31 @@
         DataGridTestUtil.initQueryString(_request, "?" +
             "netui_sort=" + _namespace + "~CUSTOMERNAME,-UNITPRICE" +
             "&netui_sort=productGrid~QUANTITY");
-        SortService svc = SortService.getInstance(getRequest());
-        List<ISort> sorts = svc.getSorts(_namespace);
+        SortCodec codec = new SortCodec();
+        Map<String, List<ISort>> allSorts = 
codec.decode(_request.getParameterValues(codec.getQueryParamKey()));
+        List<ISort> sorts = allSorts.get(_namespace);
 
-        assert svc.getSorts(_namespace) != null;
+        assert sorts != null;
         assert sorts.size() == 2;
         assert sorts.get(0).getDirection() == SortDirection.ASCENDING;
         assert sorts.get(0).getSortExpression().equals("CUSTOMERNAME");
         assert sorts.get(1).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(1).getSortExpression().equals("UNITPRICE");
 
-        SortService productSvc = SortService.getInstance(getRequest());
-        assert productSvc.getSorts("productGrid") != null;
-        assert productSvc.getSorts("productGrid").size() == 1;
-        sorts = productSvc.getSorts("productGrid");
+        sorts = allSorts.get("productGrid");
+        assert sorts != null;
+        assert sorts.size() == 1;
         assert sorts.get(0).getDirection() == SortDirection.ASCENDING;
         assert sorts.get(0).getSortExpression().equals("QUANTITY");
     }
 
     public void testSingleDescendingSort() {
         DataGridTestUtil.initQueryString(_request, "netui_sort=" + _namespace 
+ "~-CUSTOMERNAME");
-        SortService svc = SortService.getInstance(getRequest());
-        List<ISort> sorts = svc.getSorts(_namespace);
+        SortCodec codec = new SortCodec();
+        Map<String, List<ISort>> allSorts = 
codec.decode(_request.getParameterValues(codec.getQueryParamKey()));
+        List<ISort> sorts = allSorts.get(_namespace);
 
-        assert svc.getSorts(_namespace) != null;
+        assert sorts != null;
         assert sorts.size() == 1;
         assert sorts.get(0).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(0).getSortExpression().equals("CUSTOMERNAME");
@@ -96,10 +98,11 @@
 
     public void testTwoDescendingSorts() {
         DataGridTestUtil.initQueryString(_request, "netui_sort=" + _namespace 
+ "~-CUSTOMERNAME,-CUSTOMERID");
-        SortService svc = SortService.getInstance(getRequest());
-        List<ISort> sorts = svc.getSorts(_namespace);
+        SortCodec codec = new SortCodec();
+        Map<String, List<ISort>> allSorts = 
codec.decode(_request.getParameterValues(codec.getQueryParamKey()));
+        List<ISort> sorts = allSorts.get(_namespace);
 
-        assert svc.getSorts(_namespace) != null;
+        assert sorts != null;
         assert sorts.size() == 2;
         assert sorts.get(0).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(0).getSortExpression().equals("CUSTOMERNAME");
@@ -115,12 +118,12 @@
         _request = null;
     }
 
-    public SortServiceTest(String name) {
+    public SortCodecTest(String name) {
         super(name);
     }
 
     public static Test suite() {
-        return new TestSuite(SortServiceTest.class);
+        return new TestSuite(SortCodecTest.class);
     }
 
     public static void main(String[] args) {

Modified: 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java?view=diff&rev=125974&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java&r1=125973&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java&r2=125974
==============================================================================
--- 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java
 (original)
+++ 
incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortModelTest.java
 Fri Jan 21 14:26:34 2005
@@ -28,6 +28,7 @@
 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.sort.ISort.SortDirection;
+import 
org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
 import org.apache.beehive.netui.test.servlet.ServletFactory;
 
 /**
@@ -41,8 +42,8 @@
     private HttpServletRequest _servletRequest;
 
     public void testSortModelSimple() {
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts == null;
@@ -50,13 +51,13 @@
 
     public void testSortModelSimple2() {
         DataGridTestUtil.initQueryString(_servletRequest, "foo=bar");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts == null;
 
-        Map queryParams = sortModel.buildSortQueryParamsMap();
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME);
         assert queryParams.size() == 1;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -65,8 +66,8 @@
 
     public void testSortModelSimple3() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~id");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts != null;
@@ -74,7 +75,7 @@
         assert sorts.get(0).getDirection() == SortDirection.ASCENDING;
         assert sorts.get(0).getSortExpression().equals("id");
 
-        Map queryParams = sortModel.buildSortQueryParamsMap();
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME);
         assert queryParams.size() == 2;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -87,8 +88,8 @@
 
     public void testSortModelSimple4() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~id,-name");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts != null;
@@ -98,7 +99,7 @@
         assert sorts.get(1).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(1).getSortExpression().equals("name");
 
-        Map queryParams = sortModel.buildSortQueryParamsMap();
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME);
         assert queryParams.size() == 2;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -111,8 +112,8 @@
 
     public void testSortModelSimple5() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~id,-name");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts != null;
@@ -122,7 +123,7 @@
         assert sorts.get(1).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(1).getSortExpression().equals("name");
 
-        Map queryParams = sortModel.buildSortQueryParamsMap();
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME);
         assert queryParams.size() == 2;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -133,7 +134,7 @@
         assert values[0].equals("bugs~id,-name");
 
         /* now, for the "id" expression, change the direction */
-        queryParams = sortModel.buildSortQueryParamsMap("id", 
SortDirection.DESCENDING);
+        queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "id", 
SortDirection.DESCENDING);
         assert queryParams.size() == 2;
         values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -144,7 +145,7 @@
         assert values[0].equals("bugs~-id,-name");
 
         /* now, for the "id" expression, change the direction */
-        queryParams = sortModel.buildSortQueryParamsMap("id", 
SortDirection.NONE);
+        queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "id", 
SortDirection.NONE);
         assert queryParams.size() == 2;
         values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -155,7 +156,7 @@
         assert values[0].equals("bugs~-name");
 
         /* now, for the "id" expression, change the direction */
-        queryParams = sortModel.buildSortQueryParamsMap("id", 
SortDirection.ASCENDING);
+        queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "id", 
SortDirection.ASCENDING);
         assert queryParams.size() == 2;
         values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -166,7 +167,7 @@
         assert values[0].equals("bugs~id,-name");
 
         /* now, add a new column "newcolumn" and explicitly set its direction 
*/
-        queryParams = sortModel.buildSortQueryParamsMap("newcolumn", 
SortDirection.DESCENDING);
+        queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "newcolumn", 
SortDirection.DESCENDING);
         assert queryParams.size() == 2;
         values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -177,7 +178,7 @@
         assert values[0].equals("bugs~id,-name,-newcolumn");
 
         /* now, add a new column "newcolumn" and explicitly set its direction 
*/
-        queryParams = sortModel.buildSortQueryParamsMap("name", 
SortDirection.NONE);
+        queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "name", 
SortDirection.NONE);
         assert queryParams.size() == 2;
         values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -190,11 +191,11 @@
 
     public void testSortModelSimple6() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~-id,-name");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         /* now, add a new column "newcolumn" and explicitly set its direction 
*/
-        Map queryParams = sortModel.buildSortQueryParamsMap("id", 
SortDirection.NONE);
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "id", 
SortDirection.NONE);
         assert queryParams.size() == 2;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -207,11 +208,11 @@
 
     public void testSortModelSimple7() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~-id");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         /* now, add a new column "newcolumn" and explicitly set its direction 
*/
-        Map queryParams = sortModel.buildSortQueryParamsMap("id", 
SortDirection.NONE);
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME, "id", 
SortDirection.NONE);
         assert queryParams.size() == 1;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
@@ -219,11 +220,10 @@
     }
 
     /* this is a test of sorts for two grids on the same URL */
-    /*
-    public void testSortModelSimple6() {
+    public void testSortModelSimple8() {
         DataGridTestUtil.initQueryString(_servletRequest, 
"foo=bar&netui_sort=bugs~id,-name&netui_sort=developers~bugcount,-milestone");
-        SortModel sortModel = new SortModel(GRID_NAME);
-        sortModel.handleRequest(_servletRequest);
+        DataGridStateService dgss = 
DataGridStateService.getInstance(_servletRequest);
+        SortModel sortModel = dgss.getSortModel(GRID_NAME);
 
         List<ISort> sorts = sortModel.getSorts();
         assert sorts != null;
@@ -233,21 +233,18 @@
         assert sorts.get(1).getDirection() == SortDirection.DESCENDING;
         assert sorts.get(1).getSortExpression().equals("name");
 
-        Map queryParams = sortModel.buildSortQueryParamsMap();
-        assert queryParams.size() == 3;
+        Map queryParams = dgss.buildSortQueryParamsMap(GRID_NAME);
+        assert queryParams.size() == 2;
         String[] values = (String[])queryParams.get("foo");
         assert values.length == 1;
         assert values[0].equals("bar");
 
         values = (String[])queryParams.get("netui_sort");
-        assert values.length == 1;
-        assert values[0].equals("bugs~id,-name");
-
-        values = (String[])queryParams.get("netui_sort");
-        assert values.length == 1;
+        assert values.length == 2;
         assert values[0].equals("developers~bugcount,-milestone");
+        assert values[1].equals("bugs~id,-name");
     }
-*/
+
     protected void setUp() {
         _servletRequest = ServletFactory.getServletRequest();
     }

Deleted: 
/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/SortServiceTest.java?view=auto&rev=125973
==============================================================================

Reply via email to