From c916163f9e06134400a2776c34a2cd69bb6ebc31 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Mon, 25 Nov 2019 15:59:12 +0100
Subject: [PATCH] add and update ecore, xcore, and relast resources

---
 src/test/resources/ecore/Train.ecore        |  6 +-
 src/test/resources/ecore/railway.xcore      | 68 +++++++++++++++++++++
 src/test/resources/ecore/statemachine.ecore | 28 +++++++++
 src/test/resources/relast/Train.relast      | 19 ++++++
 4 files changed, 118 insertions(+), 3 deletions(-)
 create mode 100644 src/test/resources/ecore/railway.xcore
 create mode 100644 src/test/resources/ecore/statemachine.ecore
 create mode 100644 src/test/resources/relast/Train.relast

diff --git a/src/test/resources/ecore/Train.ecore b/src/test/resources/ecore/Train.ecore
index facdc14..9729366 100644
--- a/src/test/resources/ecore/Train.ecore
+++ b/src/test/resources/ecore/Train.ecore
@@ -58,10 +58,10 @@
   <eClassifiers xsi:type="ecore:EClass" name="SwitchPosition" eSuperTypes="#//RailwayElement">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="position" unique="false"
         eType="#//Position"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="route" eType="#//Route"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="route" lowerBound="1" eType="#//Route"
         eOpposite="#//Route/follows"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Switch"
-        eOpposite="#//Switch/positions"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
+        eType="#//Switch" eOpposite="#//Switch/positions"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Semaphore" eSuperTypes="#//RailwayElement">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="signal" unique="false"
diff --git a/src/test/resources/ecore/railway.xcore b/src/test/resources/ecore/railway.xcore
new file mode 100644
index 0000000..c6b52a4
--- /dev/null
+++ b/src/test/resources/ecore/railway.xcore
@@ -0,0 +1,68 @@
+@Ecore(nsURI="http://www.semanticweb.org/ontologies/2015/trainbenchmark")
+@GenModel(bundleManifest="false",
+    modelDirectory="trainbenchmark-format-emf-model/build/xcore/main",
+    complianceLevel="8.0")
+package hu.bme.mit.trainbenchmark.railway
+
+abstract class RailwayElement {
+	int ^id
+}
+
+class RailwayContainer {
+	contains Route[] routes
+	contains Region[] regions
+}
+
+class Region extends RailwayElement {
+	contains Sensor[] sensors
+	contains TrackElement[] elements
+}
+
+class Route extends RailwayElement {
+	boolean active
+	contains SwitchPosition[] follows opposite route
+	refers Sensor[2..*] requires
+	refers Semaphore entry
+	refers Semaphore exit
+}
+
+class Sensor extends RailwayElement {
+	refers TrackElement[] monitors opposite monitoredBy
+}
+
+abstract class TrackElement extends RailwayElement {
+	refers Sensor[] monitoredBy opposite monitors
+	refers TrackElement[] connectsTo
+}
+
+class Segment extends TrackElement {
+	int length
+	contains Semaphore[] semaphores
+}
+
+class Switch extends TrackElement {
+	Position currentPosition
+	refers SwitchPosition[] positions opposite target
+}
+
+class SwitchPosition extends RailwayElement {
+	Position position
+	refers Route route opposite follows
+	refers Switch target opposite positions 
+}
+
+class Semaphore extends RailwayElement {
+	Signal signal
+}
+
+enum Position {
+	FAILURE = 0
+	STRAIGHT = 1
+	DIVERGING = 2
+}
+
+enum Signal {
+	FAILURE = 0
+	STOP = 1
+	GO = 2
+}
diff --git a/src/test/resources/ecore/statemachine.ecore b/src/test/resources/ecore/statemachine.ecore
new file mode 100644
index 0000000..c6cc5bb
--- /dev/null
+++ b/src/test/resources/ecore/statemachine.ecore
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage 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"
+                xmi:version="2.0" name="statemachine"
+                nsURI="http://www.example.org/statemachine" nsPrefix="statemachine">
+    <eClassifiers xsi:type="ecore:EClass" name="StateMachine">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="element" upperBound="-1" eType="#//Element"
+                             containment="true"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="initial" lowerBound="1" eType="#//State"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="final" upperBound="-1" eType="#//State"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="label"
+                             eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Element">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="outgoing" upperBound="-1"
+                             eType="#//Transition" eOpposite="#//Transition/from"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="incoming" upperBound="-1" eType="#//Transition"
+                             eOpposite="#//Transition/to"/>
+    </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//Element">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="from" lowerBound="1" eType="#//State"
+                             eOpposite="#//State/outgoing"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="to" lowerBound="1" eType="#//State"
+                             eOpposite="#//State/incoming"/>
+    </eClassifiers>
+</ecore:EPackage>
diff --git a/src/test/resources/relast/Train.relast b/src/test/resources/relast/Train.relast
new file mode 100644
index 0000000..5cf2302
--- /dev/null
+++ b/src/test/resources/relast/Train.relast
@@ -0,0 +1,19 @@
+RailwayContainer ::= Route* Region*;
+
+abstract RailwayElement ::= <Id:int>;
+Region : RailwayElement ::= TrackElement* Sensor*;
+Semaphore : RailwayElement ::= <Signal:Signal>;
+Route : RailwayElement ::= <Active:boolean> SwitchPosition*;
+SwitchPosition : RailwayElement ::= <Position:Position>;
+Sensor : RailwayElement;
+
+abstract TrackElement : RailwayElement;
+Segment : TrackElement ::= <Length:int> Semaphore*;
+Switch : TrackElement ::= <CurrentPosition:Position>;
+
+rel Route.requires* <-> Sensor.requiredBy*;
+rel Route.entry? -> Semaphore;
+rel Route.exit? -> Semaphore;
+rel Sensor.monitors* <-> TrackElement.monitoredBy*;
+rel TrackElement.connectsTo* -> TrackElement;
+rel SwitchPosition.target <-> Switch.positions*;
\ No newline at end of file
-- 
GitLab