You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2004/12/30 04:01:26 UTC

svn commit: r123694 - in incubator/beehive/trunk/netui: src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid test/webapps/drt/coreWeb/databinding/datagrid/simplesort test/webapps/drt/coreWeb/resources/images test/webapps/drt/testRecorder/config test/webapps/drt/testRecorder/tests

Author: ekoneil
Date: Wed Dec 29 19:01:25 2004
New Revision: 123694

URL: http://svn.apache.org/viewcvs?view=rev&rev=123694
Log:
Data grid checkpoint.

- implement sort support in the URL / state management services.  This isn't complete yet and throws NYI on some of the method calls, but the correct sort information is tracked in the URL for a single grid on a page.
- move cell rendering out into a set of stateless decorators.  This allows for composing items to show up in a cell and provides a nice extensibility and testing point.  Also allows sort / filter to be applied to header cell columns in a clean way.
- delete some unused images from the coreWeb/resources/images directory
- add a simple sort test.  this doesn't actually sort the data yet (quite cheezy, yes), but it does put the correct query params in the URL.

BB: self
DRT: NetUI pass
BVT: NetUI pass (11 failures)


Added:
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/AnchorCellModel.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/HeaderCellModel.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/ImageCellModel.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/LiteralCellModel.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/AnchorCellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecoratorException.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/HeaderCellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/ImageCellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/LiteralCellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java   (contents, props changed)
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/Controller.jpf   (contents, props changed)
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/index.jsp   (contents, props changed)
   incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridSimpleSort.xml   (contents, props changed)
Removed:
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/back.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/cancel.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/delete.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/details.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/edit.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/grid.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/insert.gif
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/update.gif
Modified:
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java
   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/PagerModel.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.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/SortService.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.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/DataGridUtil.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java
   incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java
   incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java	Wed Dec 29 19:01:25 2004
@@ -17,17 +17,23 @@
  */
 package org.apache.beehive.netui.databinding.datagrid.model;
 
