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 2005/02/20 06:26:57 UTC

svn commit: r154474 - in incubator/beehive/trunk/netui: src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/ src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/ src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ test/src/junitTests/org/apache/beehive/netui/test/datagrid/ test/webapps/drt/coreWeb/databinding/datagrid/misc/

Author: ekoneil
Date: Sat Feb 19 21:26:48 2005
New Revision: 154474

URL: http://svn.apache.org/viewcvs?view=rev&rev=154474
Log:
Addition of a DataGridConfig object.

The DataGridConfig object is used throughout the data grid's tag and model classes to provide configuration information and factory support.  This allows a grid, set of grids, or entire site to share a common infrastructure for configuring grids.

There is one JSP tag API change here.  The "cssClassPrefix" attribute on <netui-data:dataGrid> has changed to "styleClassPrefix" for consistency.

Also, the DataGridState and DataGridResourceProvider classes have moved into the api/ directory.

BB: self
DRT: NetUI pass
BVT: NetUI pass


Added:
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfig.java   (with props)
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfigFactory.java   (with props)
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridResourceProvider.java
      - copied, changed from r154467, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/DataGridResourceProvider.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridState.java
      - copied, changed from r154467, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridConfig.java
      - copied, changed from r154456, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridFactory.java
Removed:
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridFactory.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridFactory.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/DataGridResourceProvider.java
Modified:
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/DataGridTagModel.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageAnchorCellModel.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageCellModel.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/SpanCellModel.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/TemplateCellModel.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/AnchorCellDecorator.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageAnchorCellDecorator.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageCellDecorator.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SortedCellDecorator.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SpanCellDecorator.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/FirstPreviousNextLastPagerRenderer.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/PreviousNextPagerRenderer.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/TableRenderer.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLSupport.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/FilterUtil.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/JspUtil.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/PagedDataSet.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Caption.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/Footer.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Rows.java
    incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/TemplateCell.java
    incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java
    incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java
    incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/customHeaderStyle.jsp
    incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/helloHeaderDecorator.jsp
    incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/stylePrefix.jsp

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfig.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfig.java?view=auto&rev=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfig.java (added)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfig.java Sat Feb 19 21:26:48 2005
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.databinding.datagrid.api;
+
+import java.util.List;
+
+import org.apache.beehive.netui.databinding.datagrid.api.sort.Sort;
+import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.Filter;
+import org.apache.beehive.netui.databinding.datagrid.api.filter.FilterModel;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.api.rendering.PagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.api.rendering.StyleModel;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridState;
+
+/**
+ *
+ */
+public abstract class DataGridConfig {
+
+    public abstract DataGridState createDataGridState();
+
+    public abstract Sort createSort();
+
+    public abstract SortModel createSortModel(List<Sort> sorts);
+
+    public abstract Filter createFilter();
+
+    public abstract FilterModel createFilterModel(List<Filter> filters);
+
+    public abstract PagerModel createPagerModel();
+
+    public abstract DataGridResourceProvider getDefaultResourceProvider();
+
+    public abstract DataGridResourceProvider getResourceProvider(String resourceBundle);
+
+    public abstract StyleModel getStyleModel(String name, String classPrefix);
+
+    public abstract PagerRenderer getDefaultPagerRenderer();
+}

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

Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfigFactory.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfigFactory.java?view=auto&rev=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfigFactory.java (added)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridConfigFactory.java Sat Feb 19 21:26:48 2005
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.databinding.datagrid.api;
+
+import org.apache.beehive.netui.databinding.datagrid.runtime.DefaultDataGridConfig;
+
+
+/**
+ *
+ */
+public class DataGridConfigFactory {
+
+    private DataGridConfigFactory() {
+    }
+
+    public static final DataGridConfig getInstance() {
+        return new DefaultDataGridConfig();
+    }
+
+    public static final DataGridConfig getInstance(Class clazz) {
+        throw new UnsupportedOperationException("NYI");
+    }
+}

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

Copied: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridResourceProvider.java (from r154467, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/DataGridResourceProvider.java)
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridResourceProvider.java?view=diff&rev=154474&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/DataGridResourceProvider.java&r1=154467&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridResourceProvider.java&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/DataGridResourceProvider.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridResourceProvider.java Sat Feb 19 21:26:48 2005
@@ -15,14 +15,12 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.runtime.util;
+package org.apache.beehive.netui.databinding.datagrid.api;
 
 import java.text.MessageFormat;
 import java.util.ResourceBundle;
 import java.util.Locale;
-import java.util.Map;
 import java.util.HashMap;
-import java.util.Collections;
 import java.util.Enumeration;
 
 /**
@@ -30,21 +28,17 @@
  */
 public class DataGridResourceProvider {
 
-    private String DEFAULT_RESOURCE_BUNDLE = "org.apache.beehive.netui.databinding.datagrid.runtime.util.data-grid-default";
     private static final Object VALUE_PLACEHOLDER = new Object();
+    private static final String DEFAULT_RESOURCE_BUNDLE = "org.apache.beehive.netui.databinding.datagrid.runtime.util.data-grid-default";
 
     private boolean _enableChaining = false;
     private String _resourceBundlePath = null;
 
     private ResourceBundle _defaultResourceBundle = null;
     private ResourceBundle _resourceBundle = null;
-    private HashMap<String, String> _resourceOverrides = null;
     private HashMap _resourceBundleKeys = null;
     private Locale _locale = null;
 
-    public DataGridResourceProvider() {
-    }
-
     public boolean isEnableChaining() {
         return _enableChaining;
     }
@@ -69,21 +63,6 @@
         return _resourceBundlePath;
     }
 
-    public void addResourceOverride(String key, String value) {
-        assert key != null;
-        assert value != null;
-
-        if(_resourceOverrides == null)
-            _resourceOverrides = new HashMap<String, String>();
-
-        /* todo: could consider asserting that this key is known by the data grid framework */
-        _resourceOverrides.put(key, value);
-    }
-
-    public Map getResourceOverrides() {
-        return Collections.unmodifiableMap(_resourceOverrides);
-    }
-
     public String getMessage(String key) {
         assert key != null;
 
@@ -112,28 +91,22 @@
                     _resourceBundleKeys.put(e.nextElement(), VALUE_PLACEHOLDER);
             }
 
