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/01/29 21:11:39 UTC
svn commit: r149070 - in incubator/beehive/trunk/netui: src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/exceptions src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/cell src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/rendering/pager src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/util src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid src/util/org/apache/beehive/netui/util test/webapps/drt/coreWeb/databinding/datagrid/misc test/webapps/drt/testRecorder/config
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>