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&amp;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&amp;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&amp;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&amp;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&amp;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

Reply via email to