-            /* todo: implement chaining here */
-            if(_resourceOverrides != null && _resourceOverrides.containsKey(key))
-                return _resourceOverrides.get(key);
-            else {
-                if(!_enableChaining || _resourceBundleKeys.containsKey(key))
-                    return _resourceBundle.getString(key);
-                else
-                    return _defaultResourceBundle.getString(key);
-            }
+            if(!_enableChaining || _resourceBundleKeys.containsKey(key))
+                return _resourceBundle.getString(key);
+            else return _defaultResourceBundle.getString(key);
         }
     }
 
+    protected String internalFormatMessage(String pattern, Object[] args) {
+        MessageFormat format = new MessageFormat(pattern);
+        String msg = format.format(args).toString();
+        return msg;
+    }
+
     private String getDefaultMessage(String key) {
         if(_defaultResourceBundle == null)
             _defaultResourceBundle = createResourceBundle(DEFAULT_RESOURCE_BUNDLE);
         return _defaultResourceBundle.getString(key);
-    }
-
-    private final String internalFormatMessage(String pattern, Object[] args) {
-        MessageFormat format = new MessageFormat(pattern);
-        String msg = format.format(args).toString();
-        return msg;
     }
 
     private ResourceBundle createResourceBundle(String path) {

Copied: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridState.java (from r154467, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java)
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridState.java?view=diff&rev=154474&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java&r1=154467&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridState.java&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridState.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/DataGridState.java Sat Feb 19 21:26:48 2005
@@ -15,7 +15,7 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.databinding.datagrid.runtime;
+package org.apache.beehive.netui.databinding.datagrid.api;
 
 import org.apache.beehive.netui.databinding.datagrid.api.filter.FilterModel;
 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/DataGridTagModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/DataGridTagModel.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/DataGridTagModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/api/rendering/DataGridTagModel.java Sat Feb 19 21:26:48 2005
@@ -18,19 +18,19 @@
 package org.apache.beehive.netui.databinding.datagrid.api.rendering;
 
 import java.util.Map;
+import java.util.HashMap;
 import javax.servlet.jsp.JspContext;
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.beehive.netui.databinding.datagrid.api.rendering.IDataGridMessageKeys;
 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridResourceProvider;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.runtime.rendering.table.TableRenderer;
 import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridURLService;
-import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridState;
-import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridFactory;
 import org.apache.beehive.netui.databinding.datagrid.runtime.util.PagedDataSet;
 import org.apache.beehive.netui.databinding.datagrid.runtime.util.JspUtil;
-import org.apache.beehive.netui.databinding.datagrid.runtime.util.DataGridResourceProvider;
 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 
 /**
@@ -42,42 +42,40 @@
       todo: refactor.
       need a DataGridURL type that hides URL keys / creation.
      */
-    public static final int START_RENDER_STATE = 10;
-    public static final int CAPTION_RENDER_STATE = 20;
-    public static final int GRID_RENDER_STATE = 30;
-    public static final int FOOTER_RENDER_STATE = 40;
-    public static final int END_RENDER_STATE = 50;
+    public static final int RENDER_STATE_START = 10;
+    public static final int RENDER_STATE_CAPTION = 20;
+    public static final int RENDER_STATE_GRID = 30;
+    public static final int RENDER_STATE_FOOTER = 40;
+    public static final int RENDER_STATE_END = 50;
+    private static final int RENDER_STATE_UNINIT = -1;
 
-    private int _renderState = START_RENDER_STATE;
+    private JspContext _jspContext = null;
+    private HttpServletRequest _request = null;
+    private DataGridURLService _dgss = null;
+
+    private int _renderState = RENDER_STATE_UNINIT;
     private boolean _disableDefaultPagerRendering = false;
     private String _name = null;
-
     private StyleModel _styleModel = null;
     private PagerRenderer _pagerRenderer = null;
     private PagedDataSet _dataSet = null;
     private TableRenderer _tableRenderer = null;
-    private DataGridURLService _dgss = null;
     private DataGridResourceProvider _resourceProvider = null;
     private DataGridState _dataGridState = null;
-    private DataGridFactory _dataGridFactory;
-
-    private JspContext _jspContext = null;
-    private HttpServletRequest _request = null;
+    private DataGridConfig _dataGridConfig;
 
-    public DataGridTagModel(JspContext jspContext, String name, PagedDataSet dataSet, DataGridFactory factory) {
+    public DataGridTagModel(String name, DataGridConfig dataGridConfig, JspContext jspContext) {
         super();                 
 
         /* todo: refactor. this assembly could should be externalized */
-        _name = name;
-        _jspContext = jspContext;
-        _dataSet = dataSet;
-        _dataGridFactory = factory;
         _dgss = DataGridURLService.getInstance(jspContext);
-        _dataGridState = _dgss.getDataGridState(name);
-        _dataGridState.getPagerModel().setDataSetSize(_dataSet.getSize());
-        _resourceProvider = factory.getResourceProvider();
-        _resourceProvider.setLocale(JspUtil.getLocale(jspContext));
+        _jspContext = jspContext;
         _request = JspUtil.getRequest(_jspContext);
+
+        _name = name;
+        _dataGridConfig = dataGridConfig;
+
+        wireup();
     }
 
     public String getName() {
@@ -92,31 +90,60 @@
         return _renderState;
     }
 
-    public void setRenderState(int renderState) {
-        /* todo: need to assert that the correct transitions are being made */
-        _renderState = renderState;
+    public void changeRenderState(int renderState) {
+        switch(_renderState) {
+            case RENDER_STATE_UNINIT:
+                _renderState = RENDER_STATE_START;
+                break;
+            case RENDER_STATE_START:
+                _renderState = RENDER_STATE_CAPTION;
+                break;
+            case RENDER_STATE_CAPTION:
+                _renderState = RENDER_STATE_GRID;
+                break;
+            case RENDER_STATE_GRID:
+                _renderState = RENDER_STATE_FOOTER;
+                break;
+            case RENDER_STATE_FOOTER:
+                _renderState = RENDER_STATE_END;
+                break;
+            default:
+                throw new IllegalStateException("Unable to make the specified render state transition");
+        }
+
+        return;
     }
 
     public PagedDataSet getDataSet() {
         return _dataSet;
     }
 
+    /* todo: would be nice to address this side-effect outside of the setter */
     public void setDataSet(PagedDataSet dataSet) {
         _dataSet = dataSet;
+        _dataGridState.getPagerModel().setDataSetSize(_dataSet.getSize());
     }
 
     public PagerRenderer getPagerRenderer() {
-        if(_pagerRenderer == null) {
-            _pagerRenderer = _dataGridFactory.getDefaultPagerRenderer();
-            _pagerRenderer.setDataGridTagModel(this);
-        }
+        if(_pagerRenderer == null)
+            setPagerRenderer(_dataGridConfig.getDefaultPagerRenderer());
 
         return _pagerRenderer;
     }
 
+    /* todo: would be nice to address this side-effect outside of the setter */
     public void setPagerRenderer(PagerRenderer pagerRenderer) {
-        pagerRenderer.setDataGridTagModel(this);
+        assert pagerRenderer != null : "Received a null pager renderer";
         _pagerRenderer = pagerRenderer;
+        _pagerRenderer.setDataGridTagModel(this);
+    }
+
+    public DataGridResourceProvider getResourceProvider() {
+        return _resourceProvider;
+    }
+
+    public void setResourceProvider(DataGridResourceProvider resourceProvider) {
+        _resourceProvider = resourceProvider;
     }
 
     public boolean isDisableDefaultPagerRendering() {
@@ -139,35 +166,41 @@
         return _styleModel;
     }
 
-    public void setStyleModel(StyleModel cssModel) {
-        _styleModel = cssModel;
-    }
-
-    public String getResourcePath() {
-        /* todo: not sure that this is right in all cases -- probably need to provide the ability to override the path from the JSP */
-        return _request.getContextPath() + "/" + getMessage(IDataGridMessageKeys.DATAGRID_RESOURCE_PATH);
-    }
-
-    public String getResourceBundlePath() {
-        return _resourceProvider.getResourceBundlePath();
-    }
-
-    public void setResourceBundlePath(String resourceBundlePath) {
-        _resourceProvider.setResourceBundlePath(resourceBundlePath);
+    public void setStyleModel(StyleModel styleModel) {
+        _styleModel = styleModel;
     }
 
     public String getMessage(String key) {
+        assert _resourceProvider != null : "Received a null resource provider";
         return _resourceProvider.getMessage(key);
     }
 
     public String formatMessage(String key, Object[] args) {
+        assert _resourceProvider != null : "Received a null resource provider";
         return _resourceProvider.formatMessage(key, args);
     }
 
     public void addResourceOverride(String key, String value) {
-        _resourceProvider.addResourceOverride(key, value);
+        OverridableDataGridResourceProvider overrideResourceProvider = null;
+        if(!(_resourceProvider instanceof OverridableDataGridResourceProvider)) {
+            overrideResourceProvider = new OverridableDataGridResourceProvider(_resourceProvider);
+        }
+        else {
+            assert _resourceProvider instanceof OverridableDataGridResourceProvider;
+            overrideResourceProvider = (OverridableDataGridResourceProvider)_resourceProvider;
+        }
+
+        overrideResourceProvider.addResourceOverride(key, value);
+    }
+
+    /* todo: move to the DataGridConfig object */
+    public String getResourcePath() {
+        assert _request != null : "Received a null request";
+        /* todo: not sure that this is right in all cases -- probably need to provide the ability to override the path from the JSP */
+        return _request.getContextPath() + "/" + getMessage(IDataGridMessageKeys.DATAGRID_RESOURCE_PATH);
     }
 
+    /* todo: move to the DataGridConfig object */
     public String getSortImagePath(SortDirection sortDirection) {
         if(sortDirection == SortDirection.ASCENDING)
             return getMessage(IDataGridMessageKeys.SORT_ASC_IMAGE_PATH);
@@ -179,6 +212,7 @@
         }
     }
 
+    /* todo: move to the DataGridConfig object */
     public String getDefaultSortImagePath() {
         return getMessage(IDataGridMessageKeys.SORT_NONE_IMAGE_PATH);
     }
@@ -260,7 +294,56 @@
         return _dataSet.hasNext();
     }
 
-    private Map buildSortQueryParamsMap(String sortExpression, SortDirection sortDirection) {
+    /* -------------------------------------------------------------
+
+       Implementation specifics
+
+       ------------------------------------------------------------- */
+
+    private final Map buildSortQueryParamsMap(String sortExpression, SortDirection sortDirection) {
         return _dgss.buildSortQueryParamsMap(_name, sortExpression, sortDirection);
+    }
+
+    private final void wireup() {
+        _dataGridState = _dgss.getDataGridState(_name, _dataGridConfig);
+    }
+
+    private final class OverridableDataGridResourceProvider
+        extends DataGridResourceProvider {
+
+        private DataGridResourceProvider _delegate = null;
+        private HashMap<String, String> _resourceOverrides = null;
+
+        private OverridableDataGridResourceProvider(DataGridResourceProvider resourceProvider) {
+            _delegate = resourceProvider;
+        }
+
+        private void addResourceOverride(String key, String value) {
+            if(_resourceOverrides == null)
+                _resourceOverrides = new HashMap<String, String>();
+
+            /* todo: could consider asserting that this key is known by the data grid framework */
+            _resourceOverrides.put(key, value);
+        }
+
+        public String getMessage(String key) {
+            String msg = internalGetMessage(key);
+            if(msg != null)
+                return msg;
+            else return _delegate.getMessage(key);
+        }
+
+        public String formatMessage(String key, Object[] args) {
+            String pattern = internalGetMessage(key);
+            if(pattern != null)
+                return internalFormatMessage(pattern, args);
+            else return _delegate.formatMessage(key, args);
+        }
+
+        private final String internalGetMessage(String key) {
+            if(_resourceOverrides != null && _resourceOverrides.containsKey(key))
+                return _resourceOverrides.get(key);
+            else return null;
+        }
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DataGridURLService.java Sat Feb 19 21:26:48 2005
@@ -30,6 +30,9 @@
 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
 import org.apache.beehive.netui.databinding.datagrid.api.filter.Filter;
 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfigFactory;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.runtime.codec.SortCodec;
 import org.apache.beehive.netui.databinding.datagrid.runtime.codec.FilterCodec;
 import org.apache.beehive.netui.databinding.datagrid.runtime.codec.PagerCodec;
@@ -44,7 +47,7 @@
  * The DataGridStateService is scoped to a single ServletRequest and is
  * able to cache the ServletRequest object itself.
  */
-public class DataGridURLService {
+public final class DataGridURLService {
 
     /*
         todo: this class isn't right yet...
@@ -58,6 +61,7 @@
 
     private static final String KEY = DataGridURLService.class.getName() + "REQUEST_KEY";
     private static final String EMPTY_STRING = "";
+    private static final DataGridConfig DEFAULT_DATA_GRID_CONFIG = DataGridConfigFactory.getInstance();
 
     public static DataGridURLService getInstance(JspContext jspContext) {
         assert jspContext instanceof PageContext;
@@ -106,18 +110,19 @@
     }
 
     public DataGridState getDataGridState(String name) {
-        /* todo: refactor.  this factory needs to be externally configured; need a way to do this... */
-        DataGridFactory factory = DataGridFactory.getInstance();
+        return getDataGridState(name, DEFAULT_DATA_GRID_CONFIG);
+    }
 
+    public DataGridState getDataGridState(String name, DataGridConfig dataGridConfig) {
         if(name == null || name.equals(""))
             throw new IllegalArgumentException("Unable to create data grid state for invalid name: " + name);
 
         DataGridState dgs = _state.get(name);
         if(dgs == null) {
-            dgs = factory.createDataGridState();
+            dgs = dataGridConfig.createDataGridState();
             dgs.setPagerModel(getPagerModel(name));
-            dgs.setFilterModel(factory.createFilterModel(getFilters(name)));
-            dgs.setSortModel(factory.createSortModel(getSorts(name)));
+            dgs.setFilterModel(dataGridConfig.createFilterModel(getFilters(name)));
+            dgs.setSortModel(dataGridConfig.createSortModel(getSorts(name)));
             _state.put(name, dgs);
         }
 

Copied: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridConfig.java (from r154456, incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridFactory.java)
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridConfig.java?view=diff&rev=154474&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridFactory.java&r1=154456&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridConfig.java&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridFactory.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/DefaultDataGridConfig.java Sat Feb 19 21:26:48 2005
@@ -25,14 +25,24 @@
 import org.apache.beehive.netui.databinding.datagrid.api.filter.FilterModel;
 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.PagerRenderer;
+import org.apache.beehive.netui.databinding.datagrid.api.rendering.StyleModel;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridResourceProvider;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.runtime.rendering.pager.PreviousNextPagerRenderer;
-import org.apache.beehive.netui.databinding.datagrid.runtime.util.DataGridResourceProvider;
+import org.apache.beehive.netui.databinding.datagrid.runtime.model.style.DefaultStyleModel;
+import org.apache.beehive.netui.databinding.datagrid.runtime.model.style.EmptyStyleModel;
 
 /**
  *
  */
-public class DefaultDataGridFactory
-    extends DataGridFactory {
+public class DefaultDataGridConfig
+    extends DataGridConfig {
+
+    private static final StyleModel DEFAULT_STYLE_POLICY = new DefaultStyleModel("datagrid");
+    private static final StyleModel EMPTY_STYLE_POLICY = new EmptyStyleModel();
+    private static final String EMPTY_STYLE_POLICY_NAME = "empty";
+    private static final String DEFAULT_STYLE_POLICY_NAME = "default";
 
     public DataGridState createDataGridState() {
         return new DataGridState();
@@ -62,7 +72,24 @@
         return new PreviousNextPagerRenderer();
     }
 
-    public DataGridResourceProvider getResourceProvider() {
+    public DataGridResourceProvider getDefaultResourceProvider() {
         return new DataGridResourceProvider();
+    }
+
+    public DataGridResourceProvider getResourceProvider(String resourceBundle) {
+        DataGridResourceProvider resourceProvider = new DataGridResourceProvider();
+        resourceProvider.setResourceBundlePath(resourceBundle);
+        return resourceProvider;
+    }
+
+    public StyleModel getStyleModel(String name, String classPrefix) {
+        if(name == null || name.equals(DEFAULT_STYLE_POLICY_NAME)) {
+            if(classPrefix != null)
+                return new DefaultStyleModel(classPrefix);
+            else
+                return DEFAULT_STYLE_POLICY;
+        } else if(name != null && name.equals(EMPTY_STYLE_POLICY_NAME))
+            return EMPTY_STYLE_POLICY;
+        else return DEFAULT_STYLE_POLICY;
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/PagerCodec.java Sat Feb 19 21:26:48 2005
@@ -26,7 +26,7 @@
 /**
  *
  */
-public class PagerCodec {
+public final class PagerCodec {
 
     private static final Logger LOGGER = Logger.getInstance(PagerCodec.class);
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/codec/SortCodec.java Sat Feb 19 21:26:48 2005
@@ -28,7 +28,7 @@
 /**
  *
  */
-public class SortCodec {
+public final class SortCodec {
 
     /* Default sort syntax: netui_sort=<gridNamespace>~[+|-]<expr> */
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageAnchorCellModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageAnchorCellModel.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageAnchorCellModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageAnchorCellModel.java Sat Feb 19 21:26:48 2005
@@ -23,7 +23,7 @@
 /**
  *
  */
-public class ImageAnchorCellModel
+public final class ImageAnchorCellModel
     extends AnchorCellModel {
 
     private ImageTag.State _imageState = null;

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageCellModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageCellModel.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageCellModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/ImageCellModel.java Sat Feb 19 21:26:48 2005
@@ -24,7 +24,7 @@
 /**
  *
  */
-public class ImageCellModel
+public final class ImageCellModel
     extends CellModel {
 
     private ImageTag.State _imageState = null;

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/SpanCellModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/SpanCellModel.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/SpanCellModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/SpanCellModel.java Sat Feb 19 21:26:48 2005
@@ -24,7 +24,7 @@
 /**
  *
  */
-public class SpanCellModel
+public final class SpanCellModel
     extends CellModel {
 
     private static final SpanTag.State DEFAULT_SPAN_STATE = new SpanTag.State();

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/TemplateCellModel.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/TemplateCellModel.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/TemplateCellModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/model/cell/TemplateCellModel.java Sat Feb 19 21:26:48 2005
@@ -22,6 +22,6 @@
 /**
  *
  */
-public class TemplateCellModel
+public final class TemplateCellModel
     extends CellModel {
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/AnchorCellDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/AnchorCellDecorator.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/AnchorCellDecorator.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/AnchorCellDecorator.java Sat Feb 19 21:26:48 2005
@@ -37,7 +37,7 @@
 /**
  *
  */
-public class AnchorCellDecorator
+public final class AnchorCellDecorator
     extends CellDecorator {
 
     private static final Logger LOGGER = Logger.getInstance(AnchorCellDecorator.class);

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageAnchorCellDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageAnchorCellDecorator.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageAnchorCellDecorator.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageAnchorCellDecorator.java Sat Feb 19 21:26:48 2005
@@ -36,7 +36,7 @@
 
 /**
  */
-public class ImageAnchorCellDecorator
+public final class ImageAnchorCellDecorator
     extends CellDecorator {
 
     private static final Logger LOGGER = Logger.getInstance(ImageAnchorCellDecorator.class);

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageCellDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageCellDecorator.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageCellDecorator.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/ImageCellDecorator.java Sat Feb 19 21:26:48 2005
@@ -31,7 +31,7 @@
 /**
  *
  */
-public class ImageCellDecorator
+public final class ImageCellDecorator
     extends CellDecorator {
 
     public void decorate(JspContext jspContext, AbstractRenderAppender appender, CellModel cellModel)

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SortedCellDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SortedCellDecorator.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SortedCellDecorator.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SortedCellDecorator.java Sat Feb 19 21:26:48 2005
@@ -42,7 +42,7 @@
 /**
  *
  */
-public class SortedCellDecorator
+public final class SortedCellDecorator
     extends CellDecorator {
 
     private static final Logger LOGGER = Logger.getInstance(SortedCellDecorator.class);

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SpanCellDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SpanCellDecorator.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SpanCellDecorator.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/cell/SpanCellDecorator.java Sat Feb 19 21:26:48 2005
@@ -31,7 +31,7 @@
 /**
  *
  */
-public class SpanCellDecorator
+public final class SpanCellDecorator
     extends CellDecorator {
 
     public void decorate(JspContext jspContext, AbstractRenderAppender appender, CellModel cellModel)

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/FirstPreviousNextLastPagerRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/FirstPreviousNextLastPagerRenderer.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/FirstPreviousNextLastPagerRenderer.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/FirstPreviousNextLastPagerRenderer.java Sat Feb 19 21:26:48 2005
@@ -24,7 +24,7 @@
 /**
  * 
  */
-public class FirstPreviousNextLastPagerRenderer
+public final class FirstPreviousNextLastPagerRenderer
     extends PagerRenderer {
 
     protected String internalRender() {

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/PreviousNextPagerRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/PreviousNextPagerRenderer.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/PreviousNextPagerRenderer.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/pager/PreviousNextPagerRenderer.java Sat Feb 19 21:26:48 2005
@@ -21,7 +21,7 @@
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.IDataGridMessageKeys;
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.PagerRenderer;
 
-public class PreviousNextPagerRenderer
+public final class PreviousNextPagerRenderer
     extends PagerRenderer {
 
     protected String internalRender() {

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/TableRenderer.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/TableRenderer.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/TableRenderer.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/rendering/table/TableRenderer.java Sat Feb 19 21:26:48 2005
@@ -32,7 +32,7 @@
 /**
  * 
  */
-public class TableRenderer {
+public final class TableRenderer {
 
     private static final CaptionTag.State CAPTION_STATE = new CaptionTag.State();
     private static final THeadTag.State THEAD_STATE = new THeadTag.State();

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLSupport.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLSupport.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLSupport.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/sql/SQLSupport.java Sat Feb 19 21:26:48 2005
@@ -32,7 +32,7 @@
 /**
  * @netui:jspfunctions
  */
-public class SQLSupport {
+public final class SQLSupport {
 
     private static final String EMPTY_STRING = "";
     private static final FilterOperation[] FILTER_OPERATIONS;
@@ -60,6 +60,7 @@
     private static final FilterOperation STRING_FILTER_OPERATION = FILTER_OPERATIONS[9];
     private static final FilterOperation OTHER_FILTER_OPERATION = FILTER_OPERATIONS[1];
 
+    /* do not construct */
     private SQLSupport() {
     }
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/FilterUtil.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/FilterUtil.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/FilterUtil.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/FilterUtil.java Sat Feb 19 21:26:48 2005
@@ -26,7 +26,7 @@
 /**
  * @netui:jspfunctions
  */
-public class FilterUtil {
+public final class FilterUtil {
 
     private static final List<Filter> DEFAULT_FILTER_LIST;
     private static final Filter DEFAULT_FILTER = new Filter();

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/JspUtil.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/JspUtil.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/JspUtil.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/JspUtil.java Sat Feb 19 21:26:48 2005
@@ -31,7 +31,7 @@
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.tags.internal.PageFlowTagUtils;
 
-public class JspUtil {
+public final class JspUtil {
 
     /* do not construct */
     private JspUtil() {

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/PagedDataSet.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/PagedDataSet.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/PagedDataSet.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/runtime/util/PagedDataSet.java Sat Feb 19 21:26:48 2005
@@ -26,7 +26,7 @@
 /**
  *
  */
-public class PagedDataSet
+public final class PagedDataSet
     implements Iterator {
 
     private static final Logger LOGGER = Logger.getInstance(PagedDataSet.class);

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractCell.java Sat Feb 19 21:26:48 2005
@@ -64,8 +64,8 @@
 
         int gridRenderState = dataGridModel.getRenderState();
 
-        /* START_RENDER_STATE is a no-op for columns */
-        if(gridRenderState == DataGridTagModel.START_RENDER_STATE) {
+        /* RENDER_STATE_START is a no-op for columns */
+        if(gridRenderState == DataGridTagModel.RENDER_STATE_START) {
             return;
         }
         // otherwise, the ColumnModel associated with this tag

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Caption.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Caption.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Caption.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Caption.java Sat Feb 19 21:26:48 2005
@@ -238,7 +238,7 @@
         if(dgm == null)
             throw new JspException("Unable to find a dataGridModel in the JspContext");
 
-        if(dgm.getRenderState() == DataGridTagModel.CAPTION_RENDER_STATE) {
+        if(dgm.getRenderState() == DataGridTagModel.RENDER_STATE_CAPTION) {
             JspFragment fragment = getJspBody();
             if(fragment != null) {
                 StringWriter sw = new StringWriter();

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java?view=diff&r1=154473&r2=154474
==============================================================================
--- 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 Sat Feb 19 21:26:48 2005
@@ -21,19 +21,20 @@
 import java.io.IOException;
 import java.io.StringWriter;
 import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.JspContext;
 import javax.servlet.jsp.tagext.SimpleTagSupport;
 import javax.servlet.jsp.tagext.JspFragment;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.DataGridTagModel;
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.StyleModel;
-import org.apache.beehive.netui.databinding.datagrid.runtime.model.style.DefaultStyleModel;
-import org.apache.beehive.netui.databinding.datagrid.runtime.model.style.EmptyStyleModel;
+import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfigFactory;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridResourceProvider;
 import org.apache.beehive.netui.databinding.datagrid.runtime.util.PagedDataSet;
+import org.apache.beehive.netui.databinding.datagrid.runtime.util.JspUtil;
 import org.apache.beehive.netui.databinding.datagrid.runtime.rendering.table.TableRenderer;
-import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
-import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridFactory;
 import org.apache.beehive.netui.script.common.IDataAccessProvider;
 import org.apache.beehive.netui.script.common.DataAccessProviderStack;
 import org.apache.beehive.netui.tags.ExpressionHandling;
@@ -55,16 +56,12 @@
 
     private static final String FACET_RESOURCE = "resource";
 
-    private static final StyleModel DEFAULT_STYLE_POLICY = new DefaultStyleModel("datagrid");
-    private static final StyleModel EMPTY_STYLE_POLICY = new EmptyStyleModel();
-    private static final String EMPTY_STYLE_POLICY_NAME = "empty";
-    private static final String DEFAULT_STYLE_POLICY_NAME = "default";
-
     private String _name = null;
     private String _styleClassPrefix = null;
     private String _stylePolicyName = null;
     private String _dataSource = null;
     private String _resourceBundlePath = null;
+    private DataGridConfig _dataGridConfig = null;
     private DataGridTagModel _gridTagModel = null;
 
     public String getTagName() {
@@ -72,6 +69,13 @@
     }
 
     /**
+     * @netui:attribute required="false" rtexprvalue="true"
+     */
+    public void setDataGridConfig(DataGridConfig dataGridConfig) {
+        _dataGridConfig = dataGridConfig;
+    }
+
+    /**
      * @netui:attribute required="true"
      */
     public void setName(String name) {
@@ -89,8 +93,8 @@
     /**
      * @netui:attribute required="false" rtexprvalue="true"
      */
-    public void setCssClassPrefix(String cssClassPrefix) {
-        _styleClassPrefix = cssClassPrefix;
+    public void setStyleClassPrefix(String styleClassPrefix) {
+        _styleClassPrefix = styleClassPrefix;
     }
 
     /**
@@ -102,13 +106,12 @@
 
     /**
      * @netui:attribute required="false" rtexprvalue="true"
-    */
+     */
     public void setStyleClassPolicy(String stylePolicy) {
         _stylePolicyName = stylePolicy;
     }
 
     /**
-     *
      * @param name
      * @param value
      * @param facet
@@ -116,119 +119,123 @@
      */
     public void setAttribute(String name, String value, String facet)
         throws JspException {
-
         if(facet.equals(FACET_RESOURCE)) {
             _gridTagModel.addResourceOverride(name, value);
-        }
-        else {
+        } else {
             String s = Bundle.getString("Tags_AttributeFacetNotSupported", new Object[]{facet});
             throw new JspException(s);
         }
     }
 
-    /* todo: should this be wrapped in try / finally so that the PageContext gets cleaned up correctly? */
     public void doTag()
         throws JspException, IOException {
 
-        StyleModel styleModel = null;
-        JspFragment fragment = getJspBody();
-        String dataSource = getDataSource();
-        HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
-        TableRenderer tableRenderer = new TableRenderer(request);
-
         // ensure the dataSource is a valid expression
+        String dataSource = getDataSource();
         ExpressionHandling expr = new ExpressionHandling(this);
         String validExpr = expr.ensureValidExpression(dataSource, "dataSource", "DataSourceError");
         Object ds = expr.evaluateExpression(validExpr, "dataSource", getPageContext());
         Iterator iterator = IteratorFactory.createIterator(ds);
-        PagedDataSet dataSet = new PagedDataSet(dataSource, iterator);
 
-        /* todo: extensibility -- need to go to a factory with this */
-        if(_stylePolicyName == null || _stylePolicyName.equals(DEFAULT_STYLE_POLICY_NAME)) {
-            if(_styleClassPrefix != null)
-                styleModel = new DefaultStyleModel(_styleClassPrefix);
-            else styleModel = DEFAULT_STYLE_POLICY;
-        }
-        else if(_stylePolicyName != null && _stylePolicyName.equals(EMPTY_STYLE_POLICY_NAME))
-            styleModel = EMPTY_STYLE_POLICY;
+        JspContext jspContext = getJspContext();
+        HttpServletRequest request = JspUtil.getRequest(jspContext);
+
+        if(_dataGridConfig == null)
+            _dataGridConfig = DataGridConfigFactory.getInstance();
+
+        TableRenderer tableRenderer = new TableRenderer(request);
+        PagedDataSet dataSet = new PagedDataSet(dataSource, iterator);
 
-        DataGridFactory dgf = DataGridFactory.getInstance();
+        StyleModel styleModel = _dataGridConfig.getStyleModel(_stylePolicyName, _styleClassPrefix);
+        DataGridResourceProvider resourceProvider = null;
+        if(_resourceBundlePath == null)
+            resourceProvider = _dataGridConfig.getDefaultResourceProvider();
+        else resourceProvider = _dataGridConfig.getResourceProvider(_resourceBundlePath);
+        resourceProvider.setLocale(JspUtil.getLocale(jspContext));
 
-        _gridTagModel = new DataGridTagModel(getJspContext(), _name, dataSet, dgf);
+        _gridTagModel = new DataGridTagModel(_name, _dataGridConfig, jspContext);
+        _gridTagModel.setDataSet(dataSet);
         _gridTagModel.setStyleModel(styleModel);
         _gridTagModel.setTableRenderer(tableRenderer);
-        _gridTagModel.setResourceBundlePath(_resourceBundlePath);
+        _gridTagModel.setResourceProvider(resourceProvider);
 
+        JspFragment fragment = getJspBody();
         if(fragment != null) {
             StringBuilder builder = new StringBuilder(2048);
             AbstractRenderAppender appender = new StringBuilderRenderAppender(builder);
 
-            /* todo: perf -- this doesn't need to happen when the data set is empty */
-            DataAccessProviderStack.addDataAccessProvider(this, getJspContext());
-            DataGridUtil.putDataGridTagModel(getJspContext(), _gridTagModel);
-
-            /*
-               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: perf -- should you be able to turn this off for perf?
-             */
-            StringWriter sw = new StringWriter();
-            fragment.invoke(sw);
-
-            /* todo: this needs to move into the DataGridTagModel */
-            PagerModel pm = _gridTagModel.getDataGridState().getPagerModel();
-            _gridTagModel.getDataSet().createWindow(pm.getRow(), pm.getRow() + pm.getPageSize());
-
-            /* now that the model objects have been initialized, it's time to start rendering */
-            _gridTagModel.setRenderState(DataGridTagModel.START_RENDER_STATE);
-
-            if(!_gridTagModel.isDisableDefaultPagerRendering())
-                _gridTagModel.renderPager(appender);
-
-            TableTag.State tableState = new TableTag.State();
-            tableState.styleClass = styleModel.getTableClass();
-            tableRenderer.openTable(tableState, appender);
-
-            /* render the caption */
-            _gridTagModel.setRenderState(DataGridTagModel.CAPTION_RENDER_STATE);
-            sw = new StringWriter();
-            fragment.invoke(sw);
-            String caption = sw.toString();
-            if(caption != null && !caption.trim().equals("")) {
-                appender.append(caption);
-            }
-
-            /* render the grid rows (header and data) */
-            _gridTagModel.setRenderState(DataGridTagModel.GRID_RENDER_STATE);
-            sw = new StringWriter();
-            fragment.invoke(sw);
-            appender.append(sw.toString());
-
-            /* render the footer */
-            _gridTagModel.setRenderState(DataGridTagModel.FOOTER_RENDER_STATE);
-            sw = new StringWriter();
-            fragment.invoke(sw);
-            String footer = sw.toString();
-            String trimmed = footer.trim();
-            if(footer != null && !trimmed.trim().equals("")) {
-                appender.append(footer);
+            boolean addedDataAccessProvider = false;
+            try {
+                /* todo: perf -- this doesn't need to happen when the data set is empty */
+                DataAccessProviderStack.addDataAccessProvider(this, getJspContext());
+                DataGridUtil.putDataGridTagModel(getJspContext(), _gridTagModel);
+                addedDataAccessProvider = true;
+
+                /*
+                   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: perf -- should you be able to turn this off for perf?
+                 */
+                StringWriter sw = new StringWriter();
+                fragment.invoke(sw);
+
+                /* todo: this needs to move into the DataGridTagModel */
+                PagerModel pm = _gridTagModel.getDataGridState().getPagerModel();
+                _gridTagModel.getDataSet().createWindow(pm.getRow(), pm.getRow() + pm.getPageSize());
+
+                /* now that the model objects have been initialized, it's time to start rendering */
+                _gridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_START);
+
+                if(!_gridTagModel.isDisableDefaultPagerRendering())
+                    _gridTagModel.renderPager(appender);
+
+                TableTag.State tableState = new TableTag.State();
+                tableState.styleClass = styleModel.getTableClass();
+                tableRenderer.openTable(tableState, appender);
+
+                /* render the caption */
+                _gridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_CAPTION);
+                sw = new StringWriter();
+                fragment.invoke(sw);
+                String caption = sw.toString();
+                if(caption != null && !caption.trim().equals("")) {
+                    appender.append(caption);
+                }
+
+                /* render the grid rows (header and data) */
+                _gridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_GRID);
+                sw = new StringWriter();
+                fragment.invoke(sw);
+                appender.append(sw.toString());
+
+                /* render the footer */
+                _gridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_FOOTER);
+                sw = new StringWriter();
+                fragment.invoke(sw);
+                String footer = sw.toString();
+                String trimmed = footer.trim();
+                if(footer != null && !trimmed.trim().equals("")) {
+                    appender.append(footer);
+                }
+
+                tableRenderer.closeTable(appender);
+
+                _gridTagModel.changeRenderState(DataGridTagModel.RENDER_STATE_END);
+
+                /* todo: when rendering using thead / tfoot / tbody, they need to be rendered
+                         in order.  when not rendering like this, they need to be written
+                        in thead / tbody / tfoot order.
+                 */
+                write(builder.toString());
+            } finally {
+                if(addedDataAccessProvider) {
+                    DataAccessProviderStack.removeDataAccessProvider(getJspContext());
+                    DataGridUtil.removeDataGridTagModel(getJspContext());
+                }
             }
-
-            tableRenderer.closeTable(appender);
-
-            _gridTagModel.setRenderState(DataGridTagModel.END_RENDER_STATE);
-
-            /* todo: when rendering using thead / tfoot / tbody, they need to be rendered
-                     in order.  when not rendering like this, they need to be written
-                    in thead / tbody / tfoot order.
-             */
-            write(builder.toString());
         }
-
-        DataAccessProviderStack.removeDataAccessProvider(getJspContext());
-        DataGridUtil.removeDataGridTagModel(getJspContext());
     }
 
     /* ===========================================================
@@ -246,14 +253,14 @@
     }
 
     public Object getCurrentMetadata() {
-        throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException("The data grid does not support metadata binding");
     }
 
     public String getDataSource() {
         return "{" + _dataSource + "}";
     }
 
-    /* todo: seems that this should be done via the stack of DAPs in the PageContext */
+    /* todo: bug. nested grids are broken here.  this should be done via the stack of objects in the PageContext */
     public IDataAccessProvider getProviderParent() {
         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&r1=154473&r2=154474
==============================================================================
--- 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 Sat Feb 19 21:26:48 2005
@@ -27,7 +27,7 @@
 /**
  *
  */
-public class DataGridUtil {
+public final class DataGridUtil {
 
     private static final Logger LOGGER = Logger.getInstance(DataGridUtil.class);
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java Sat Feb 19 21:26:48 2005
@@ -34,11 +34,9 @@
 import org.apache.beehive.netui.databinding.datagrid.runtime.rendering.table.TableRenderer;
 
 /**
- * @netui:tag name="footer"
+ * @netui:tag name="footer" body-content="scriptless"
  * description="Renders a footer into a NetUI data grid"
- * body-content="scriptless"
- * @netui.tldx:tag whitespace="indent"
- * renderer=""*
+ * @netui.tldx:tag whitespace="indent" renderer=""*
  */
 public class Footer
     extends AbstractSimpleTag {
@@ -242,7 +240,7 @@
         if(dgm == null)
             throw new JspException("Unable to find a dataGridModel in the JspContext");
 
-        if(dgm.getRenderState() == DataGridTagModel.FOOTER_RENDER_STATE) {
+        if(dgm.getRenderState() == DataGridTagModel.RENDER_STATE_FOOTER) {
             JspFragment fragment = getJspBody();
             if(fragment != null) {
                 StringWriter sw = new StringWriter();

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java Sat Feb 19 21:26:48 2005
@@ -242,7 +242,7 @@
             throw new JspException("Unable to find a dataGridModel in the JspContext");
 
         int gridRenderState = dataGridModel.getRenderState();
-        if(gridRenderState == DataGridTagModel.GRID_RENDER_STATE) {
+        if(gridRenderState == DataGridTagModel.RENDER_STATE_GRID) {
 
             StringBuilder content = new StringBuilder();
             AbstractRenderAppender appender = new StringBuilderRenderAppender(content);

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/HeaderCell.java Sat Feb 19 21:26:48 2005
@@ -414,7 +414,6 @@
         tableRenderer.closeHeaderCell(appender);
     }
 
-    /* todo: support rendering sort / filter links */
     protected void renderHeaderCellContents(AbstractRenderAppender appender)
         throws IOException, JspException {
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/RenderPager.java Sat Feb 19 21:26:48 2005
@@ -37,14 +37,12 @@
 
     public void doTag()
         throws JspException {
-        JspContext jspContext = getJspContext();
-        DataGridTagModel dgm = (DataGridTagModel)jspContext.getAttribute("dataGrid");
+
+        DataGridTagModel dgm = (DataGridTagModel)getJspContext().getAttribute("dataGrid");
         assert dgm != null : "RenderPager did not find a DataGridTagModel";
 
         String output = dgm.getPagerRenderer().render();
         if(output != null)
             write(output);
-
-        return;
     }
 }

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Rows.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Rows.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Rows.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Rows.java Sat Feb 19 21:26:48 2005
@@ -52,7 +52,7 @@
         if(dataGridModel == null)
             throw new JspException("Unable to find a dataGridModel in the JspContext");
 
-        if(dataGridModel.getRenderState() == DataGridTagModel.GRID_RENDER_STATE) {
+        if(dataGridModel.getRenderState() == DataGridTagModel.RENDER_STATE_GRID) {
             StyleModel stylePolicy = dataGridModel.getStyleModel();
             assert stylePolicy != null;
 

Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/TemplateCell.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/TemplateCell.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/TemplateCell.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/TemplateCell.java Sat Feb 19 21:26:48 2005
@@ -36,9 +36,7 @@
         return "TemplateCell";
     }
 
-    protected void renderDataCellContents(AbstractRenderAppender appender, String jspFragmentOutput)
-        throws JspException, IOException {
-
+    protected void renderDataCellContents(AbstractRenderAppender appender, String jspFragmentOutput) {
         appender.append(jspFragmentOutput);
     }
 

Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java (original)
+++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/DataGridTestUtil.java Sat Feb 19 21:26:48 2005
@@ -20,15 +20,18 @@
 import java.lang.reflect.Proxy;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Locale;
 import javax.servlet.ServletRequest;
 import javax.servlet.jsp.JspContext;
 import javax.servlet.jsp.PageContext;
 
-import org.apache.beehive.netui.test.servlet.HttpServletRequestHandler;
 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.DataGridTagModel;
-import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridFactory;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfigFactory;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridConfig;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridResourceProvider;
 import org.apache.beehive.netui.databinding.datagrid.runtime.util.PagedDataSet;
+import org.apache.beehive.netui.test.servlet.HttpServletRequestHandler;
 
 /**
  *
@@ -86,7 +89,12 @@
     }
 
     private static final DataGridTagModel buildDataGridTagModel(JspContext jspContext, String name, PagedDataSet dataSet) {
-        DataGridTagModel dgm = new DataGridTagModel(jspContext, name, dataSet, getDataGridFactory());
+        DataGridConfig config = getDataGridConfig();
+        DataGridResourceProvider provider = getDataGridConfig().getDefaultResourceProvider();
+        provider.setLocale(Locale.US);
+        DataGridTagModel dgm = new DataGridTagModel(name, config, jspContext);
+        dgm.setDataSet(dataSet);
+        dgm.setResourceProvider(provider);
         dgm.getDataGridState().getPagerModel().setPageAction("fauxPageAction.do");
 
         return dgm;
@@ -96,7 +104,7 @@
         return dgm.getDataGridState().getPagerModel();
     }
 
-    static final DataGridFactory getDataGridFactory() {
-        return DataGridFactory.getInstance();
+    static final DataGridConfig getDataGridConfig() {
+        return DataGridConfigFactory.getInstance();
     }
 }

Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java (original)
+++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/datagrid/PagerModelTest.java Sat Feb 19 21:26:48 2005
@@ -24,11 +24,11 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.beehive.netui.test.servlet.ServletFactory;
+import org.apache.beehive.netui.databinding.datagrid.api.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel;
 import org.apache.beehive.netui.databinding.datagrid.api.rendering.DataGridTagModel;
-import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridState;
 import org.apache.beehive.netui.databinding.datagrid.runtime.DataGridURLService;
+import org.apache.beehive.netui.test.servlet.ServletFactory;
 
 /**
  *

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/customHeaderStyle.jsp
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/customHeaderStyle.jsp?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/customHeaderStyle.jsp (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/customHeaderStyle.jsp Sat Feb 19 21:26:48 2005
@@ -26,7 +26,7 @@
     <p>
     <datagrid:portfolioXmlBean/>
     <br/>
-    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" cssClassPrefix="foo" >
+    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" styleClassPrefix="foo" >
     <netui-data:header>
         <netui-data:headerCell headerText="Symbol" cellStyleClass="custom-header"/>
         <netui-data:headerCell headerText="Price"/>

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/helloHeaderDecorator.jsp
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/helloHeaderDecorator.jsp?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/helloHeaderDecorator.jsp (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/helloHeaderDecorator.jsp Sat Feb 19 21:26:48 2005
@@ -26,7 +26,7 @@
     <p>
     <datagrid:portfolioXmlBean/>
     <br/>
-    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" cssClassPrefix="foo" >
+    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" styleClassPrefix="foo" >
     <netui-data:header>
         <netui-data:headerCell headerText="Symbol">
             <netui:attribute facet="renderer" name="extends" value="databinding.datagrid.decorator.HelloWorldDecorator"/>

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/stylePrefix.jsp
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/stylePrefix.jsp?view=diff&r1=154473&r2=154474
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/stylePrefix.jsp (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/stylePrefix.jsp Sat Feb 19 21:26:48 2005
@@ -23,7 +23,7 @@
     <p>
     <datagrid:portfolioXmlBean/>
     <br/>
-    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" cssClassPrefix="foo" >
+    <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" styleClassPrefix="foo" >
     <netui-data:header>
         <netui-data:headerCell headerText="Symbol"/>
         <netui-data:headerCell headerText="Price"/>