Cayenne User Documentation
cgen

`cgen` is an Ant task that generates and maintains DataObjects source files based on Cayenne DataMap. If "makepairs" is set to "true" (default), this task will generate a pair of classes (superclass/subclass) for each ObjEntity in the DataMap. Superclasses should not be changed manually, since they are always overwritten. Subclasses are never overwritten and may be later customized by the user. If "makepairs" is set to "false", a single class will be generated for each ObjEntity.

By creating custom templates, Cgen can also be used to generate other output (such as web pages, reports, specialized code templates) based on DataMap information.

### Parameters

Attribute | Description | Required
--- | --- | ---
map | DataMap XML file to use as a base for class generation. | Yes
additionalMaps | Path to additional DataMap XML files to use for class generation. | No
destDir | Destination directory for Java classes (ignoring their package names). | Yes
overwrite | If set to "true", will overwrite older versions of generated classes. Ignored unless makepairs is set to "false". | No
makepairs | If set to "true", will generate subclass/superclass pairs, with all generated code included in superclass (default is "true"). | No
template | Location of Velocity template file for Entity class generation. If omitted, default template is used. | No
supertemplate | Location of Velocity template file for Entity superclass generation. Ignored unless "makepairs" set to "true". If omitted, default template is used. | No
embeddabletemplate | (added in 3.0) Location of Velocity template file for Embeddable class generation. If omitted, default template is used. | No
embeddablesupertemplate | (added in 3.0) Location of Velocity template file for Embeddable superclass generation. Ignored unless "makepairs" set to "true". If omitted, default template is used. | No
superpkg | Java package name of generated superclasses. Ignored unless "makepairs" set to "true". If omitted, each superclass will be assigned the same package as subclass. Note that having superclass in a different package would only make sense when "usepkgpath" is set to "true". Otherwise classes from different packages will end up in the same directory. | No
usepkgpath | If set to "true" (default), a directory tree will be generated in "destDir" corresponding to the class package structure, if set to "false", classes will be generated in "destDir" ignoring their package. | No
encoding | Specify generated file encoding if different from the default on current platform. Target encoding must be supported by the JVM running Ant build. Standard encodings supported by Java on all platforms are US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16. See Sun Java Docs for java.nio.charset.Charset for more information. | No
version | (deprecated) Specifies template location and generator behavior. Can either be empty (default) or "1.1" - the old behavior, with templates located in "dotemplates" and "classgen" as the only velocity context attribute. The default behavior, with templates located in "dotemplates/v1.2" and "objEntity", "entityUtils", "stringUtils", and "importUtils" in the velocity context. | No
excludeEntities | Entities and Embeddables (expressed as a perl5 regex) to exclude from template generation. Default is to include all entities and embeddables that exist in the DataMap) | No
includeEntities | Entities and Embeddables (expressed as a perl5 regex) to include in template generation. (Default is to include all entities and embeddables that exist in the DataMap | No
outputPattern | Name of file for generated output. (Default is "*.java") | No
mode | Specifies generator iteration target. "entity" performs one iteration for each selected entity. "datamap" performs one iteration per datamap (This is always one iteration since cgen currently supports specifying one-and-only-one datamap). (Default is "entity") | No
client | Whether we are generating classes for the client tier in a Remote Object Persistence application. Default is "false" | No

### Parameters specified as nested elements

Attribute | Description | Required
--- | --- | ---
config | CGen with version="1.2" also supports VPP config nested elements for configuring the velocity template engine and adding objects to the velocity template. You can also reference a vppconfig element declared outside of the CGen task, but you'll need to insure that both `vppconfig` and `cgen` have been loaded with the same classloader by using the same ant taskdef loaderRef value for both tasks. See the VPP VPPConfig Manual page for complete information. | No

### Examples

Here is an example of using CGen to generate subclass/superclass pairs from DataMap located in "src/datamap.xml". All generated subclasses and superclasses will be saved in the same directory "src/java/dobj" regardless of their package names:

    <cgen map="src/datamap.xml" destDir="src/java/dobj" usepkgpath="false"/>

Here is an example of using CGen to generate html pages for all entities starting with "Artist" in the DataMap:

    <cgen map="src/datamap.xml" destDir="src/doc/web" makepairs="false" usepkgpath="false"
        template="EntityReport.vm" includeEntities="Artist*" outputPattern="*Report.html"/>

Here is an example of using CGen with a nested config element:

    <cgen map="src/datamap.xml"
        destDir="src/doc/web"
        makepairs="false"
        usepkgpath="false"
        template="EntityReport.vm"
        includeEntities="Artist*"
        outputPattern="*Report.html">
        <config>
            <context>
                <property key="myPropertyName" value="myPropertyValue" />
                <tool key="myToolName" className="org.myDomain.MyTool" />
            </context>
        </config>
    </cgen>

Here is an example of using CGen with vppconfig:

    <typedef name="vppconfig"
        classname="foundrylogic.vpp.VPPConfig"
        loaderref="aclasspathloader">
        <classpath refid="aclasspath"/>
    </typedef>

    <vppconfig id="myconfig">
        <context>
            <property key="myPropertyName" value="myPropertyValue" />
            <tool key="myToolName" className="org.myDomain.MyTool" />
        </context>
    </vppconfig>

    <cgen map="src/datamap.xml"
        destDir="src/doc/web"
        makepairs="false"
        usepkgpath="false"
        template="EntityReport.vm"
        includeEntities="Artist*"
        outputPattern="*Report.html">
        <config refid="myconfig" />
    </cgen>

.
Copyright ©2001-2010 Apache Software Foundation