From 4dce964a8f360657b7abb5751d4bb23cb4b37c72 Mon Sep 17 00:00:00 2001
From: Markus Hamann <markus.hamann1@tu-dresden.de>
Date: Tue, 10 Dec 2024 14:55:33 +0100
Subject: [PATCH] Add V1 of the epsilon gradle example

---
 .gitattributes                               |  12 +
 .gitignore                                   |   5 +
 README.md                                    | 105 ++------
 build.gradle                                 |  98 ++++++++
 gradle.properties                            |   6 +
 gradle/libs.versions.toml                    |   2 +
 gradle/wrapper/gradle-wrapper.jar            | Bin 0 -> 43583 bytes
 gradle/wrapper/gradle-wrapper.properties     |   7 +
 gradlew                                      | 252 +++++++++++++++++++
 gradlew.bat                                  |  94 +++++++
 metamodel/transportation_network.ecore       |  77 ++++++
 model/saxony_original.transportation_network |  45 ++++
 report/.gitkeep                              |   0
 scripts/rewrite.etl                          |  98 ++++++++
 scripts/test.eunit                           |   4 +
 settings.gradle                              |   9 +
 16 files changed, 727 insertions(+), 87 deletions(-)
 create mode 100644 .gitattributes
 create mode 100644 .gitignore
 create mode 100644 build.gradle
 create mode 100644 gradle.properties
 create mode 100644 gradle/libs.versions.toml
 create mode 100644 gradle/wrapper/gradle-wrapper.jar
 create mode 100644 gradle/wrapper/gradle-wrapper.properties
 create mode 100644 gradlew
 create mode 100644 gradlew.bat
 create mode 100644 metamodel/transportation_network.ecore
 create mode 100644 model/saxony_original.transportation_network
 create mode 100644 report/.gitkeep
 create mode 100644 scripts/rewrite.etl
 create mode 100644 scripts/test.eunit
 create mode 100644 settings.gradle

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..f91f646
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,12 @@
+#
+# https://help.github.com/articles/dealing-with-line-endings/
+#
+# Linux start script should use lf
+/gradlew        text eol=lf
+
+# These are Windows script files and should use crlf
+*.bat           text eol=crlf
+
+# Binary files should be left untouched
+*.jar           binary
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1b6985c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+# Ignore Gradle project-specific cache directory
+.gradle
+
+# Ignore Gradle build output directory
+build
diff --git a/README.md b/README.md
index ecedf04..51ec64c 100644
--- a/README.md
+++ b/README.md
@@ -1,93 +1,24 @@
-# transportation_network-MDSD-EpsilonGradleExample
+# Epsilon Gradle Example for the Transportation Network Example
 
+This repository gives a simple working example of the usage of EMF models (model transformation and unit testing) outside the direct eclipse ecosystem.
 
