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/11/11 22:00:50 UTC
svn commit: rev 57473 - in incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui: databinding/datagrid/model databinding/datagrid/rendering tags/databinding/datagrid
Author: ekoneil
Date: Thu Nov 11 13:00:49 2004
New Revision: 57473
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/ColumnsModel.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/rendering/TableRenderer.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/ImageColumn.java
incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java
Log:
Grid tag fixup.
- rationalize the relationship between the <dataGrid> tag and the sub-tags that configure various objects set on the DataGridModel.
- centrailze the table rendering in the TableRenderer. Parameterizing and rendering the HTML table tags is now done through a combination of the TableRenderer and StylePolicy.
BB: self
Tests: NetUI pass
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/ColumnModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnModel.java Thu Nov 11 13:00:49 2004
@@ -21,11 +21,13 @@
*/
public class ColumnModel {
- private ColumnsModel _columnsModel = null;
+ private ColumnsModel _columnsModel;
+ private DataGridModel _dataGridModel;
- public ColumnModel(ColumnsModel columns)
+ public ColumnModel(DataGridModel dataGridModel, ColumnsModel columnsModel)
{
- _columnsModel = columns;
+ _dataGridModel = dataGridModel;
+ _columnsModel = columnsModel;
}
public boolean isRenderingHeader() {
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnsModel.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnsModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/ColumnsModel.java Thu Nov 11 13:00:49 2004
@@ -28,6 +28,12 @@
private int _renderState = NO_RENDER_STATE;
+ private DataGridModel _dataGridModel;
+
+ public ColumnsModel(DataGridModel dataGridModel) {
+ _dataGridModel = dataGridModel;
+ }
+
public int getRenderState() {
return _renderState;
}
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java Thu Nov 11 13:00:49 2004
@@ -66,27 +66,28 @@
_name = name;
_jspContext = jspContext;
_dataSet = dataSet;
- _pagerModel = new PagerModel(this);
}
- public void initialize() {
- HttpServletRequest request = (HttpServletRequest)((PageContext)_jspContext).getRequest();
+ public void beforeRender() {
/* todo: need to move to using absolute page references in the URL */
- int lastPage = (int)Math.ceil((float)_dataSet.getSize()/(float)_pagerModel.getPageSize());
- assert lastPage >= 0;
- int startRenderWindow = (_pagerModel.getCurrentPage()-1)*_pagerModel.getPageSize();
- int endRenderWindow =
- _pagerModel.getCurrentPage() != lastPage ?
- startRenderWindow+ _pagerModel.getPageSize() :
- _dataSet.getSize();
-
- assert startRenderWindow <= endRenderWindow;
-
- // set the calculated render window on the data set
- _dataSet.createWindow(startRenderWindow, endRenderWindow);
- _pagerModel.initialize();
- _tableRenderer = new TableRenderer(request);
+ if (_pagerModel != null) {
+ int lastPage = (int) Math.ceil((float) _dataSet.getSize() / (float) _pagerModel.getPageSize());
+ assert lastPage >= 0;
+ int startRenderWindow = (_pagerModel.getCurrentPage() - 1) * _pagerModel.getPageSize();
+ int endRenderWindow =
+ _pagerModel.getCurrentPage() != lastPage ?
+ startRenderWindow + _pagerModel.getPageSize() :
+ _dataSet.getSize();
+
+ assert startRenderWindow <= endRenderWindow;
+
+ // set the calculated render window on the data set
+ _dataSet.createWindow(startRenderWindow, endRenderWindow);
+
+ assert _pagerModel != null;
+ _pagerModel.initialize();
+ }
}
public int getRenderState() {
@@ -120,6 +121,10 @@
return _pagerModel;
}
+ public void setPagerModel(PagerModel pagerModel) {
+ _pagerModel = pagerModel;
+ }
+
public void setPagerService(PagerService pagerService) {
_pagerService = pagerService;
}
@@ -161,6 +166,10 @@
public TableRenderer getTableRenderer() {
return _tableRenderer;
+ }
+
+ public void setTableRenderer(TableRenderer tableRenderer) {
+ _tableRenderer = tableRenderer;
}
/* ===========================================================
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/TableRenderer.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/TableRenderer.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/TableRenderer.java Thu Nov 11 13:00:49 2004
@@ -27,12 +27,14 @@
import org.apache.beehive.netui.tags.rendering.CaptionTag;
import org.apache.beehive.netui.tags.rendering.THeadTag;
import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
-import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
+import org.apache.beehive.netui.databinding.datagrid.model.StylePolicy;
public class TableRenderer
{
private static final CaptionTag.State CAPTION_STATE = new CaptionTag.State();
private static final THeadTag.State THEAD_STATE = new THeadTag.State();
+ private static final TableTag.State TABLE_STATE = new TableTag.State();
+ private static final TrTag.State TR_STATE = new TrTag.State();
private TagRenderingBase _tableRenderer = null;
private TagRenderingBase _captionRenderer = null;
@@ -40,10 +42,12 @@
private TagRenderingBase _trRenderer = null;
private TagRenderingBase _tdRenderer = null;
private TagRenderingBase _thRenderer = null;
+ private StylePolicy _stylePolicy = null;
- public TableRenderer(HttpServletRequest request)
+ public TableRenderer(HttpServletRequest request, StylePolicy stylePolicy)
{
super();
+ _stylePolicy = stylePolicy;
_tableRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.TABLE_TAG, request);
_captionRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.CAPTION_TAG, request);
_theadRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.THEAD_TAG, request);
@@ -54,6 +58,11 @@
public void openTable(TableTag.State state, AbstractRenderAppender appender)
{
+ if(state == null)
+ state = new TableTag.State();
+
+ state.styleClass = _stylePolicy.getTableClass();
+
appender.append("\n");
_tableRenderer.doStartTag(appender, state);
appender.append("\n");
@@ -63,6 +72,7 @@
{
_tableRenderer.doEndTag(appender);
appender.append("\n");
+ appender.append("\n");
}
public void openCaption(AbstractRenderAppender appender)
@@ -79,6 +89,12 @@
public final void openHeaderRow(TrTag.State state, AbstractRenderAppender appender)
{
+ if(state == null)
+ state = new TrTag.State();
+
+ if(state != null)
+ state.styleClass = _stylePolicy.getHeaderRowClass();
+
appender.append("\n");
_theadRenderer.doStartTag(appender, THEAD_STATE);
appender.append("\n");
@@ -107,6 +123,12 @@
public void openFooterRow(TrTag.State state, AbstractRenderAppender appender)
{
+ if(state == null)
+ state = new TrTag.State();
+
+ if(state != null)
+ state.styleClass = _stylePolicy.getFooterRowClass();
+
appender.append("\n");
_trRenderer.doStartTag(appender, state);
}
Modified: 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/AbstractColumn.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractColumn.java Thu Nov 11 13:00:49 2004
@@ -17,6 +17,9 @@
*/
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;
@@ -24,7 +27,6 @@
import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
import org.apache.beehive.netui.databinding.datagrid.model.ColumnModel;
import org.apache.beehive.netui.databinding.datagrid.model.ColumnsModel;
-
import org.apache.beehive.netui.tags.AbstractSimpleTag;
import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
@@ -33,10 +35,6 @@
import org.apache.beehive.netui.tags.html.FormatTag.Formatter;
import org.apache.beehive.netui.util.logging.Logger;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-
/**
*
*/
@@ -49,10 +47,8 @@
static final String COLUMN_MODEL_KEY = "column";
private static final String EMPTY_CELL = " ";
- private static final String EMPTY_STRING = "";
private String _headerText = null;
- private DataGridModel _dataGridModel = null;
private ArrayList _formatters = null;
/**
@@ -62,7 +58,27 @@
_headerText = headerText;
}
+ public String getHeaderText() {
+ return _headerText;
+ }
+
+ public void addFormatter(Formatter formatter) {
+ if(_formatters == null)
+ _formatters = new ArrayList();
+
+ _formatters.add(formatter);
+ }
+
+ /**
+ * Indicate that a formatter has reported an error so the formatter should output it's
+ * body text.
+ */
+ public void formatterHasError() {
+ /* todo: error reporting! */
+ }
+
/**
+ *
* @throws JspException
* @throws IOException
*/
@@ -74,9 +90,12 @@
if (!(parent instanceof Columns))
throw new JspException("A Column tag must be contained inside of a Columns tag.");
- int gridRenderState = DataGridUtil.getDataGridModel(getJspContext()).getRenderState();
+ DataGridModel dataGridModel = DataGridUtil.getDataGridModel(getJspContext());
+ assert dataGridModel != null;
- // when starting to render, the AbstractColumnModel associated with this tag needs to be created
+ int gridRenderState = dataGridModel.getRenderState();
+
+ /* START_RENDER_STATE is a no-op for columns */
if (gridRenderState == DataGridModel.START_RENDER_STATE) {
return;
}
@@ -84,23 +103,16 @@
// needs to be fetched from the <columns> tag for the current
// iteration
else {
-
- StringBuilder content = new StringBuilder();
- AbstractRenderAppender appender = new StringBuilderRenderAppender(content);
-
ColumnsModel columns = DataGridUtil.getColumnsModel(getJspContext());
assert columns != null;
- ColumnModel model = new ColumnModel(columns);
-
int renderState = columns.getRenderState();
-
assert renderState == ColumnsModel.DATA_RENDER_STATE ||
renderState == ColumnsModel.HEADER_RENDER_STATE;
- applyAttributes();
+ ColumnModel model = new ColumnModel(dataGridModel, columns);
- // todo: need to assert that the identityHashCode of 'cm' is well-known
+ applyAttributes();
if (_logger.isDebugEnabled()) {
_logger.debug("current column\n\trender state: " + renderState);
@@ -109,78 +121,35 @@
getJspContext().setAttribute(COLUMN_MODEL_KEY, model);
- JspFragment fragment = getJspBody();
- StringWriter sw = new StringWriter();
- String bodyContent = null;
- if (fragment != null) {
- fragment.invoke(sw);
- bodyContent = sw.toString();
- }
+ StringBuilder content = new StringBuilder();
+ AbstractRenderAppender appender = new StringBuilderRenderAppender(content);
if (renderState == ColumnsModel.HEADER_RENDER_STATE) {
-
- openHeaderCell(appender);
- if (_headerText != null)
- renderHeader(appender);
- else if (bodyContent != null)
- appender.append(bodyContent);
- closeHeaderCell(appender);
+ renderHeaderCell(appender);
} else if (renderState == ColumnsModel.DATA_RENDER_STATE) {
-
- openDataCell(appender);
renderDataCell(appender);
- closeDataCell(appender);
}
if (content != null && content.length() > 0)
getJspContext().getOut().println(content.toString());
- }
- getJspContext().removeAttribute(COLUMN_MODEL_KEY);
+ getJspContext().removeAttribute(COLUMN_MODEL_KEY);
+ }
return;
}
- protected abstract void openHeaderCell(AbstractRenderAppender appender);
-
- protected abstract void closeHeaderCell(AbstractRenderAppender appender);
-
- protected abstract void openDataCell(AbstractRenderAppender appender);
-
- protected abstract void closeDataCell(AbstractRenderAppender appender);
+ protected abstract void renderHeaderCell(AbstractRenderAppender appender) throws IOException, JspException;
- public void addFormatter(Formatter formatter) {
- if(_formatters == null)
- _formatters = new ArrayList();
+ protected abstract void renderDataCell(AbstractRenderAppender appender) throws IOException, JspException;
- _formatters.add(formatter);
- }
-
- /**
- * Indicate that a formatter has reported an error so the formatter should output it's
- * body text.
- */
- public void formatterHasError() {
- // todo: error reporting!
+ protected void renderEmptyHeaderCell(AbstractRenderAppender appender) {
+ appender.append(EMPTY_CELL);
}
+ /* todo: apply the global sort / filter attributes here */
protected void applyAttributes()
throws JspException {
- /* todo: apply the global sort / filter attributes here */
- }
-
- protected void renderHeader(AbstractRenderAppender appender) {
-
- if (_headerText == null)
- renderEmptyCell(appender);
- else
- appender.append(_headerText != null ? _headerText.toString() : EMPTY_STRING);
- }
-
- protected abstract void renderDataCell(AbstractRenderAppender appender);
-
- protected void renderEmptyCell(AbstractRenderAppender appender) {
- appender.append(EMPTY_CELL);
}
protected String formatText(Object text) {
Modified: 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/AbstractHtmlColumn.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AbstractHtmlColumn.java Thu Nov 11 13:00:49 2004
@@ -17,7 +17,13 @@
*/
package org.apache.beehive.netui.tags.databinding.datagrid;
+import java.io.IOException;
+import java.io.StringWriter;
+import javax.servlet.jsp.tagext.JspFragment;
+import javax.servlet.jsp.JspException;
+
import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel;
+import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer;
import org.apache.beehive.netui.tags.IAttributeConsumer;
import org.apache.beehive.netui.tags.html.HtmlConstants;
import org.apache.beehive.netui.tags.rendering.ThTag;
@@ -28,7 +34,6 @@
/**
* TODO: need to support <netui:attribute> tags for the header table cell
- * TODO: need to support .clear() to whack custom attributes
*/
public abstract class AbstractHtmlColumn
extends AbstractColumn
@@ -440,6 +445,71 @@
}
}
+ protected abstract AbstractHtmlState internalGetHtmlState();
+
+ protected void renderHeaderCell(AbstractRenderAppender appender)
+ throws IOException, JspException {
+
+ DataGridModel dataGridModel = DataGridUtil.getDataGridModel(getJspContext());
+ assert dataGridModel != null;
+
+ TableRenderer tableRenderer = dataGridModel.getTableRenderer();
+ assert tableRenderer != null;
+
+ if (_thState.styleClass == null)
+ _thState.styleClass = dataGridModel.getCssPolicy().getHeaderCellClass();
+
+ tableRenderer.openHeaderCell(_thState, appender);
+ renderHeaderCellContents(appender);
+ tableRenderer.closeHeaderCell(appender);
+ }
+
+ protected void renderDataCell(AbstractRenderAppender appender)
+ throws IOException, JspException {
+ DataGridModel dataGridModel = DataGridUtil.getDataGridModel(getJspContext());
+ assert dataGridModel != null;
+
+ TableRenderer tableRenderer = dataGridModel.getTableRenderer();
+ assert tableRenderer != null;
+
+ if(_tdState.styleClass == null)
+ _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 */
+ JspFragment fragment = getJspBody();
+ StringWriter sw = new StringWriter();
+ String bodyContent = null;
+ if (fragment != null) {
+ fragment.invoke(sw);
+ bodyContent = sw.toString();
+ }
+
+ tableRenderer.openTableCell(_tdState, appender);
+ renderDataCellContents(appender);
+ tableRenderer.closeTableCell(appender);
+ }
+
+ protected void renderHeaderCellContents(AbstractRenderAppender appender)
+ throws IOException, JspException {
+
+ JspFragment fragment = getJspBody();
+ StringWriter sw = new StringWriter();
+ String bodyContent = null;
+ if (fragment != null) {
+ fragment.invoke(sw);
+ bodyContent = sw.toString();
+ }
+
+ if (getHeaderText() != null)
+ appender.append(getHeaderText());
+ else if (bodyContent != null)
+ appender.append(bodyContent);
+ else renderEmptyHeaderCell(appender);
+ }
+
+ protected abstract void renderDataCellContents(AbstractRenderAppender appender);
+
private void addStateAttribute(AbstractHtmlState state, String name, String value, String facet)
{
boolean error = false;
@@ -472,8 +542,6 @@
state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, name, value);
}
- protected abstract AbstractHtmlState internalGetHtmlState();
-
private final ThTag.State internalGetThState()
{
return _thState;
@@ -483,28 +551,4 @@
{
return _tdState;
}
-
- public void openHeaderCell(AbstractRenderAppender appender) {
- DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
- if (_thState.styleClass == null)
- _thState.styleClass = dgm.getCssPolicy().getHeaderCellClass();
-
- dgm.getTableRenderer().openHeaderCell(_thState, appender);
- }
-
- public void closeHeaderCell(AbstractRenderAppender appender) {
- DataGridUtil.getDataGridModel(getJspContext()).getTableRenderer().closeHeaderCell(appender);
- }
-
- public void openDataCell(AbstractRenderAppender appender) {
- DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
- if(_tdState.styleClass == null)
- _tdState.styleClass = dgm.getCssPolicy().getDataCellClass();
-
- dgm.getTableRenderer().openTableCell(_tdState, appender);
- }
-
- public void closeDataCell(AbstractRenderAppender appender) {
- DataGridUtil.getDataGridModel(getJspContext()).getTableRenderer().closeTableCell(appender);
- }
}
Modified: 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/AnchorColumn.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/AnchorColumn.java Thu Nov 11 13:00:49 2004
@@ -113,7 +113,7 @@
return _anchorState;
}
- protected void renderDataCell(AbstractRenderAppender appender) {
+ protected void renderDataCellContents(AbstractRenderAppender appender) {
HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
Modified: 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/Columns.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Columns.java Thu Nov 11 13:00:49 2004
@@ -27,6 +27,7 @@
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;
import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
@@ -55,6 +56,8 @@
{
JspContext jspContext = getJspContext();
DataGridModel dataGridModel = DataGridUtil.getDataGridModel(jspContext);
+ assert dataGridModel != null;
+
int gridRenderState = dataGridModel.getRenderState();
if(gridRenderState == DataGridModel.CAPTION_RENDER_STATE ||
@@ -65,7 +68,10 @@
}
else if(gridRenderState == DataGridModel.GRID_RENDER_STATE)
{
- ColumnsModel columnsModel = new ColumnsModel();
+ TableRenderer tableRenderer = dataGridModel.getTableRenderer();
+ assert tableRenderer != null;
+
+ ColumnsModel columnsModel = new ColumnsModel(dataGridModel);
assert columnsModel != null;
jspContext.setAttribute(COLUMNS_MODEL_KEY, columnsModel);
@@ -77,21 +83,23 @@
// render header row
columnsModel.setRenderState(ColumnsModel.HEADER_RENDER_STATE);
- openHeaderRow(appender, dataGridModel);
+ tableRenderer.openHeaderRow(null, appender);
fragment.invoke(sw);
content.append(sw.toString());
- closeHeaderRow(appender, dataGridModel);
+ tableRenderer.closeHeaderRow(appender);
// render data rows
columnsModel.setRenderState(ColumnsModel.DATA_RENDER_STATE);
while(dataGridModel.hasNextDataItem())
{
sw = new StringWriter();
- openDataRow(appender, dataGridModel);
+ TrTag.State trState = new TrTag.State();
+ initDataRowStyle(trState, dataGridModel);
+ tableRenderer.openTableRow(trState, appender);
dataGridModel.nextDataItem();
fragment.invoke(sw);
content.append(sw.toString());
- closeDataRow(appender, dataGridModel);
+ tableRenderer.closeTableRow(appender);
}
columnsModel.setRenderState(ColumnsModel.NO_RENDER_STATE);
@@ -101,34 +109,16 @@
}
}
- public final void openHeaderRow(AbstractRenderAppender appender, DataGridModel dataGridModel)
- {
- StylePolicy stylePolicy = dataGridModel.getCssPolicy();
- TrTag.State state = new TrTag.State();
- state.styleClass = stylePolicy.getHeaderRowClass();
+ private final void initDataRowStyle(TrTag.State state, DataGridModel dataGridModel) {
+ assert state != null;
+ assert dataGridModel != null;
- dataGridModel.getTableRenderer().openHeaderRow(state, appender);
- }
-
- public void closeHeaderRow(AbstractRenderAppender appender, DataGridModel dataGridModel)
- {
- dataGridModel.getTableRenderer().closeHeaderRow(appender);
- }
+ StylePolicy stylePolicy = dataGridModel.getCssPolicy();
+ assert stylePolicy != null;
- public void openDataRow(AbstractRenderAppender appender, DataGridModel dataGridModel)
- {
- TrTag.State state = new TrTag.State();
int index = dataGridModel.getCurrentIndex();
- StylePolicy stylePolicy = dataGridModel.getCssPolicy();
if(index % 2 == 0)
state.styleClass = stylePolicy.getRowClass();
else state.styleClass = stylePolicy.getAltRowClass();
-
- dataGridModel.getTableRenderer().openTableRow(state, appender);
- }
-
- public void closeDataRow(AbstractRenderAppender appender, DataGridModel dataGridModel)
- {
- dataGridModel.getTableRenderer().closeTableRow(appender);
}
}
Modified: 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/ConfigurePager.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java Thu Nov 11 13:00:49 2004
@@ -29,13 +29,11 @@
/**
* @netui:tag name="configurePager" body-content="empty"
- * description="Pager tag for the configuring and rendering the pager rendered in the NetUI data grid"
+ * description="Pager tag for the configuring and rendering the pager rendered in the NetUI data grid"
* @netui.tldx:tag renderer="" whitespace="indent"
*/
public class ConfigurePager
- extends AbstractSimpleTag
-{
- private static final Logger _logger = Logger.getInstance(ConfigurePager.class);
+ extends AbstractSimpleTag {
private static final String FIRST_LAST_PREV_NEXT = "firstPrevNextLast";
private static final String PREV_NEXT = "prevNext";
@@ -45,86 +43,88 @@
private String _pageHref = null;
private String _pageAction = null;
- public String getTagName()
- {
+ public String getTagName() {
return "Pager";
}
- /**
+ /**
* @jsptagref.attributedescription The maximum page size of data rendered by the NetUI data grid.
* @jsptagref.databindable true
* @jsptagref.attributesyntaxvalue <i>int_pageSize</i>
- *
* @netui:attribute required="false" rtexprvalue="true"
*/
- public void setPageSize(int pageSize) {_pageSize = pageSize;}
+ public void setPageSize(int pageSize) {
+ _pageSize = pageSize;
+ }
/**
- * @jsptagref.attributedescription The look and feel to render for the pager
- * @jsptagref.databindable true
- * @jsptagref.attributesyntaxvalue <i>String_pagerStyle</i>
- *
- * @netui:attribute required="false" rtexprvalue="true"
- */
- public void setPagerFormat(String pagerFormat) {_pagerFormat = pagerFormat;}
+ * @jsptagref.attributedescription The look and feel to render for the pager
+ * @jsptagref.databindable true
+ * @jsptagref.attributesyntaxvalue <i>String_pagerStyle</i>
+ * @netui:attribute required="false" rtexprvalue="true"
+ */
+ public void setPagerFormat(String pagerFormat) {
+ _pagerFormat = pagerFormat;
+ }
/**
- * @jsptagref.attributedescription The URI to access when paging occurs.
- * @jsptagref.databindable true
- * @jsptagref.attributesyntaxvalue <i>String_pageUri</i>
- *
- * @netui:attribute required="false" rtexprvalue="true"
- */
- public void setPageHref(String pageHref) {_pageHref = pageHref;}
+ * @jsptagref.attributedescription The URI to access when paging occurs.
+ * @jsptagref.databindable true
+ * @jsptagref.attributesyntaxvalue <i>String_pageUri</i>
+ * @netui:attribute required="false" rtexprvalue="true"
+ */
+ public void setPageHref(String pageHref) {
+ _pageHref = pageHref;
+ }
/**
* @jsptagref.attributedescription
* @jsptagref.databindable true
* @jsptagref.attributesyntaxvalue <i>String_pageAction</i>
- *
* @netui:attribute required="false" rtexprvalue="true"
* @netui.tldx:attribute category="general" reftype="netui-action-url"
*/
- public void setPageAction(String pageAction) {_pageAction = pageAction;}
+ public void setPageAction(String pageAction) {
+ _pageAction = pageAction;
+ }
public void doTag()
- throws JspException
- {
- if(_pageSize != null)
- {
- DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
- assert dgm != null;
+ throws JspException {
+
+ DataGridModel dgm = DataGridUtil.getDataGridModel(getJspContext());
+ assert dgm != null;
- PagerModel pm = dgm.getPagerModel();
- assert pm != null;
+ PagerModel pm = new PagerModel(dgm);
+ IPagerRenderer pagerRenderer = null;
+ if(_pageSize != null)
pm.setPageSize(_pageSize);
- if(_pagerFormat != null)
- {
- IPagerRenderer pagerRenderer = null;
- if(_pagerFormat.equals(FIRST_LAST_PREV_NEXT))
- pagerRenderer = new FirstPreviousNextLastPagerRenderer(dgm, pm);
- else if(_pagerFormat.equals(PREV_NEXT))
- pagerRenderer = new PreviousNextPagerRenderer(dgm, pm);
- else throw new JspException("The pagerFormat \"" + _pagerFormat + "\" is not supported");
-
- dgm.setPagerRenderer(pagerRenderer);
- }
-
- if(_pageHref != null && _pageAction != null)
- throw new JspException("The configurePager tag can't set both the pageAction and pageHref attributes");
+ /* todo: support pluggable pager renderers as opposed to this fixed list */
+ if (_pagerFormat != null) {
+ if (_pagerFormat.equals(FIRST_LAST_PREV_NEXT))
+ pagerRenderer = new FirstPreviousNextLastPagerRenderer(dgm, pm);
+ else if (_pagerFormat.equals(PREV_NEXT))
+ pagerRenderer = new PreviousNextPagerRenderer(dgm, pm);
+ else throw new JspException("The pagerFormat \"" + _pagerFormat + "\" is not supported");
+ }
- if(_pageHref == null && _pageAction == null)
- throw new JspException("The configurePager tag requires one of the pageAction or pageHref attributes in order to render a pager link.");
+ if (_pageHref != null && _pageAction != null)
+ throw new JspException("The configurePager tag can't set both the pageAction and pageHref attributes");
- if(_pageHref != null)
- pm.setPageHref(_pageHref);
+ if (_pageHref == null && _pageAction == null)
+ throw new JspException("The configurePager tag requires one of the pageAction or pageHref attributes in order to render a pager link.");
- if(_pageAction != null)
- pm.setPageAction(_pageAction);
- }
+ if (_pageHref != null)
+ pm.setPageHref(_pageHref);
+
+ if (_pageAction != null)
+ pm.setPageAction(_pageAction);
+
+ dgm.setPagerModel(pm);
+ dgm.setPagerRenderer(pagerRenderer);
return;
}
+
}
Modified: 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/DataGrid.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGrid.java Thu Nov 11 13:00:49 2004
@@ -21,11 +21,14 @@
import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.JspFragment;
+import javax.servlet.http.HttpServletRequest;
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.PagerModel;
import org.apache.beehive.netui.databinding.datagrid.model.impl.DefaultStylePolicy;
import org.apache.beehive.netui.databinding.datagrid.model.impl.EmptyStylePolicy;
import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet;
@@ -63,8 +66,8 @@
private boolean _disableDefaultPager = false;
private String _name = null;
- private String _cssClassPolicy = DEFAULT_STYLE_POLICY_VALUE;
- private String _cssClassPrefix = null;
+ private String _stylePolicy = DEFAULT_STYLE_POLICY_VALUE;
+ private String _styleClassPrefix = null;
private String _dataSource = null;
private DataGridModel _gridModel = null;
@@ -91,14 +94,14 @@
* @netui:attribute required="false" rtexprvalue="true"
*/
public void setCssClassPolicy(String cssClassPolicy) {
- _cssClassPolicy = cssClassPolicy;
+ _stylePolicy = cssClassPolicy;
}
/**
* @netui:attribute required="false" rtexprvalue="true"
*/
public void setCssClassPrefix(String cssClassPrefix) {
- _cssClassPrefix = cssClassPrefix;
+ _styleClassPrefix = cssClassPrefix;
}
/**
@@ -121,19 +124,20 @@
Iterator iterator = IteratorFactory.createIterator(ds);
PagedDataSet dataSet = new PagedDataSet(dataSource, iterator);
- StylePolicy cssPolicy = null;
- if (_cssClassPrefix != null)
- cssPolicy = new DefaultStylePolicy(_cssClassPrefix);
- else if (_cssClassPolicy == DEFAULT_STYLE_POLICY_VALUE || _cssClassPolicy.equals(DEFAULT_STYLE_POLICY_VALUE))
- cssPolicy = DEFAULT_STYLE_POLICY;
- else if (_cssClassPolicy.equals(NO_STYLE_POLICY_VALUE))
- cssPolicy = EMPTY_STYLE_POLICY;
+ StylePolicy stylePolicy = null;
+ if (_styleClassPrefix != null)
+ stylePolicy = new DefaultStylePolicy(_styleClassPrefix);
+ else if (_stylePolicy == DEFAULT_STYLE_POLICY_VALUE || _stylePolicy.equals(DEFAULT_STYLE_POLICY_VALUE))
+ stylePolicy = DEFAULT_STYLE_POLICY;
+ else if (_stylePolicy.equals(NO_STYLE_POLICY_VALUE))
+ stylePolicy = EMPTY_STYLE_POLICY;
- _gridModel = new DataGridModel(getJspContext(), _name, dataSet);
+ HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
+ TableRenderer tableRenderer = new TableRenderer(request, stylePolicy);
- /* 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);
+ _gridModel = new DataGridModel(getJspContext(), _name, dataSet);
+ _gridModel.setCssPolicy(stylePolicy);
+ _gridModel.setTableRenderer(tableRenderer);
JspFragment fragment = getJspBody();
if (fragment == null)
@@ -145,19 +149,33 @@
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);
- _gridModel.initialize();
- _gridModel.setCssPolicy(cssPolicy);
- _gridModel.setRenderState(DataGridModel.START_RENDER_STATE);
+ if(_gridModel.getPagerModel() == null)
+ _gridModel.setPagerModel(new PagerModel(_gridModel));
- TableRenderer tableRenderer = _gridModel.getTableRenderer();
+ /*
+ 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);
- openTable(appender, cssPolicy, tableRenderer);
+ tableRenderer.openTable(null, appender);
/* render the caption */
_gridModel.setRenderState(DataGridModel.CAPTION_RENDER_STATE);
@@ -165,9 +183,9 @@
fragment.invoke(sw);
String caption = sw.toString();
if (caption != null && !caption.trim().equals("")) {
- openCaption(appender, tableRenderer);
+ tableRenderer.openCaption(appender);
appender.append(caption);
- closeCaption(appender, tableRenderer);
+ tableRenderer.closeCaption(appender);
}
/* render the grid rows (header and data) */
@@ -183,12 +201,12 @@
String footer = sw.toString();
String trimmed = footer.trim();
if (footer != null && !trimmed.trim().equals("")) {
- openFooterRow(appender, cssPolicy, tableRenderer);
+ tableRenderer.openFooterRow(null, appender);
appender.append(footer);
- closeFooterRow(appender, tableRenderer);
+ tableRenderer.closeFooterRow(appender);
}
- closeTable(appender, tableRenderer);
+ tableRenderer.closeTable(appender);
_gridModel.setRenderState(DataGridModel.END_RENDER_STATE);
@@ -231,39 +249,5 @@
IDataAccessProvider dap =
(IDataAccessProvider) SimpleTagSupport.findAncestorWithClass(this, IDataAccessProvider.class);
return dap;
- }
-
- private void openTable(AbstractRenderAppender appender, StylePolicy cssPolicy, TableRenderer tableRenderer)
- {
- TableTag.State state = new TableTag.State();
- state.styleClass = cssPolicy.getTableClass();
- tableRenderer.openTable(state, appender);
- }
-
- private void closeTable(AbstractRenderAppender appender, TableRenderer tableRenderer)
- {
- tableRenderer.closeTable(appender);
- appender.append("\n");
- }
-
- private void openCaption(AbstractRenderAppender appender, TableRenderer tableRenderer) {
- tableRenderer.openCaption(appender);
- }
-
- private void closeCaption(AbstractRenderAppender appender, TableRenderer tableRenderer) {
- tableRenderer.closeCaption(appender);
- }
-
- public void openFooterRow(AbstractRenderAppender appender, StylePolicy stylePolicy, TableRenderer tableRenderer)
- {
- TrTag.State state = new TrTag.State();
- state.styleClass = stylePolicy.getFooterRowClass();
-
- tableRenderer.openFooterRow(state, appender);
- }
-
- public void closeFooterRow(AbstractRenderAppender appender, TableRenderer tableRenderer)
- {
- tableRenderer.closeFooterRow(appender);
}
}
Modified: 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/ImageColumn.java (original)
+++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ImageColumn.java Thu Nov 11 13:00:49 2004
@@ -104,7 +104,7 @@
return "ImageColumn";
}
- public void renderDataCell(AbstractRenderAppender appender)
+ public void renderDataCellContents(AbstractRenderAppender appender)
{
HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/LiteralColumn.java
==============================================================================
--- 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 Thu Nov 11 13:00:49 2004
@@ -60,7 +60,7 @@
/* todo: need to apply the <span> HTML state information to the ColumnModel here */
}
- protected void renderDataCell(AbstractRenderAppender appender) {
+ protected void renderDataCellContents(AbstractRenderAppender appender) {
HttpServletRequest request = (HttpServletRequest)((PageContext)getJspContext()).getRequest();
TagRenderingBase span = TagRenderingBase.Factory.getRendering(TagRenderingBase.SPAN_TAG, request);