Author: ekoneil Date: Sat Jan 29 12:11:38 2005 New Revision: 149070 URL: http://svn.apache.org/viewcvs?view=rev&rev=149070 Log: Data grid feature.
Add support for resource bundles in the data grid. This allows a developer to provide a .properties file to override paths, resources, and strings used when rendering a grid. Includes simple test. Just a checkpoint; generalized solution with property overrides via JSP tags coming next. BB: self DRT: NetUI / datagrid pass Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions/ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions/DataGridExtensionException.java (contents, props changed) incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/IDataGridMessageKeys.java (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerMessageOverrides.jsp (contents, props changed) Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.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/util/org/apache/beehive/netui/util/netui.properties incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions/DataGridExtensionException.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions/DataGridExtensionException.java?view=auto&rev=149070 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions/DataGridExtensionException.java Sat Jan 29 12:11:38 2005 @@ -0,0 +1,41 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Header:$ + */ +package org.apache.beehive.netui.databinding.datagrid.exceptions; + +/** + * Exception thrown when an error occurs while extending the data grid. + */ +public class DataGridExtensionException + extends RuntimeException { + + public DataGridExtensionException() { + super(); + } + + public DataGridExtensionException(String message) { + super(message); + } + + public DataGridExtensionException(Throwable cause) { + super(cause); + } + + public DataGridExtensionException(String message, Throwable cause) { + super(message, cause); + } +} Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r2=149070 ============================================================================== --- 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 Sat Jan 29 12:11:38 2005 @@ -19,8 +19,10 @@ import java.util.ResourceBundle; import java.util.Map; +import java.text.MessageFormat; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.PageContext; +import javax.servlet.http.HttpServletRequest; import org.apache.beehive.netui.databinding.datagrid.model.style.StylePolicy; import org.apache.beehive.netui.databinding.datagrid.model.sort.ISort.SortDirection; @@ -29,6 +31,8 @@ import org.apache.beehive.netui.databinding.datagrid.rendering.pager.IPagerRenderer; import org.apache.beehive.netui.databinding.datagrid.rendering.pager.PreviousNextPagerRenderer; import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet; +import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys; +import org.apache.beehive.netui.databinding.datagrid.util.JspUtil; import org.apache.beehive.netui.databinding.datagrid.services.DataGridStateService; import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; import org.apache.beehive.netui.util.Bundle; @@ -57,6 +61,7 @@ private DataGridStateService _dgss = null; private JspContext _jspContext = null; + private HttpServletRequest _request = null; public DataGridModel(JspContext jspContext, String name, PagedDataSet dataSet) { super(); @@ -65,6 +70,8 @@ _jspContext = jspContext; _dataSet = dataSet; _dgss = DataGridStateService.getInstance(jspContext); + + _request = JspUtil.getRequest(_jspContext); } public String getName() { @@ -127,6 +134,11 @@ _cssPolicy = cssPolicy; } + 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 _resourceBundlePath; } @@ -134,7 +146,8 @@ public void setResourceBundlePath(String resourceBundlePath) { _resourceBundlePath = resourceBundlePath; } - public String getString(String key) { + + public String getMessage(String key) { if(_resourceBundlePath == null) return Bundle.getString(key); else { @@ -145,32 +158,32 @@ } } - public String getString(String key, Object[] args) { + public String getMessage(String key, Object[] args) { if(_resourceBundlePath == null) return Bundle.getString(key, args); else { if(_resourceBundle == null) _resourceBundle = ResourceBundle.getBundle(_resourceBundlePath); - return _resourceBundle.getString(key); + /* todo: consider caching these MessageFormat objects given the message key */ + MessageFormat format = new MessageFormat(_resourceBundle.getString(key)); + return format.format(args).toString(); } } - public String getSortImagePath(String contextPath, SortDirection sortDirection) { + public String getSortImagePath(SortDirection sortDirection) { if(sortDirection == SortDirection.ASCENDING) - return contextPath + "/resources/images/sortdown.gif"; + return getMessage(IDataGridMessageKeys.SORT_ASC_IMAGE_PATH); else if(sortDirection == SortDirection.DESCENDING) - return contextPath + "/resources/images/sortup.gif"; + return getMessage(IDataGridMessageKeys.SORT_DESC_IMAGE_PATH); else { assert sortDirection == SortDirection.NONE : "Encountered an invalid sort direction."; - /* todo: need to flag on whether this is sort up or down and set the image accordingly */ - return getDefaultSortImagePath(contextPath); + return getDefaultSortImagePath(); } } - public String getDefaultSortImagePath(String contextPath) { - /* todo: need to allow external configuration of this image path */ - return contextPath + "/resources/images/sortable.gif"; + public String getDefaultSortImagePath() { + return getMessage(IDataGridMessageKeys.SORT_NONE_IMAGE_PATH); } public void renderPager(AbstractRenderAppender appender) { Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java (original) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell/SortedCellDecorator.java Sat Jan 29 12:11:38 2005 @@ -87,9 +87,9 @@ /* build icon for existing sort */ if(sortModel.isSorted(cellModel.getSortExpression())) - imgTag.src = dgm.getSortImagePath(request.getContextPath(), sortDirection); + imgTag.src = dgm.getResourcePath() + dgm.getSortImagePath(sortDirection); else - imgTag.src = dgm.getDefaultSortImagePath(request.getContextPath()); + imgTag.src = dgm.getResourcePath() + dgm.getDefaultSortImagePath(); imgTag.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, "false"); Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java (original) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/AbstractPagerRenderer.java Sat Jan 29 12:11:38 2005 @@ -25,6 +25,7 @@ import org.apache.beehive.netui.databinding.datagrid.model.PagerModel; import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel; import org.apache.beehive.netui.databinding.datagrid.util.JspUtil; +import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys; import org.apache.beehive.netui.databinding.datagrid.rendering.cell.CellDecoratorException; import org.apache.beehive.netui.pageflow.internal.InternalUtils; import org.apache.beehive.netui.util.logging.Logger; @@ -77,55 +78,55 @@ protected abstract String internalRender(); protected String noDataRender() { - return _gridModel.getString("Tags_DataGrid_noData"); + return _gridModel.getMessage(IDataGridMessageKeys.DATAGRID_MSG_NODATA); } protected String buildLiveFirstLink() { StringBuilder builder = new StringBuilder(); AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); - buildAnchor(appender, _gridModel.getQueryParamsForFirstPage(), "Tags_DataGrid_pageNameFirst"); + buildAnchor(appender, _gridModel.getQueryParamsForFirstPage(), IDataGridMessageKeys.PAGER_MSG_FIRST); return builder.toString(); } protected String buildDeadFirstLink() { - return _gridModel.getString("Tags_DataGrid_pageNameFirst"); + return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_FIRST); } protected String buildLivePreviousLink() { StringBuilder builder = new StringBuilder(); AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); - buildAnchor(appender, _gridModel.getQueryParamsForPreviousPage(), "Tags_DataGrid_pageNamePrevious"); + buildAnchor(appender, _gridModel.getQueryParamsForPreviousPage(), IDataGridMessageKeys.PAGER_MSG_PREVIOUS); return builder.toString(); } protected String buildDeadPreviousLink() { - return _gridModel.getString("Tags_DataGrid_pageNamePrevious"); + return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_PREVIOUS); } protected String buildLiveNextPageLink() { StringBuilder builder = new StringBuilder(); AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); - buildAnchor(appender, _gridModel.getQueryParamsForNextPage(), "Tags_DataGrid_pageNameNext"); + buildAnchor(appender, _gridModel.getQueryParamsForNextPage(), IDataGridMessageKeys.PAGER_MSG_NEXT); return builder.toString(); } protected String buildDeadNextLink() { - return _gridModel.getString("Tags_DataGrid_pageNameNext"); + return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_NEXT); } protected String buildLiveLastLink() { StringBuilder builder = new StringBuilder(); AbstractRenderAppender appender = new StringBuilderRenderAppender(builder); - buildAnchor(appender, _gridModel.getQueryParamsForLastPage(), "Tags_DataGrid_pageNameLast"); + buildAnchor(appender, _gridModel.getQueryParamsForLastPage(), IDataGridMessageKeys.PAGER_MSG_LAST); return builder.toString(); } protected String buildDeadLastLink() { - return _gridModel.getString("Tags_DataGrid_pageNameLast"); + return _gridModel.getMessage(IDataGridMessageKeys.PAGER_MSG_LAST); } protected final void buildAnchor(AbstractRenderAppender appender, Map queryParams, String labelKey) { @@ -135,7 +136,7 @@ _anchorState.href = buildPageUri(queryParams); _anchorTag.doStartTag(appender, _anchorState); - appender.append(_gridModel.getString(labelKey)); + appender.append(_gridModel.getMessage(labelKey)); _anchorTag.doEndTag(appender); _anchorState.clear(); } Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java (original) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/FirstPreviousNextLastPagerRenderer.java Sat Jan 29 12:11:38 2005 @@ -19,6 +19,7 @@ import org.apache.beehive.netui.databinding.datagrid.model.PagerModel; import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel; +import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys; /** * @@ -37,8 +38,9 @@ int lastPage = pagerModel.getLastPage(); /* Page # of # First / Previous Next / Last */ - buf.append(getDataGridModel().getString("Tags_DataGrid_pageOfPages", + buf.append(getDataGridModel().getMessage(IDataGridMessageKeys.PAGER_FMT_BANNER, new Integer[]{currentPage + 1, pagerModel.getLastPage() + 1})); + buf.append(" "); if(currentPage > pagerModel.getFirstPage()) buf.append(buildLiveFirstLink()); Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java (original) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager/PreviousNextPagerRenderer.java Sat Jan 29 12:11:38 2005 @@ -19,6 +19,7 @@ import org.apache.beehive.netui.databinding.datagrid.model.PagerModel; import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel; +import org.apache.beehive.netui.databinding.datagrid.util.IDataGridMessageKeys; public class PreviousNextPagerRenderer extends AbstractPagerRenderer { @@ -33,7 +34,7 @@ int currentPage = pagerModel.getPage(); int lastPage = pagerModel.getLastPage(); - buf.append(getDataGridModel().getString("Tags_DataGrid_pageOfPages", + buf.append(getDataGridModel().getMessage(IDataGridMessageKeys.PAGER_FMT_BANNER, new Integer[]{currentPage + 1, pagerModel.getLastPage() + 1})); buf.append(" "); if(pagerModel.getPreviousPage() >= 0) Added: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/IDataGridMessageKeys.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/IDataGridMessageKeys.java?view=auto&rev=149070 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util/IDataGridMessageKeys.java Sat Jan 29 12:11:38 2005 @@ -0,0 +1,44 @@ +/* + * 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.util; + +/** + * + */ +public interface IDataGridMessageKeys { + + String DATAGRID_MSG_NODATA = "datagrid.msg.nodata"; + + String DATAGRID_RESOURCE_PATH = "datagrid.resource.path"; + + String SORT_ASC_IMAGE_PATH = "sort.asc.img"; + + String SORT_DESC_IMAGE_PATH = "sort.desc.img"; + + String SORT_NONE_IMAGE_PATH = "sort.none.img"; + + String PAGER_MSG_FIRST = "pager.msg.first"; + + String PAGER_MSG_NEXT = "pager.msg.next"; + + String PAGER_MSG_PREVIOUS = "pager.msg.previous"; + + String PAGER_MSG_LAST = "pager.msg.last"; + + String PAGER_FMT_BANNER = "pager.fmt.banner"; +} Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r2=149070 ============================================================================== --- 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 Jan 29 12:11:38 2005 @@ -21,12 +21,16 @@ import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel; import org.apache.beehive.netui.databinding.datagrid.model.CellModel; +import org.apache.beehive.netui.databinding.datagrid.exceptions.DataGridExtensionException; +import org.apache.beehive.netui.util.logging.Logger; /** * */ public class DataGridUtil { + private static final Logger LOGGER = Logger.getInstance(DataGridUtil.class); + /* * todo: in order to support nested grids, there needs to be a stack of * model objects in the PageContext. @@ -65,5 +69,31 @@ public static final void removeCellModel(JspContext jspContext) { assert jspContext.getAttribute(CELL_MODEL_KEY) != null : "Did not find a ColumnModel under the key " + CELL_MODEL_KEY; jspContext.removeAttribute(CELL_MODEL_KEY); + } + + /** + * Package protected method that helps instantiate a class used to extend the + * data grid. + * + * @param className the name of a class to instantiate + * @return an instance of the given class + * @throws DataGridExtensionException when an error occurs creating an instance of the class + */ + static final Object instantiateClass(String className) { + try { + Class clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader()); + Object obj = clazz.newInstance(); + return obj; + } catch(Exception e) { + assert e instanceof IllegalAccessException || + e instanceof InstantiationException || + e instanceof ClassNotFoundException : "Caught exception of unexpected type " + e.getClass().getName(); + + String msg = "Unable to extend data grid. Can't instantiate extension class. Cause: " + e.getMessage(); + if(LOGGER.isErrorEnabled()) + LOGGER.error(msg, e); + + throw new DataGridExtensionException(msg, e); + } } } 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&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Footer.java&r2=149070 ============================================================================== --- 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 Jan 29 12:11:38 2005 @@ -253,17 +253,22 @@ TrTag.State trState = new TrTag.State(); trState.styleClass = stylePolicy.getFooterRowClass(); - //if(_tfootTag.styleClass == null) - // _tfootTag.styleClass = stylePolicy.getTableFootClass(); + /* + if(_tfootTag.styleClass == null) + _tfootTag.styleClass = stylePolicy.getTableFootClass(); + tableRenderer.openTableFoot(_tfootTag, appender); + */ - //tableRenderer.openTableFoot(_tfootTag, appender); tableRenderer.openFooterRow(trState, appender); fragment.invoke(sw); appender.append(sw.toString()); tableRenderer.closeFooterRow(appender); - //tableRenderer.closeTableFoot(appender); + + /* + tableRenderer.closeTableFoot(appender); + */ } } } 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&rev=149070&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java&r1=149069&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/Header.java&r2=149070 ============================================================================== --- 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 Jan 29 12:11:38 2005 @@ -24,13 +24,16 @@ import javax.servlet.jsp.JspContext; import org.apache.beehive.netui.tags.AbstractSimpleTag; +import org.apache.beehive.netui.tags.html.HtmlConstants; import org.apache.beehive.netui.tags.rendering.THeadTag; import org.apache.beehive.netui.tags.rendering.TrTag; import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender; +import org.apache.beehive.netui.tags.rendering.AbstractHtmlState; import org.apache.beehive.netui.databinding.datagrid.model.DataGridModel; import org.apache.beehive.netui.databinding.datagrid.model.style.StylePolicy; import org.apache.beehive.netui.databinding.datagrid.rendering.table.TableRenderer; +import org.apache.beehive.netui.util.logging.Logger; /** * @netui:tag name="header" description="Render an HTML table head tag" body-content="scriptless" @@ -39,10 +42,198 @@ public class Header extends AbstractSimpleTag { + private THeadTag.State _theadTag = new THeadTag.State(); + public String getTagName() { return "Header"; } + /** + * Sets the onClick javascript event. + * + * @param onClick - the onClick event. + * @jsptagref.attributedescription The onClick JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onClick</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onClick JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnClick(String onClick) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONCLICK, onClick); + } + + /** + * Sets the onDblClick javascript event. + * + * @param onDblClick - the onDblClick event. + * @jsptagref.attributedescription The onDblClick JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onDblClick</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onDblClick JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnDblClick(String onDblClick) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONDBLCLICK, onDblClick); + } + + /** + * Sets the onKeyDown javascript event. + * + * @param onKeyDown - the onKeyDown event. + * @jsptagref.attributedescription The onKeyDown JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onKeyDown</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onKeyDown JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnKeyDown(String onKeyDown) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYDOWN, onKeyDown); + } + + /** + * Sets the onKeyUp javascript event. + * + * @param onKeyUp - the onKeyUp event. + * @jsptagref.attributedescription The onKeyUp JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onKeyUp</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onKeyUp JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnKeyUp(String onKeyUp) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYUP, onKeyUp); + } + + /** + * Sets the onKeyPress javascript event. + * + * @param onKeyPress - the onKeyPress event. + * @jsptagref.attributedescription The onKeyPress JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onKeyPress</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onKeyPress JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnKeyPress(String onKeyPress) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONKEYPRESS, onKeyPress); + } + + /** + * Sets the onMouseDown javascript event. + * + * @param onMouseDown - the onMouseDown event. + * @jsptagref.attributedescription The onMouseDown JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onMouseDown</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onMouseDown JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnMouseDown(String onMouseDown) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEDOWN, onMouseDown); + } + + /** + * Sets the onMouseUp javascript event. + * + * @param onMouseUp - the onMouseUp event. + * @jsptagref.attributedescription The onMouseUp JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onMouseUp</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onMouseUp JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnMouseUp(String onMouseUp) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEUP, onMouseUp); + } + + /** + * Sets the onMouseMove javascript event. + * + * @param onMouseMove - the onMouseMove event. + * @jsptagref.attributedescription The onMouseMove JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onMouseMove</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onMouseMove JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnMouseMove(String onMouseMove) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEMOVE, onMouseMove); + } + + /** + * Sets the onMouseOut javascript event. + * + * @param onMouseOut - the onMouseOut event. + * @jsptagref.attributedescription The onMouseOut JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onMouseOut</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onMouseOut JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnMouseOut(String onMouseOut) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOUT, onMouseOut); + } + + /** + * Sets the onMouseOver javascript event. + * + * @param onMouseOver - the onMouseOver event. + * @jsptagref.attributedescription The onMouseOver JavaScript event. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_onMouseOver</i> + * @netui:attribute required="false" rtexprvalue="true" description="The onMouseOver JavaScript event." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.EventPropertyClass" category="event" + */ + public void setOnMouseOver(String onMouseOver) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_JAVASCRIPT, HtmlConstants.ONMOUSEOVER, onMouseOver); + } + + /** + * Sets the style of the rendered html tag. + * + * @param style - the html style. + * @jsptagref.attributedescription The style. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_style</i> + * @netui:attribute required="false" rtexprvalue="true" description="The style." + * @netui.tldx:attribute propertyclass="workshop.jspdesigner.properties.JspStyleProperty" category="format" + */ + public void setStyle(String style) { + if("".equals(style)) return; + + _theadTag.style = style; + } + + /** + * Sets the style class of the rendered html tag. + * + * @param styleClass - the html style class. + * @jsptagref.attributedescription The style class. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_style_class</i> + * @netui:attribute required="false" rtexprvalue="true" description="The style class." + * @netui.tldx:attribute category="Format" + */ + public void setStyleClass(String styleClass) { + if("".equals(styleClass)) return; + + _theadTag.styleClass = styleClass; + } + + /** + * Sets the value of the title attribute. + * + * @param title + * @jsptagref.attributedescription The title. + * @jsptagref.databindable false + * @jsptagref.attributesyntaxvalue <i>string_title</i> + * @netui:attribute required="false" rtexprvalue="true" description="The title. " + * @netui.tldx:attribute category="misc" + */ + public void setTitle(String title) { + _theadTag.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.TITLE, title); + } + public void doTag() throws JspException, IOException { @@ -62,9 +253,8 @@ TableRenderer tableRenderer = dataGridModel.getTableRenderer(); assert tableRenderer != null; - THeadTag.State theadState = new THeadTag.State(); - theadState.styleClass = stylePolicy.getTableHeadClass(); - tableRenderer.openTableHead(theadState, appender); + _theadTag.styleClass = (_theadTag.styleClass != null ? _theadTag.styleClass : stylePolicy.getTableHeadClass()); + tableRenderer.openTableHead(_theadTag, appender); TrTag.State trState = new TrTag.State(); trState.styleClass = stylePolicy.getHeaderRowClass(); @@ -78,6 +268,7 @@ } tableRenderer.closeHeaderRow(appender); + tableRenderer.closeTableHead(appender); getJspContext().getOut().write(content.toString()); Modified: incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties&r1=149069&p2=incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties (original) +++ incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties Sat Jan 29 12:11:38 2005 @@ -634,16 +634,9 @@ Tags_Repeater_nullIterator=The data structure from which to create an iterator is null. Tags_RepeaterItem_invalidChoiceTags=The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItem's body. Tags_RepeaterItem_invalidChoiceMethod=The RepeaterItem's choice feature requires exactly one ChoiceMethod tag. -Tags_StructuredBaseTag_startTagError=An exception occurred when rendering the startTag of the tag \"{0}\" because: {1} -Tags_StructuredBaseTag_endTagError=An exception occurred when rendering the endTag of the tag \"{0}\" because: {1} -Tags_StructuredBaseTag_invalidParent=A tag of type \"{0}\" must be nested within a tag of type \"{1}\" - -Tags_DataGrid_noData=No data to display -Tags_DataGrid_pageNameFirst=First -Tags_DataGrid_pageNamePrevious=Previous -Tags_DataGrid_pageNameNext=Next -Tags_DataGrid_pageNameLast=Last -Tags_DataGrid_pageOfPages=Page {0} of {1} +Tags_RepeaterComponent_startTagError=An exception occurred when rendering the startTag of the tag \"{0}\" because: {1} +Tags_RepeaterComponent_endTagError=An exception occurred when rendering the endTag of the tag \"{0}\" because: {1} +Tags_RepeaterComponent_invalidParent=A tag of type \"{0}\" must be nested within a tag of type \"{1}\" # # NetUI Utility Strings @@ -660,3 +653,21 @@ TypeUtils_javaSqlDateConvertError=Caught an error converting a String to a java.sql.Date: {0} TypeUtils_javaSqlTimestampConvertError=Caught an error converting a String to a java.sql.Timestamp: {0} TypeUtils_javaSqlTimeConvertError=Caught an error converting a String to a java.sql.Time: {0} + +# +# DataGrid strings. These message keys violate the default key pattern +# because they are exposed to the developer and are expected to be overridden +# in a developer's webapp to customize the look / feel / messages of the grid +# +datagrid.resource.path=resources/images +datagrid.msg.nodata=No data to display + +sort.asc.img=/sortdown.gif +sort.desc.img=/sortup.gif +sort.none.img=/sortable.gif + +pager.msg.first=First +pager.msg.previous=Previous +pager.msg.next=Next +pager.msg.last=Last +pager.fmt.banner=Page {0} of {1} \ No newline at end of file Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerMessageOverrides.jsp Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerMessageOverrides.jsp?view=auto&rev=149070 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerMessageOverrides.jsp Sat Jan 29 12:11:38 2005 @@ -0,0 +1,33 @@ +<%@ page language="java" contentType="text/html;charset=UTF-8"%> +<%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%> +<%@ taglib uri="beehive-netui-tags-databinding.tld" prefix="netui-data"%> +<%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%> +<%@ taglib prefix="datagrid" tagdir="/WEB-INF/tags/org/apache/beehive/netui/test/databinding/tagfiles" %> +<netui-template:template templatePage="../site/template.jsp"> + <netui-template:setAttribute name="title" value="Basic Data Grid"/> + <netui-template:section name="body"> + <p> + <datagrid:portfolioXmlBean/> + <br/> + <netui-data:dataGrid dataSource="pageScope.stocks" name="portfolio" resourceBundlePath="databinding.datagrid.resources.simple-test"> + <netui-data:configurePager pageSize="2"/> + <netui-data:header> + <netui-data:headerCell headerText="Symbol"/> + <netui-data:headerCell headerText="Price"/> + <netui-data:headerCell headerText="Web"/> + </netui-data:header> + <netui-data:rows> + <netui-data:spanCell value="${container.item.symbol}"/> + <netui-data:spanCell value="${container.item.price}"/> + <netui-data:anchorCell value="${container.item.name}" href="${container.item.web}"> + <netui:parameter name="rowid" value="${container.index}"/> + <netui:parameter name="symbol" value="${container.item.symbol}"/> + </netui-data:anchorCell> + </netui-data:rows> + </netui-data:dataGrid> + <br/> + <netui:anchor href="index.jsp">Reset</netui:anchor> + <br/> + </p> + </netui-template:section> +</netui-template:template> \ No newline at end of file Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?view=diff&rev=149070&p1=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r1=149069&p2=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r2=149070 ============================================================================== --- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml (original) +++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Sat Jan 29 12:11:38 2005 @@ -2840,6 +2840,21 @@ </features> </test> <test> + <name>DataGridPagerOverride</name> + <description>DataGridPagerOverride</description> + <webapp>coreWeb</webapp> + <categories> + <category>bvt</category> + <category>bvt.struts11</category> + <category>databinding</category> + <category>datagrid</category> + </categories> + <features> + <feature>Databinding</feature> + <feature>Data Grid</feature> + </features> + </test> + <test> <name>DataGridPagerStickyParam</name> <description>DataGridStickyParam</description> <webapp>coreWeb</webapp>
