Mapping Syntax
Scope of variables in mapping
Mapping files describe how an element should be mapped to the Expander template.
Thus, values cannot be used in other expressions. Instead, a variable must be defined with <let> to be reused.
Values
<!-- Bind a single value -->
<value name="className" eval="dataElement.name"/>
<!-- ... with switch-case -->
<conditionalValue name="fieldName">
<option
if="field.getOption('prefix').defined"
eval="'m' + field.name.firstToUpper"/>
<defaultOption eval="field.name"/>
</conditionalValue>
Groups
<!-- Bind object -->
<group name="header">
<value name="title"
eval="dataElement.name"/>
<value name="subtitle"
eval="dataElement.packageName"/>
</group>
<!-- ... with a condition -->
<group name="tooltip"
if="not dataElement.description.empty">
<value name="description"
eval="dataElement.description"/>
</group>
Utility
<!-- Define a variable -->
<let name="targetElement"
eval="taskElement.targetElement"/>
<value name="targetClass" eval="targetElement.name"/>
<!-- Assert a precondition -->
<assert name="packageName_required"
message="PackageName should be defined"
eval="not dataElement.packageName.empty"/>
<!-- Include another mapping -->
<include path="/net/demo/example/CommonMapping.xml"/>
Imports
<!-- Declare current artifact + import strategy -->
<artifact this="dataElement.qualifiedName + 'Data'"
importStrategy="java"/>
<!-- Declare used import -->
<uses eval="'java.util.List'"/>
<uses eval="field.javaType"/>
Lists
<!-- Bind a list of items -->
<list name="fields">
<foreach name="field" in="dataElement.fields"/>
<value name="name" eval="field.name"/>
</list>
<!-- Filter items -->
<list name="fields">
<foreach name="field" in="dataElement.fields"/>
<filter eval="field.linkField != null"/>
</list>
<!-- Filter Duplicates -->
<list name="fieldTypes">
<foreach name="field" in="dataElement.fields"/>
<distinct eval="field.javaType"/>
</list>
<!-- Sort -->
<list name="fieldsSorted">
<foreach name="field" in="dataElement.fields"/>
<sorted eval="field.name" direction="ascending"/>
</list>
Lists Combinations
<!-- Add single item -->
<list name="interfaces">
<item>
<value name="className" eval="'Serializable'"/>
</item>
<!-- ... with condition -->
<item
if="dataElement.getOption('compare').defined">
<value name="className" eval="'Comparable'"/>
</item>
</list>
<!-- Concatenate -->
<list name="members">
<items>
<foreach name="field"
in="dataElement.fields"/>
<value name="name" eval="field.name"/>
</items>
<items>
<foreach name="command"
in="dataElement.dataCommands"/>
<value name="name" eval="command.name"/>
</items>
</list>