You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by ap...@apache.org on 2010/12/16 16:01:17 UTC
svn commit: r1049996 [2/2] - in /velocity/tools/trunk: ./
maven-velocity-tools-plugin/ maven-velocity-tools-plugin/src/
maven-velocity-tools-plugin/src/main/
maven-velocity-tools-plugin/src/main/java/
maven-velocity-tools-plugin/src/main/java/org/ mave...
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/pom.xml
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/pom.xml?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/pom.xml (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/pom.xml Thu Dec 16 15:01:15 2010
@@ -89,5 +89,29 @@
<version>2.1.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity-tools-view-jsp</artifactId>
+ <version>2.1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet.jsp</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.1</version>
+ <type>jar</type>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>displaytag-directive</artifactId>
+ <version>2.1.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/Person.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/Person.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/Person.java (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/Person.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,34 @@
+package org.apache.velocity.tools.examples.showcase.sample;
+
+public class Person
+{
+
+ private String name;
+
+ private String surname;
+
+ private String role;
+
+ public Person(String name, String surname, String role)
+ {
+ this.name = name;
+ this.surname = surname;
+ this.role = role;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public String getSurname()
+ {
+ return surname;
+ }
+
+ public String getRole()
+ {
+ return role;
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/SampleListInitializer.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/SampleListInitializer.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/SampleListInitializer.java (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/java/org/apache/velocity/tools/examples/showcase/sample/SampleListInitializer.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,34 @@
+package org.apache.velocity.tools.examples.showcase.sample;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class SampleListInitializer implements ServletContextListener
+{
+
+ public void contextInitialized(ServletContextEvent event)
+ {
+ List<Person> people = new ArrayList<Person>();
+ people.add(new Person("Claude", "Brisson", "PMC Member"));
+ people.add(new Person("Nathan", "Bubna", "PMC Member"));
+ people.add(new Person("Will", "Glass-Husain", "PMC Chair"));
+ people.add(new Person("Marinó A.", "Jónsson", "PMC Member"));
+ people.add(new Person("Geir", "Magnusson Jr.", "PMC Member"));
+ people.add(new Person("Daniel", "Rall", "PMC Member"));
+ people.add(new Person("Henning P.", "Schmiedehausen", "PMC Member"));
+ people.add(new Person("Jon S.", "Stevens", "Emeritus"));
+ people.add(new Person("Jason", "van Zyl", "Emeritus"));
+ people.add(new Person("Christopher", "Schultz", "Java developer"));
+ people.add(new Person("Antonio", "Petrelli", "PMC Member"));
+ event.getServletContext().setAttribute("people", people);
+ }
+
+ public void contextDestroyed(ServletContextEvent event)
+ {
+ // It does nothing.
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/DISPLAYTAG-LICENSE.txt
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/DISPLAYTAG-LICENSE.txt?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/DISPLAYTAG-LICENSE.txt (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/DISPLAYTAG-LICENSE.txt Thu Dec 16 15:01:15 2010
@@ -0,0 +1,118 @@
+
+The Artistic License
+
+Preamble
+
+ The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package,
+ while giving the users of the package the right to use and distribute
+ the Package in a more-or-less customary fashion, plus the right to make
+ reasonable modifications.
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes
+ of the Copyright Holder.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people involved,
+ and so on. (You will not be required to justify it to the
+ Copyright Holder, but only to the computing community at large
+ as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+
+ 1. You may make and give away verbatim copies of the source form of the
+ Standard Version of this Package without restriction, provided that you
+ duplicate all of the original copyright notices and associated disclaimers.
+
+
+ 2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A Package
+ modified in such a way shall still be considered the Standard Version.
+
+
+ 3. You may otherwise modify your copy of this Package in any way, provided
+ that you insert a prominent notice in each changed file stating how and
+ when you changed that file, and provided that you do at least ONE of the
+ following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or
+ an equivalent medium, or placing the modifications on a major archive
+ site such as ftp.uu.net, or by allowing the Copyright Holder to include
+ your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide
+ a separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+
+ 4. You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where
+ to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding
+ Standard Version executables, giving the non-standard executables
+ non-standard names, and clearly documenting the differences in manual
+ pages (or equivalent), together with instructions on where to get
+ the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+
+ 5. You may charge a reasonable copying fee for any distribution of this
+ Package. You may charge any fee you choose for support of this Package.
+ You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial) software
+ distribution provided that you do not advertise this Package as a
+ product of your own.
+
+
+ 6. The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever generated
+ them, and may be sold commercially, and may be aggregated with this
+ Package.
+
+
+ 7. C or perl subroutines supplied by you and linked into this Package
+ shall not be considered part of this Package.
+
+
+ 8. The name of the Copyright Holder may not be used to endorse or promote
+ products derived from this software without specific prior written permission.
+
+
+ 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+ The End
\ No newline at end of file
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/NOTICE
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/NOTICE?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/NOTICE (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/NOTICE Thu Dec 16 15:01:15 2010
@@ -0,0 +1,17 @@
+Apache Velocity Tools
+Showcase application
+
+Copyright (C) 2000-2010 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Support for using SSL with Struts is provided using
+the sslext library package, which is open source software
+under the Apache Software License 1.1 with copyright attributed
+to The Apache Software Foundation.
+This software is available from http://sslext.sourceforge.net/
+
+This package contains Display Tag Library:
+ http://www.displaytag.org/
+distributed under the Artistic License. See DISPLAYTAG-LICENSE.txt
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/resources.properties
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/resources.properties?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/resources.properties (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/resources/resources.properties Thu Dec 16 15:01:15 2010
@@ -31,7 +31,7 @@ css.name = CSS Layout
css.issuesHeader = Known Issues
css.issues = This layout fails in IE4.5/Mac. That browser has poor support for CSS absolute positioning, yet it recognizes and executes the CSS @import statement used to hide CSS from broken browsers. Currently, there is no known solution.
css.niftyHeader = Nifty Layout Techniques
-css.nifty = All sorts of nifty layout can be accomplished using cascading style sheets (CSS). Check out <a href="http://www.bluerobot.com" title="BlueRobot layout Resource">bluerobot.com</a> and the <a href="http://www.bluerobot.com/web/layouts/">Layout Reservoir</A>
+css.nifty = All sorts of nifty layout can be accomplished using cascading style sheets (CSS). Check out <a href="http://www.bluerobot.com" title="BlueRobot layout Resource">bluerobot.com</a> and the <a href="http://www.bluerobot.com/web/layouts/">Layout Reservoir</A>
## Print.vm
print.name = Print Layout
@@ -75,6 +75,7 @@ tools.esc = EscapeTool
tools.field = FieldTool
tools.include = IncludeTool
tools.import = ImportTool
+tools.jsp = JSP taglib
tools.link = LinkTool
tools.lists = ListTool
tools.math = MathTool
@@ -216,7 +217,7 @@ convert.parseDate_StringObject = Parses
convert.parseDate_StringObject.param1 = ''8-1-79''
convert.parseDate_StringObject.param2 = ''M-d-yy''
convert.parseDate_StringStringObject = Parses a String to an instance of Date using the specified format and Locale
-convert.parseDate.String =
+convert.parseDate.String =
convert.parseDate_StringStringObjectTimeZone = Parses a String to an instance of Date using the specified format, Locale and TimeZone
convert.toCalendar = Converts an object to an instance of Calendar using the format returned by $convert.dateFormat and the Locale returned by $convert.locale.
convert.toCalendar.Object = $date
@@ -363,8 +364,8 @@ Node in the internal Node list for this
there is no value for that attribute in this element, then this will return <code>null</code>.
xml.attributes = Returns a Map of all attributes for the first/sole \
Node held internally by this instance. If that Node is not an Element, this will return null.
-xml.isEmpty = Returns <code>true</code> if there are no Nodes internally held by this instance.
-xml.size = Returns the number of Nodes internally held by this instance.
+xml.isEmpty = Returns <code>true</code> if there are no Nodes internally held by this instance.
+xml.size = Returns the number of Nodes internally held by this instance.
xml.iterator = Returns an Iterator that returns new XmlTool instances for each Node held internally by this instance.
xml.getFirst = Returns a new instance that wraps only the first Node from this instance''s internal Node list.
xml.getLast = Returns a new instance that wraps only the last Node from this instance''s internal Node list.
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/velocity.properties
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/velocity.properties?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/velocity.properties (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/velocity.properties Thu Dec 16 15:01:15 2010
@@ -31,3 +31,10 @@ tools.view.servlet.layout.directory = la
# relative to the layout directory
# NOT relative to the root directory of the webapp!
tools.view.servlet.layout.default.template = Default.vm
+
+userdirective=org.apache.velocity.tools.examples.displaytag.CaptionTagDirective,\
+ org.apache.velocity.tools.examples.displaytag.ColumnTagDirective,\
+ org.apache.velocity.tools.examples.displaytag.SetPropertyTagDirective,\
+ org.apache.velocity.tools.examples.displaytag.TableFooterTagDirective,\
+ org.apache.velocity.tools.examples.displaytag.TableTagDirective
+
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/web.xml?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/web.xml (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/WEB-INF/web.xml Thu Dec 16 15:01:15 2010
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one
@@ -20,7 +19,10 @@
under the License.
-->
-<web-app>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.VelocityLayoutServlet</servlet-class>
@@ -44,4 +46,7 @@
<welcome-file-list>
<welcome-file>index.vm</welcome-file>
</welcome-file-list>
+ <listener>
+ <listener-class>org.apache.velocity.tools.examples.showcase.sample.SampleListInitializer</listener-class>
+ </listener>
</web-app>
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/css/displaytag.css
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/css/displaytag.css?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/css/displaytag.css (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/css/displaytag.css Thu Dec 16 15:01:15 2010
@@ -0,0 +1,145 @@
+table {
+ border: 1px solid #666;
+ width: 80%;
+ margin: 20px 0 20px 0 !important;
+}
+
+th,td {
+ padding: 2px 4px 2px 4px !important;
+ text-align: left;
+ vertical-align: top;
+}
+
+thead tr {
+ background-color: #fc0;
+}
+
+th.sorted {
+ background-color: orange;
+}
+
+th a,th a:visited {
+ color: black;
+}
+
+th a:hover {
+ text-decoration: underline;
+ color: black;
+}
+
+th.sorted a,th.sortable a {
+ background-position: right;
+ display: block;
+ width: 100%;
+}
+
+th.sortable a {
+ background-image: url(../img/arrow_off.png);
+ background-repeat: no-repeat;
+}
+
+th.order1 a {
+ background-image: url(../img/arrow_down.png);
+ background-repeat: no-repeat;
+}
+
+th.order2 a {
+ background-image: url(../img/arrow_up.png);
+ background-repeat: no-repeat;
+}
+
+tr.odd {
+ background-color: #fff
+}
+
+tr.tableRowEven,tr.even {
+ background-color: #fea
+}
+
+div.exportlinks {
+ background-color: #eee;
+ border: 1px dotted #999;
+ padding: 2px 4px 2px 4px;
+ margin: 2px 0 10px 0;
+ width: 79%;
+}
+
+span.export {
+ padding: 0 4px 1px 20px;
+ display: inline;
+ display: inline-block;
+ cursor: pointer;
+}
+
+span.excel {
+ background-image: url(../img/ico_file_excel.png);
+}
+
+span.csv {
+ background-image: url(../img/ico_file_csv.png);
+}
+
+span.xml {
+ background-image: url(../img/ico_file_xml.png);
+}
+
+span.pdf {
+ background-image: url(../img/ico_file_pdf.png);
+}
+
+span.rtf {
+ background-image: url(../img/ico_file_rtf.png);
+}
+
+span.pagebanner {
+ background-color: #eee;
+ border: 1px dotted #999;
+ padding: 2px 4px 2px 4px;
+ width: 79%;
+ margin-top: 10px;
+ display: block;
+ border-bottom: none;
+}
+
+span.pagelinks {
+ background-color: #eee;
+ border: 1px dotted #999;
+ padding: 2px 4px 2px 4px;
+ width: 79%;
+ display: block;
+ border-top: none;
+ margin-bottom: -5px;
+}
+
+
+.group-1 {
+ font-weight:bold;
+ padding-bottom:10px;
+ border-top:1px solid black;
+}
+.group-2 {
+ font-style:italic;
+ border-top: 1px solid black;
+
+}
+.subtotal-sum, .grandtotal-sum {
+ font-weight:bold;
+ text-align:right;
+}
+.subtotal-header {
+ padding-bottom: 0px;
+ border-top: 1px solid white;
+}
+.subtotal-label, .grandtotal-label {
+ border-top: 1px solid white;
+ font-weight: bold;
+}
+.grouped-table tr.even {
+ background-color: #fff;
+}
+.grouped-table tr.odd {
+ background-color: #fff;
+}
+.grandtotal-row {
+ border-top: 2px solid black;
+}
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_down.png
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_down.png?rev=1049996&view=auto
==============================================================================
Binary file - no diff available.
Propchange: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_down.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_off.png
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_off.png?rev=1049996&view=auto
==============================================================================
Binary file - no diff available.
Propchange: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_off.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_up.png
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_up.png?rev=1049996&view=auto
==============================================================================
Binary file - no diff available.
Propchange: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/displaytag/img/arrow_up.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/header.vm
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/header.vm?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/header.vm (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/header.vm Thu Dec 16 15:01:15 2010
@@ -20,5 +20,8 @@
#if( $stylesheet )
<style type="text/css" media="screen">@import "$link.relative($stylesheet)";</style>
#end
+#if( $displayTagStylesheet )
+ <style type="text/css" media="screen">@import "$link.relative($displayTagStylesheet)";</style>
+#end
</head>
<body#if( $onload ) onload="$onload"#end>
Added: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/jsp.vm
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/jsp.vm?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/jsp.vm (added)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/jsp.vm Thu Dec 16 15:01:15 2010
@@ -0,0 +1,29 @@
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements. See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership. The ASF licenses this file
+## to you 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.
+#title( 'Maven Taglib2Directive example' )
+<p>
+#set( $demo = $text.demo )
+This is not a 'real' tool, but a Maven plugin that
+generates Velocity directives from a JSP Tag library. Here you can see an example
+that shows DisplayTag included using Velocity directives.
+</p>
+$request.setAttribute("list", $people)
+#display_table({"name": "list", "pagesize": 5, "sort": "list"})
+ #display_column({"property": "name", "title": "Name", "sortable": true})#end
+ #display_column({"property": "surname", "title": "Surname", "sortable": true})#end
+ #display_column({"property": "role", "title": "Role", "sortable": true})#end
+#end
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/layout/Default.vm
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/layout/Default.vm?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/layout/Default.vm (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/layout/Default.vm Thu Dec 16 15:01:15 2010
@@ -19,6 +19,7 @@
"http://www.w3.org/TR/html4/strict.dtd">
#set( $stylesheet = '/layout/layout.css' )
+#set( $displayTagStylesheet = '/displaytag/css/displaytag.css' )
#set( $css = $text.css )
#parse( 'header.vm' )
Modified: velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/toolmenu.vm
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/toolmenu.vm?rev=1049996&r1=1049995&r2=1049996&view=diff
==============================================================================
--- velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/toolmenu.vm (original)
+++ velocity/tools/trunk/velocity-tools-examples/velocity-tools-examples-showcase/src/main/webapp/toolmenu.vm Thu Dec 16 15:01:15 2010
@@ -34,6 +34,7 @@
#toolMenuItem( $llink 'field' )
#toolMenuItem( $llink 'import' )
#toolMenuItem( $llink 'include' )
+#toolMenuItem( $llink 'jsp' )
#toolMenuItem( $llink 'link' )
#toolMenuItem( $llink 'loop' )
#toolMenuItem( $llink 'math' )
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/TaglibDirective.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/TaglibDirective.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/TaglibDirective.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/TaglibDirective.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,49 @@
+package org.apache.velocity.tools.view.jsp.taglib;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.jsp.PageContext;
+
+import org.apache.velocity.context.InternalContextAdapter;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.directive.Directive;
+import org.apache.velocity.runtime.parser.node.Node;
+import org.apache.velocity.tools.view.ViewContext;
+import org.apache.velocity.tools.view.jsp.taglib.jspimpl.VelocityPageContext;
+
+public class TaglibDirective extends Directive
+{
+
+ private static final String PAGE_CONTEXT_ATTRIBUTE_NAME = "org.apache.velocity.tools.view.jsp.taglib.PAGE_CONTEXT";
+
+ @Override
+ public String getName()
+ {
+ return "taglib";
+ }
+
+ @Override
+ public int getType()
+ {
+ return LINE;
+ }
+
+ @Override
+ public boolean render(InternalContextAdapter context, Writer writer, Node node)
+ throws IOException, ResourceNotFoundException, ParseErrorException,
+ MethodInvocationException
+ {
+ ViewContext viewContext = (ViewContext) context
+ .getInternalUserContext();
+ PageContext pageContext = (PageContext) context.get(PAGE_CONTEXT_ATTRIBUTE_NAME);
+ if (pageContext == null) {
+ pageContext = new VelocityPageContext(context, writer, viewContext);
+ context.put(PAGE_CONTEXT_ATTRIBUTE_NAME, pageContext);
+ }
+ return true;
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/ExternalWriterHttpServletResponse.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/ExternalWriterHttpServletResponse.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/ExternalWriterHttpServletResponse.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/ExternalWriterHttpServletResponse.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,62 @@
+/*
+ * $Id: ExternalWriterHttpServletResponse.java 892369 2009-12-18 20:21:36Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * Copied from Tiles Request sandbox.
+ *
+ * Wraps an HTTP response and overrides its print writer.
+ *
+ * @version $Rev: 892369 $ $Date: 2009-12-18 21:21:36 +0100 (ven, 18 dic 2009) $
+ * @since 2.2.0
+ */
+public class ExternalWriterHttpServletResponse extends
+ HttpServletResponseWrapper {
+
+ /**
+ * The print writer to use, instead of the response's one.
+ */
+ private PrintWriter writer;
+
+ /**
+ * Constructor.
+ *
+ * @param response The response to wrap.
+ * @param writer The print writer to use, instead of the response's one.
+ * @since 2.2.0
+ */
+ public ExternalWriterHttpServletResponse(HttpServletResponse response, PrintWriter writer) {
+ super(response);
+ this.writer = writer;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public PrintWriter getWriter() {
+ return writer;
+ }
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspUtils.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspUtils.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspUtils.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspUtils.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,84 @@
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.IOException;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.BodyTag;
+import javax.servlet.jsp.tagext.JspTag;
+import javax.servlet.jsp.tagext.SimpleTag;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagAdapter;
+
+import org.apache.velocity.context.Context;
+import org.apache.velocity.context.InternalContextAdapter;
+import org.apache.velocity.runtime.parser.node.ASTBlock;
+import org.apache.velocity.runtime.parser.node.Node;
+
+public class JspUtils
+{
+ private final static String LATEST_TAG_ATTRIBUTE_NAME = "org.apache.velocity.tools.view.jsp.taglib.jspimpl.LATEST_TAG";
+
+ public static void setLatestTag(Context context, JspTag tag) {
+ context.put(LATEST_TAG_ATTRIBUTE_NAME, tag);
+ }
+
+ public static JspTag getLatestJspTag(Context context) {
+ return (JspTag) context.get(LATEST_TAG_ATTRIBUTE_NAME);
+ }
+
+ public static Tag wrapTag(JspTag tag) {
+ if (tag == null) {
+ return null;
+ }
+ if (tag instanceof Tag)
+ {
+ return (Tag) tag;
+ }
+ if (tag instanceof SimpleTag)
+ {
+ return new TagAdapter((SimpleTag) tag);
+ }
+ throw new VelocityToolsJspException(
+ "Cannot get tag that is not a Tag nor a SimpleTag, class "
+ + tag.getClass().getCanonicalName());
+ }
+
+ public static void executeSimpleTag(InternalContextAdapter context,
+ Node node, PageContext pageContext, SimpleTag tag)
+ throws JspException, IOException
+ {
+ tag.setJspBody(new VelocityJspFragment(pageContext, (ASTBlock) node
+ .jjtGetChild(1), context));
+ tag.doTag();
+ }
+
+ public static void executeTag(InternalContextAdapter context, Node node,
+ PageContext pageContext, Tag tag) throws JspException
+ {
+ int result = tag.doStartTag();
+ if (tag instanceof BodyTag)
+ {
+ BodyTag bodyTag = (BodyTag) tag;
+ BodyContent bodyContent = new VelocityBodyContent(
+ pageContext.getOut(), (ASTBlock) node.jjtGetChild(1),
+ context);
+ switch (result)
+ {
+ case BodyTag.EVAL_BODY_BUFFERED:
+ bodyTag.setBodyContent(bodyContent);
+ bodyTag.doInitBody();
+ case BodyTag.EVAL_BODY_INCLUDE:
+ bodyContent.getString();
+ default:
+ break;
+ }
+ while (bodyTag.doAfterBody() == BodyTag.EVAL_BODY_AGAIN) {
+ bodyContent.getString();
+ }
+ }
+ tag.doEndTag();
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspWriterImpl.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspWriterImpl.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspWriterImpl.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/JspWriterImpl.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,394 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspWriter;
+
+/**
+ * Copied and modified from Tomcat 6.0.x source.
+ *
+ * Write text to a character-output stream, buffering characters so as
+ * to provide for the efficient writing of single characters, arrays,
+ * and strings.
+ *
+ * Provide support for discarding for the output that has been
+ * buffered.
+ *
+ * This needs revisiting when the buffering problems in the JSP spec
+ * are fixed -akv
+ *
+ * @author Anil K. Vijendran
+ */
+public class JspWriterImpl extends JspWriter {
+
+ private Writer out;
+
+ /**
+ * Create a buffered character-output stream that uses a default-sized
+ * output buffer.
+ *
+ * @param out The writer.
+ */
+ public JspWriterImpl(Writer out) {
+ super(0, true);
+ this.out = out;
+ }
+
+ /**
+ * Discard the output buffer.
+ */
+ public final void clear() throws IOException {
+ throw new IllegalStateException("Cannot clear after an unbuffered output");
+ }
+
+ public void clearBuffer() throws IOException {
+ throw new IllegalStateException("Cannot clear after an unbuffered output");
+ }
+
+ /**
+ * Flush the stream.
+ *
+ */
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+ /**
+ * Close the stream.
+ *
+ */
+ public void close() throws IOException {
+ out.close();
+ }
+
+ /**
+ * @return the number of bytes unused in the buffer
+ */
+ public int getRemaining() {
+ return 0;
+ }
+
+
+ /**
+ * Write a single character.
+ */
+ public void write(int c) throws IOException {
+ out.write(c);
+ }
+
+ /**
+ * Write a portion of an array of characters.
+ *
+ * <p> Ordinarily this method stores characters from the given array into
+ * this stream's buffer, flushing the buffer to the underlying stream as
+ * needed. If the requested length is at least as large as the buffer,
+ * however, then this method will flush the buffer and write the characters
+ * directly to the underlying stream. Thus redundant
+ * <code>DiscardableBufferedWriter</code>s will not copy data unnecessarily.
+ *
+ * @param cbuf A character array
+ * @param off Offset from which to start reading characters
+ * @param len Number of characters to write
+ */
+ public void write(char cbuf[], int off, int len)
+ throws IOException
+ {
+ out.write(cbuf, off, len);
+ }
+
+ /**
+ * Write an array of characters. This method cannot be inherited from the
+ * Writer class because it must suppress I/O exceptions.
+ */
+ public void write(char buf[]) throws IOException {
+ write(buf, 0, buf.length);
+ }
+
+ /**
+ * Write a portion of a String.
+ *
+ * @param s String to be written
+ * @param off Offset from which to start reading characters
+ * @param len Number of characters to be written
+ */
+ public void write(String s, int off, int len) throws IOException {
+ out.write(s, off, len);
+ }
+
+ /**
+ * Write a string. This method cannot be inherited from the Writer class
+ * because it must suppress I/O exceptions.
+ */
+ public void write(String s) throws IOException {
+ // Simple fix for Bugzilla 35410
+ // Calling the other write function so as to init the buffer anyways
+ if(s == null) {
+ write(s, 0, 0);
+ } else {
+ write(s, 0, s.length());
+ }
+ }
+
+
+ static String lineSeparator = System.getProperty("line.separator");
+
+ /**
+ * Write a line separator. The line separator string is defined by the
+ * system property <tt>line.separator</tt>, and is not necessarily a single
+ * newline ('\n') character.
+ *
+ * @exception IOException If an I/O error occurs
+ */
+
+ public void newLine() throws IOException {
+ write(lineSeparator);
+ }
+
+
+ /* Methods that do not terminate lines */
+
+ /**
+ * Print a boolean value. The string produced by <code>{@link
+ * java.lang.String#valueOf(boolean)}</code> is translated into bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link
+ * #write(int)}</code> method.
+ *
+ * @param b The <code>boolean</code> to be printed
+ */
+ public void print(boolean b) throws IOException {
+ write(b ? "true" : "false");
+ }
+
+ /**
+ * Print a character. The character is translated into one or more bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link
+ * #write(int)}</code> method.
+ *
+ * @param c The <code>char</code> to be printed
+ */
+ public void print(char c) throws IOException {
+ write(String.valueOf(c));
+ }
+
+ /**
+ * Print an integer. The string produced by <code>{@link
+ * java.lang.String#valueOf(int)}</code> is translated into bytes according
+ * to the platform's default character encoding, and these bytes are
+ * written in exactly the manner of the <code>{@link #write(int)}</code>
+ * method.
+ *
+ * @param i The <code>int</code> to be printed
+ */
+ public void print(int i) throws IOException {
+ write(String.valueOf(i));
+ }
+
+ /**
+ * Print a long integer. The string produced by <code>{@link
+ * java.lang.String#valueOf(long)}</code> is translated into bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link #write(int)}</code>
+ * method.
+ *
+ * @param l The <code>long</code> to be printed
+ */
+ public void print(long l) throws IOException {
+ write(String.valueOf(l));
+ }
+
+ /**
+ * Print a floating-point number. The string produced by <code>{@link
+ * java.lang.String#valueOf(float)}</code> is translated into bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link #write(int)}</code>
+ * method.
+ *
+ * @param f The <code>float</code> to be printed
+ */
+ public void print(float f) throws IOException {
+ write(String.valueOf(f));
+ }
+
+ /**
+ * Print a double-precision floating-point number. The string produced by
+ * <code>{@link java.lang.String#valueOf(double)}</code> is translated into
+ * bytes according to the platform's default character encoding, and these
+ * bytes are written in exactly the manner of the <code>{@link
+ * #write(int)}</code> method.
+ *
+ * @param d The <code>double</code> to be printed
+ */
+ public void print(double d) throws IOException {
+ write(String.valueOf(d));
+ }
+
+ /**
+ * Print an array of characters. The characters are converted into bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link #write(int)}</code>
+ * method.
+ *
+ * @param s The array of chars to be printed
+ *
+ * @throws NullPointerException If <code>s</code> is <code>null</code>
+ */
+ public void print(char s[]) throws IOException {
+ write(s);
+ }
+
+ /**
+ * Print a string. If the argument is <code>null</code> then the string
+ * <code>"null"</code> is printed. Otherwise, the string's characters are
+ * converted into bytes according to the platform's default character
+ * encoding, and these bytes are written in exactly the manner of the
+ * <code>{@link #write(int)}</code> method.
+ *
+ * @param s The <code>String</code> to be printed
+ */
+ public void print(String s) throws IOException {
+ if (s == null) {
+ s = "null";
+ }
+ write(s);
+ }
+
+ /**
+ * Print an object. The string produced by the <code>{@link
+ * java.lang.String#valueOf(Object)}</code> method is translated into bytes
+ * according to the platform's default character encoding, and these bytes
+ * are written in exactly the manner of the <code>{@link #write(int)}</code>
+ * method.
+ *
+ * @param obj The <code>Object</code> to be printed
+ */
+ public void print(Object obj) throws IOException {
+ write(String.valueOf(obj));
+ }
+
+ /* Methods that do terminate lines */
+
+ /**
+ * Terminate the current line by writing the line separator string. The
+ * line separator string is defined by the system property
+ * <code>line.separator</code>, and is not necessarily a single newline
+ * character (<code>'\n'</code>).
+ *
+ * Need to change this from PrintWriter because the default
+ * println() writes to the sink directly instead of through the
+ * write method...
+ */
+ public void println() throws IOException {
+ newLine();
+ }
+
+ /**
+ * Print a boolean value and then terminate the line. This method behaves
+ * as though it invokes <code>{@link #print(boolean)}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(boolean x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print a character and then terminate the line. This method behaves as
+ * though it invokes <code>{@link #print(char)}</code> and then <code>{@link
+ * #println()}</code>.
+ */
+ public void println(char x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print an integer and then terminate the line. This method behaves as
+ * though it invokes <code>{@link #print(int)}</code> and then <code>{@link
+ * #println()}</code>.
+ */
+ public void println(int x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print a long integer and then terminate the line. This method behaves
+ * as though it invokes <code>{@link #print(long)}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(long x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print a floating-point number and then terminate the line. This method
+ * behaves as though it invokes <code>{@link #print(float)}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(float x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print a double-precision floating-point number and then terminate the
+ * line. This method behaves as though it invokes <code>{@link
+ * #print(double)}</code> and then <code>{@link #println()}</code>.
+ */
+ public void println(double x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print an array of characters and then terminate the line. This method
+ * behaves as though it invokes <code>{@link #print(char[])}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(char x[]) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print a String and then terminate the line. This method behaves as
+ * though it invokes <code>{@link #print(String)}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(String x) throws IOException {
+ print(x);
+ println();
+ }
+
+ /**
+ * Print an Object and then terminate the line. This method behaves as
+ * though it invokes <code>{@link #print(Object)}</code> and then
+ * <code>{@link #println()}</code>.
+ */
+ public void println(Object x) throws IOException {
+ print(x);
+ println();
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityBodyContent.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityBodyContent.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityBodyContent.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityBodyContent.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,219 @@
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.BodyContent;
+
+import org.apache.velocity.context.InternalContextAdapter;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.parser.node.ASTBlock;
+
+public class VelocityBodyContent extends BodyContent
+{
+
+ private ASTBlock block;
+
+ private InternalContextAdapter context;
+
+ public VelocityBodyContent(JspWriter jspWriter, ASTBlock block,
+ InternalContextAdapter context)
+ {
+ super(jspWriter);
+ this.block = block;
+ this.context = context;
+ }
+
+ @Override
+ public Reader getReader()
+ {
+ return new StringReader(getString());
+ }
+
+ @Override
+ public String getString()
+ {
+ StringWriter stringWriter = new StringWriter();
+ try
+ {
+ block.render(context, stringWriter);
+ stringWriter.close();
+ return stringWriter.toString();
+ } catch (MethodInvocationException e)
+ {
+ throw new VelocityToolsJspException("Cannot invoke a method while rendering a body", e);
+ } catch (ResourceNotFoundException e)
+ {
+ throw new VelocityToolsJspException("Cannot find a resource while rendering a body", e);
+ } catch (ParseErrorException e)
+ {
+ throw new VelocityToolsJspException("Cannot parse while rendering a body", e);
+ } catch (IOException e)
+ {
+ throw new VelocityToolsJspException("I/O exception while rendering a body", e);
+ }
+ }
+
+ @Override
+ public void writeOut(Writer out) throws IOException
+ {
+ block.render(context, out);
+ }
+
+ @Override
+ public void newLine() throws IOException
+ {
+ getEnclosingWriter().newLine();
+ }
+
+ @Override
+ public void print(boolean b) throws IOException
+ {
+ getEnclosingWriter().print(b);
+ }
+
+ @Override
+ public void print(char c) throws IOException
+ {
+ getEnclosingWriter().print(c);
+ }
+
+ @Override
+ public void print(int i) throws IOException
+ {
+ getEnclosingWriter().print(i);
+ }
+
+ @Override
+ public void print(long l) throws IOException
+ {
+ getEnclosingWriter().print(l);
+ }
+
+ @Override
+ public void print(float f) throws IOException
+ {
+ getEnclosingWriter().print(f);
+ }
+
+ @Override
+ public void print(double d) throws IOException
+ {
+ getEnclosingWriter().print(d);
+ }
+
+ @Override
+ public void print(char[] s) throws IOException
+ {
+ getEnclosingWriter().print(s);
+ }
+
+ @Override
+ public void print(String s) throws IOException
+ {
+ getEnclosingWriter().print(s);
+ }
+
+ @Override
+ public void print(Object obj) throws IOException
+ {
+ getEnclosingWriter().print(obj);
+ }
+
+ @Override
+ public void println() throws IOException
+ {
+ getEnclosingWriter().println();
+ }
+
+ @Override
+ public void println(boolean x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(char x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(int x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(long x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(float x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(double x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(char[] x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(String x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void println(Object x) throws IOException
+ {
+ getEnclosingWriter().println(x);
+ }
+
+ @Override
+ public void clear() throws IOException
+ {
+ getEnclosingWriter().clear();
+ }
+
+ @Override
+ public void clearBuffer() throws IOException
+ {
+ getEnclosingWriter().clearBuffer();
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ getEnclosingWriter().close();
+ }
+
+ @Override
+ public int getRemaining()
+ {
+ return getEnclosingWriter().getRemaining();
+ }
+
+ @Override
+ public void write(char[] cbuf, int off, int len) throws IOException
+ {
+ getEnclosingWriter().write(cbuf, off, len);
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityJspFragment.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityJspFragment.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityJspFragment.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityJspFragment.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,43 @@
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspContext;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.JspFragment;
+
+import org.apache.velocity.context.InternalContextAdapter;
+import org.apache.velocity.runtime.parser.node.ASTBlock;
+
+public class VelocityJspFragment extends JspFragment
+{
+
+ private PageContext pageContext;
+
+ private ASTBlock block;
+
+ private InternalContextAdapter context;
+
+ public VelocityJspFragment(PageContext pageContext, ASTBlock block,
+ InternalContextAdapter context)
+ {
+ this.pageContext = pageContext;
+ this.block = block;
+ this.context = context;
+ }
+
+ @Override
+ public void invoke(Writer out) throws JspException, IOException
+ {
+ block.render(context, out);
+ }
+
+ @Override
+ public JspContext getJspContext()
+ {
+ return pageContext;
+ }
+
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityPageContext.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityPageContext.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityPageContext.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityPageContext.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,384 @@
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+import javax.el.ELContext;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+
+import org.apache.velocity.context.Context;
+import org.apache.velocity.tools.view.ViewContext;
+
+public class VelocityPageContext extends PageContext {
+
+ private Context velocityContext;
+
+ private Writer velocityWriter;
+
+ private ViewContext viewContext;
+
+ private JspWriter jspWriter;
+
+ private HttpServletRequest request;
+
+ private HttpServletResponse response;
+
+ public VelocityPageContext(Context velocityContext, Writer velocityWriter, ViewContext viewContext)
+ {
+ super();
+ this.velocityContext = velocityContext;
+ this.velocityWriter = velocityWriter;
+ this.viewContext = viewContext;
+ this.request = viewContext.getRequest();
+ this.response = viewContext.getResponse();
+ jspWriter = new JspWriterImpl(velocityWriter);
+ velocityContext.put("out", jspWriter);
+ }
+
+ @Override
+ public void initialize(Servlet servlet, ServletRequest request,
+ ServletResponse response, String errorPageURL,
+ boolean needsSession, int bufferSize, boolean autoFlush)
+ throws IOException, IllegalStateException, IllegalArgumentException {
+ // We never call it and we discard this object at the end of the page call.
+ }
+
+ @Override
+ public void release() {
+ // We never call it and we discard this object at the end of the page call.
+ }
+
+ @Override
+ public HttpSession getSession() {
+ return request.getSession(false);
+ }
+
+ @Override
+ public Object getPage() {
+ return viewContext;
+ }
+
+ @Override
+ public ServletRequest getRequest() {
+ return request;
+ }
+
+ @Override
+ public ServletResponse getResponse() {
+ return response;
+ }
+
+ @Override
+ public Exception getException() {
+ return null;
+ }
+
+ @Override
+ public ServletConfig getServletConfig() {
+ throw new UnsupportedOperationException("Servlet config is not supported");
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ return viewContext.getServletContext();
+ }
+
+ @Override
+ public void forward(String relativeUrlPath) throws ServletException,
+ IOException {
+ RequestDispatcher dispatcher = request.getRequestDispatcher(relativeUrlPath);
+ if (dispatcher == null) {
+ throw new IllegalArgumentException("Cannot forward to '" +relativeUrlPath + "'");
+ }
+ dispatcher.forward(request, new ExternalWriterHttpServletResponse(response, new PrintWriter(velocityWriter)));
+
+ }
+
+ @Override
+ public void include(String relativeUrlPath) throws ServletException,
+ IOException {
+ include(relativeUrlPath, true);
+ }
+
+ @Override
+ public void include(String relativeUrlPath, boolean flush)
+ throws ServletException, IOException {
+ if (flush) {
+ velocityWriter.flush();
+ }
+ RequestDispatcher dispatcher = request.getRequestDispatcher(relativeUrlPath);
+ if (dispatcher == null) {
+ throw new IllegalArgumentException("Cannot include '" +relativeUrlPath + "'");
+ }
+ dispatcher.include(request, new ExternalWriterHttpServletResponse(response, new PrintWriter(velocityWriter)));
+ }
+
+ @Override
+ public void handlePageException(Exception e) throws ServletException,
+ IOException {
+ handlePageException((Throwable) e);
+ }
+
+ @Override
+ public void handlePageException(Throwable t) throws ServletException,
+ IOException {
+ if (t instanceof RuntimeException)
+ {
+ throw (RuntimeException) t;
+ }
+ if (t instanceof Error)
+ {
+ throw (Error) t;
+ }
+ throw new ServletException("Rethrowing unmanaged exception", t);
+ }
+
+ @Override
+ public void setAttribute(String name, Object value) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ velocityContext.put(name, value);
+ }
+
+ @Override
+ public void setAttribute(String name, Object value, int scope) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ switch (scope)
+ {
+ case PAGE_SCOPE:
+ velocityContext.put(name, value);
+ break;
+ case REQUEST_SCOPE:
+ request.setAttribute(name, value);
+ break;
+ case SESSION_SCOPE:
+ if (value == null) {
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ session.removeAttribute(name);
+ }
+ } else {
+ HttpSession session = request.getSession();
+ session.setAttribute(name, value);
+ }
+ break;
+ case APPLICATION_SCOPE:
+ viewContext.getServletContext().setAttribute(name, value);
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid scope constant value: " + scope);
+ }
+ }
+
+ @Override
+ public Object getAttribute(String name) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ return velocityContext.get(name);
+ }
+
+ @Override
+ public Object getAttribute(String name, int scope) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ switch (scope)
+ {
+ case PAGE_SCOPE:
+ return velocityContext.get(name);
+ case REQUEST_SCOPE:
+ return request.getAttribute(name);
+ case SESSION_SCOPE:
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ return session.getAttribute(name);
+ } else {
+ return null;
+ }
+ case APPLICATION_SCOPE:
+ return viewContext.getServletContext().getAttribute(name);
+ default:
+ throw new IllegalArgumentException("Invalid scope constant value: " + scope);
+ }
+ }
+
+ @Override
+ public Object findAttribute(String name) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ Object candidate = velocityContext.get(name);
+ if (candidate == null) {
+ candidate = request.getAttribute(name);
+ if (candidate == null) {
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ candidate = session.getAttribute(name);
+ }
+ if (candidate == null) {
+ candidate = viewContext.getServletContext().getAttribute(name);
+ }
+ }
+ }
+ return candidate;
+ }
+
+ @Override
+ public void removeAttribute(String name) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ velocityContext.remove(name);
+ request.removeAttribute(name);
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ session.removeAttribute(name);
+ }
+ viewContext.getServletContext().removeAttribute(name);
+ }
+
+ @Override
+ public void removeAttribute(String name, int scope) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ switch (scope)
+ {
+ case PAGE_SCOPE:
+ velocityContext.remove(name);
+ break;
+ case REQUEST_SCOPE:
+ request.removeAttribute(name);
+ break;
+ case SESSION_SCOPE:
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ session.removeAttribute(name);
+ }
+ break;
+ case APPLICATION_SCOPE:
+ viewContext.getServletContext().removeAttribute(name);
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid scope constant value: " + scope);
+ }
+ }
+
+ @Override
+ public int getAttributesScope(String name) {
+ if (name == null) {
+ throw new NullPointerException("The attribute name is null");
+ }
+ if (velocityContext.get(name) != null) {
+ return PAGE_SCOPE;
+ }
+ if (request.getAttribute(name) != null) {
+ return REQUEST_SCOPE;
+ }
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ if (session.getAttribute(name) != null) {
+ return SESSION_SCOPE;
+ }
+ }
+ if (viewContext.getServletContext().getAttribute(name) != null) {
+ return APPLICATION_SCOPE;
+ }
+ return 0;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Enumeration<String> getAttributeNamesInScope(int scope) {
+ switch (scope)
+ {
+ case PAGE_SCOPE:
+ return new Enumeration<String>()
+ {
+
+ private int index = 0;
+
+ private Object[] keys = velocityContext.getKeys();
+
+ public boolean hasMoreElements()
+ {
+ return index < keys.length;
+ }
+
+ public String nextElement()
+ {
+ String retValue = (String) keys[index];
+ index++;
+ return retValue;
+ }
+ };
+ case REQUEST_SCOPE:
+ return request.getAttributeNames();
+ case SESSION_SCOPE:
+ HttpSession session = request.getSession(false);
+ if (session != null) {
+ return session.getAttributeNames();
+ }
+ return new Enumeration<String>()
+ {
+
+ public boolean hasMoreElements()
+ {
+ return false;
+ }
+
+ public String nextElement()
+ {
+ throw new NoSuchElementException("This is an empty enumeration");
+ }
+ };
+ case APPLICATION_SCOPE:
+ return viewContext.getServletContext().getAttributeNames();
+ default:
+ throw new IllegalArgumentException("Invalid scope constant value: " + scope);
+ }
+ }
+
+ @Override
+ public JspWriter getOut() {
+ return jspWriter;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() {
+ // Really, who cares?
+ throw new UnsupportedOperationException("This class works only with JSP 2.1");
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public javax.servlet.jsp.el.VariableResolver getVariableResolver() {
+ // Really, who cares?
+ throw new UnsupportedOperationException("This class works only with JSP 2.1");
+ }
+
+ @Override
+ public ELContext getELContext() {
+ // Really, who cares?
+ throw new UnsupportedOperationException("EL not available at this point");
+ }
+}
Added: velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityToolsJspException.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityToolsJspException.java?rev=1049996&view=auto
==============================================================================
--- velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityToolsJspException.java (added)
+++ velocity/tools/trunk/velocity-tools-view-jsp/src/main/java/org/apache/velocity/tools/view/jsp/taglib/jspimpl/VelocityToolsJspException.java Thu Dec 16 15:01:15 2010
@@ -0,0 +1,30 @@
+package org.apache.velocity.tools.view.jsp.taglib.jspimpl;
+
+public class VelocityToolsJspException extends RuntimeException
+{
+
+ /**
+ * The serial version UID.
+ */
+ private static final long serialVersionUID = 7627800888526325645L;
+
+ public VelocityToolsJspException()
+ {
+ }
+
+ public VelocityToolsJspException(String message)
+ {
+ super(message);
+ }
+
+ public VelocityToolsJspException(Throwable cause)
+ {
+ super(cause);
+ }
+
+ public VelocityToolsJspException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+
+}