Skip to content

Command line tool to convert Ecore metamodels to Emfatic sources

License

Notifications You must be signed in to change notification settings

epsilonlabs/ecore2emfatic-cli

Repository files navigation

Command-line Ecore->Emfatic converter

This is a small command-line tool that produces Emfatic source from an .ecore metamodel. It is intended to be used as a textconv filter for Git differencing.

Building

To build and test the Java and native binary versions of the project, run:

./gradlew build nativeCompile nativeTest

Note that for the native binaries, you will need GraalVM 17 or newer. It is recommended to use SDKMAN for installing and managing JDKs.

Running

To produce Emfatic sources from an .ecore file, using the all-in-one JAR file in build/libs/*-all.jar:

java -jar path/to/ecore2emfatic-VERSION-all.jar path/to/your.ecore

When using one of the native binaries, this can be simplified to:

path/to/ecore2emfatic path/to/your.ecore

Using native binaries as a Git filter

In order to compute differences between .ecore file versions using a Git textconv, first add the native binary to your path. In Linux/Mac:

cp build/native/nativeCompile/ecore2emfatic /folder/in/PATH

You will then need to define the ecore differencing algorithm:

git config --global diff.ecore.textconv ecore2emfatic

You can then use this conversion from any Git repository, by adding a .gitattributes file to its root folder with this content:

*.ecore  diff=ecore

You should then be able to compute differences between versions of .ecore file using regular Git tools. The results would look like this:

diff --git a/OO.ecore b/OO.ecore
index 84da8c9..f611dd1 100644
--- a/OO.ecore
+++ b/OO.ecore
@@ -68,7 +68,7 @@ class Attribute extends StructuralFeature {
 
 enum VisibilityEnum {
        public = 1;
-       private = 2;
+       private = 3;
 }

Providing URI mappings

If your .ecore files import other metamodels through URIs, you can provide mappings from URIs to specific .ecore files or folders via the --from and --to options:

path/to/ecore2emfatic --from platform:/resource --to path/to/base/folder your.ecore

You can specify multiple pairs of --from and --to options, as in:

path/to/ecore2emfatic --from A --to B --from C --to D your.ecore

If you are using this tool as a textconv filter via Git, you would need to provide these options in your repository's configuration. For example:

git config diff.ecore.textconv "ecore2emfatic --from A --to B"