Auf dieses Feature habe ich schon lange gewartet. Auch wenn es grundsätzlich möglich ist, XML basierte Modelle einzulesen (mit dem XMLInstantiator oder XMIInstantiator aus oAW Classic oder dem XMLReader Utility), so war es insgesamt noch etwas umständlich und auch nicht besonders gut dokumentiert. Häufig hat man zu den XML Dokumenten das zugehörige XSD Schema aber parat bzw. kann es mit Tools leicht herleiten. Was man sich eigentlich dann in openArchitectureWare wünscht, ist dieses Schema einfach im Classpath zu haben und dann mit Xpand bzw. Xtend Templates gegen das Schema Metamodell zu definieren, ohne irgendwelche Zwischenschritte.
Dieses Problem wird nun durch die Erweiterung endlich gelöst. Man installiert einfach das neue Feature und schon kann man gegen XSD Templates programmieren. Eine zugehörige Parser Workflow Komponente ist natürlich auch gleich dabei.
Beispiel
XSD Schema
Template
Workflow
<workflow>
<!-- load the file -->
<component class="org.openarchitectureware.xsd.XMLReader">
<modelSlot value="model" />
<uri value="model/mysetup.xml" />
<metaModel id="mm"
class="org.openarchitectureware.xsd.XSDMetaModel">
</metaModel>
</component>
<!-- clean up the target directory -->
<component
class="org.openarchitectureware.workflow.common.DirectoryCleaner">
<directories value="src-gen/mypackage" />
</component>
<!-- generate some code -->
<component class="org.openarchitectureware.xpand2.Generator">
<metaModel idRef="mm" />
<expand value="templates::wizard::Root FOR model" />
<outlet path="src-gen" />
<beautifier
class="org.openarchitectureware.xpand2.output.JavaBeautifier" />
</component>
</workflow>
Workflow
<workflow>
<!-- load the file -->
<component class="org.openarchitectureware.xsd.XMLReader">
<modelSlot value="model" />
<uri value="model/mysetup.xml" />
<metaModel id="mm"
class="org.openarchitectureware.xsd.XSDMetaModel">
</metaModel>
</component>
<!-- clean up the target directory -->
<component
class="org.openarchitectureware.workflow.common.DirectoryCleaner">
<directories value="src-gen/mypackage" />
</component>
<!-- generate some code -->
<component class="org.openarchitectureware.xpand2.Generator">
<metaModel idRef="mm" />
<expand value="templates::wizard::Root FOR model" />
<outlet path="src-gen" />
<beautifier
class="org.openarchitectureware.xpand2.output.JavaBeautifier" />
</component>
</workflow>
Wie in dem Xpand Template Screenshot zu sehen ist funktioniert die Code Completion wunderbar und integriert sich nahtlos in openArchitectureWare. Jetzt muss der Sourcecode noch etwas Feinschliff bekommen und dann werde ich ihn in die Codebasis des 4.2er Branches aufnehmen.