blob: 2714f18313ba17b6cde458629be7a6502f6872cc [file] [log] [blame]
<?xml version="1.0" encoding="windows-1252"?>
<workflow>
<!-- note that this workflow file expects to be called from
an application specific file that supplies the three
parameters ${uml2FileName}, ${ecoreFileName} and
${nsUriPrefix} -->
<property name="fileEncoding" value="ISO-8859-1"/>
<!-- first we have to initialize the support for UML2 models -->
<bean class="oaw.uml2.Setup" standardUML2Setup="true"/>
<!-- here we read the UML2 model file. We put it into
the uml2model workflow slot (a kind of workflow-wide
hash map, uml2model is the key of the entry, the
model object read by the reader will be the value -->
<component id="XmiReader.uml2model" class="oaw.emf.XmiReader">
<modelFile value="${uml2ModelFile}"/>
<outputSlot value="uml2model"/>
</component>
<!-- this component checks a number of constraints in the parsed
UML2 model -->
<component id="CheckComponent.uml2model" class="org.openarchitectureware.check.CheckComponent">
<!-- Working on UML2 models also requires the EcorePackage to
be configured as a meta model, so we do this here -->
<metaModel id="mm.emf" class="oaw.type.emf.EmfMetaModel">
<metaModelPackage value="org.eclipse.emf.ecore.EcorePackage"/>
</metaModel>
<!-- and workin with UML2 also requires the UML2 meta model -->
<metaModel id="mm.UML2" class="oaw.uml2.UML2MetaModel"/>
<!-- this is the file that contains the constraints; note the use of
:: as the namespace delimiter; we also don't specify the .chk
extension of the uml2Constraints file. The namespaces correspond
to Java packages; so you know where to look in the source folder -->
<checkFile value="org::openarchitectureware::util::uml2ecore::uml2Constraints"/>
<!-- we check the complete set of model elements under the uml2model
slot in the workflow; this will be the Model object and all its
children, recusively -->
<emfAllChildrenSlot value="uml2model"/>
<!-- finally, if we encounter errors here (i.e. failed constraints)
we stop the workflow here. We won't invoke the transformation if
the input model is faulty -->
<abortOnError value="true"/>
</component>
<component class="org.openarchitectureware.util.stdlib.ExtIssueReporter"/>
<!-- this one runs the transformation from UML2 to Ecore. -->
<component id="XtendComponent.uml2ecore" class="oaw.xtend.XtendComponent">
<!-- again, we need the two meta models introduced above; we refernece
them using XML's idRef mechanism -->
<metaModel idRef="mm.emf"/>
<metaModel idRef="mm.UML2"/>
<!-- this statement makes the value "${nsUriPrefix"} passed in
by the external workflow file available as a global variable
that is accessed by the nsUri() function in uml2ecore.ext -->
<globalVarDef name="nsUriPrefix" value="'${nsUriPrefix}'"/>
<!-- and we also make the addNameAttribute property globally available. -->
<globalVarDef name="addNameAttribute" value="${addNameAttribute}"/>
<!-- as well as the packages that sould be included in the transformation -->
<globalVarDef name="includedPackages" value="'${includedPackages}'"/>
<!-- as well as the packages that sould be included in the transformation -->
<globalVarDef name="resourcePerToplevelPackage" value="'${resourcePerToplevelPackage}'"/>
<!-- finally, we run the transformation itself. there's an
extension file called uml2ecore.ext in the respective location
in the classpath that contains a function called transform that
takes an object of type UML2::Model as its parameter. Note that
we can use the slot name uml2model as a variable in this expression -->
<invoke value="org::openarchitectureware::util::uml2ecore::uml2ecore::top(uml2model)"/>
<!-- finally, we specify that we want to put the return value of the
function invoked above into the ecoreModel slot in the workflow -->
<outputSlot value="ecoreModel"/>
</component>
<component id="Generator.constraintsEtc" class="oaw.xpand2.Generator" skipOnErrors="true">
<metaModel idRef="mm.emf"/>
<globalVarDef name="addNameAttribute" value="${addNameAttribute}"/>
<expand value="org::openarchitectureware::util::uml2ecore::templates::files::root FOR ecoreModel"/>
<outlet path="${outputPath}"/>
<fileEncoding value="${fileEncoding}"/>
</component>
</workflow>