+The example uses [Epsilon](https://eclipse.dev/epsilon/) and [Gradle](https://gradle.org/) to create a simple CI pipeline.
 
-## Getting started
-
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
-
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
-
-```
-cd existing_repo
-git remote add origin https://git-st.inf.tu-dresden.de/open-teaching-resources/model-driven-software-development/transportation_network-mdsd-pipeline/transportation_network-mdsd-epsilongradleexample.git
-git branch -M main
-git push -uf origin main
-```
-
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://git-st.inf.tu-dresden.de/open-teaching-resources/model-driven-software-development/transportation_network-mdsd-pipeline/transportation_network-mdsd-epsilongradleexample/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
+The goal is to give interested students a base project to build their own MDSD pipeline.
 
 ## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
-
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
-
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
-
-## License
-For open source projects, say how it is licensed.
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+The example pipeline has three Parts.
+
+1. Create a copy of the original model with:
+    ```
+    ./gradlew copyOriginalModel
+    ```
+2. Transform/Rewrite the copy with
+    ```
+    ./gradlew transform
+    ```
+3. Test if the transformation was running by comparing the original model with the rewritten copy. Run the tests with:
+    ```
+    ./gradlew test
+    ```
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..2f9a9b6
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,98 @@
+configurations {
+    epsilon
+}
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    epsilon 'org.eclipse.epsilon:org.eclipse.epsilon.workflow:2.5.0'
+    epsilon 'org.eclipse.epsilon:org.eclipse.epsilon.workflow.emf:2.5.0'
+    epsilon 'org.eclipse.epsilon:org.eclipse.epsilon.eunit.cmp.emf:2.5.0'
+}
+
+task setupEpsilonTasks {
+    // Set up the core Epsilon tasks
+    ant.taskdef(resource: 'org/eclipse/epsilon/workflow/tasks/tasks.xml', 
+        classpath: configurations.epsilon.asPath, loaderref: 'epsilon')
+    // Set up the Epsilon EMF tasks
+    ant.taskdef(resource: 'org/eclipse/epsilon/workflow/tasks/emf/tasks.xml', 
+        classpath: configurations.epsilon.asPath, loaderref: 'epsilon')
+    // Set logging level to info so that EOL's println() is not suppressed
+    ant.lifecycleLogLevel = 'INFO'
+}
+
+task copyOriginalModel(type: Copy) {
+    from file(dir_model + 'saxony_original.transportation_network')
+    into dir_model
+    rename 'saxony_original','saxony'
+}
+
+task register_source {
+    dependsOn setupEpsilonTasks, copyOriginalModel
+
+    doFirst{
+    // Load the EMF model
+        ant.'epsilon.emf.loadModel'( name:         'source', 
+                                    modelfile:     dir_model + 'saxony.transportation_network', 
+                                    metamodelfile: dir_metamodel  + 'transportation_network.ecore',
+                                    read:          "true",
+                                    store:         "true")
+    }
+}
+
+task register_target {
+    dependsOn setupEpsilonTasks
+
+    doFirst{
+        // Load the EMF model
+        ant.'epsilon.emf.loadModel'( name:         'target', 
+                                    modelfile:     dir_model + 'saxony_t.transportation_network', 
+                                    metamodelfile: dir_metamodel  + 'transportation_network.ecore',
+                                    read:          "false",
+                                    store:         "false")
+    }
+}
+
+task transform {
+    dependsOn register_source, register_target
+
+    doFirst{
+        ant.'epsilon.etl'(src: dir_script + "rewrite.etl"){ 
+                          model(ref: "source", alias: "source")
+                          model(ref: "target", alias: "target")
+            }
+    }
+
+    doLast{
+        ant.'epsilon.disposeModel'(model: "source")
+        ant.'epsilon.disposeModel'(model: "target")
+    }
+
+}
+
+task test{
+    dependsOn setupEpsilonTasks
+
+    doFirst{
+        ant.'epsilon.eunit'(src: dir_script + "test.eunit", failOnErrors: false, toDir: "./report/", report: "yes"){ 
+                          modelTasks() {
+                            ant.'epsilon.emf.loadModel'( name:          'expected', 
+                                                         modelfile:     dir_model + 'saxony.transportation_network', 
+                                                         metamodelfile: dir_metamodel  + 'transportation_network.ecore',
+                                                         read:          "true",
+                                                         store:         "false")
+                            ant.'epsilon.emf.loadModel'( name:          'actual', 
+                                                         modelfile:     dir_model + 'saxony_original.transportation_network', 
+                                                         metamodelfile: dir_metamodel  + 'transportation_network.ecore',
+                                                         read:          "true",
+                                                         store:         "false")
+                          }
+                          comparators() {
+			                comparator(classname: 'org.eclipse.epsilon.eunit.cmp.emf.EMFModelComparator')
+                          }
+            }
+    }
+    
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..59f0f28
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,6 @@
+# This file was generated by the Gradle 'init' task.
+# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties
+
+dir_metamodel =./metamodel/
+dir_script    =./scripts/
+dir_model     =./model/
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 0000000..4ac3234
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,2 @@
+# This file was generated by the Gradle 'init' task.
+# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189
GIT binary patch
literal 43583
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

literal 0
HcmV?d00001

diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e2847c8
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..f5feea6
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,252 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+#     and any embedded shellness will be escaped.
+#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+#     treated as '${Hostname}' itself on the command line.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..9d21a21
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,94 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/metamodel/transportation_network.ecore b/metamodel/transportation_network.ecore
new file mode 100644
index 0000000..43d35f6
--- /dev/null
+++ b/metamodel/transportation_network.ecore
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="transportation_network" nsURI="http://www.stgroup.org/transportation_network"
+    nsPrefix="transportation_network">
+  <eClassifiers xsi:type="ecore:EClass" name="TransportationNetwork" eSuperTypes="#//IdentifiableElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="roadnetworks" upperBound="-1"
+        eType="#//RoadNetwork" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="locations" upperBound="-1"
+        eType="#//Location" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="routes" upperBound="-1"
+        eType="#//Route" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="carPark" upperBound="-1"
+        eType="#//Vehicle" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Location" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="pois" upperBound="-1" eType="#//PointOfInterest"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RoadNetwork" eSuperTypes="#//IdentifiableElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDirected" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="-1.0"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+        eType="#//Location"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
+        eType="#//Location"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="roads" upperBound="-1"
+        eType="#//Road" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Road" eSuperTypes="#//IdentifiableElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IdentifiableElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PointOfInterest" abstract="true" eSuperTypes="#//NamedElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RestStop" eSuperTypes="#//PointOfInterest"/>
+  <eClassifiers xsi:type="ecore:EClass" name="GasStation" eSuperTypes="#//PointOfInterest">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fueltypes" lowerBound="1"
+        upperBound="-1" eType="#//FuelType"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="FuelType">
+    <eLiterals name="PETROL"/>
+    <eLiterals name="DIESEL" value="1"/>
+    <eLiterals name="ELECTRICITY" value="2"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Warehouse" abstract="true" eSuperTypes="#//PointOfInterest"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Other" eSuperTypes="#//PointOfInterest">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CompanyWarehouse" eSuperTypes="#//Warehouse"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CustomerWarehouse" eSuperTypes="#//Warehouse">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="customerName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Route" eSuperTypes="#//IdentifiableElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="networkList" upperBound="-1"
+        eType="#//RoadNetwork"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="start" eType="#//Location"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="end" eType="#//Location"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="vehicle" lowerBound="1"
+        eType="#//Vehicle" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Vehicle" eSuperTypes="#//IdentifiableElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="location" eType="#//Location"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="model" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fuelCapacity" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fuelType" lowerBound="1"
+        eType="#//FuelType" defaultValueLiteral="ELECTRICITY"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/model/saxony_original.transportation_network b/model/saxony_original.transportation_network
new file mode 100644
index 0000000..3cdd3ef
--- /dev/null
+++ b/model/saxony_original.transportation_network
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transportation_network:TransportationNetwork xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:transportation_network="http://www.stgroup.org/transportation_network" identifier="saxony">
+  <roadnetworks identifier="DG" length="95.0" source="//@locations.0" target="//@locations.3">
+    <roads identifier="A4" length="95.0"/>
+  </roadnetworks>
+  <roadnetworks identifier="DL" length="102.0" source="//@locations.0" target="//@locations.2">
+    <roads identifier="A4" length="20.0"/>
+    <roads identifier="A14" length="67.0"/>
+    <roads identifier="A38" length="15.0"/>
+  </roadnetworks>
+  <roadnetworks identifier="DC" length="64.0" source="//@locations.0" target="//@locations.1">
+    <roads identifier="A4" length="64.0"/>
+  </roadnetworks>
+  <roadnetworks identifier="LC" length="69.0" source="//@locations.2" target="//@locations.1">
+    <roads identifier="A72" length="69.0"/>
+  </roadnetworks>
+  <locations name="Dresden">
+    <pois xsi:type="transportation_network:RestStop"/>
+    <pois xsi:type="transportation_network:GasStation">
+      <fueltypes>PETROL</fueltypes>
+      <fueltypes>DIESEL</fueltypes>
+      <fueltypes>ELECTRICITY</fueltypes>
+    </pois>
+  </locations>
+  <locations name="Chemnitz">
+    <pois xsi:type="transportation_network:CustomerWarehouse" name="OG-01" customerName="Office GmbH"/>
+    <pois xsi:type="transportation_network:Other" name="Owner`s Home" type="Private House"/>
+  </locations>
+  <locations name="Leipzig">
+    <pois xsi:type="transportation_network:CustomerWarehouse" name="DA-01" customerName="Delivery AG"/>
+    <pois xsi:type="transportation_network:RestStop"/>
+  </locations>
+  <locations name="Görlitz">
+    <pois xsi:type="transportation_network:RestStop"/>
+    <pois xsi:type="transportation_network:GasStation">
+      <fueltypes>PETROL</fueltypes>
+      <fueltypes>DIESEL</fueltypes>
+    </pois>
+  </locations>
+  <routes identifier="R1" networkList="//@roadnetworks.1 //@roadnetworks.3" start="//@locations.0" end="//@locations.1">
+    <vehicle identifier="V01" location="//@locations.0" model="eTruck" fuelCapacity="150.0"/>
+  </routes>
+  <carPark identifier="V02" location="//@locations.2" model="eTruck" fuelCapacity="150.0"/>
+  <carPark identifier="V03" location="//@locations.0" model="eTruck" fuelCapacity="150.0"/>
+</transportation_network:TransportationNetwork>
diff --git a/report/.gitkeep b/report/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/rewrite.etl b/scripts/rewrite.etl
new file mode 100644
index 0000000..eca5cfe
--- /dev/null
+++ b/scripts/rewrite.etl
@@ -0,0 +1,98 @@
+/*
+*	Example of extending by rewriting a model.
+*	Here: Splitting a road network if the network 
+*   use multiple roads.
+*/
+
+/*
+*   Normal configuration:
+*   Source model: Read=true,  Write=true
+*   Target model: Read=false, Write=false
+*/
+
+pre {
+	"Model Extending/Rewrite Example".println();
+	"-------------------------------------".println();
+	"Start of transformation...".println();
+}
+
+post {
+	"... End of transformation.".println();
+}
+
+/*
+*	Option 1: Have a rule for the model elements which need to be extended.
+*   Write the extended elements in your source model.
+*/
+
+rule SplitRoadNetworks 
+	transform s : source!Road
+	to l  : source!Location,
+	   rn : source!RoadNetwork
+	{
+		
+	var originalRN:source!RoadNetwork = s.eContainer();
+	var network:source!TransportationNetwork = originalRN.eContainer();
+	
+	network.roadnetworks.add(rn);
+	network.locations.add(l);
+	
+	rn.identifier = originalRN.identifier + "/" + originalRN.roads.size();
+	rn.roads.add(s);
+	rn.length = s.length;
+	rn.source = originalRN.source;
+	if (originalRN.roads.isEmpty()){
+		rn.target = originalRN.target;
+		delete l;
+	} else{
+		rn.target = l;
+		originalRN.source = l;
+	}
+	
+}
+
+
+rule deleteEmptyRoadNetworks 
+	transform s : source!RoadNetwork
+	to t  : target!EObject
+	{
+	
+	if(s.roads.isEmpty()){
+		delete s;
+	}
+}
+
+
+/*
+* Optional Part for merging Road Networks with the help of an operation
+*/
+rule mergeRoadNetworks 
+	transform s : source!TransportationNetwork
+	to t : target!EObject{
+	
+	for (r in s.roadnetworks) { 
+		var toBeMergeRNs = r.RNtoMerge();
+		if(not toBeMergeRNs.isEmpty()){
+			toBeMergeRNs.add(r);
+			var minRoad = toBeMergeRNs.sortBy(rn | rn.roads.first().length).first();
+			toBeMergeRNs.remove(minRoad);
+			for (mergingRN in toBeMergeRNs) { 
+				mergingRN.source = minRoad.target;
+				mergingRN.roads.first().length -= minRoad.roads.first().length;
+				mergingRN.length = mergingRN.roads.first().length;
+			}
+		}
+	}
+}
+
+operation source!RoadNetwork RNtoMerge() : Set {
+	if(self.eContainer() <> null){
+		return self.eContainer().roadnetworks.select(rn | rn.source.equals(self.source) 
+														   and not (rn == self))
+											 .select(rn | (rn.roads.size() == 1) 
+											 			   and (rn.roads.first().identifier == self.roads.first().identifier));
+	} else{
+		return new Set;
+	}
+	
+}
diff --git a/scripts/test.eunit b/scripts/test.eunit
new file mode 100644
index 0000000..fd6e731
--- /dev/null
+++ b/scripts/test.eunit
@@ -0,0 +1,4 @@
+@Test
+operation testModelChanged() {
+	assertNotEqualModels("The model should have be changed by a transformation!", "expected", "actual");
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..29655b9
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,9 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.11.1/userguide/multi_project_builds.html in the Gradle documentation.
+ * This project uses @Incubating APIs which are subject to change.
+ */
+
+rootProject.name = 'EpsilonGradleExample'
-- 
GitLab