Skip to main content

Mapping Syntax

Scope of variables in mapping

Mapping files describe how an element should be mapped to the ExpanderExpanderA unit of generation that combines a data tree instance (functional M1 model) with a template to generate an artifact. 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>