EuGENia: Automated Invocation with Ant

EuGENia can be called from Ant, using the <epsilon.eugenia> Ant task. This way, the creation of the GMF editors can be easily automated by using a standard Ant Builder. Additionally, the Ant task has several features which are not currently available through the regular graphical user interface.

In this article, we will show how to invoke the EuGENia Ant task and offer some recommendations on how to adopt it.

Basic usage

The EuGENia Ant task only requires specifying the source Emfatic description or Ecore model through the src attribute:

<!-- Generate myfile.ecore from myfile.emf and then proceed -->
<epsilon.eugenia src="myfile.emf"/>

<!-- Start directly from the Ecore model -->
<epsilon.eugenia src="myfile.ecore"/>

Important: the Eugenia Ant task requires that the Ant buildfile is run from the same JRE as the workspace. Please check the Workflow documentation for instructions on how to do it.

Limiting the steps to be run

Normally, EuGENia runs all these steps:

  1. Clean the models from the previous run (the clean step)
  2. If src is an Emfatic source file (with the .emf extension), generate the Ecore model from it (ecore)
  3. Generate the EMF GenModel from the Ecore model and polish it with Ecore2GenModel.eol if available (genmodel)
  4. Generate the GmfGraph, GmfTool and GmfMap models and polish them with Ecore2GMF.eol if available (gmf)
  5. Generate the GmfGen model and polish it with FixGMFGen.eol if available (gmfgen)
  6. Generate the EMF code from the EMF GenModel model (emfcode)
  7. Generate the GMF code from the GMFGen model (gmfcode)
Optionally, the Ant task can run only some of these steps. The firstStep attribute can be used to specify the first step to be run, and the lastStep can be used to specify the last step to be run. For example:

<!-- Skips the clean, ecore and genmodel steps -->
<epsilon.eugenia src="myfile.ecore" firstStep="gmf"/>

<!-- Does not run the emfcode and gmfcode steps -->
<epsilon.eugenia src="myfile.emf" lastStep="gmfgen"/>

<!-- Only runs the gmf and gmfgen steps -->
<epsilon.eugenia src="myfile.ecore" firstStep="gmf" lastStep="gmfgen"/>

Using extra models for polishing

Additional models to be used in a polishing transformation can be specified through the <model> nested element. <model> has three attributes:
  • ref (mandatory) is the name with which the model was loaded into the model repository of the Ant project, using the Epsilon model loading Ant tasks.
  • as (optional) is the name to be used for the model inside the polishing transformation.
  • step (mandatory) is the identifier of the EuGENia step to which we will add the model reference.
As an example, consider the following fragment:

<epsilon.emf.loadModel name="Labels"
  modelfile="my.model" metamodeluri="mymetamodelURI"
  read="true" store="false"/>

<epsilon.eugenia src="myfile.emf">
  <model ref="Labels" step="gmf"/>

This example will make the Labels model available to the Ecore2GMF.eol polishing transformation, which is part of the gmf step.