+import java.util.ArrayList;
+import javax.servlet.jsp.JspException;
+
+import org.apache.beehive.netui.tags.html.FormatTag.Formatter;
+import org.apache.beehive.netui.util.logging.Logger;
+
 /**
  */
 public class ColumnModel {
 
+    private static final Logger LOGGER = Logger.getInstance(ColumnModel.class);
+
     private ColumnsModel _columnsModel;
     private DataGridModel _dataGridModel;
+    private ArrayList<Formatter> _formatters;
 
-    public ColumnModel(DataGridModel dataGridModel, ColumnsModel columnsModel)
-    {
-        _dataGridModel = dataGridModel;
-        _columnsModel = columnsModel;
+    public ColumnModel() {
     }
 
     public boolean isRenderingHeader() {
@@ -36,5 +42,52 @@
 
     public boolean isRenderingData() {
         return _columnsModel.getRenderState() == ColumnsModel.DATA_RENDER_STATE;
+    }
+
+    public ColumnsModel getColumnsModel() {
+        return _columnsModel;
+    }
+
+    public void setColumnsModel(ColumnsModel columnsModel) {
+        _columnsModel = columnsModel;
+    }
+
+    public DataGridModel getDataGridModel() {
+        return _dataGridModel;
+    }
+
+    public void setDataGridModel(DataGridModel dataGridModel) {
+        _dataGridModel = dataGridModel;
+    }
+
+    public void addFormatter(Formatter formatter) {
+        if(_formatters == null)
+            _formatters = new ArrayList<Formatter>();
+
+        _formatters.add(formatter);
+    }
+
+    public String formatText(Object value) {
+        if (value == null)
+            return null;
+
+        if (_formatters == null)
+            return value.toString();
+
+        Object formatted = null;
+        for (Formatter formatter : _formatters) {
+            assert formatter != null;
+            try {
+                formatted = formatter.format(value);
+            } catch (JspException e) {
+                /* todo: error reporting */
+                if (LOGGER.isErrorEnabled())
+                    LOGGER.error("A formatter of type \"" + formatter.getClass().getName() + "\" threw an exception " + e, e);
+            }
+        }
+
+        assert formatted != null;
+
+        return formatted.toString();
     }
 }

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=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r2=123694
==============================================================================
--- 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	Wed Dec 29 19:01:25 2004
@@ -18,13 +18,16 @@
 package org.apache.beehive.netui.databinding.datagrid.model;
 
 import javax.servlet.jsp.JspContext;
+import javax.servlet.jsp.PageContext;
 
 import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
-import org.apache.beehive.netui.databinding.datagrid.services.FilterService;
 import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
-import org.apache.beehive.netui.databinding.datagrid.services.SortService;
+import org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
 import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
 import org.apache.beehive.netui.databinding.datagrid.rendering.IPagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.PreviousNextPagerRenderer;
 import org.apache.beehive.netui.databinding.datagrid.rendering.impl.PreviousNextPagerRenderer;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 
@@ -48,11 +51,10 @@
     private PagedDataSet _dataSet = null;
     private TableRenderer _tableRenderer = null;
 
-    private SortService _sortService = null;
-    private FilterService _filterService = null;
-
     private int _renderState = START_RENDER_STATE;
 
+    private DataGridStateService _dataGridStateService = null;
+
     public DataGridModel(JspContext jspContext, String name, PagedDataSet dataSet)
     {
         super();
@@ -164,6 +166,17 @@
 
     public void setTableRenderer(TableRenderer tableRenderer) {
         _tableRenderer = tableRenderer;
+    }
+
+    public DataGridStateService getDataGridStateService() {
+        if(_dataGridStateService == null)
+            _dataGridStateService = DataGridStateService.createInstance(((PageContext)_jspContext).getRequest(), getName());
+
+        return _dataGridStateService;
+    }
+
+    public void setDataGridStateService(DataGridStateService dataGridStateService) {
+        _dataGridStateService = dataGridStateService;
     }
 
     /* ===========================================================

Modified: 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/model/PagerModel.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/PagerModel.java&r2=123694
==============================================================================
--- 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/model/PagerModel.java	Wed Dec 29 19:01:25 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.databinding.datagrid.model;
 
 import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
 import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.util.logging.Logger;

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/AnchorCellModel.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/AnchorCellModel.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/AnchorCellModel.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,93 @@
+/*
+ * 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.model.cell;
+
+import java.util.HashMap;
+
+import org.apache.beehive.netui.tags.rendering.AnchorTag;
+import org.apache.beehive.netui.tags.rendering.AnchorTag.State;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+
+/**
+ *
+ */
+public class AnchorCellModel
+    extends ColumnModel {
+
+    public AnchorCellModel() {
+        super();
+    }
+
+    private String _value = null;
+    private String _href = null;
+    private String _scopeId = null;
+    private String _action = null;
+    private HashMap _params = null;
+    private AnchorTag.State _anchorState = new AnchorTag.State();
+
+    public String getValue() {
+        return _value;
+    }
+
+    public void setValue(String value) {
+        _value = value;
+    }
+
+    public String getHref() {
+        return _href;
+    }
+
+    public void setHref(String href) {
+        _href = href;
+    }
+
+    public String getScopeId() {
+        return _scopeId;
+    }
+
+    public void setScopeId(String scopeId) {
+        _scopeId = scopeId;
+    }
+
+    public String getAction() {
+        return _action;
+    }
+
+    public void setAction(String action) {
+        _action = action;
+    }
+
+    public HashMap getParams() {
+        if(_params == null)
+            _params = new HashMap();
+
+        return _params;
+    }
+
+    public void setParams(HashMap params) {
+        _params = params;
+    }
+
+    public State getAnchorState() {
+        return _anchorState;
+    }
+
+    public void setAnchorState(State anchorState) {
+        _anchorState = anchorState;
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/HeaderCellModel.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/HeaderCellModel.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/HeaderCellModel.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,88 @@
+/*
+ * 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.model.cell;
+
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+
+/**
+ *
+ */
+public class HeaderCellModel
+    extends ColumnModel {
+
+    private String _headerText = null;
+    private String _bodyContent = null;
+
+    private String _scopeId = null;
+
+    private boolean _disableSortRendering = false;
+    private String _sortExpression = null;
+    private String _sortAction = null;
+
+    public String getScopeId() {
+        return _scopeId;
+    }
+
+    public void setScopeId(String scopeId) {
+        _scopeId = scopeId;
+    }
+
+    public String getSortAction() {
+        return _sortAction;
+    }
+
+    public void setSortAction(String sortAction) {
+        _sortAction = sortAction;
+    }
+
+    public boolean isSortable() {
+        return _sortExpression != null;
+    }
+
+    public boolean isDisableSortRendering() {
+        return _disableSortRendering;
+    }
+
+    public void setDisableSortRendering(boolean disableSortRendering) {
+        _disableSortRendering = disableSortRendering;
+    }
+
+    public String getSortExpression() {
+        return _sortExpression;
+    }
+
+    public void setSortExpression(String sortExpression) {
+        _sortExpression = sortExpression;
+    }
+
+    public String getHeaderText() {
+        return _headerText;
+    }
+
+    public void setHeaderText(String headerText) {
+        _headerText = headerText;
+    }
+
+    public String getBodyContent() {
+        return _bodyContent;
+    }
+
+    public void setBodyContent(String bodyContent) {
+        _bodyContent = bodyContent;
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/ImageCellModel.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/ImageCellModel.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/ImageCellModel.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,42 @@
+/*
+ * 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.model.cell;
+
+import org.apache.beehive.netui.tags.rendering.ImageTag;
+import org.apache.beehive.netui.tags.rendering.ImageTag.State;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+
+/**
+ *
+ */
+public class ImageCellModel
+    extends ColumnModel {
+
+    private ImageTag.State _imageState = null;
+
+    public ImageTag.State getImageState() {
+        if(_imageState == null)
+            _imageState = new ImageTag.State();
+
+        return _imageState;
+    }
+
+    public void setImageState(State imageState) {
+        _imageState = imageState;
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/LiteralCellModel.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/LiteralCellModel.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/cell/LiteralCellModel.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,50 @@
+/*
+ * 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.model.cell;
+
+import org.apache.beehive.netui.tags.rendering.SpanTag;
+import org.apache.beehive.netui.tags.rendering.SpanTag.State;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+
+/**
+ *
+ */
+public class LiteralCellModel
+    extends ColumnModel {
+
+    private static final SpanTag.State DEFAULT_SPAN_STATE = new SpanTag.State();
+
+    private String _value = null;
+    private SpanTag.State _spanState = new SpanTag.State();
+
+    public String getValue() {
+        return _value;
+    }
+
+    public void setValue(String value) {
+        _value = value;
+    }
+
+    public State getSpanState() {
+        return _spanState != null ? _spanState : DEFAULT_SPAN_STATE;
+    }
+
+    public void setSpanState(State spanState) {
+        _spanState = spanState;
+    }
+}

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultFilter.java	Wed Dec 29 19:01:25 2004
@@ -21,6 +21,7 @@
 
 import org.apache.beehive.netui.databinding.datagrid.model.IFilter;
 import org.apache.beehive.netui.databinding.datagrid.services.IllegalFilterException;
+import org.apache.beehive.netui.databinding.datagrid.services.IllegalFilterException;
 import org.apache.beehive.netui.util.logging.Logger;
 
 /**

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/impl/DefaultSort.java	Wed Dec 29 19:01:25 2004
@@ -60,7 +60,7 @@
     }
 
     public void setDirection(int direction) {
-        assert direction == ISort.ASCENDING || direction == ISort.DESCENDING;
+        assert direction == ISort.ASCENDING || direction == ISort.DESCENDING || direction == ISort.NONE;
 
         _dir = direction;
     }
@@ -101,18 +101,23 @@
     }
 
     private String writeSortParam(String namespace, boolean flipDirection) {
-        StringBuilder builder = new StringBuilder();
 
         int direction = _dir;
         if (flipDirection)
             /* todo: break this dependency.  switch ISort to AbstractSort with utility methods */
             direction = flipSortDirection(direction);
 
+        return writeSortParam(namespace, _expr, direction);
+    }
+
+    public static final String writeSortParam(String namespace, String sortExpression, int direction) {
+        StringBuilder builder = new StringBuilder();
+
         builder.append(namespace);
         builder.append("~");
         if (direction == ISort.DESCENDING)
             builder.append("-");
-        builder.append(_expr);
+        builder.append(sortExpression);
         return builder.toString();
     }
 }

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/AnchorCellDecorator.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/AnchorCellDecorator.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/AnchorCellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,88 @@
+/*
+ * 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.rendering.cell;
+
+import java.net.URISyntaxException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspContext;
+
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.AnchorCellModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.AnchorCellModel;
+import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecorator;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecoratorException;
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.tags.rendering.SpanTag;
+import org.apache.beehive.netui.tags.rendering.AnchorTag;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.tags.databinding.datagrid.DataGridUtil;
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ *
+ */
+public class AnchorCellDecorator
+    extends CellDecorator {
+
+    private static final Logger LOGGER = Logger.getInstance(AnchorCellDecorator.class);
+
+    /* todo: need to tie this into the grid's error reporting */
+    public void decorate(JspContext jspContext, AbstractRenderAppender appender, ColumnModel columnModel)
+        throws CellDecoratorException {
+
+        assert columnModel instanceof AnchorCellModel;
+
+        AnchorCellModel anchorCellModel = (AnchorCellModel)columnModel;
+        HttpServletRequest request = JspUtil.getRequest(jspContext);
+
+        SpanTag.State spanState = new SpanTag.State();
+        AnchorTag.State anchorState = anchorCellModel.getAnchorState();
+
+        DataGridModel dgm = DataGridUtil.getDataGridModel(jspContext);
+        assert dgm != null;
+
+        String url = null;
+        try {
+            url = JspUtil.createURL(anchorCellModel.getHref(),
+                                    anchorCellModel.getAction(),
+                                    null,
+                                    anchorCellModel.getScopeId(),
+                                    anchorCellModel.getParams(),
+                                    jspContext);
+        } catch (URISyntaxException mue) {
+
+            if (LOGGER.isErrorEnabled())
+                LOGGER.error("Exception creating URL with href " + anchorCellModel.getHref() + " action " + anchorCellModel.getAction(), mue);
+
+            throw new CellDecoratorException("An exception occurred creating an URL while decorating an Anchor", mue);
+        }
+
+        anchorState.href = url;
+
+        TagRenderingBase anchorTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
+        TagRenderingBase spanTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);
+
+        anchorTag.doStartTag(appender, anchorState);
+        spanTag.doStartTag(appender, spanState);
+        appender.append(anchorCellModel.getValue());
+        spanTag.doEndTag(appender);
+        anchorTag.doEndTag(appender);
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecorator.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecorator.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,34 @@
+/*
+ * 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.rendering.cell;
+
+import javax.servlet.jsp.JspContext;
+
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+
+/**
+ *
+ */
+public abstract class CellDecorator {
+
+    public abstract void decorate(JspContext jspContext,
+                                  AbstractRenderAppender appender,
+                                  ColumnModel columnModel)
+        throws CellDecoratorException;
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecoratorException.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecoratorException.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/CellDecoratorException.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,41 @@
+/*
+ * 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.rendering.cell;
+
+/**
+ *
+ */
+public class CellDecoratorException
+    extends RuntimeException {
+
+    public CellDecoratorException() {
+        super();
+    }
+
+    public CellDecoratorException(String message) {
+        super(message);
+    }
+
+    public CellDecoratorException(Throwable cause) {
+        super(cause);
+    }
+
+    public CellDecoratorException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/HeaderCellDecorator.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/HeaderCellDecorator.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/HeaderCellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,46 @@
+/*
+ * 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.rendering.cell;
+
+import javax.servlet.jsp.JspContext;
+
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.HeaderCellModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.HeaderCellModel;
+
+/**
+ *
+ */
+public class HeaderCellDecorator
+    extends CellDecorator {
+
+    public void decorate(JspContext jspContext, AbstractRenderAppender appender, ColumnModel columnModel)
+        throws CellDecoratorException {
+
+        assert columnModel instanceof HeaderCellModel;
+        HeaderCellModel headerCellModel = (HeaderCellModel)columnModel;
+
+        if (headerCellModel.getHeaderText() != null)
+            appender.append(headerCellModel.getHeaderText());
+        else if(headerCellModel.getBodyContent() != null)
+            appender.append(headerCellModel.getBodyContent());
+        else appender.append("&nbsp;");
+
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/ImageCellDecorator.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/ImageCellDecorator.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/ImageCellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,47 @@
+/*
+ * 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.rendering.cell;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspContext;
+
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.ImageCellModel;
+import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
+
+/**
+ *
+ */
+public class ImageCellDecorator
+    extends CellDecorator {
+
+    public void decorate(JspContext jspContext, AbstractRenderAppender appender, ColumnModel columnModel)
+        throws CellDecoratorException {
+
+        assert columnModel instanceof ImageCellModel;
+
+        ImageCellModel imageColumnModel = (ImageCellModel)columnModel;
+        HttpServletRequest request = JspUtil.getRequest(jspContext);
+
+        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, request);
+        br.doStartTag(appender, imageColumnModel.getImageState());
+        br.doEndTag(appender);
+    }
+}

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/LiteralCellDecorator.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/LiteralCellDecorator.java?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/LiteralCellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,51 @@
+/*
+ * 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.rendering.cell;
+
+import javax.servlet.jsp.JspContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.LiteralCellModel;
+import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
+
+/**
+ *
+ */
+public class LiteralCellDecorator
+    extends CellDecorator {
+
+    public void decorate(JspContext jspContext, AbstractRenderAppender appender, ColumnModel columnModel)
+        throws CellDecoratorException {
+
+        assert columnModel instanceof LiteralCellModel;
+        LiteralCellModel literalColumnModel = (LiteralCellModel)columnModel;
+
+        HttpServletRequest request = JspUtil.getRequest(jspContext);
+        TagRenderingBase span = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);
+
+        /* todo: need to support formatting here */
+        String formatted = columnModel.formatText(literalColumnModel.getValue());
+
+        span.doStartTag(appender, literalColumnModel.getSpanState());
+        appender.append(formatted);
+        span.doEndTag(appender);
+    }
+}

Added: 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=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,127 @@
+/*
+ * 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.rendering.cell;
+
+import java.util.Map;
+import java.net.URISyntaxException;
+import javax.servlet.jsp.JspContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
+import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.tags.rendering.AnchorTag;
+import org.apache.beehive.netui.tags.rendering.ImageTag;
+import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.html.HtmlConstants;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+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.util.JspUtil;
+import org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
+import org.apache.beehive.netui.databinding.datagrid.services.SortService;
+import org.apache.beehive.netui.util.logging.Logger;
+
+/**
+ *
+ */
+public class SortedCellDecorator
+    extends CellDecorator {
+
+    private static final Logger LOGGER = Logger.getInstance(SortedCellDecorator.class);
+
+    private CellDecorator _decorator;
+
+    public SortedCellDecorator(CellDecorator decorator) {
+        _decorator = decorator;
+    }
+
+    public void decorate(JspContext jspContext, AbstractRenderAppender appender, ColumnModel columnModel)
+        throws CellDecoratorException {
+
+        assert columnModel instanceof HeaderCellModel;
+        HeaderCellModel headerCellModel = (HeaderCellModel)columnModel;
+
+        String sortLink = null;
+
+        _decorator.decorate(jspContext, appender, columnModel);
+
+        if(headerCellModel.isSortable()) {
+            sortLink = buildSortLink(jspContext, headerCellModel);
+            appender.append("&nbsp;");
+            appender.append(sortLink);
+        }
+    }
+
+    protected String buildSortLink(JspContext jspContext, HeaderCellModel cellModel) {
+
+        HttpServletRequest request = JspUtil.getRequest(jspContext);
+        DataGridModel dgm = cellModel.getDataGridModel();
+        assert dgm != null;
+
+        DataGridStateService dgss = dgm.getDataGridStateService();
+        SortService ss = dgss.getSortService();
+
+        StringBuilder builder = new StringBuilder();
+        AbstractRenderAppender appender = new StringBuilderRenderAppender(builder);
+
+        TagRenderingBase imageRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, request);
+        TagRenderingBase anchorRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
+
+        AnchorTag.State aTag = new AnchorTag.State();
+        ImageTag.State imgTag = new ImageTag.State();
+
+        int sortDirection = ss.getSortDirection(cellModel.getSortExpression());
+
+        /* build icon for existing sort */
+        if(ss.isSorted(cellModel.getSortExpression()))
+            imgTag.src = dgss.getSortImagePath(request.getContextPath(), sortDirection);
+        else imgTag.src = dgss.getDefaultSortImagePath(request.getContextPath());
+
+        imgTag.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, "false");
+
+        Map queryParams = dgss.getSortQueryParamsMap(cellModel.getSortExpression());
+
+        String href = null;
+        try {
+            href = JspUtil.createURL(request.getRequestURI(),
+                                     cellModel.getSortAction(),
+                                     null,
+                                     cellModel.getScopeId(),
+                                     queryParams,
+                                     dgm.getJspContext());
+        }
+        catch(URISyntaxException se) {
+            String msg = "Exception creating sort URI";
+
+            if(LOGGER.isErrorEnabled())
+                LOGGER.error(msg, se);
+
+            throw new CellDecoratorException(msg, se);
+        }
+
+        aTag.href = href;
+
+        anchorRenderer.doStartTag(appender, aTag);
+        imageRenderer.doStartTag(appender, imgTag);
+        imageRenderer.doEndTag(appender);
+        anchorRenderer.doEndTag(appender);
+
+        return builder.toString();
+    }
+}

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/AbstractPagerRenderer.java	Wed Dec 29 19:01:25 2004
@@ -19,6 +19,7 @@
 
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
 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.rendering.IPagerRenderer;

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/FirstPreviousNextLastPagerRenderer.java	Wed Dec 29 19:01:25 2004
@@ -21,6 +21,10 @@
 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.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.AbstractPagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.AbstractPagerRenderer;
 
 public class FirstPreviousNextLastPagerRenderer
     extends AbstractPagerRenderer

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/impl/PreviousNextPagerRenderer.java	Wed Dec 29 19:01:25 2004
@@ -20,6 +20,10 @@
 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.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.services.PagerService;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.AbstractPagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.AbstractPagerRenderer;
 import org.apache.beehive.netui.util.logging.Logger;
 
 public class PreviousNextPagerRenderer

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/DataGridStateService.java	Wed Dec 29 19:01:25 2004
@@ -25,12 +25,14 @@
 
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.databinding.datagrid.model.ISort;
+import org.apache.beehive.netui.databinding.datagrid.model.impl.DefaultSort;
 
 /**
  * todo: need to support registering URL prefixes that have state service handlers
  * and should be omitted from regular URL construction.
  */
-public class DataGridStateService {
+public class DataGridStateService
+    implements java.io.Serializable {
 
     private static final Logger LOGGER = Logger.getInstance(DataGridStateService.class);
 
@@ -39,7 +41,7 @@
 
     public static final DataGridStateService createInstance(ServletRequest request, String namespace) {
         assert request != null;
-        assert namespace != null && !namespace.equals("");
+        assert namespace != null && !namespace.equals("");                          
 
         DataGridStateService dgss = new DataGridStateService(namespace);
         dgss.handleRequest(request);
@@ -50,8 +52,8 @@
     /* todo: need a factory for creating these state services */
     /**
      * Default constructor that builds a DataGridStateService with the default
-     * configuration including support for a {@link SortService} and a
-     * {@link FilterService}.
+     * configuration including support for a {@link org.apache.beehive.netui.databinding.datagrid.services.SortService} and a
+     * {@link org.apache.beehive.netui.databinding.datagrid.services.FilterService}.
      */
     private DataGridStateService(String namespace) {
         super();
@@ -79,7 +81,7 @@
         return _namespace;
     }
 
-    public Map getSortQueryParamsMap() {
+    public Map<String, String[]> buildSortQueryParamsMap() {
         ISort[] sorts = _sortService.getSorts();
 
         if(sorts == null)
@@ -90,18 +92,73 @@
             valueList.add(sorts[i].write(_namespace));
 
         String[] values = (String[])valueList.toArray(new String[0]);
-        HashMap map = new HashMap(values.length);
+        HashMap<String, String[]> map = new HashMap<String, String[]>(values.length);
         map.put(_sortService.getKey(), values);
 
         return map;
     }
-    
-    public Map getSortParamsMap() {
-        throw new UnsupportedOperationException("NYI");
+
+    public Map<String, String[]> buildSortQueryParamsMap(String sortExpression, int direction) {
+        /* todo: consolidate the query param map construction methods */
+        assert sortExpression != null;
+        assert direction == ISort.ASCENDING || direction == ISort.DESCENDING || direction == ISort.NONE;
+
+        ISort[] sorts = _sortService.getSorts();
+
+        ArrayList valueList = new ArrayList(5);
+        if(direction != ISort.NONE && !_sortService.isSorted(sortExpression))
+            valueList.add(DefaultSort.writeSortParam(_namespace, sortExpression, direction));
+
+        if(sorts != null) {
+            /* todo: deal with additional query params here */
+            for(int i = 0; i < sorts.length; i++) {
+                if(sorts[i].getSortExpression().equals(sortExpression)) {
+                    if(direction != ISort.NONE)
+                        /* todo: broke encapsulation here.  bad bad bad. */
+                        /* @todo: need to move this parameter handling into some sort of URLParams class that can be *fast* */
+                       valueList.add(DefaultSort.writeSortParam(_namespace, sorts[i].getSortExpression(), direction));
+                }
+                else valueList.add(sorts[i].write(_namespace));
+            }
+        }
+
+        HashMap<String, String[]> map = new HashMap<String, String[]>(valueList.size());
+        map.put(_sortService.getKey(), (String[])valueList.toArray(new String[0]));
+        return map;
     }
 
-    public String getSortParamsString(String sortExpression) {
-        throw new UnsupportedOperationException("NYI");
+    public String getSortImagePath(String contextPath, int direction) {
+        switch (direction)
+        {
+            case ISort.ASCENDING:
+                return contextPath + "/resources/images/sortdown.gif";
+            case ISort.DESCENDING:
+                return contextPath + "/resources/images/sortup.gif";
+            default:
+                  assert direction == ISort.NONE : "Encountered an invalid sort direction.";
+                    /* todo: need to flag on whether this is sort up or down and set the image accordingly */
+                    return getDefaultSortImagePath(contextPath);
+        }
+    }
+
+    public String getDefaultSortImagePath(String contextPath) {
+        /* todo: need to allow external configuration of this image path */
+        return contextPath + "/resources/images/sortable.gif";
+    }
+
+    public Map<String, String[]> getSortQueryParamsMap(String sortExpression) {
+        int sortDirection = _sortService.getSortDirection(sortExpression);
+
+        if(sortDirection == ISort.NONE) {
+            return buildSortQueryParamsMap(sortExpression, ISort.ASCENDING);
+        }
+        else if(sortDirection == ISort.ASCENDING) {
+            return buildSortQueryParamsMap(sortExpression, ISort.DESCENDING);
+        }
+        else if(sortDirection == ISort.DESCENDING) {
+            return buildSortQueryParamsMap(sortExpression, ISort.NONE);
+        }
+        else throw new IllegalStateException("Received invalid sort direction \"" + sortDirection + "\"");
     }
 
     private static final SortService ensureSortService(ServletRequest request, String namespace) {

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/services/SortService.java	Wed Dec 29 19:01:25 2004
@@ -27,7 +27,8 @@
 
 /**
  */
-public class SortService {
+public class SortService
+    implements java.io.Serializable {
     private static final Logger LOGGER = Logger.getInstance(SortService.class);
 
     private static final String SORT_DELIM = "~";
@@ -36,6 +37,7 @@
     public static final SortService getInstance(ServletRequest request, String namespace) {
         assert request != null;
         assert namespace != null && !namespace.equals("");
+        
         SortService svc = new SortService(namespace);
         svc.handleRequest(request);
         return svc;
@@ -90,6 +92,7 @@
 
     public boolean addSort(String sortExpression, int direction) {
         assert direction == ISort.NONE || direction == ISort.ASCENDING || direction == ISort.DESCENDING;
+        //ISort sort = new DefaultSort(sortExpression, direction);
         throw new UnsupportedOperationException("NYI");
     }
 
@@ -142,6 +145,6 @@
             }
         }
 
-        return (ISort[]) sorts.toArray(new ISort[0]);
+        return (ISort[])sorts.toArray(new ISort[0]);
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/JspUtil.java	Wed Dec 29 19:01:25 2004
@@ -31,8 +31,9 @@
 
 public class JspUtil
 {
-    private static final Logger _logger = Logger.getInstance(JspUtil.class);
+    private static final Logger LOGGER = Logger.getInstance(JspUtil.class);
 
+    /* do not construct */
     private JspUtil() {}
 
     public static final HttpServletRequest getRequest(JspContext jspContext)
@@ -54,10 +55,9 @@
     {
         PageContext pageContext = getPageContext(jspContext);
 
-        // Add the jpfScopeID parameter, if the scope attribute is present.
+        /* add the jpfScopeID parameter, if the scope attribute is present. */
         if(scope != null)
         {
-            // todo: this won't work -- need to return a URL object here.  probably need to write that MutableURL class...
             if(params == null)
                 params = new HashMap();
 
@@ -67,20 +67,15 @@
         // Generate the opening anchor element
         MutableURI uri = null;
         if(action != null)
-        {
             uri = PageFlowTagUtils.rewriteActionURL(pageContext, action, params, location);
-        }
         else if(href != null)
-        {
             uri = PageFlowTagUtils.rewriteHrefURL(pageContext, href, params, location);
-        }
 
         assert uri != null;
 
-        //TODO... shouldn't this also be a call to response.encodeURL(uri.toString()) for session ID?
-        if (uri.isAbsolute()) {
+        /* todo: shouldn't this also be a call to response.encodeURL(uri.toString()) for session ID? */
+        if (uri.isAbsolute())
             return uri.toXMLString();
-        }
-        return uri.toString();
+        else return uri.toString();
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java	Wed Dec 29 19:01:25 2004
@@ -18,10 +18,8 @@
 package org.apache.beehive.netui.tags.databinding.datagrid;
 
 import java.io.IOException;
-import java.io.StringWriter;
 import java.util.ArrayList;
 import javax.servlet.jsp.tagext.JspTag;
-import javax.servlet.jsp.tagext.JspFragment;
 import javax.servlet.jsp.JspException;
 
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
@@ -31,7 +29,6 @@
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
 import org.apache.beehive.netui.tags.html.Formattable;
-import org.apache.beehive.netui.tags.html.FormatTag;
 import org.apache.beehive.netui.tags.html.FormatTag.Formatter;
 import org.apache.beehive.netui.util.logging.Logger;
 
@@ -39,17 +36,13 @@
  *
  */
 public abstract class AbstractColumn
-        extends AbstractSimpleTag
-        implements Formattable {
-
-    private static final Logger _logger = Logger.getInstance(AbstractColumn.class);
-
-    static final String COLUMN_MODEL_KEY = "column";
+    extends AbstractSimpleTag
+    implements Formattable {
 
+    private static final Logger LOGGER = Logger.getInstance(AbstractColumn.class);
     private static final String EMPTY_CELL = "&nbsp;";
 
     private String _headerText = null;
-    private ArrayList _formatters = null;
 
     /**
      * @netui:attribute required="false" rtexprvalue="true"
@@ -63,10 +56,7 @@
     }
 
     public void addFormatter(Formatter formatter) {
-        if(_formatters == null)
-            _formatters = new ArrayList();
-
-        _formatters.add(formatter);
+        internalGetColumnModel().addFormatter(formatter);
     }
 
     /**
@@ -83,7 +73,7 @@
      * @throws IOException
      */
     public void doTag()
-            throws JspException, IOException {
+        throws JspException, IOException {
 
         /* todo: this should be done in a TLV */
         JspTag parent = findAncestorWithClass(this, Columns.class);
@@ -110,16 +100,18 @@
             assert renderState == ColumnsModel.DATA_RENDER_STATE ||
                    renderState == ColumnsModel.HEADER_RENDER_STATE;
 
-            ColumnModel model = new ColumnModel(dataGridModel, columns);
+            ColumnModel model = internalGetColumnModel();
+            model.setDataGridModel(dataGridModel);
+            model.setColumnsModel(columns);
 
             applyAttributes();
 
-            if (_logger.isDebugEnabled()) {
-                _logger.debug("current column\n\trender state: " + renderState);
-                _logger.debug("\tidentity hash code: " + System.identityHashCode(model));
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("current column\n\trender state: " + renderState);
+                LOGGER.debug("\tidentity hash code: " + System.identityHashCode(model));
             }
 
-            getJspContext().setAttribute(COLUMN_MODEL_KEY, model);
+            DataGridUtil.putColumnModel(getJspContext(), model);
 
             StringBuilder content = new StringBuilder();
             AbstractRenderAppender appender = new StringBuilderRenderAppender(content);
@@ -133,12 +125,14 @@
             if (content != null && content.length() > 0)
                 getJspContext().getOut().println(content.toString());
 
-            getJspContext().removeAttribute(COLUMN_MODEL_KEY);
+            DataGridUtil.removeColumnModel(getJspContext());
         }
 
         return;
     }
 
+    protected abstract ColumnModel internalGetColumnModel();
+
     protected abstract void renderHeaderCell(AbstractRenderAppender appender) throws IOException, JspException;
 
     protected abstract void renderDataCell(AbstractRenderAppender appender) throws IOException, JspException;
@@ -150,27 +144,5 @@
     /* todo: apply the global sort / filter attributes here */
     protected void applyAttributes()
         throws JspException {
-    }
-
-    protected String formatText(Object text) {
-        if (text == null)
-            return null;
-
-        if (_formatters == null)
-            return text.toString();
-
-        for (int i = 0; i < _formatters.size(); i++) {
-            FormatTag.Formatter currentFormatter = (FormatTag.Formatter) _formatters.get(i);
-            assert currentFormatter != null;
-            try {
-                text = currentFormatter.format(text);
-            } catch (JspException e) {
-                // todo: need a way to register errors in the datagridmodel so that they can be reported back to the rendering engine
-                if (_logger.isErrorEnabled())
-                    _logger.error("A formatter of type \"" + currentFormatter.getClass().getName() + "\" threw an exception " + e, e);
-            }
-        }
-
-        return text.toString();
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java	Wed Dec 29 19:01:25 2004
@@ -23,7 +23,11 @@
 import javax.servlet.jsp.JspException;
 
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.HeaderCellModel;
 import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.HeaderCellDecorator;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecorator;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.SortedCellDecorator;
 import org.apache.beehive.netui.tags.IAttributeConsumer;
 import org.apache.beehive.netui.tags.html.HtmlConstants;
 import org.apache.beehive.netui.tags.rendering.ThTag;
@@ -41,10 +45,47 @@
 {
     private static final String HEADER_FACET_NAME = "header";
     private static final String DEFAULT_FACET_NAME = "default";
+    private static final CellDecorator DEFAULT_HEADER_RENDERER;
+    private static final CellDecorator SORTED_HEADER_RENDERER;
+
+    static {
+        DEFAULT_HEADER_RENDERER = new HeaderCellDecorator();
+        SORTED_HEADER_RENDERER = new SortedCellDecorator(DEFAULT_HEADER_RENDERER);
+    }
 
     private TdTag.State _tdState = new TdTag.State();
     private ThTag.State _thState = new ThTag.State();
 
+    private HeaderCellModel _headerCellModel = new HeaderCellModel();
+
+    /**
+     * @netui:attribute required="false" rtexprvalue="true" description="Boolean switch that sets whether the default sort link should be rendered"
+     */
+    public void setDisableSortRendering(boolean disableSortRendering) {
+        _headerCellModel.setDisableSortRendering(disableSortRendering);
+    }
+
+    /**
+     * @netui:attribute required="false" rtexprvalue="true" description="String expression that represents the field to sort when sorting data in this column"
+     */
+    public void setSortExpression(String sortExpression) {
+        _headerCellModel.setSortExpression(sortExpression);
+    }
+
+    /**
+     * @netui:attribute required="false" rtexprvalue="true" description="Optional String scopeId that qualifies URL parameters into a particular scope"
+     */
+    public void setScopeId(String scopeId) {
+        _headerCellModel.setScopeId(scopeId);
+    }
+
+    /**
+     * @netui:attribute required="false" rtexprvalue="true" description="The action to run when performing a sort on this column"
+     */
+    public void setSortAction(String sortAction) {
+        _headerCellModel.setSortAction(sortAction);
+    }
+
     /**
      * Sets the onClick javascript event.
      *
@@ -368,7 +409,7 @@
      * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event"
      */
     public void setHeaderOnMouseOver(String onMouseOver) {
-        internalGetThState().registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOUT, onMouseOver);
+        internalGetThState().registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOVER, onMouseOver);
     }
 
     /**
@@ -428,23 +469,23 @@
      * @param facet The name of a facet to which the attribute will be applied.  This is optional.
      */
     public void setAttribute(String name, String value, String facet)
+        throws JspException
     {
         /* TODO: need to handle pluggable facets here */
         if(facet != null && facet.equals(HEADER_FACET_NAME))
-        {
             addStateAttribute(internalGetThState(), name, value, facet);
-        }
         else if(facet == null || !facet.equals(DEFAULT_FACET_NAME))
-        {
             addStateAttribute(internalGetHtmlState(), name, value, facet);
-        }
-        else
-        {
+        else {
             String s = Bundle.getString("Tags_AttributeFacetNotSupported", new Object[]{facet});
-            throw new RuntimeException(s);
+            throw new JspException(s);
         }
     }
 
+    /**
+     *
+     * @return
+     */
     protected abstract AbstractHtmlState internalGetHtmlState();
 
     protected void renderHeaderCell(AbstractRenderAppender appender)
@@ -456,16 +497,17 @@
         TableRenderer tableRenderer = dataGridModel.getTableRenderer();
         assert tableRenderer != null;
 
-        if (_thState.styleClass == null)
-            _thState.styleClass = dataGridModel.getCssPolicy().getHeaderCellClass();
+        if (internalGetThState().styleClass == null)
+            internalGetThState().styleClass = dataGridModel.getCssPolicy().getHeaderCellClass();
 
-        tableRenderer.openHeaderCell(_thState, appender);
+        tableRenderer.openHeaderCell(internalGetThState(), appender);
         renderHeaderCellContents(appender);
         tableRenderer.closeHeaderCell(appender);
     }
 
     protected void renderDataCell(AbstractRenderAppender appender)
         throws IOException, JspException {
+
         DataGridModel dataGridModel = DataGridUtil.getDataGridModel(getJspContext());
         assert dataGridModel != null;
 
@@ -476,13 +518,13 @@
             _tdState.styleClass = dataGridModel.getCssPolicy().getDataCellClass();
 
         /* todo: this needs to run in order to cause the nested parameter / attribute / etc tags to do their work */
-        /* this could be faster -- would be nice to have the sub-tag *ask* to do this rather than always do it */
+        /* hopefully, the container optimizes this so that if the JspFragment is empty, the invocation is cheap */
         JspFragment fragment = getJspBody();
         StringWriter sw = new StringWriter();
-        String bodyContent = null;
         if (fragment != null) {
             fragment.invoke(sw);
-            bodyContent = sw.toString();
+            /* ignore the return value */
+            sw.toString();
         }
 
         tableRenderer.openTableCell(_tdState, appender);
@@ -490,6 +532,7 @@
         tableRenderer.closeTableCell(appender);
      }
 
+    /* todo: support rendering sort / filter links */
     protected void renderHeaderCellContents(AbstractRenderAppender appender)
         throws IOException, JspException {
 
@@ -501,29 +544,43 @@
             bodyContent = sw.toString();
         }
 
-        if (getHeaderText() != null)
-            appender.append(getHeaderText());
-        else if (bodyContent != null)
-            appender.append(bodyContent);
-        else renderEmptyHeaderCell(appender);
+        _headerCellModel.setDataGridModel(DataGridUtil.getDataGridModel(getJspContext()));
+        _headerCellModel.setColumnsModel(DataGridUtil.getColumnsModel(getJspContext()));
+        _headerCellModel.setBodyContent(bodyContent);
+        _headerCellModel.setHeaderText(getHeaderText());
+
+        if(_headerCellModel.isDisableSortRendering())
+            DEFAULT_HEADER_RENDERER.decorate(getJspContext(), appender, _headerCellModel);
+        else SORTED_HEADER_RENDERER.decorate(getJspContext(), appender, _headerCellModel);
     }
 
     protected abstract void renderDataCellContents(AbstractRenderAppender appender);
 
+    protected void applyAttributes()
+        throws JspException {
+        super.applyAttributes();
+
+        if(_headerCellModel.isSortable()) {
+            if(_headerCellModel.getSortExpression() == null)
+                throw new JspException("Can not enable sorting on a column with a null sort expression");
+        }
+    }
+
     private void addStateAttribute(AbstractHtmlState state, String name, String value, String facet)
+        throws JspException
     {
         boolean error = false;
 
         // validate the name attribute, in the case of an error simply return.
         if (name == null || name.length() <= 0) {
             String s = Bundle.getString("Tags_AttributeNameNotSet");
-            throw new RuntimeException(s);
+            throw new JspException(s);
         }
 
         // it's not legal to set the id or name attributes this way
         if (name != null && (name.equals(HtmlConstants.ID) || name.equals(HtmlConstants.NAME))) {
             String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
-            throw new RuntimeException(s);
+            throw new JspException(s);
         }
         if (error)
             return;

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java	Wed Dec 29 19:01:25 2004
@@ -18,23 +18,16 @@
 package org.apache.beehive.netui.tags.databinding.datagrid;
 
 import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.http.HttpServletRequest;
 
-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.model.cell.AnchorCellModel;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.AnchorCellModel;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.AnchorCellDecorator;
 import org.apache.beehive.netui.tags.html.URLParams;
-import org.apache.beehive.netui.tags.rendering.AnchorTag;
 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
-import org.apache.beehive.netui.tags.rendering.SpanTag;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
-import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.util.ParamHelper;
 
-import java.net.URISyntaxException;
-import java.util.HashMap;
-
 /**
  * @netui:tag name="anchorColumn"
  *            description="Renders a column of anchors in a NetUI data grid"
@@ -46,15 +39,9 @@
     extends AbstractHtmlColumn
     implements URLParams {
 
-    private static final Logger _logger = Logger.getInstance(AnchorColumn.class);
-
-    private String _value = null;
-    private String _href = null;
-    private String _scopeId = null;
-    private String _action = null;
-    private HashMap _params = null;
+    private static final AnchorCellDecorator DECORATOR = new AnchorCellDecorator();
 
-    private AnchorTag.State _anchorState = new AnchorTag.State();
+    private AnchorCellModel _anchorCellModel = new AnchorCellModel();
 
     public String getTagName() {
         return "AnchorColumn";
@@ -67,21 +54,21 @@
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setHref(String href) {
-        _href = href;
+        _anchorCellModel.setHref(href);
     }
 
     /**
      * @netui:attribute required="false"
      */
-    public void setScope(String scope) {
-        _scopeId = scope;
+    public void setScope(String scopeId) {
+        _anchorCellModel.setScopeId(scopeId);
     }
 
     /**
      * @netui:attribute required="true" rtexprvalue="true"
      */
     public void setValue(String value) {
-        _value = value;
+        _anchorCellModel.setValue(value);
     }
 
     /**
@@ -89,58 +76,33 @@
      * @netui.tldx:attribute category="general" reftype="netui-action-url"
      */
     public void setAction(String action) {
-        _action = action;
+        _anchorCellModel.setAction((action));
     }
 
     public void addParameter(String name, Object value)
-            throws JspException {
-        if (_params == null)
-            _params = new HashMap();
+        throws JspException {
 
-        ParamHelper.addParam(_params, name, value);
+        ParamHelper.addParam(_anchorCellModel.getParams(), name, value);
     }
 
     protected void applyAttributes()
             throws JspException {
         super.applyAttributes();
 
-        if (_action != null && _href != null)
-            throw new JspException("Unable to create AnchorColumnModel.  The 'action' and 'href' attributes can not both be set.");
+        if (_anchorCellModel.getAction() != null && _anchorCellModel.getHref() != null)
+            throw new JspException("Unable to create AnchorCellModel.  The 'action' and 'href' attributes can not both be set.");
     }
 
     protected AbstractHtmlState internalGetHtmlState()
     {
-        return _anchorState;
+        return _anchorCellModel.getAnchorState();
     }
 
     protected void renderDataCellContents(AbstractRenderAppender appender) {
+        DECORATOR.decorate(getJspContext(), appender, _anchorCellModel);
+    }
 
-        HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
-
-        SpanTag.State spanState = new SpanTag.State();
-        AnchorTag.State anchorState = _anchorState;
-
-        DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
-        assert dgm != null;
-
-        String url = null;
-        try {
-            url = JspUtil.createURL(_href, _action, null, _scopeId, _params, dgm.getJspContext());
-        } catch (URISyntaxException mue) {
-            /* todo: real, tag based error reporting */
-            if (_logger.isErrorEnabled())
-                _logger.error("Exception creating URL with href " + _href + " action " + _action, mue);
-        }
-
-        anchorState.href = url;
-
-        TagRenderingBase anchorTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
-        TagRenderingBase spanTag = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);
-
-        anchorTag.doStartTag(appender, anchorState);
-        spanTag.doStartTag(appender, spanState);
-        appender.append(_value);
-        spanTag.doEndTag(appender);
-        anchorTag.doEndTag(appender);
+    protected ColumnModel internalGetColumnModel() {
+        return _anchorCellModel;
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java	Wed Dec 29 19:01:25 2004
@@ -26,7 +26,6 @@
 import org.apache.beehive.netui.databinding.datagrid.model.ColumnsModel;
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.model.StylePolicy;
-import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
 import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
@@ -45,8 +44,6 @@
 public class Columns
     extends AbstractSimpleTag
 {
-    static final String COLUMNS_MODEL_KEY = "columns";
-
     public String getTagName() {
         return "Columns";
     }
@@ -74,7 +71,7 @@
             ColumnsModel columnsModel = new ColumnsModel(dataGridModel);
             assert columnsModel != null;
 
-            jspContext.setAttribute(COLUMNS_MODEL_KEY, columnsModel);
+            DataGridUtil.putColumnsModel(jspContext, columnsModel);
 
             StringBuilder content = new StringBuilder();
             AbstractRenderAppender appender = new StringBuilderRenderAppender(content);
@@ -94,7 +91,7 @@
             {
                 sw = new StringWriter();
                 TrTag.State trState = new TrTag.State();
-                initDataRowStyle(trState, dataGridModel);
+                setupDataRowStyle(trState, dataGridModel);
                 tableRenderer.openTableRow(trState, appender);
                 dataGridModel.nextDataItem();
                 fragment.invoke(sw);
@@ -104,12 +101,12 @@
 
             columnsModel.setRenderState(ColumnsModel.NO_RENDER_STATE);
 
-            jspContext.removeAttribute(COLUMNS_MODEL_KEY);
+            DataGridUtil.removeColumnsModel(getJspContext());
             jspContext.getOut().write(content.toString());
         }
     }
 
-    private final void initDataRowStyle(TrTag.State state, DataGridModel dataGridModel) {
+    private final void setupDataRowStyle(TrTag.State state, DataGridModel dataGridModel) {
         assert state != null;
         assert dataGridModel != null;
 

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&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java&r2=123694
==============================================================================
--- 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	Wed Dec 29 19:01:25 2004
@@ -21,6 +21,7 @@
 import org.apache.beehive.netui.databinding.datagrid.model.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.rendering.IPagerRenderer;
 import org.apache.beehive.netui.databinding.datagrid.rendering.impl.FirstPreviousNextLastPagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.impl.FirstPreviousNextLastPagerRenderer;
 import org.apache.beehive.netui.databinding.datagrid.rendering.impl.PreviousNextPagerRenderer;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.util.logging.Logger;

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=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java&r2=123694
==============================================================================
--- 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	Wed Dec 29 19:01:25 2004
@@ -33,15 +33,14 @@
 import org.apache.beehive.netui.databinding.datagrid.model.impl.EmptyStylePolicy;
 import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
 import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
+import org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService;
 import org.apache.beehive.netui.script.common.IDataAccessProvider;
 import org.apache.beehive.netui.script.common.DataAccessProviderStack;
 import org.apache.beehive.netui.tags.ExpressionHandling;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
-import org.apache.beehive.netui.tags.rendering.TableTag;
-import org.apache.beehive.netui.tags.rendering.TrTag;
-import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.util.iterator.IteratorFactory;
 
 /**
@@ -55,10 +54,6 @@
         extends AbstractSimpleTag
         implements IDataAccessProvider {
 
-    private static final Logger _logger = Logger.getInstance(DataGrid.class);
-
-    static final String DATA_GRID_MODEL_KEY = "dataGrid";
-
     private static final String DEFAULT_STYLE_POLICY_VALUE = "default";
     private static final String NO_STYLE_POLICY_VALUE = "none";
     private static final StylePolicy DEFAULT_STYLE_POLICY = new DefaultStylePolicy();
@@ -70,6 +65,7 @@
     private String _styleClassPrefix = null;
     private String _dataSource = null;
     private DataGridModel _gridModel = null;
+    private DataGridStateService _dataGridStateService = null;
 
     public String getTagName() {
         return "DataGrid";
@@ -111,6 +107,7 @@
         _disableDefaultPager = disableDefaultPager;
     }
 
+    /* todo: should this be wrapped in try / finally so that the PageContext gets cleaned up correctly? */
     public void doTag()
         throws JspException, IOException {
 
@@ -136,89 +133,85 @@
         TableRenderer tableRenderer = new TableRenderer(request, stylePolicy);
 
         _gridModel = new DataGridModel(getJspContext(), _name, dataSet);
+        if(_dataGridStateService != null)
+            _gridModel.setDataGridStateService(_dataGridStateService);
+
         _gridModel.setCssPolicy(stylePolicy);
         _gridModel.setTableRenderer(tableRenderer);
 
         JspFragment fragment = getJspBody();
-        if (fragment == null)
+        if (fragment != null)
         {
-            cleanup();
-            return;
-        }
 
-        StringBuilder builder = new StringBuilder(2048);
-        AbstractRenderAppender appender = new StringBuilderRenderAppender(builder);
+            StringBuilder builder = new StringBuilder(2048);
+            AbstractRenderAppender appender = new StringBuilderRenderAppender(builder);
 
-        /* todo: optimize -- this doesn't need to happen when the data set is empty */
-        DataAccessProviderStack.addDataAccessProvider(this, getJspContext());
-        getJspContext().setAttribute(DATA_GRID_MODEL_KEY, _gridModel);
-
-        /*
-           allow sub-tags to do work during START before rendering
-           this makes it possible to have tags out of order and to
-           have rendering work correctly
-
-           todo: should you be able to turn this off for perf?
-         */
-        StringWriter sw = new StringWriter();
-        fragment.invoke(sw);
-
-        if(_gridModel.getPagerModel() == null)
-            _gridModel.setPagerModel(new PagerModel(_gridModel));
-
-        /*
-          now that the model objects have been initialized, it's time to start rendering
-         */
-        _gridModel.beforeRender();
-        _gridModel.setRenderState(DataGridModel.START_RENDER_STATE);
-
-        if (!_disableDefaultPager)
-            _gridModel.renderPager(appender);
-
-        tableRenderer.openTable(null, appender);
-
-        /* render the caption */
-        _gridModel.setRenderState(DataGridModel.CAPTION_RENDER_STATE);
-        sw = new StringWriter();
-        fragment.invoke(sw);
-        String caption = sw.toString();
-        if (caption != null && !caption.trim().equals("")) {
-            tableRenderer.openCaption(appender);
-            appender.append(caption);
-            tableRenderer.closeCaption(appender);
-        }
+            /* todo: optimize -- this doesn't need to happen when the data set is empty */
+            DataAccessProviderStack.addDataAccessProvider(this, getJspContext());
+            DataGridUtil.putDataGridModel(getJspContext(), _gridModel);
+
+            /*
+               allow sub-tags to do work during START before rendering
+               this makes it possible to have tags out of order and to
+               have rendering work correctly
+
+               todo: should you be able to turn this off for perf?
+             */
+            StringWriter sw = new StringWriter();
+            fragment.invoke(sw);
+
+            if(_gridModel.getPagerModel() == null)
+                _gridModel.setPagerModel(new PagerModel(_gridModel));
+
+            /*
+              now that the model objects have been initialized, it's time to start rendering
+             */
+            _gridModel.beforeRender();
+            _gridModel.setRenderState(DataGridModel.START_RENDER_STATE);
+
+            if (!_disableDefaultPager)
+                _gridModel.renderPager(appender);
+
+            tableRenderer.openTable(null, appender);
+
+            /* render the caption */
+            _gridModel.setRenderState(DataGridModel.CAPTION_RENDER_STATE);
+            sw = new StringWriter();
+            fragment.invoke(sw);
+            String caption = sw.toString();
+            if (caption != null && !caption.trim().equals("")) {
+                tableRenderer.openCaption(appender);
+                appender.append(caption);
+                tableRenderer.closeCaption(appender);
+            }
+
+            /* render the grid rows (header and data) */
+            _gridModel.setRenderState(DataGridModel.GRID_RENDER_STATE);
+            sw = new StringWriter();
+            fragment.invoke(sw);
+            appender.append(sw.toString());
+
+            /* render the footer */
+            _gridModel.setRenderState(DataGridModel.FOOTER_RENDER_STATE);
+            sw = new StringWriter();
+            fragment.invoke(sw);
+            String footer = sw.toString();
+            String trimmed = footer.trim();
+            if (footer != null && !trimmed.trim().equals("")) {
+                tableRenderer.openFooterRow(null, appender);
+                appender.append(footer);
+                tableRenderer.closeFooterRow(appender);
+            }
 
-        /* render the grid rows (header and data) */
-        _gridModel.setRenderState(DataGridModel.GRID_RENDER_STATE);
-        sw = new StringWriter();
-        fragment.invoke(sw);
-        appender.append(sw.toString());
-
-        /* render the footer */
-        _gridModel.setRenderState(DataGridModel.FOOTER_RENDER_STATE);
-        sw = new StringWriter();
-        fragment.invoke(sw);
-        String footer = sw.toString();
-        String trimmed = footer.trim();
-        if (footer != null && !trimmed.trim().equals("")) {
-            tableRenderer.openFooterRow(null, appender);
-            appender.append(footer);
-            tableRenderer.closeFooterRow(appender);
-        }
+            tableRenderer.closeTable(appender);
 
-        tableRenderer.closeTable(appender);
+            _gridModel.setRenderState(DataGridModel.END_RENDER_STATE);
 
-        _gridModel.setRenderState(DataGridModel.END_RENDER_STATE);
-
-        write(builder.toString());
-
-        cleanup();
-    }
+            write(builder.toString());
+        }
 
-    private void cleanup()
-    {
         DataAccessProviderStack.removeDataAccessProvider(getJspContext());
-        getJspContext().removeAttribute(DATA_GRID_MODEL_KEY);
+        DataGridUtil.removeDataGridModel(getJspContext());
     }
 
     /* ===========================================================
@@ -232,8 +225,6 @@
     }
 
     public Object getCurrentItem() {
-        if (_logger.isDebugEnabled()) _logger.debug("current item: " + _gridModel.getCurrentItem());
-
         return _gridModel.getCurrentItem();
     }
 
@@ -245,9 +236,8 @@
         return "{" + _dataSource + "}";
     }
 
+    /* todo: seems that this should be done via the stack of DAPs in the PageContext */
     public IDataAccessProvider getProviderParent() {
-        IDataAccessProvider dap =
-                (IDataAccessProvider) SimpleTagSupport.findAncestorWithClass(this, IDataAccessProvider.class);
-        return dap;
+        return (IDataAccessProvider)SimpleTagSupport.findAncestorWithClass(this, IDataAccessProvider.class);
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java	Wed Dec 29 19:01:25 2004
@@ -17,30 +17,60 @@
  */
 package org.apache.beehive.netui.tags.databinding.datagrid;
 
+import javax.servlet.jsp.JspContext;
+
 import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
 import org.apache.beehive.netui.databinding.datagrid.model.ColumnsModel;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
 
-import javax.servlet.jsp.JspContext;
+/* todo: need to provide add / remove methods here so that the data model and JspContext interactions are captured in a single location */
 
+/**
+ *
+ */
 public class DataGridUtil {
 
-    private DataGridUtil() {}
+    private static final String DATA_GRID_MODEL_KEY = "dataGrid";
+    private static final String COLUMNS_MODEL_KEY = "columns";
+    private static final String COLUMN_MODEL_KEY = "column";
 
-    public static final DataGridModel getDataGridModel(JspContext jspContext)
-    {
-        Object model = jspContext.getAttribute(DataGrid.DATA_GRID_MODEL_KEY);
+    private DataGridUtil() {
+    }
 
+    public static final DataGridModel getDataGridModel(JspContext jspContext) {
+        Object model = jspContext.getAttribute(DATA_GRID_MODEL_KEY);
         assert model != null ? model instanceof DataGridModel : true;
-
         return (DataGridModel)model;
     }
 
-    public static final ColumnsModel getColumnsModel(JspContext jspContext)
-    {
-        Object model = jspContext.getAttribute(Columns.COLUMNS_MODEL_KEY);
+    public static final void putDataGridModel(JspContext jspContext, DataGridModel dataGridModel) {
+        jspContext.setAttribute(DATA_GRID_MODEL_KEY, dataGridModel);
+    }
+
+    public static final void removeDataGridModel(JspContext jspContext) {
+        jspContext.removeAttribute(DATA_GRID_MODEL_KEY);
+    }
 
+    public static final ColumnsModel getColumnsModel(JspContext jspContext) {
+        Object model = jspContext.getAttribute(COLUMNS_MODEL_KEY);
         assert model != null ? model instanceof ColumnsModel : true;
+        return (ColumnsModel) model;
+    }
+
+    public static final void putColumnsModel(JspContext jspContext, ColumnsModel columnsModel) {
+        jspContext.setAttribute(COLUMNS_MODEL_KEY, columnsModel);
+    }
+
+    public static final void removeColumnsModel(JspContext jspContext) {
+        jspContext.removeAttribute(COLUMNS_MODEL_KEY);
+    }
+
+    public static final void putColumnModel(JspContext jspContext, ColumnModel columnModel) {
+        jspContext.setAttribute(COLUMN_MODEL_KEY, columnModel);
+    }
 
-        return (ColumnsModel)model;
+    public static final void removeColumnModel(JspContext jspContext) {
+        assert jspContext.getAttribute(COLUMN_MODEL_KEY) != null : "Did not find a ColumnModel under the key " + COLUMN_MODEL_KEY;
+        jspContext.removeAttribute(COLUMN_MODEL_KEY);
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java	Wed Dec 29 19:01:25 2004
@@ -17,15 +17,13 @@
  */
 package org.apache.beehive.netui.tags.databinding.datagrid;
 
+import org.apache.beehive.netui.databinding.datagrid.model.cell.ImageCellModel;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.ImageCellDecorator;
 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
-import org.apache.beehive.netui.tags.rendering.ImageTag;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
 import org.apache.beehive.netui.tags.html.HtmlConstants;
 
-import javax.servlet.jsp.PageContext;
-import javax.servlet.http.HttpServletRequest;
-
 /**
  * 
  * @netui:tag name="imageColumn" description="Renders a column of images in a NetUI data grid" body-content="scriptless"
@@ -35,7 +33,9 @@
 public class ImageColumn
     extends AbstractHtmlColumn
 {
-    private ImageTag.State _imageState = null;
+    private static final ImageCellDecorator DECORATOR = new ImageCellDecorator();
+
+    private ImageCellModel _imageColumnModel = null;
 
     /**
      * @jsptagref.attributedescription The source of the image to display.
@@ -45,21 +45,21 @@
      * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.URIPropertyClass"  reftype="img-url"
      */
     public void setSrc(String src) {
-        internalGetImageState().src = src;
+        _imageColumnModel.getImageState().src = src;
     }
 
     /**
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setAlign(String align) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.ALIGN, align);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.ALIGN, align);
     }
 
     /**
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setHspace(String hspace) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.HSPACE, hspace);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.HSPACE, hspace);
     }
 
     /**
@@ -69,14 +69,14 @@
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setVspace(String vspace) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.VSPACE, vspace);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.VSPACE, vspace);
     }
 
     /**
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setBorder(String border) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, border);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, border);
     }
 
     /**
@@ -86,7 +86,7 @@
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setHeight(String height) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.HEIGHT, height);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.HEIGHT, height);
     }
 
     /**
@@ -96,7 +96,7 @@
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setWidth(String width) {
-        internalGetImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.WIDTH, width);
+        _imageColumnModel.getImageState().registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.WIDTH, width);
     }
 
     public String getTagName()
@@ -106,23 +106,20 @@
 
     public void renderDataCellContents(AbstractRenderAppender appender)
     {
-        HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
-
-        TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, request);
-        br.doStartTag(appender, _imageState);
-        br.doEndTag(appender);
+        DECORATOR.decorate(getJspContext(), appender, _imageColumnModel);
     }
 
-    private ImageTag.State internalGetImageState() {
-        if(_imageState == null)
-            _imageState = new ImageTag.State();
-
-        return _imageState;
+    private AbstractHtmlState internalGetImageState() {
+        return _imageColumnModel.getImageState();
     }
 
     protected AbstractHtmlState internalGetHtmlState()
     {
         return internalGetImageState();
+    }
+
+    protected ColumnModel internalGetColumnModel() {
+        return _imageColumnModel;
     }
 }
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java&r1=123693&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java	Wed Dec 29 19:01:25 2004
@@ -21,6 +21,10 @@
 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.LiteralCellModel;
+import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
+import org.apache.beehive.netui.databinding.datagrid.model.cell.LiteralCellModel;
+import org.apache.beehive.netui.databinding.datagrid.rendering.cell.LiteralCellDecorator;
 
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.PageContext;
@@ -37,42 +41,31 @@
 public class LiteralColumn
     extends AbstractHtmlColumn
 {
-    private static final SpanTag.State DEFAULT_SPAN_STATE = new SpanTag.State();
+    private static final LiteralCellDecorator DECORATOR = new LiteralCellDecorator();
 
-    private String _value = null;
-    private SpanTag.State _spanState = new SpanTag.State();
+    private LiteralCellModel _literalColumnModel = new LiteralCellModel();
 
     public String getTagName() {
-        return "LiteralColumnModel";
+        return "LiteralCellModel";
     }
 
     /**
      * @netui:attribute required="true" rtexprvalue="true"
      */
     public void setValue(String value) {
-        _value = value;
-    }
-
-    protected void applyAttributes()
-        throws JspException {
-        super.applyAttributes();
-
-        /* todo: need to apply the <span> HTML state information to the ColumnModel here */
+        _literalColumnModel.setValue(value);
     }
 
     protected void renderDataCellContents(AbstractRenderAppender appender) {
-        HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
-        TagRenderingBase span = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);
-
-        String formatted = formatText(_value);
-
-        span.doStartTag(appender, _spanState != null ? _spanState : DEFAULT_SPAN_STATE);
-        appender.append(formatted);
-        span.doEndTag(appender);
+        DECORATOR.decorate(getJspContext(), appender, _literalColumnModel);
     }
 
     protected AbstractHtmlState internalGetHtmlState()
     {
-        return _spanState;
+        return _literalColumnModel.getSpanState();
+    }
+
+    protected ColumnModel internalGetColumnModel() {
+        return _literalColumnModel;
     }
 }

Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/Controller.jpf
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/Controller.jpf?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/Controller.jpf	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,51 @@
+/*
+ * 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 databinding.datagrid.simplesort;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+/**
+ *
+ */
+@Jpf.Controller
+public class Controller
+    extends PageFlowController {
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+    })
+    public Forward begin() {
+        return new Forward("success");
+    }
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(
+                name = "success",
+                path = "index.jsp") 
+    })
+    public Forward sort() {
+	/* todo: at some point, need to start doing some sorting here */
+	return new Forward("success");
+    }
+}

Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/index.jsp
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/index.jsp?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/simplesort/index.jsp	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,27 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
+<%@ page import="org.apache.beehive.netui.script.common.DataAccessProviderBean"%>
+<netui-template:template templatePage="../site/template.jsp">
+    <netui-template:setAttribute name="title" value="Basic Data Grid"/>
+    <netui-template:section name="body">
+    <p>
+<%@ include file="../util/portfolioXmlBean.jsp" %>
+<br/>
+<netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio">
+    <netui-data:columns>
+        <netui-data:literalColumn headerText="Symbol" value="${container.item.symbol}" sortExpression="symbol" sortAction="sort"/>
+        <netui-data:literalColumn headerText="Price" value="${container.item.price}" sortExpression="price"/>
+        <netui-data:anchorColumn headerText="Web" href="${container.item.web}" value="${container.item.name}" sortExpression="web">
+            <netui:parameter name="rowid" value="${container.index}"/>
+            <netui:parameter name="symbol" value="${container.item.symbol}"/>
+        </netui-data:anchorColumn>
+    </netui-data:columns>
+</netui-data:dataGrid>
+<br/>
+<netui:anchor href="index.jsp">Reset</netui:anchor>
+<br/>
+    </p>
+    </netui-template:section>
+</netui-template:template>

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/back.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/back.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/cancel.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/cancel.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/delete.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/delete.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/details.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/details.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/edit.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/edit.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/grid.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/grid.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/insert.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/insert.gif?view=auto&rev=123693
==============================================================================

Deleted: /incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/update.gif
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/resources/images/update.gif?view=auto&rev=123693
==============================================================================

Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?view=diff&rev=123694&p1=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r1=123693&p2=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r2=123694
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml	(original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml	Wed Dec 29 19:01:25 2004
@@ -2371,6 +2371,21 @@
          </features>
       </test>
       <test>
+         <name>DataGridSimpleSort</name>
+         <description>DataGridSimpleSort</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>drt</category>
+            <category>datagrid</category>
+            <category>databinding</category>
+         </categories>
+         <features>
+            <feature>Databinding</feature>
+            <feature>Data Grid</feature>
+         </features>
+      </test>
+      <test>
          <name>DateConverter</name>
          <description>Date Converter on post.</description>
          <webapp>coreWeb</webapp>

Added: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridSimpleSort.xml
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridSimpleSort.xml?view=auto&rev=123694
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridSimpleSort.xml	Wed Dec 29 19:01:25 2004
@@ -0,0 +1,2828 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>DataGridSimpleSort</ses:sessionName>
+   <ses:tester>ekoneil</ses:tester>
+   <ses:startDate>29 Dec 2004, 07:29:36.853 PM MST</ses:startDate>
+   <ses:description>Simple test of sorting parameters in the URL.  This doesn't actually *sort* any data yet -- just makes sure that the right things show up in the query params.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~symbol</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Esymbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb&netui_sort=portfolio%7Esymbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-symbol</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-symbol</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7E-symbol</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Eprice"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-symbol</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&amp;netui_sort=portfolio%7E-symbol</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7E-price"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb&netui_sort=portfolio%7E-price&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-symbol</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&amp;netui_sort=portfolio%7E-symbol</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb&netui_sort=portfolio%7E-symbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-symbol</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~symbol</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&amp;netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7E-symbol&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7E-price&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-symbol</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&amp;netui_sort=portfolio%7Eprice&amp;netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-symbol&netui_sort=portfolio%7E-price&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-symbol&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>12</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/sort.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7E-symbol&amp;netui_sort=portfolio%7Eprice&amp;netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>13</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-price</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Eprice&amp;netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7E-price&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>14</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-price&amp;netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortdown.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>15</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>netui_sort</ses:name>
+                  <ses:value>portfolio~-web</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice&netui_sort=portfolio%7E-web"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?"><img src="/coreWeb/resources/images/sortup.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>16</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/databinding/datagrid/simplesort/index.jsp</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>FD390CFD67831B0E1EBAD413BFBF45E3</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=FD390CFD67831B0E1EBAD413BFBF45E3; JSESSIONID=BRI59EcGUv52yFbTd6wc1JPayFFcRc5ZB2RvEDVDglG1srBaWr2s!-1531031622</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7E-web</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10.1</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+  <head>
+    <title>NetUI Data Grid Samples</title>
+    <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+  </head>
+  <base href="http://localhost:8080/coreWeb/databinding/datagrid/simplesort/index.jsp">
+  <body>
+    <p>
+    <b>Basic Data Grid</b>
+    <table width="100%">
+    <tr><td></td></tr>
+    <tr><td>
+        
+    <p>
+
+ 
+
+
+<br/>
+Page 1 of 1&nbsp;&nbsp;&nbsp;
+<table class="datagrid">
+
+    
+<thead>
+<tr class="datagrid-header">
+        <th class="datagrid-header-cell">Symbol&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/sort.do?netui_sort=portfolio%7Esymbol"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Price&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eprice"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+        <th class="datagrid-header-cell">Web&nbsp;<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp?netui_sort=portfolio%7Eweb"><img src="/coreWeb/resources/images/sortable.gif" border="false"></a></th>
+
+
+    
+</tr></thead>
+
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>BEAS</span></td>
+
+        <td class="datagrid-data-cell"><span>14.35</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.bea.com?rowid=1&amp;symbol=BEAS"><span>BEA Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>CSCO</span></td>
+
+        <td class="datagrid-data-cell"><span>19.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.cisco.com?rowid=2&amp;symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>GE</span></td>
+
+        <td class="datagrid-data-cell"><span>59.42</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.ge.com?rowid=3&amp;symbol=GE"><span>General Electric</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-odd">
+        <td class="datagrid-data-cell"><span>RHAT</span></td>
+
+        <td class="datagrid-data-cell"><span>18.2</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.redhat.com?rowid=4&amp;symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+    
+</tr>
+<tr class="datagrid-even">
+        <td class="datagrid-data-cell"><span>YHOO</span></td>
+
+        <td class="datagrid-data-cell"><span>48.16</span></td>
+
+        <td class="datagrid-data-cell"><a href="http://www.yahoo.com?rowid=5&amp;symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+    
+</tr>
+</table>
+
+
+<br/>
+<a href="/coreWeb/databinding/datagrid/simplesort/index.jsp">Reset</a>
+<br/>
+    </p>
+    
+    </td></tr>
+    </p>
+    <table>
+    <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+    </table>
+    </p>
+  </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>29 Dec 2004, 07:29:59.135 PM MST</ses:endDate>
+   <ses:testCount>16</ses:testCount>
+</ses:recorderSession>
\ No newline at end of file