Velocity - Texen

About Overview Getting Started Download Install Design Contributors ChangeLog Coding Standards License TODO Report Issues Community Powered By Velocity Get Involved Mailing Lists CVS Repositories Docs User's Guide (English) User's Guide (Finnish) User's Guide (French) User's Guide (Spanish) Developer's Guide VTL Reference Guide Specification Javadoc Tools Velocity Tools Anakia : XML->doc tool Texen : text generation DVSL : XML xformation Veltag : JSP taglib Migration to Velocity Editors and IDEs Comparisons YMTD VM/WM Differences JSP vs. Velocity XMLC vs. Velocity Site Translations English Japanese |
What is Texen?
Texen is a general purpose text generating utility. It is capable of producing almost any sort of text output. Driven by Ant, essentially an Ant Task, Texen uses a control template, an optional set of worker templates, and control context to govern the generated output. Although TexenTask can be used directly, it is usually subclassed to initialize your control context before generating any output. Texen was created to deal with the source generating requirements of the Turbine web application framework. The Torque utility in Turbine, which is a subclass of the TexenTask, is responsible for generating the SQL, and the Object-Relational mapping sources for a Turbine project. This is only one example; you can use Texen to generate almost any sort of text output!
The TexenTask
> This trivial example, which shows how to use Texen from an Ant build.xml, is intended to illustrate how the Texen mechanism works. Ant Build File
>     <project name="HtmlGenerator" default="main" basedir=".">

>       <taskdef name="texen" classname="org.apache.velocity.texen.ant.TexenTask"/>

>       <!-- ================================================================ -->
>       <!-- G E N E R A T E  H T M L  P A G E S                              -->
>       <!-- ================================================================ -->
>       <!-- This target will generate a set of HTML pages based on           -->
>       <!-- the information in our control context.                          -->
>       <!-- ================================================================ -->

>       <target name="main">

>         <echo message="+------------------------------------------+"/>
>         <echo message="|                                          |"/>
>         <echo message="| Generating HTML pages!                   |"/>
>         <echo message="|                                          |"/>
>         <echo message="+------------------------------------------+"/>

>         <texen
>           controlTemplate="Control.vm"
>           outputDirectory="."
>           templatePath="."
>           outputFile="generation.report"
>         />

>       </target>

>     </project>
> Control Template
>     #*

>     file: Control.vm

>     This is the control template for our HTML
>     page generator!

>     *#

>     #set ($Planets = ["Earth", "Mars", "Venus"])

>     #foreach ($planet in $Planets)

>         #set ($outputFile = $stringutils.concat([$planet, ".html"]))
>         $generator.parse("HtmlTemplate.vm", $outputFile, "planet", $planet)

>     #end
> Worker Template
>     #*

>     file: HtmlTemplate.vm

>     This is worker template. It is called by the
>     control template to produce useful output (or
>     not so useful in this case). :-)

>     *#

>     #set ($bgcolor = "#ffffff")

>     <html>
>       <head>
>         <title>
>           Everything you wanted to know about $planet!
>         </title>
>       </head>
>       <body bgcolor="$bgcolor">

>       $planet is a great place to live!

>       </body>
>     </html>
Texen produces three html pages: Earth.html, Mars.html, and Venus.html. To do something more useful, you would subclass the TexenTask, place some objects in the control context, and use the information placed in the control context to generate useful output. See the Torque utility in Turbine for a full working example of Texen. A standalone version of Torque is available here.
Copyright © 1999-2004, The Apache Software Foundation