Using other template languages inside the Torque generator
If you want to extend the Torque generator in order to use another template language, the following steps need to be done:
Define a new outlet type in the configuration XML schema
The outlets which use the new template engine need to be distinguished
from the existing outlets. This is done by defining a new outlet type
for the new template language. The outlet type is a simple string,
e.g. if the new template language is
groovy, a good name for the
outlet type would be groovy
.
Before the new outlet type can be used in the configuration XML, the configuration XML schema must be extended in order to make the new template type definition known to the schema validator. To do this, create a new schema where the standard generator XML schema is included. In this schema, define a new type named ${type}Outlet which extends the type baseOutlet. This type should have all necessary attributes which are needed to configure the new template engine.
An example for extending the configuration XML schema can be found
in the file
src/test/otherTemplateLanguages/groovyOutlet.xsd
in the torque generator project.
Write a SAX handler for configuration
A SAX Handler needs to be written which can create and configure the outlet implementation containing the new template engine. The SAX handler gets called on each snippet containing an outlet definition of the newly defined type.
The new SAX Handler must have the package
org.apache.torque.generator.configuration.outlet
and its name must be ${Type}OutletSaxHandler, where ${Type} is the
new outlet type with the first letter capitalized. For example, if
the new outlet type is groovy
,
then the SAX Handler's class qualified name must be
org.apache.torque.generator.configuration.outlet.GroovyOutletSaxHandler
.
You can use the class
org.apache.torque.generator.configuration.outlet.GroovyOutletSaxHandler
in the generator's test classes as a starting point for your own
Sax Handler.
Conditions for the new SAX Handler are that it must not be abstract,
it must inherit from
org.apache.torque.generator.configuration.outlet.OutletSaxHandler
.
The new SAX Handler must have a public constructor with four arguments
and the argument types
org.apache.torque.generator.qname.QualifiedName
,
org.apache.torque.generator.configuration.ConfigurationProvider
,
org.apache.torque.generator.configuration.paths.ProjectPaths
,
org.apache.torque.generator.configuration.ConfigurationHandlers
which should simply be passed to the constructor of the parent class.
It is the SAX Handler's job to create an instance of an outlet
which can handle the new template language (
in the method createOutlet
which needs to be implemented).
The outlet class itself (which then can handle templates
of the new type) must also be implemented. See the class
org.apache.torque.generator.template.groovy.GroovyOutlet.java
in the generator's test sources as an example.
Referencing the extended schema
You must reference your own schema for the
http://db.apache.org/torque/4.0/generator/configuration
XML namespace wherever you use the new template type definion.
As an example, see the file
src/test/otherTemplateLanguages/src/main/torque-gen/outlets/outlets.xml
in the torque generator project.
Using the new template type
And then, of course, you need to define and use the outlets with your
new template type. See the directory
src/test/otherTemplateLanguages
and its subdirectories
in the torque generator project for a simple example using groovy.