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/30 00:55:15 UTC
svn commit: r149080 - in incubator/beehive/trunk/netui: src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer test/webapps/drt/coreWeb/databinding/datagrid/misc test/webapps/drt/testRecorder/config test/webapps/drt/testRecorder/tests
Author: ekoneil
Date: Sat Jan 29 15:55:13 2005
New Revision: 149080
URL: http://svn.apache.org/viewcvs?view=rev&rev=149080
Log:
Data grid features.
Implement pluggable pager renderers. Pagers are some of the most often replaced / customized parts of grids; the pluggable pager renderer allows a developer to plug-in Java code to implement pager rendering.
Includes a simple test of this (since simple is all that's possible right now...).
The IPagerRenderer is pretty much useless and will be replaced with an abstract base class in a subsequent checkin; this will allow for access to the DataGridModel and request / jsp context state.
BB: self
DRT: NetUI / datagrid pass
Added:
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer/
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer/HelloWorldPagerRenderer.java (contents, props changed)
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp (contents, props changed)
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridPagerRendererSmoke.xml
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/DataGridUtil.java
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java?view=diff&rev=149080&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java&r1=149079&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/ConfigurePager.java&r2=149080
==============================================================================
--- 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 Sat Jan 29 15:55:13 2005
@@ -26,6 +26,7 @@
import org.apache.beehive.netui.databinding.datagrid.rendering.pager.FirstPreviousNextLastPagerRenderer;
import org.apache.beehive.netui.databinding.datagrid.rendering.pager.PreviousNextPagerRenderer;
import org.apache.beehive.netui.databinding.datagrid.util.JspUtil;
+import org.apache.beehive.netui.databinding.datagrid.exceptions.DataGridExtensionException;
import org.apache.beehive.netui.tags.AbstractSimpleTag;
import org.apache.beehive.netui.util.logging.Logger;
@@ -46,6 +47,7 @@
private String _pagerFormat = null;
private String _pageHref = null;
private String _pageAction = null;
+ private String _pagerRendererClass = null;
public String getTagName() {
return "Pager";
@@ -99,6 +101,13 @@
_disableDefaultPager = disableDefaultPager;
}
+ /**
+ * @netui:attribute required="false" rtexprvalue="true"
+ */
+ public void setPagerRendererClass(String pagerRendererClass) {
+ _pagerRendererClass = pagerRendererClass;
+ }
+
public void doTag()
throws JspException {
@@ -111,18 +120,31 @@
IPagerRenderer pagerRenderer = null;
dgm.setDisableDefaultPagerRendering(_disableDefaultPager);
+
if(_pageSize != null)
pm.setPageSize(_pageSize);
- /* todo: support pluggable pager renderers */
- if(_pagerFormat != null) {
+ if(_pagerRendererClass != null) {
+ try {
+ pagerRenderer = (IPagerRenderer)DataGridUtil.instantiateClass(_pagerRendererClass, IPagerRenderer.class);
+
+ assert pagerRenderer != null : "Expected a non-null pager renderer of type \"" + _pagerRendererClass + "\"";
+ }
+ catch(DataGridExtensionException e) {
+ throw new JspException(e);
+ }
+ }
+ else if(_pagerFormat != null) {
if(_pagerFormat.equals(FIRST_LAST_PREV_NEXT))
pagerRenderer = new FirstPreviousNextLastPagerRenderer(dgm);
else if(_pagerFormat.equals(PREV_NEXT))
pagerRenderer = new PreviousNextPagerRenderer(dgm);
- else
- throw new JspException("The pagerFormat \"" + _pagerFormat + "\" is not supported");
+ else throw new JspException("The pagerFormat \"" + _pagerFormat + "\" is not supported");
+ }
+ if(pagerRenderer != null) {
+ /* todo: need to provide pager renderers some context here */
+ // pagerRenderer.setDataGridModel(pagerRenderer);
dgm.setPagerRenderer(pagerRenderer);
}
@@ -141,3 +163,4 @@
return;
}
}
+
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=149080&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r1=149079&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/tags/databinding/datagrid/DataGridUtil.java&r2=149080
==============================================================================
--- 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 15:55:13 2005
@@ -40,7 +40,8 @@
private static final String CELL_MODEL_KEY = "cell";
/* do not construct */
- private DataGridUtil() {}
+ private DataGridUtil() {
+ }
public static final DataGridModel getDataGridModel(JspContext jspContext) {
Object model = jspContext.getAttribute(DATA_GRID_MODEL_KEY);
@@ -79,15 +80,23 @@
* @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) {
+ static final Object instantiateClass(String className, Class assignableFrom) {
+ assert className != null;
+
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();
+
+ if(assignableFrom == null || assignableFrom.isAssignableFrom(clazz))
+ return obj;
+ else throw new DataGridExtensionException("Invalid data grid extension. The class \"" + className + "\" is not a subclass or sub interface of \"" + assignableFrom + "\"");
+ }
+ catch(Exception e) {
+ assert
+ e instanceof DataGridExtensionException ||
+ 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())
Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer/HelloWorldPagerRenderer.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer/HelloWorldPagerRenderer.java?view=auto&rev=149080
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/databinding/datagrid/renderer/HelloWorldPagerRenderer.java Sat Jan 29 15:55:13 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package databinding.datagrid.renderer;
+
+import org.apache.beehive.netui.databinding.datagrid.rendering.pager.IPagerRenderer;
+
+/**
+ * Simple implementation of the IPagerRenderer interface. This API is
+ * currently totally useless as it's impossible for a PagerRenderer implementation
+ * to obtain any information about its environment.
+ */
+public class HelloWorldPagerRenderer
+ implements IPagerRenderer {
+
+ public String render() {
+ return "Hey, this codepath works! Oh, yeah -- Hello World!";
+ }
+}
\ No newline at end of file
Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp?view=auto&rev=149080
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp Sat Jan 29 15:55:13 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 pagerRendererClass="databinding.datagrid.renderer.HelloWorldPagerRenderer"/>
+ <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=149080&p1=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r1=149079&p2=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r2=149080
==============================================================================
--- 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 15:55:13 2005
@@ -2855,6 +2855,21 @@
</features>
</test>
<test>
+ <name>DataGridPagerRendererSmoke</name>
+ <description>DataGridPagerRendererSmoke</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>
Added: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridPagerRendererSmoke.xml
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridPagerRendererSmoke.xml?view=auto&rev=149080
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/DataGridPagerRendererSmoke.xml Sat Jan 29 15:55:13 2005
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+ <ses:sessionName>DataGridPagerRendererSmoke</ses:sessionName>
+ <ses:tester>ekoneil</ses:tester>
+ <ses:startDate>29 Jan 2005, 04:44:46.573 PM MST</ses:startDate>
+ <ses:description>Test of the codepath to plug-in a custom pager renderer.</ses:description>
+ <ses:tests>
+ <ses:test>
+ <ses:testNumber>1</ses:testNumber>
+ <ses:request>
+ <ses:protocol>HTTP</ses:protocol>
+ <ses:protocolVersion>1.1</ses:protocolVersion>
+ <ses:host>localhost</ses:host>
+ <ses:port>8080</ses:port>
+ <ses:uri>/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp</ses:uri>
+ <ses:method>GET</ses:method>
+ <ses:parameters/>
+ <ses:cookies>
+ <ses:cookie>
+ <ses:name>JSESSIONID</ses:name>
+ <ses:value>6B5E6F29D5F8A9E63E8B8A10FE44BE3C</ses:value>
+ </ses:cookie>
+ </ses:cookies>
+ <ses:headers>
+ <ses:header>
+ <ses:name>accept</ses:name>
+ <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-charset</ses:name>
+ <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-encoding</ses:name>
+ <ses:value>gzip,deflate</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-language</ses:name>
+ <ses:value>en-us,en;q=0.5</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>connection</ses:name>
+ <ses:value>keep-alive</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>cookie</ses:name>
+ <ses:value>JSESSIONID=6B5E6F29D5F8A9E63E8B8A10FE44BE3C</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>host</ses:name>
+ <ses:value>localhost:8080</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>keep-alive</ses:name>
+ <ses:value>300</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>user-agent</ses:name>
+ <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+ </ses:header>
+ </ses:headers>
+ </ses:request>
+ <ses:response>
+ <ses:statusCode>200</ses:statusCode>
+ <ses:reason/>
+ <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+ <head>
+ <title>NetUI Data Grid Samples</title>
+ <link rel="stylesheet" href="/coreWeb/databinding/datagrid/site/css/default.css" type="text/css"/>
+ </head>
+ <base href="http://localhost:8080/coreWeb/databinding/datagrid/misc/pagerPluggedRenderer.jsp">
+ <body>
+ <p>
+ <b>Basic Data Grid</b>
+ <table width="100%">
+ <tr><td></td></tr>
+ <tr><td>
+
+ <p>
+
+
+
+
+
+
+ <br/>
+ Hey, this codepath works! Oh, yeah -- Hello World!
+<table class="datagrid">
+
+
+
+<thead class="datagrid">
+<tr class="datagrid-header">
+ <th class="datagrid">Symbol</th>
+
+
+ <th class="datagrid">Price</th>
+
+
+ <th class="datagrid">Web</th>
+
+
+
+</tr></thead>
+
+
+<tr class="datagrid-even">
+ <td class="datagrid"><span>BEAS</span></td>
+
+ <td class="datagrid"><span>14.35</span></td>
+
+ <td class="datagrid"><a href="http://www.bea.com?rowid=1&symbol=BEAS"><span>BEA Systems</span></a></td>
+
+
+</tr>
+<tr class="datagrid-odd">
+ <td class="datagrid"><span>CSCO</span></td>
+
+ <td class="datagrid"><span>19.42</span></td>
+
+ <td class="datagrid"><a href="http://www.cisco.com?rowid=2&symbol=CSCO"><span>Cisco Systems</span></a></td>
+
+
+</tr>
+<tr class="datagrid-even">
+ <td class="datagrid"><span>GE</span></td>
+
+ <td class="datagrid"><span>59.42</span></td>
+
+ <td class="datagrid"><a href="http://www.ge.com?rowid=3&symbol=GE"><span>General Electric</span></a></td>
+
+
+</tr>
+<tr class="datagrid-odd">
+ <td class="datagrid"><span>RHAT</span></td>
+
+ <td class="datagrid"><span>18.2</span></td>
+
+ <td class="datagrid"><a href="http://www.redhat.com?rowid=4&symbol=RHAT"><span>RedHat Systems</span></a></td>
+
+
+</tr>
+<tr class="datagrid-even">
+ <td class="datagrid"><span>YHOO</span></td>
+
+ <td class="datagrid"><span>48.16</span></td>
+
+ <td class="datagrid"><a href="http://www.yahoo.com?rowid=5&symbol=YHOO"><span>Yahoo Inc</span></a></td>
+
+
+</tr>
+ </table>
+
+
+ <br/>
+ <a href="/coreWeb/databinding/datagrid/misc/index.jsp">Reset</a>
+ <br/>
+ </p>
+
+ </td></tr>
+ </p>
+ <table>
+ <tr><td><a href="/netuiDRT/databinding/datagrid/basic/index.jsp">Home</a></td></tr>
+ </table>
+ </p>
+ </body>
+
+</html>]]></ses:responseBody>
+ </ses:response>
+ </ses:test>
+ </ses:tests>
+ <ses:endDate>29 Jan 2005, 04:44:51.350 PM MST</ses:endDate>
+ <ses:testCount>1</ses:testCount>
+</ses:recorderSession>
\ No newline at end of file