Просмотр исходного кода

added support for named entry nodes and entry point specifications on transitions

terfloth@itemis.de 13 лет назад
Родитель
Сommit
33d42a6124
40 измененных файлов с 549 добавлено и 535 удалено
  1. 5 3
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineC.xtend
  2. 5 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/Statemachine.xtend
  3. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionScope_enterSequences_Sequence.gif
  4. 1 0
      plugins/org.yakindu.sct.model.sexec.edit/plugin.properties
  5. 4 4
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionFlowItemProvider.java
  6. 1 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionRegionItemProvider.java
  7. 4 4
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionScopeItemProvider.java
  8. 4 4
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionStateItemProvider.java
  9. 8 3
      plugins/org.yakindu.sct.model.sexec.interpreter/src/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.xtend
  10. 2 1
      plugins/org.yakindu.sct.model.sexec/META-INF/MANIFEST.MF
  11. 2 0
      plugins/org.yakindu.sct.model.sexec/build.properties
  12. 2 2
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecore
  13. 1 14
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecorediag
  14. 7 17
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionScope.java
  15. 14 14
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java
  16. 31 4
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend
  17. 29 59
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java
  18. 20 49
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionScopeImpl.java
  19. 30 59
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionStateImpl.java
  20. 3 3
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java
  21. 39 20
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend
  22. 2 2
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/FlowOptimizer.xtend
  23. 1 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend
  24. 6 6
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.xtend
  25. 68 50
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend
  26. 25 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecExtensions.xtend
  27. 12 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SgraphExtensions.xtend
  28. 10 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/TargetEntrySpec.xtend
  29. 105 105
      plugins/org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore
  30. 4 4
      plugins/org.yakindu.sct.ui.editor/plugin.xml
  31. 0 1
      test-plugins/org.yakindu.sct.generator.genmodel.test/META-INF/MANIFEST.MF
  32. 10 10
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/HistoryTest.java
  33. 1 1
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/LocalReactionTest.java
  34. 5 5
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerHierarchyTest.java
  35. 5 5
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerHistoryTest.java
  36. 37 37
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerOrthogonalityTest.java
  37. 20 20
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerSCTest.java
  38. 23 23
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateTest.java
  39. 1 1
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SelfTransitionTest.java
  40. 2 2
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/StatechartEnterExistActionTest.java

+ 5 - 3
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineC.xtend

@@ -19,7 +19,8 @@ import org.yakindu.sct.model.sexec.Step
 import org.yakindu.sct.model.sgraph.Statechart
 import org.yakindu.sct.model.sgen.GeneratorEntry
 import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
-import org.yakindu.sct.generator.c.GenmodelEntries
+import org.yakindu.sct.generator.c.GenmodelEntries
+import org.yakindu.sct.model.sexec.extensions.SExecExtensions
 
 class StatemachineC {
 	
@@ -27,7 +28,8 @@ class StatemachineC {
 	@Inject extension Navigation
 	@Inject extension FlowCode
 	@Inject extension GenmodelEntries
-	@Inject extension ICodegenTypeSystemAccess
+	@Inject extension ICodegenTypeSystemAccess
+	@Inject extension SExecExtensions
 	
 	def generateStatemachineC(ExecutionFlow flow, Statechart sc, IFileSystemAccess fsa, GeneratorEntry entry) {
 		 fsa.generateFile(flow.module.c, flow.statemachineCContent(entry) )
@@ -98,7 +100,7 @@ class StatemachineC {
 	def enterFunction(ExecutionFlow it) '''
 		void «type.toFirstLower»_enter(«scHandleDecl»)
 		{
-			«enterSequence.code»
+			«enterSequences.defaultSequence.code»
 		}
 	'''
 	

+ 5 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/Statemachine.xtend

@@ -21,6 +21,7 @@ import org.yakindu.sct.model.stext.stext.InterfaceScope
 import org.yakindu.sct.model.stext.stext.Direction
 import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
 import org.yakindu.sct.model.stext.stext.EventDefinition
+import org.yakindu.sct.model.sexec.extensions.SExecExtensions
 
 class Statemachine {
 	
@@ -30,6 +31,9 @@ class Statemachine {
 	@Inject extension ICodegenTypeSystemAccess
 	@Inject extension ISTextTypeSystem
 	@Inject extension FlowCode
+	@Inject extension SExecExtensions
+	
+	
 	@Inject Beautifier beautifier
 	
 	def generateStatemachine(ExecutionFlow flow, GeneratorEntry entry, IFileSystemAccess fsa) {
@@ -486,7 +490,7 @@ class Statemachine {
 			}
 			cycleStartTime = timerService.getSystemTimeMillis();
 			«ENDIF»
-			«enterSequence.code»
+			«enterSequences.defaultSequence.code»
 		}
 	'''
 	

BIN
plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionScope_enterSequences_Sequence.gif


+ 1 - 0
plugins/org.yakindu.sct.model.sexec.edit/plugin.properties

@@ -139,3 +139,4 @@ _UI_ExecutionRegion_nodes_feature = Nodes
 _UI_ExecutionExit_type = Execution Exit
 _UI_ExecutionFlow_initAction_feature = Init Action
 _UI_ExecutionScope_initSequence_feature = Init Sequence
+_UI_ExecutionScope_enterSequences_feature = Enter Sequences

+ 4 - 4
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionFlowItemProvider.java

@@ -196,7 +196,7 @@ public class ExecutionFlowItemProvider
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
-			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_NODE__REACTIONS);
@@ -266,7 +266,7 @@ public class ExecutionFlowItemProvider
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case SexecPackage.EXECUTION_FLOW__STATE_VECTOR:
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
@@ -301,7 +301,7 @@ public class ExecutionFlowItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE,
+				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES,
 				 SexecFactory.eINSTANCE.createSequence()));
 
 		newChildDescriptors.add
@@ -579,7 +579,7 @@ public class ExecutionFlowItemProvider
 		boolean qualify =
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR ||
 			childFeature == SexecPackage.Literals.EXECUTION_FLOW__HISTORY_VECTOR ||
-			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_NODE__REACT_SEQUENCE ||

+ 1 - 1
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionRegionItemProvider.java

@@ -208,7 +208,7 @@ public class ExecutionRegionItemProvider
 		boolean qualify =
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR ||
 			childFeature == SexecPackage.Literals.EXECUTION_REGION__HISTORY_VECTOR ||
-			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_REGION__DEEP_ENTER_SEQUENCE ||

+ 4 - 4
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionScopeItemProvider.java

@@ -151,7 +151,7 @@ public class ExecutionScopeItemProvider
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
-			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 		}
@@ -212,7 +212,7 @@ public class ExecutionScopeItemProvider
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case SexecPackage.EXECUTION_SCOPE__STATE_VECTOR:
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
@@ -239,7 +239,7 @@ public class ExecutionScopeItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE,
+				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES,
 				 SexecFactory.eINSTANCE.createSequence()));
 
 		newChildDescriptors.add
@@ -265,7 +265,7 @@ public class ExecutionScopeItemProvider
 		Object childObject = child;
 
 		boolean qualify =
-			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE;
 

+ 4 - 4
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionStateItemProvider.java

@@ -147,7 +147,7 @@ public class ExecutionStateItemProvider
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
-			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_STATE__ENTRY_ACTION);
@@ -210,7 +210,7 @@ public class ExecutionStateItemProvider
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case SexecPackage.EXECUTION_STATE__STATE_VECTOR:
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
 			case SexecPackage.EXECUTION_STATE__ENTRY_ACTION:
@@ -239,7 +239,7 @@ public class ExecutionStateItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE,
+				(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES,
 				 SexecFactory.eINSTANCE.createSequence()));
 
 		newChildDescriptors.add
@@ -456,7 +456,7 @@ public class ExecutionStateItemProvider
 
 		boolean qualify =
 			childFeature == SexecPackage.Literals.EXECUTION_NODE__REACT_SEQUENCE ||
-			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCES ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_STATE__ENTRY_ACTION ||

+ 8 - 3
plugins/org.yakindu.sct.model.sexec.interpreter/src/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.xtend

@@ -57,6 +57,7 @@ import org.yakindu.sct.simulation.core.runtime.IExecutionContext
 import org.yakindu.sct.simulation.core.runtime.ISlot
 import org.yakindu.sct.simulation.core.runtime.impl.ExecutionEvent
 import org.yakindu.sct.simulation.core.runtime.impl.ExecutionVariable
+import org.yakindu.sct.model.sexec.transformation.SexecExtensions
 
 /**
  * 
@@ -76,6 +77,8 @@ class ExecutionFlowInterpreter extends AbstractExecutionFacade implements IExecu
 	ITimingService timingService
 	@Inject extension ISTextTypeSystem 
 	@Inject extension ISTextTypeInferrer
+	
+	@Inject extension SexecExtensions
 	 
 	@Inject
 	@Named("InterpreterName")
@@ -238,9 +241,11 @@ class ExecutionFlowInterpreter extends AbstractExecutionFacade implements IExecu
 	}
 
 	override enter() {
-		for(step : flow.enterSequence.steps){
-			step.execute
-		} 
+		if (flow.enterSequences.defaultSequence != null) {
+			for(step : flow.enterSequences.defaultSequence.steps){
+				step.execute
+			} 		
+		}
 	}
 	
 	override exit() {

+ 2 - 1
plugins/org.yakindu.sct.model.sexec/META-INF/MANIFEST.MF

@@ -17,5 +17,6 @@ Require-Bundle: org.eclipse.core.runtime,
  com.google.inject,
  org.eclipse.xtext.xbase.lib,
  org.eclipse.xtext,
- org.yakindu.sct.model.stext
+ org.yakindu.sct.model.stext,
+ org.eclipse.xtend.lib;bundle-version="2.3.0"
 Bundle-ActivationPolicy: lazy

+ 2 - 0
plugins/org.yakindu.sct.model.sexec/build.properties

@@ -15,3 +15,5 @@ output.. = bin/
 source.. = src/,\
 		xtend-gen/
 src.excludes = model/
+src.includes = src/org/yakindu/sct/model/sexec/extensions/,\
+               src/org/yakindu/sct/model/sexec/transformation/

+ 2 - 2
plugins/org.yakindu.sct.model.sexec/model/sexec.ecore

@@ -40,8 +40,8 @@
         eType="#//ExecutionScope" eOpposite="#//ExecutionScope/superScope"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="superScope" eType="#//ExecutionScope"
         eOpposite="#//ExecutionScope/subScopes"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="enterSequence" eType="#//Sequence"
-        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enterSequences" upperBound="-1"
+        eType="#//Sequence" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="exitSequence" eType="#//Sequence"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="initSequence" eType="#//Sequence"

+ 1 - 14
plugins/org.yakindu.sct.model.sexec/model/sexec.ecorediag

@@ -1065,19 +1065,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ylXqMEjuEeGFD_vuePSd-Q" id="(0.5,0.5)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ylXqMUjuEeGFD_vuePSd-Q" id="(0.5,0.5)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_s3VJUEjuEeGFD_vuePSd-Q" type="3002" source="_s3HG4EjuEeGFD_vuePSd-Q" target="_wsQqIhqkEeGIWuhy_7gRFw">
-    <children xmi:type="notation:Node" xmi:id="_s3VJVEjuEeGFD_vuePSd-Q" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_s3VJVUjuEeGFD_vuePSd-Q" x="-108" y="27"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_s3VwYEjuEeGFD_vuePSd-Q" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_s3VwYUjuEeGFD_vuePSd-Q" x="18" y="11"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_s3VJUUjuEeGFD_vuePSd-Q" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_s3VJUkjuEeGFD_vuePSd-Q" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="sexec.ecore#//ExecutionScope/enterSequence"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3VJU0juEeGFD_vuePSd-Q" points="[1, 1, -514, -356]$[486, 337, -29, -20]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Ff5voEjxEeGFD_vuePSd-Q" id="(0.2887323943661972,0.047619047619047616)"/>
-  </edges>
   <edges xmi:type="notation:Edge" xmi:id="_s3WXcEjuEeGFD_vuePSd-Q" type="3002" source="_s3HG4EjuEeGFD_vuePSd-Q" target="_wsQqIhqkEeGIWuhy_7gRFw">
     <children xmi:type="notation:Node" xmi:id="_s3WXdEjuEeGFD_vuePSd-Q" type="4011">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_s3WXdUjuEeGFD_vuePSd-Q" x="-76" y="-16"/>
@@ -1088,7 +1075,7 @@
     <styles xmi:type="notation:ConnectorStyle" xmi:id="_s3WXcUjuEeGFD_vuePSd-Q" lineColor="4210752"/>
     <styles xmi:type="notation:FontStyle" xmi:id="_s3WXckjuEeGFD_vuePSd-Q" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
     <element xmi:type="ecore:EReference" href="sexec.ecore#//ExecutionScope/exitSequence"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3WXc0juEeGFD_vuePSd-Q" points="[11, 20, -142, -296]$[82, 146, -71, -170]$[151, 312, -2, -4]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3WXc0juEeGFD_vuePSd-Q" points="[10, 20, -143, -296]$[82, 156, -71, -160]$[151, 312, -2, -4]"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GR3_IEjxEeGFD_vuePSd-Q" id="(0.3380281690140845,0.11904761904761904)"/>
   </edges>
   <edges xmi:type="notation:Edge" xmi:id="_s3YMoEjuEeGFD_vuePSd-Q" type="3003" source="_wsJVZhqkEeGIWuhy_7gRFw" target="_s3HG4EjuEeGFD_vuePSd-Q">

+ 7 - 17
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionScope.java

@@ -20,7 +20,7 @@ import org.yakindu.base.base.NamedElement;
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getStateVector <em>State Vector</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getSubScopes <em>Sub Scopes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getSuperScope <em>Super Scope</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequence <em>Enter Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequences <em>Enter Sequences</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getExitSequence <em>Exit Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getInitSequence <em>Init Sequence</em>}</li>
  * </ul>
@@ -104,30 +104,20 @@ public interface ExecutionScope extends MappedElement, NamedElement {
 	void setSuperScope(ExecutionScope value);
 
 	/**
-	 * Returns the value of the '<em><b>Enter Sequence</b></em>' containment reference.
+	 * Returns the value of the '<em><b>Enter Sequences</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.sct.model.sexec.Sequence}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Enter Sequence</em>' containment reference isn't clear,
+	 * If the meaning of the '<em>Enter Sequences</em>' containment reference list isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Enter Sequence</em>' containment reference.
-	 * @see #setEnterSequence(Sequence)
-	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionScope_EnterSequence()
+	 * @return the value of the '<em>Enter Sequences</em>' containment reference list.
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionScope_EnterSequences()
 	 * @model containment="true"
 	 * @generated
 	 */
-	Sequence getEnterSequence();
-
-	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequence <em>Enter Sequence</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Enter Sequence</em>' containment reference.
-	 * @see #getEnterSequence()
-	 * @generated
-	 */
-	void setEnterSequence(Sequence value);
+	EList<Sequence> getEnterSequences();
 
 	/**
 	 * Returns the value of the '<em><b>Exit Sequence</b></em>' containment reference.

+ 14 - 14
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java

@@ -163,13 +163,13 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_FLOW__SUPER_SCOPE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 4;
 
 	/**
-	 * The feature id for the '<em><b>Enter Sequence</b></em>' containment reference.
+	 * The feature id for the '<em><b>Enter Sequences</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__ENTER_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 5;
+	int EXECUTION_FLOW__ENTER_SEQUENCES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 5;
 
 	/**
 	 * The feature id for the '<em><b>Exit Sequence</b></em>' containment reference.
@@ -526,13 +526,13 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_STATE__SUPER_SCOPE = EXECUTION_NODE_FEATURE_COUNT + 2;
 
 	/**
-	 * The feature id for the '<em><b>Enter Sequence</b></em>' containment reference.
+	 * The feature id for the '<em><b>Enter Sequences</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE__ENTER_SEQUENCE = EXECUTION_NODE_FEATURE_COUNT + 3;
+	int EXECUTION_STATE__ENTER_SEQUENCES = EXECUTION_NODE_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Exit Sequence</b></em>' containment reference.
@@ -644,13 +644,13 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_SCOPE__SUPER_SCOPE = MAPPED_ELEMENT_FEATURE_COUNT + 3;
 
 	/**
-	 * The feature id for the '<em><b>Enter Sequence</b></em>' containment reference.
+	 * The feature id for the '<em><b>Enter Sequences</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_SCOPE__ENTER_SEQUENCE = MAPPED_ELEMENT_FEATURE_COUNT + 4;
+	int EXECUTION_SCOPE__ENTER_SEQUENCES = MAPPED_ELEMENT_FEATURE_COUNT + 4;
 
 	/**
 	 * The feature id for the '<em><b>Exit Sequence</b></em>' containment reference.
@@ -735,13 +735,13 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_REGION__SUPER_SCOPE = EXECUTION_SCOPE__SUPER_SCOPE;
 
 	/**
-	 * The feature id for the '<em><b>Enter Sequence</b></em>' containment reference.
+	 * The feature id for the '<em><b>Enter Sequences</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_REGION__ENTER_SEQUENCE = EXECUTION_SCOPE__ENTER_SEQUENCE;
+	int EXECUTION_REGION__ENTER_SEQUENCES = EXECUTION_SCOPE__ENTER_SEQUENCES;
 
 	/**
 	 * The feature id for the '<em><b>Exit Sequence</b></em>' containment reference.
@@ -2560,15 +2560,15 @@ public interface SexecPackage extends EPackage {
 	EReference getExecutionScope_SuperScope();
 
 	/**
-	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequence <em>Enter Sequence</em>}'.
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequences <em>Enter Sequences</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference '<em>Enter Sequence</em>'.
-	 * @see org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequence()
+	 * @return the meta object for the containment reference list '<em>Enter Sequences</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionScope#getEnterSequences()
 	 * @see #getExecutionScope()
 	 * @generated
 	 */
-	EReference getExecutionScope_EnterSequence();
+	EReference getExecutionScope_EnterSequences();
 
 	/**
 	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.ExecutionScope#getExitSequence <em>Exit Sequence</em>}'.
@@ -3550,12 +3550,12 @@ public interface SexecPackage extends EPackage {
 		EReference EXECUTION_SCOPE__SUPER_SCOPE = eINSTANCE.getExecutionScope_SuperScope();
 
 		/**
-		 * The meta object literal for the '<em><b>Enter Sequence</b></em>' containment reference feature.
+		 * The meta object literal for the '<em><b>Enter Sequences</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference EXECUTION_SCOPE__ENTER_SEQUENCE = eINSTANCE.getExecutionScope_EnterSequence();
+		EReference EXECUTION_SCOPE__ENTER_SEQUENCES = eINSTANCE.getExecutionScope_EnterSequences();
 
 		/**
 		 * The meta object literal for the '<em><b>Exit Sequence</b></em>' containment reference feature.

+ 31 - 4
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend

@@ -33,6 +33,7 @@ import org.yakindu.sct.model.sexec.Reaction
 import org.eclipse.emf.ecore.EObject
 import org.yakindu.sct.model.sexec.Check
 import org.yakindu.sct.model.stext.stext.InterfaceScope
+import org.yakindu.sct.model.sexec.Sequence
 
 class SExecExtensions {
 	
@@ -149,17 +150,27 @@ class SExecExtensions {
 		states.forEach( s | if (s.exitAction.called) funcs += s.exitAction )
 		return funcs
 	}
+
+	/**
+	 * Checks if a step is called or not.
+	 */
 	def isCalled(Step it) { it != null && caller.size > 0 }
 	
 	
+	/**
+	 * Returns a list of all steps that are called. 
+	 */
+	def List<Sequence> called(List<Sequence> it) {
+		filter( s | s.called ).toList
+	}
 	
 	 
 	def List<Step> enterSequenceFunctions(ExecutionFlow it) {
 		val funcs = new ArrayList<Step>()
-		if (enterSequence.called) funcs.add(enterSequence) 
-		states.forEach( s | if (s.enterSequence.called) funcs += s.enterSequence )
+		funcs.addAll(enterSequences.called) 
+		states.forEach( s | funcs += s.enterSequences.called )
 		regions.forEach( s | {
-			if (s.enterSequence.called) funcs += s.enterSequence
+			funcs += s.enterSequences.called
 			if (s.deepEnterSequence.called) funcs += s.deepEnterSequence
 			if (s.shallowEnterSequence.called) funcs += s.shallowEnterSequence
 		})
@@ -200,7 +211,7 @@ class SExecExtensions {
 	def dispatch isEffect(EObject it, Step s) { false }
 	
 	def isEnterSequence(Step it) { eContainer.isEnterSequence(it) }
-	def dispatch isEnterSequence(ExecutionScope it, Step s) { enterSequence == s }
+	def dispatch isEnterSequence(ExecutionScope it, Step s) { enterSequences.contains(s) }
 	def dispatch isEnterSequence(EObject it, Step s) { false }
 	
 	def isDeepEnterSequence(Step it) { eContainer.isDeepEnterSequence(it) }
@@ -221,4 +232,20 @@ class SExecExtensions {
 	
 	def isCheckFunction(Step it) { it instanceof Check }
 	
+	
+	
+	/**
+	 * Returns a step that mathes the given name.
+	 */
+	def Sequence byName(List<Sequence>steps, String name) {
+		steps.filter(s | name.trim == s.name.trim ).head
+	}
+
+	/**
+	 * Returns the default step that is the step without name or the name 'default'.
+	 */
+	def Sequence defaultSequence(List<Sequence>steps) {
+		steps.filter(s | s.name == null || s.name.trim == "" ||  s.name.trim == "default" ).head
+	}
+	
 }

+ 29 - 59
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java

@@ -45,7 +45,7 @@ import org.yakindu.sct.model.sgraph.impl.ScopedElementImpl;
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getStateVector <em>State Vector</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getSubScopes <em>Sub Scopes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getSuperScope <em>Super Scope</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getEnterSequence <em>Enter Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getEnterSequences <em>Enter Sequences</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getExitSequence <em>Exit Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getInitSequence <em>Init Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getReactions <em>Reactions</em>}</li>
@@ -124,14 +124,14 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 	protected ExecutionScope superScope;
 
 	/**
-	 * The cached value of the '{@link #getEnterSequence() <em>Enter Sequence</em>}' containment reference.
+	 * The cached value of the '{@link #getEnterSequences() <em>Enter Sequences</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getEnterSequence()
+	 * @see #getEnterSequences()
 	 * @generated
 	 * @ordered
 	 */
-	protected Sequence enterSequence;
+	protected EList<Sequence> enterSequences;
 
 	/**
 	 * The cached value of the '{@link #getExitSequence() <em>Exit Sequence</em>}' containment reference.
@@ -343,49 +343,6 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 		return states;
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Sequence getEnterSequence() {
-		return enterSequence;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetEnterSequence(Sequence newEnterSequence, NotificationChain msgs) {
-		Sequence oldEnterSequence = enterSequence;
-		enterSequence = newEnterSequence;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE, oldEnterSequence, newEnterSequence);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEnterSequence(Sequence newEnterSequence) {
-		if (newEnterSequence != enterSequence) {
-			NotificationChain msgs = null;
-			if (enterSequence != null)
-				msgs = ((InternalEObject)enterSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE, null, msgs);
-			if (newEnterSequence != null)
-				msgs = ((InternalEObject)newEnterSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE, null, msgs);
-			msgs = basicSetEnterSequence(newEnterSequence, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE, newEnterSequence, newEnterSequence));
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -501,6 +458,18 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__SUPER_SCOPE, newSuperScope, newSuperScope));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Sequence> getEnterSequences() {
+		if (enterSequences == null) {
+			enterSequences = new EObjectContainmentEList<Sequence>(Sequence.class, this, SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES);
+		}
+		return enterSequences;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -849,8 +818,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return ((InternalEList<?>)getSubScopes()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE:
 				return basicSetSuperScope(null, msgs);
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
-				return basicSetEnterSequence(null, msgs);
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
+				return ((InternalEList<?>)getEnterSequences()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
 			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
@@ -895,8 +864,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE:
 				if (resolve) return getSuperScope();
 				return basicGetSuperScope();
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
-				return getEnterSequence();
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
+				return getEnterSequences();
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return getExitSequence();
 			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
@@ -948,8 +917,9 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)newValue);
 				return;
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)newValue);
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
+				getEnterSequences().clear();
+				getEnterSequences().addAll((Collection<? extends Sequence>)newValue);
 				return;
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
@@ -1015,8 +985,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)null);
 				return;
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)null);
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
+				getEnterSequences().clear();
 				return;
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
@@ -1073,8 +1043,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return subScopes != null && !subScopes.isEmpty();
 			case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE:
 				return superScope != null;
-			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
-				return enterSequence != null;
+			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES:
+				return enterSequences != null && !enterSequences.isEmpty();
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return exitSequence != null;
 			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
@@ -1125,7 +1095,7 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				case SexecPackage.EXECUTION_FLOW__STATE_VECTOR: return SexecPackage.EXECUTION_SCOPE__STATE_VECTOR;
 				case SexecPackage.EXECUTION_FLOW__SUB_SCOPES: return SexecPackage.EXECUTION_SCOPE__SUB_SCOPES;
 				case SexecPackage.EXECUTION_FLOW__SUPER_SCOPE: return SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE;
-				case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE;
+				case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES: return SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES;
 				case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE;
 				case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE;
 				default: return -1;
@@ -1166,7 +1136,7 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				case SexecPackage.EXECUTION_SCOPE__STATE_VECTOR: return SexecPackage.EXECUTION_FLOW__STATE_VECTOR;
 				case SexecPackage.EXECUTION_SCOPE__SUB_SCOPES: return SexecPackage.EXECUTION_FLOW__SUB_SCOPES;
 				case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE: return SexecPackage.EXECUTION_FLOW__SUPER_SCOPE;
-				case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE: return SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE;
+				case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES: return SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCES;
 				case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE: return SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE;
 				case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE: return SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE;
 				default: return -1;

+ 20 - 49
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionScopeImpl.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.base.BasePackage;
@@ -34,7 +35,7 @@ import org.yakindu.sct.model.sexec.StateVector;
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getStateVector <em>State Vector</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getSubScopes <em>Sub Scopes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getSuperScope <em>Super Scope</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getEnterSequence <em>Enter Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getEnterSequences <em>Enter Sequences</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getExitSequence <em>Exit Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getInitSequence <em>Init Sequence</em>}</li>
  * </ul>
@@ -94,14 +95,14 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 	protected ExecutionScope superScope;
 
 	/**
-	 * The cached value of the '{@link #getEnterSequence() <em>Enter Sequence</em>}' containment reference.
+	 * The cached value of the '{@link #getEnterSequences() <em>Enter Sequences</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getEnterSequence()
+	 * @see #getEnterSequences()
 	 * @generated
 	 * @ordered
 	 */
-	protected Sequence enterSequence;
+	protected EList<Sequence> enterSequences;
 
 	/**
 	 * The cached value of the '{@link #getExitSequence() <em>Exit Sequence</em>}' containment reference.
@@ -283,42 +284,11 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Sequence getEnterSequence() {
-		return enterSequence;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetEnterSequence(Sequence newEnterSequence, NotificationChain msgs) {
-		Sequence oldEnterSequence = enterSequence;
-		enterSequence = newEnterSequence;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE, oldEnterSequence, newEnterSequence);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
+	public EList<Sequence> getEnterSequences() {
+		if (enterSequences == null) {
+			enterSequences = new EObjectContainmentEList<Sequence>(Sequence.class, this, SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES);
 		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEnterSequence(Sequence newEnterSequence) {
-		if (newEnterSequence != enterSequence) {
-			NotificationChain msgs = null;
-			if (enterSequence != null)
-				msgs = ((InternalEObject)enterSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE, null, msgs);
-			if (newEnterSequence != null)
-				msgs = ((InternalEObject)newEnterSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE, null, msgs);
-			msgs = basicSetEnterSequence(newEnterSequence, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE, newEnterSequence, newEnterSequence));
+		return enterSequences;
 	}
 
 	/**
@@ -440,8 +410,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 				return ((InternalEList<?>)getSubScopes()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE:
 				return basicSetSuperScope(null, msgs);
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
-				return basicSetEnterSequence(null, msgs);
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
+				return ((InternalEList<?>)getEnterSequences()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
 			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
@@ -467,8 +437,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE:
 				if (resolve) return getSuperScope();
 				return basicGetSuperScope();
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
-				return getEnterSequence();
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
+				return getEnterSequences();
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return getExitSequence();
 			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
@@ -499,8 +469,9 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)newValue);
 				return;
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)newValue);
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
+				getEnterSequences().clear();
+				getEnterSequences().addAll((Collection<? extends Sequence>)newValue);
 				return;
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
@@ -532,8 +503,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)null);
 				return;
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)null);
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
+				getEnterSequences().clear();
 				return;
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
@@ -561,8 +532,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 				return subScopes != null && !subScopes.isEmpty();
 			case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE:
 				return superScope != null;
-			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
-				return enterSequence != null;
+			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES:
+				return enterSequences != null && !enterSequences.isEmpty();
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return exitSequence != null;
 			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:

+ 30 - 59
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionStateImpl.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.sct.model.sexec.ExecutionScope;
@@ -33,7 +34,7 @@ import org.yakindu.sct.model.sexec.Step;
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getStateVector <em>State Vector</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getSubScopes <em>Sub Scopes</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getSuperScope <em>Super Scope</em>}</li>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getEnterSequence <em>Enter Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getEnterSequences <em>Enter Sequences</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getExitSequence <em>Exit Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getInitSequence <em>Init Sequence</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#isLeaf <em>Leaf</em>}</li>
@@ -76,14 +77,14 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 	protected ExecutionScope superScope;
 
 	/**
-	 * The cached value of the '{@link #getEnterSequence() <em>Enter Sequence</em>}' containment reference.
+	 * The cached value of the '{@link #getEnterSequences() <em>Enter Sequences</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getEnterSequence()
+	 * @see #getEnterSequences()
 	 * @generated
 	 * @ordered
 	 */
-	protected Sequence enterSequence;
+	protected EList<Sequence> enterSequences;
 
 	/**
 	 * The cached value of the '{@link #getExitSequence() <em>Exit Sequence</em>}' containment reference.
@@ -279,6 +280,18 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__SUPER_SCOPE, newSuperScope, newSuperScope));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Sequence> getEnterSequences() {
+		if (enterSequences == null) {
+			enterSequences = new EObjectContainmentEList<Sequence>(Sequence.class, this, SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES);
+		}
+		return enterSequences;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -365,49 +378,6 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__EXIT_ACTION, newExitAction, newExitAction));
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Sequence getEnterSequence() {
-		return enterSequence;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetEnterSequence(Sequence newEnterSequence, NotificationChain msgs) {
-		Sequence oldEnterSequence = enterSequence;
-		enterSequence = newEnterSequence;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE, oldEnterSequence, newEnterSequence);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEnterSequence(Sequence newEnterSequence) {
-		if (newEnterSequence != enterSequence) {
-			NotificationChain msgs = null;
-			if (enterSequence != null)
-				msgs = ((InternalEObject)enterSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE, null, msgs);
-			if (newEnterSequence != null)
-				msgs = ((InternalEObject)newEnterSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE, null, msgs);
-			msgs = basicSetEnterSequence(newEnterSequence, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE, newEnterSequence, newEnterSequence));
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -548,8 +518,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				return ((InternalEList<?>)getSubScopes()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_STATE__SUPER_SCOPE:
 				return basicSetSuperScope(null, msgs);
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
-				return basicSetEnterSequence(null, msgs);
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
+				return ((InternalEList<?>)getEnterSequences()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
 			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
@@ -577,8 +547,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			case SexecPackage.EXECUTION_STATE__SUPER_SCOPE:
 				if (resolve) return getSuperScope();
 				return basicGetSuperScope();
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
-				return getEnterSequence();
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
+				return getEnterSequences();
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return getExitSequence();
 			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
@@ -612,8 +582,9 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			case SexecPackage.EXECUTION_STATE__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)newValue);
 				return;
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)newValue);
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
+				getEnterSequences().clear();
+				getEnterSequences().addAll((Collection<? extends Sequence>)newValue);
 				return;
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
@@ -651,8 +622,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			case SexecPackage.EXECUTION_STATE__SUPER_SCOPE:
 				setSuperScope((ExecutionScope)null);
 				return;
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
-				setEnterSequence((Sequence)null);
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
+				getEnterSequences().clear();
 				return;
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
@@ -687,8 +658,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				return subScopes != null && !subScopes.isEmpty();
 			case SexecPackage.EXECUTION_STATE__SUPER_SCOPE:
 				return superScope != null;
-			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
-				return enterSequence != null;
+			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES:
+				return enterSequences != null && !enterSequences.isEmpty();
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return exitSequence != null;
 			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
@@ -715,7 +686,7 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				case SexecPackage.EXECUTION_STATE__STATE_VECTOR: return SexecPackage.EXECUTION_SCOPE__STATE_VECTOR;
 				case SexecPackage.EXECUTION_STATE__SUB_SCOPES: return SexecPackage.EXECUTION_SCOPE__SUB_SCOPES;
 				case SexecPackage.EXECUTION_STATE__SUPER_SCOPE: return SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE;
-				case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE;
+				case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES: return SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES;
 				case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE;
 				case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE;
 				default: return -1;
@@ -736,7 +707,7 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				case SexecPackage.EXECUTION_SCOPE__STATE_VECTOR: return SexecPackage.EXECUTION_STATE__STATE_VECTOR;
 				case SexecPackage.EXECUTION_SCOPE__SUB_SCOPES: return SexecPackage.EXECUTION_STATE__SUB_SCOPES;
 				case SexecPackage.EXECUTION_SCOPE__SUPER_SCOPE: return SexecPackage.EXECUTION_STATE__SUPER_SCOPE;
-				case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE: return SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE;
+				case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCES: return SexecPackage.EXECUTION_STATE__ENTER_SEQUENCES;
 				case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE: return SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE;
 				case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE: return SexecPackage.EXECUTION_STATE__INIT_SEQUENCE;
 				default: return -1;

+ 3 - 3
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java

@@ -534,7 +534,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getExecutionScope_EnterSequence() {
+	public EReference getExecutionScope_EnterSequences() {
 		return (EReference)executionScopeEClass.getEStructuralFeatures().get(3);
 	}
 
@@ -1275,7 +1275,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__STATE_VECTOR);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__SUB_SCOPES);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__SUPER_SCOPE);
-		createEReference(executionScopeEClass, EXECUTION_SCOPE__ENTER_SEQUENCE);
+		createEReference(executionScopeEClass, EXECUTION_SCOPE__ENTER_SEQUENCES);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__EXIT_SEQUENCE);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__INIT_SEQUENCE);
 
@@ -1478,7 +1478,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEReference(getExecutionScope_StateVector(), this.getStateVector(), null, "stateVector", null, 0, 1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionScope_SubScopes(), this.getExecutionScope(), this.getExecutionScope_SuperScope(), "subScopes", null, 0, -1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionScope_SuperScope(), this.getExecutionScope(), this.getExecutionScope_SubScopes(), "superScope", null, 0, 1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getExecutionScope_EnterSequence(), this.getSequence(), null, "enterSequence", null, 0, 1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getExecutionScope_EnterSequences(), this.getSequence(), null, "enterSequences", null, 0, -1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionScope_ExitSequence(), this.getSequence(), null, "exitSequence", null, 0, 1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionScope_InitSequence(), this.getSequence(), null, "initSequence", null, 0, 1, ExecutionScope.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 

+ 39 - 20
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend

@@ -480,23 +480,39 @@ class BehaviorMapping {
 		val entryScope = entryScopes.head
 		
 		// determine all target vertices
-		val targets = transitions.map( t | t.target.mapped)
+		val List<TargetEntrySpec> targets = transitions.map( t | new TargetEntrySpec(t.target.mapped, t.entryPointName) )
 		
 		// recursively extend the sequence by entering the scope for the specified targets		
 		if (entryScope != null) entryScope.addEnterStepsForTargetsToSequence( targets, sequence)	
 		else {
-			for ( t : targets ) t.addEnterStepsForTargetsToSequence(targets, sequence)
+			for ( t : targets ) t.target.addEnterStepsForTargetsToSequence(targets, sequence)
  		}	
 	
 		return sequence
 	}
 	
 	
-
-	def dispatch void addEnterStepsForTargetsToSequence(ExecutionState it, List<ExecutionNode> targets, Sequence seq) {
-
-		if ( targets.contains(it) ) {
-			seq.steps.add( it.enterSequence.newCall )		
+
+	def Sequence enterSequence(TargetEntrySpec it) {
+		if(target instanceof ExecutionScope) {
+			return (target as ExecutionScope).enterSequence(entryPointName)
+		}
+		return null
+	}
+	
+	def Sequence enterSequence(ExecutionScope it, String name) {
+		var Sequence seq = enterSequences.byName(name)
+		if (seq == null) seq = enterSequences.defaultSequence
+
+		return seq
+	}
+	
+	def dispatch void addEnterStepsForTargetsToSequence(ExecutionState it, List<TargetEntrySpec> targets, Sequence seq) {
+		
+		val target = targets.findFirst( t | t.target == it)
+		
+		if ( target != null ) {
+			if (target.enterSequence != null) seq.steps += target.enterSequence.newCall		
 		}
 		else {
 			if ( it.entryAction != null ) seq.steps.add(it.entryAction.newCall)
@@ -510,23 +526,26 @@ class BehaviorMapping {
 	}
 
 
-	def dispatch void addEnterStepsForTargetsToSequence(ExecutionRegion it, List<ExecutionNode> targets, Sequence seq) {
-		
+	def dispatch void addEnterStepsForTargetsToSequence(ExecutionRegion it, List<TargetEntrySpec> targets, Sequence seq) {
+		
 		// if a target is a direct node
-		val target =  targets.filter( t | it.nodes.contains( t )).head 
+		val target =  targets.filter( t | it.nodes.contains( t.target )).head 
+
 		if (target != null) {
-			target.addEnterStepsForTargetsToSequence(targets, seq)
+			target.target.addEnterStepsForTargetsToSequence(targets, seq)
 			return
 		}
 		
-		// if the execution region contains targets 
-		if ( allNodes.exists( n | targets.contains(n) ) ) {
+		// if the execution region contains targets 
+		val List<ExecutionNode> targetNodes = targets.map(t | t.target)
+		if ( allNodes.exists( n | targetNodes.contains(n) ) ) {
 			for ( s : subScopes ) {
-				if ( s.allNodes.exists( n | targets.contains(n)))
+				if ( s.allNodes.exists( n | targetNodes.contains(n)))
 					s.addEnterStepsForTargetsToSequence(targets, seq)
 			}
-		} else {
-			seq.steps.add(it.enterSequence.newCall)
+		} else {
+			//in the case only sibling regions contain targets the region must be entered using the defaut enter sequence
+			seq.steps.add(it.enterSequences.defaultSequence.newCall)
 		}
 	}
 	
@@ -554,20 +573,20 @@ class BehaviorMapping {
 	}
 		
 	
-	def dispatch void addEnterStepsForTargetsToSequence(ExecutionChoice it, List<ExecutionNode> targets, Sequence seq) {
+	def dispatch void addEnterStepsForTargetsToSequence(ExecutionChoice it, List<TargetEntrySpec> targets, Sequence seq) {
 		seq.steps.add( reactSequence.newCall )	
 	}
 	
-	def dispatch void addEnterStepsForTargetsToSequence(ExecutionEntry it, List<ExecutionNode> targets, Sequence seq) {
+	def dispatch void addEnterStepsForTargetsToSequence(ExecutionEntry it, List<TargetEntrySpec> targets, Sequence seq) {
 		seq.steps.add( reactSequence.newCall )	
 	}
 	
-	def dispatch void addEnterStepsForTargetsToSequence(ExecutionSynchronization it, List<ExecutionNode> targets, Sequence seq) {
+	def dispatch void addEnterStepsForTargetsToSequence(ExecutionSynchronization it, List<TargetEntrySpec> targets, Sequence seq) {
 		seq.steps.add( reactSequence.newCall )	
 	}
 	
 	
-	
+		
 	
 	def List<ExecutionScope> entryScopes(Transition t) {
 		val l = t.target.containers

+ 2 - 2
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/FlowOptimizer.xtend

@@ -51,10 +51,10 @@ class FlowOptimizer {
 		
 		if (_inlineEntryActions)  flow.states.forEach( state | state.entryAction.inline )
 		if (_inlineExitActions)   flow.states.forEach( state | state.exitAction.inline )
-		if (_inlineEnterSequences) flow.states.forEach( state | state.enterSequence.inline )
+		if (_inlineEnterSequences) flow.states.forEach( state | state.enterSequences.forEach( s | s.inline ))
 		if (_inlineExitSequences)  flow.states.forEach( state | state.exitSequence.inline )
 		if (_inlineExitRegion) flow.eAllContents.filter(typeof(ExecutionRegion)).forEach( region | region.exitSequence.inline )
-		if (_inlineEnterRegion) flow.eAllContents.filter(typeof(ExecutionRegion)).forEach( region | region.enterSequence.inline )
+		if (_inlineEnterRegion) flow.eAllContents.filter(typeof(ExecutionRegion)).forEach( region | region.enterSequences.forEach( s | s.inline ))
 
 				
 		if (_inlineChoices) {

+ 1 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend

@@ -52,7 +52,7 @@ class ModelSequencer implements IModelSequencer {
 		sc.mapExitActions(ef)
 		
 		 
-		ef.defineStateEnterSequences(sc)
+		ef.defineEnterSequences(sc)
 		ef.defineStateExitSequences(sc)
 		ef.defineDeepEnterSequences(sc)
 		ef.defineShallowEnterSequences(sc)

+ 6 - 6
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.xtend

@@ -179,9 +179,9 @@ class ReactionBuilder {
 		if ( trace.addTraceSteps ) seq.steps.add(0,execEntry.newTraceNodeExecuted)
 		
 		if (e.kind == EntryKind::INITIAL) {
-			if (target != null && target.enterSequence != null) {
+			if (target != null && target.enterSequences.defaultSequence != null) {
 				if (trace.addTraceSteps) seq.steps += e.outgoingTransitions.get(0).create.newTraceReactionFired
-				seq.steps += target.enterSequence.newCall
+				seq.steps += target.enterSequences.defaultSequence.newCall
 			}
 		} else if (e.kind == EntryKind::SHALLOW_HISTORY) {
 			val entryStep = sexec.factory.createHistoryEntry
@@ -191,9 +191,9 @@ class ReactionBuilder {
 			entryStep.region = (e.eContainer as Region).create
 			
 			//Initial step, if no history is known
-			if (target != null && target.enterSequence != null) {
+			if (target != null && target.enterSequences.defaultSequence != null) {
 				if (trace.addTraceSteps) seq.steps += e.outgoingTransitions.get(0).create.newTraceReactionFired
-				entryStep.initialStep = target.enterSequence.newCall
+				entryStep.initialStep = target.enterSequences.defaultSequence.newCall
 			}
 			entryStep.historyStep = (e.eContainer as Region).create.shallowEnterSequence.newCall
 			
@@ -206,9 +206,9 @@ class ReactionBuilder {
 			entryStep.deep = true
 			
 			//Initial step, if no history is known
-			if (target != null && target.enterSequence != null) {
+			if (target != null && target.enterSequences.defaultSequence != null) {
 				if (trace.addTraceSteps) seq.steps += e.outgoingTransitions.get(0).create.newTraceReactionFired
-				entryStep.initialStep = target.enterSequence.newCall
+				entryStep.initialStep = target.enterSequences.defaultSequence.newCall
 			}
 			entryStep.historyStep =  (e.eContainer as Region).create.deepEnterSequence.newCall
 

+ 68 - 50
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend

@@ -14,8 +14,6 @@ import org.yakindu.sct.model.sgraph.State
 import org.yakindu.sct.model.sgraph.Statechart
 import org.yakindu.sct.model.sgraph.Vertex
 import org.yakindu.sct.model.sgraph.Statement
-
-import static extension org.eclipse.emf.ecore.util.EcoreUtil.*
 import org.yakindu.sct.model.stext.stext.VariableDefinition
 import org.yakindu.sct.model.stext.stext.AssignmentOperator
 import org.yakindu.sct.model.stext.stext.TimeEventSpec
@@ -30,6 +28,8 @@ import org.yakindu.sct.model.stext.stext.RealLiteral
 import org.yakindu.sct.model.stext.stext.StringLiteral
 import org.yakindu.sct.model.stext.types.ISTextTypeSystem
 
+import static extension org.eclipse.emf.ecore.util.EcoreUtil.*
+
 class SequenceBuilder {
 	
 	@Inject extension StatechartExtensions sc
@@ -45,6 +45,7 @@ class SequenceBuilder {
 	@Inject @Named("ADD_TRACES") 
 	boolean _addTraceSteps 
 	
+	static String DEFAULT_SEQUENCE_NAME = "default" 
 	
 	def void defineDeepEnterSequences(ExecutionFlow flow, Statechart sc) {
 		for ( r : sc.regions) {
@@ -86,10 +87,10 @@ class SequenceBuilder {
 			for (childLeaf : child.collectLeafStates(newArrayList).filter(c|c.create.stateVector.offset == sSwitch.stateConfigurationIdx)) {
 				val execChild = child.create
 				val seq = sexec.factory.createSequence
-				seq.name = "enterSequence"
+				seq.name = DEFAULT_SEQUENCE_NAME
 				seq.comment = "enterSequence with history in child " + child.name+" for leaf "+childLeaf.name
 				if ( execChild.leaf ) {
-					seq.steps += execChild.enterSequence.newCall
+					seq.steps += execChild.enterSequences.defaultSequence.newCall
 				} else {
 					if (execChild.entryAction != null ) seq.steps += execChild.entryAction.newCall
 					if ( trace.addTraceSteps ) seq.steps += execChild.newTraceStateEntered
@@ -131,7 +132,7 @@ class SequenceBuilder {
 			val execChild = child.create
 			//TODO consider direct children
 			for (childLeaf : child.collectLeafStates(newArrayList).filter(c|c.create.stateVector.offset == sSwitch.stateConfigurationIdx)) {
-				sSwitch.cases += childLeaf.create.newCase(execChild.enterSequence.newCall)
+				sSwitch.cases += childLeaf.create.newCase(execChild.enterSequences.defaultSequence.newCall)
 			}
 		}
 		
@@ -141,78 +142,95 @@ class SequenceBuilder {
 	/**
 	 * Defines the enter sequences of all states
 	 */
-	def void defineStateEnterSequences(ExecutionFlow flow, Statechart sc) {
+	def void defineEnterSequences(ExecutionFlow flow, Statechart sc) {
 		
 		// iterate over all regions
-		for ( r : sc.regions) defineStateEnterSequence(r)
+		for ( r : sc.regions) defineScopeEnterSequences(r)
 	}
 	
 
-	def dispatch void defineStateEnterSequence(Region r) {
-		val execState = r.create
-		val seq = sexec.factory.createSequence
-		seq.name = "enterSequence"
-		seq.comment = "Default enter sequence for region " + r.name
-
+	def dispatch void defineScopeEnterSequences(Region r) {
+		val execRegion = r.create
+		
 		// process all vertices of a region
-		for ( s : r.vertices) defineStateEnterSequence(s)
-
-		val entryNode = r.entry?.create
-		if (entryNode != null && entryNode.reactSequence != null) {
-			seq.steps.add(entryNode.reactSequence.newCall);
+		for ( s : r.vertices) defineScopeEnterSequences(s)
+		
+		// create an enter sequence for each contained entry
+		for ( e : r.collectEntries ) {
+			val seq = sexec.factory.createSequence
+			seq.name =	if (e.name == null || e.name.trim == "") 
+							DEFAULT_SEQUENCE_NAME
+						else 
+							e.name
+			seq.comment = "'" + seq.name + "' enter sequence for region " + r.name
+	
+			val entryNode = e.create
+			if (entryNode != null && entryNode.reactSequence != null) {
+				seq.steps.add(entryNode.reactSequence.newCall);
+			}
+			
+			execRegion.enterSequences += seq
 		}
-// Was before
-//		val entryState = r.entry?.target?.create
-//		if (entryState != null && entryState.enterSequence != null) 
-//				seq.steps.add(entryState.enterSequence.newCall);
-		execState.enterSequence = seq
 	}
 
-	def dispatch void defineStateEnterSequence(Vertex v) {}	
+	def dispatch void defineScopeEnterSequences(Vertex v) {}	
 	
 	
-	def dispatch void defineStateEnterSequence(FinalState state) {
+	def dispatch void defineScopeEnterSequences(FinalState state) {
 		val execState = state.create
 		val seq = sexec.factory.createSequence
-		seq.name = "enterSequence"
+		seq.name = DEFAULT_SEQUENCE_NAME
 		seq.comment = "Default enter sequence for state " + state.name
 		if (execState.entryAction != null) seq.steps.add(execState.entryAction.newCall)
 		
 		if ( _addTraceSteps ) seq.steps += execState.newTraceStateEntered
 		
 		seq.steps += execState.newEnterStateStep
-		execState.enterSequence = seq
+		execState.enterSequences += seq
 	}	
 	
 	
 	
-	def dispatch void defineStateEnterSequence(State state) {
+	def dispatch void defineScopeEnterSequences(State state) {
 		
 		val execState = state.create
-		val seq = sexec.factory.createSequence
-		seq.name = "enterSequence"
-		seq.comment = "Default enter sequence for state " + state.name
-		if (execState.entryAction != null) seq.steps.add(execState.entryAction.newCall)
 		
-		if ( _addTraceSteps ) seq.steps += execState.newTraceStateEntered
+		// first creates enter sequences for all contained regions
+		state.regions.forEach( r | r.defineScopeEnterSequences )
 		
-		if ( execState.leaf ) {
+		// get all entry point names used by incoming transitions
+		val entryPointNames = state.incomingTransitions.map( t | t.entryPointName ).toSet.toList.sortInplace
+		
+		// create an entry sequence for each entry point
+		for ( epName : entryPointNames ) {
+			val seq = sexec.factory.createSequence
+			seq.name = epName
+			seq.comment = "'" + epName + "' enter sequence for state " + state.name
+			if (execState.entryAction != null) seq.steps.add(execState.entryAction.newCall)
 			
-			seq.steps += execState.newEnterStateStep
+			if ( _addTraceSteps ) seq.steps += execState.newTraceStateEntered
+			
+			if ( execState.leaf ) {
+				
+				seq.steps += execState.newEnterStateStep
+						
+			} else {
+		
+				for ( r : state.regions ) {	
+					val execRegion = r.create
+					var regionEnterSeq = execRegion.enterSequences.byName(epName)
 					
-		} else {
+					if (regionEnterSeq == null) { regionEnterSeq = execRegion.enterSequences.defaultSequence }
+					
+					if (regionEnterSeq != null) {
+						seq.steps += regionEnterSeq.newCall
+					}
+				} 
+			}
 	
-			for ( r : state.regions ) {
-				defineStateEnterSequence(r)
-
-				val execRegion = r.create
-				if (execRegion.enterSequence != null) {
-					seq.steps.add(execRegion.enterSequence.newCall)
-				}
-			} 
+			execState.enterSequences += seq
 		}
-
-		execState.enterSequence = seq
+		
 	}
 
 	/**
@@ -374,7 +392,7 @@ class SequenceBuilder {
 	def defineStatechartEnterSequence(ExecutionFlow flow, Statechart sc) {
 
 		val enterSequence = sexec.factory.createSequence
-		enterSequence.name = "enter"
+		enterSequence.name = DEFAULT_SEQUENCE_NAME
 		enterSequence.comment = "Default enter sequence for statechart " + sc.name
 	    	
 		for (tes : sc.timeEventSpecs ) {
@@ -387,12 +405,12 @@ class SequenceBuilder {
 		
 		for ( r : sc.regions) {
 			val execRegion = r.create
-			if (execRegion.enterSequence != null) {
-				enterSequence.steps.add(execRegion.enterSequence.newCall)
+			if (execRegion.enterSequences.defaultSequence != null) {
+				enterSequence.steps.add(execRegion.enterSequences.defaultSequence.newCall)
 			}
 		} 
 		
-		flow.enterSequence = enterSequence
+		flow.enterSequences += enterSequence
 		return enterSequence
 	}
 	

+ 25 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecExtensions.xtend

@@ -9,10 +9,14 @@ import org.yakindu.sct.model.sexec.ExitState
 import org.yakindu.sct.model.sexec.SexecFactory
 import org.yakindu.sct.model.sexec.StateVector
 import org.yakindu.sct.model.sexec.Step
+import org.yakindu.sct.model.sexec.Sequence
 
 
 class SexecExtensions {
 	
+	
+	static String DEFAULT_SEQUENCE_NAME = "default" 
+	
 	def factory() { SexecFactory::eINSTANCE }
 	
 	
@@ -104,4 +108,25 @@ class SexecExtensions {
 		}
 		return leafs
 	}
+	
+	
+	
+		
+	/**
+	 * Returns a step that mathes the given name.
+	 */
+	def Sequence byName(List<Sequence>steps, String name) {
+		steps.filter(s | name.trim == s.name.trim ).head
+	}
+
+	/**
+	 * Returns the default step that is the step without name or the name 'default'.
+	 */
+	def Sequence defaultSequence(List<Sequence>steps) {
+		steps.findFirst(s | s.name == null || s.name.trim == "" ||  s.name.trim == DEFAULT_SEQUENCE_NAME )
+	}
+	
+	
+	
+	 
 }

+ 12 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SgraphExtensions.xtend

@@ -10,6 +10,8 @@ import java.util.List
 import org.eclipse.emf.ecore.EObject
 import java.util.ArrayList
 import org.yakindu.sct.model.sgraph.EntryKind
+import org.yakindu.sct.model.sgraph.Transition
+import org.yakindu.sct.model.stext.stext.EntryPointSpec
 
 
 class SgraphExtensions {
@@ -52,6 +54,16 @@ class SgraphExtensions {
 		r.vertices.findFirst(v | v instanceof Entry && (v.name == null || "".equals(v.name) || v.name == 'default') ) as Entry
 	}
 	
+	
+	/**
+	 * Returns the name of the specified entry point or 'default' if it does not exist
+	 */
+	def String entryPointName(Transition t) {
+		val eps = t.properties.filter(typeof(EntryPointSpec)).head
+		
+		if (eps == null) 'default' else eps.entrypoint	
+	}
+	
 	/**
 	 * Retrieves the target from an entry.
 	 * TODO: validation of preconditions for entry targets e.g every region needs an entry with appropriate target

+ 10 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/TargetEntrySpec.xtend

@@ -0,0 +1,10 @@
+package org.yakindu.sct.model.sexec.transformation
+
+import org.yakindu.sct.model.sexec.ExecutionNode
+
+@Data class TargetEntrySpec {
+	
+	ExecutionNode target
+	String entryPointName
+	
+}

+ 105 - 105
plugins/org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore

@@ -1,105 +1,105 @@
-<?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="sgraph" nsURI="http://www.yakindu.org/sct/sgraph/2.0.0" nsPrefix="sgraph">
-  <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Pseudostate" abstract="true" eSuperTypes="#//Vertex"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Vertex" abstract="true" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parentRegion" ordered="false"
-        lowerBound="1" eType="#//Region" eOpposite="#//Region/vertices"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="incomingTransitions" ordered="false"
-        upperBound="-1" eType="#//Transition" eOpposite="#//Transition/target"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="outgoingTransitions" ordered="false"
-        upperBound="-1" eType="#//Transition" containment="true" eOpposite="#//Transition/source"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="vertices" ordered="false"
-        upperBound="-1" eType="#//Vertex" containment="true" eOpposite="#//Vertex/parentRegion"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="composite" lowerBound="1"
-        eType="#//CompositeElement" eOpposite="#//CompositeElement/regions"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//SpecificationElement #//Reaction ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="target" ordered="false"
-        lowerBound="1" eType="#//Vertex" eOpposite="#//Vertex/incomingTransitions"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="source" ordered="false"
-        lowerBound="1" eType="#//Vertex" eOpposite="#//Vertex/outgoingTransitions"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//RegularState"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Variable" abstract="true" eSuperTypes="#//Declaration"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Event" abstract="true" eSuperTypes="#//Declaration"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Choice" eSuperTypes="#//Pseudostate">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ChoiceKind"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Statechart" eSuperTypes="#//SpecificationElement #//ReactiveElement #//ScopedElement #//CompositeElement ../../../org.yakindu.base.types/model/base.ecore#//NamedElement ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Entry" eSuperTypes="#//Pseudostate">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//EntryKind"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="EntryKind">
-    <eLiterals name="initial" literal="INITIAL"/>
-    <eLiterals name="shallowHistory" value="1" literal="SHALLOW_HISTORY"/>
-    <eLiterals name="deepHistory" value="2" literal="DEEP_HISTORY"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Exit" eSuperTypes="#//Pseudostate"/>
-  <eClassifiers xsi:type="ecore:EClass" name="ReactiveElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="reactions" upperBound="-1"
-        eType="#//Reaction" changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="localReactions" upperBound="-1"
-        eType="#//Reaction" changeable="false" volatile="true" transient="true" derived="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Reaction" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="trigger" eType="#//Trigger"
-        transient="true" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="effect" eType="#//Effect"
-        transient="true" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
-        eType="#//ReactionProperty" transient="true" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Trigger" abstract="true"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Effect" abstract="true"/>
-  <eClassifiers xsi:type="ecore:EClass" name="ReactionProperty"/>
-  <eClassifiers xsi:type="ecore:EClass" name="SpecificationElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Declaration" abstract="true" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Scope">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="declarations" upperBound="-1"
-        eType="#//Declaration" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="events" upperBound="-1"
-        eType="#//Event" changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="variables" unique="false"
-        upperBound="-1" eType="#//Variable" changeable="false" volatile="true" transient="true"
-        derived="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ScopedElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="scopes" upperBound="-1"
-        eType="#//Scope" transient="true" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Synchronization" eSuperTypes="#//Pseudostate"/>
-  <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//SpecificationElement #//ReactiveElement #//ScopedElement #//RegularState #//CompositeElement ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="orthogonal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="substatechart" eType="#//Statechart"
-        transient="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="substatechartId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subchart" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="simple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="composite" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="leaf" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Statement"/>
-  <eClassifiers xsi:type="ecore:EClass" name="RegularState" eSuperTypes="#//Vertex"/>
-  <eClassifiers xsi:type="ecore:EEnum" name="ChoiceKind">
-    <eLiterals name="dynamic"/>
-    <eLiterals name="static" value="1"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="CompositeElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="regions" upperBound="-1"
-        eType="#//Region" containment="true" eOpposite="#//Region/composite"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?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="sgraph" nsURI="http://www.yakindu.org/sct/sgraph/2.0.0" nsPrefix="sgraph">
+  <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Pseudostate" abstract="true" eSuperTypes="#//Vertex"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Vertex" abstract="true" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parentRegion" ordered="false"
+        lowerBound="1" eType="#//Region" eOpposite="#//Region/vertices"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="incomingTransitions" ordered="false"
+        upperBound="-1" eType="#//Transition" eOpposite="#//Transition/target"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="outgoingTransitions" ordered="false"
+        upperBound="-1" eType="#//Transition" containment="true" eOpposite="#//Transition/source"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="vertices" ordered="false"
+        upperBound="-1" eType="#//Vertex" containment="true" eOpposite="#//Vertex/parentRegion"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="composite" lowerBound="1"
+        eType="#//CompositeElement" eOpposite="#//CompositeElement/regions"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//SpecificationElement #//Reaction ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" ordered="false"
+        lowerBound="1" eType="#//Vertex" eOpposite="#//Vertex/incomingTransitions"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" ordered="false"
+        lowerBound="1" eType="#//Vertex" eOpposite="#//Vertex/outgoingTransitions"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//RegularState"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Variable" abstract="true" eSuperTypes="#//Declaration"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Event" abstract="true" eSuperTypes="#//Declaration"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Choice" eSuperTypes="#//Pseudostate">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ChoiceKind"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Statechart" eSuperTypes="#//SpecificationElement #//ReactiveElement #//ScopedElement #//CompositeElement ../../../org.yakindu.base.types/model/base.ecore#//NamedElement ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Entry" eSuperTypes="#//Pseudostate">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//EntryKind"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="EntryKind">
+    <eLiterals name="initial" literal="INITIAL"/>
+    <eLiterals name="shallowHistory" value="1" literal="SHALLOW_HISTORY"/>
+    <eLiterals name="deepHistory" value="2" literal="DEEP_HISTORY"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Exit" eSuperTypes="#//Pseudostate"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ReactiveElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reactions" upperBound="-1"
+        eType="#//Reaction" changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="localReactions" upperBound="-1"
+        eType="#//Reaction" changeable="false" volatile="true" transient="true" derived="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Reaction" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="trigger" eType="#//Trigger"
+        transient="true" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="effect" eType="#//Effect"
+        transient="true" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
+        eType="#//ReactionProperty" transient="true" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Trigger" abstract="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Effect" abstract="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ReactionProperty"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificationElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="specification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Declaration" abstract="true" eSuperTypes="../../../org.yakindu.base.types/model/base.ecore#//NamedElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Scope">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declarations" upperBound="-1"
+        eType="#//Declaration" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="events" upperBound="-1"
+        eType="#//Event" changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variables" unique="false"
+        upperBound="-1" eType="#//Variable" changeable="false" volatile="true" transient="true"
+        derived="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ScopedElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="scopes" upperBound="-1"
+        eType="#//Scope" transient="true" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespace" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Synchronization" eSuperTypes="#//Pseudostate"/>
+  <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//SpecificationElement #//ReactiveElement #//ScopedElement #//RegularState #//CompositeElement ../../../org.yakindu.base.types/model/base.ecore#//DocumentedElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="orthogonal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="substatechart" eType="#//Statechart"
+        transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="substatechartId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subchart" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="simple" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="composite" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="leaf" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Statement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RegularState" eSuperTypes="#//Vertex"/>
+  <eClassifiers xsi:type="ecore:EEnum" name="ChoiceKind">
+    <eLiterals name="dynamic"/>
+    <eLiterals name="static" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CompositeElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="regions" upperBound="-1"
+        eType="#//Region" containment="true" eOpposite="#//Region/composite"/>
+  </eClassifiers>
+</ecore:EPackage>

+ 4 - 4
plugins/org.yakindu.sct.ui.editor/plugin.xml

@@ -356,10 +356,10 @@
                    small_icon="icons/obj16/Region-16.png">
              </entry>
              <entry
-                   description="Creates an initial state"
+                   description="Creates an initial entry node"
                    id="org.yakindu.sct.ui.editor.Entry"
                    kind="tool"
-                   label="Initial State"
+                   label="Initial entry node"
                    large_icon="icons/obj32/Initial-State-32.png"
                    path="/tools/"
                    small_icon="icons/obj16/Initial-State-16.png">
@@ -392,10 +392,10 @@
                    small_icon="icons/obj16/Final-State-16.png">
              </entry>
              <entry
-                   description="Creates an exit point"
+                   description="Creates an exit node"
                    id="org.yakindu.sct.ui.editor.Exit"
                    kind="tool"
-                   label="Exit Point"
+                   label="Exit Node"
                    large_icon="icons/obj32/Exit-Point-32.png"
                    path="/tools/"
                    small_icon="icons/obj16/Exit-Point-16.png">

+ 0 - 1
test-plugins/org.yakindu.sct.generator.genmodel.test/META-INF/MANIFEST.MF

@@ -10,7 +10,6 @@ Require-Bundle: org.eclipse.xtext.junit4;bundle-version="2.0.1",
  org.yakindu.sct.generator.genmodel.ui;bundle-version="1.0.0",
  org.yakindu.sct.generator.java;bundle-version="1.0.0",
  org.yakindu.sct.generator.c;bundle-version="1.0.0",
- org.yakindu.sct.generator.cpp;bundle-version="1.0.0",
  org.yakindu.sct.doc.user;bundle-version="1.0.0",
  de.itemis.xtext.utils.jface;bundle-version="1.0.0",
  org.eclipse.ui;bundle-version="3.7.0",

+ 10 - 10
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/HistoryTest.java

@@ -172,15 +172,15 @@ public class HistoryTest extends ModelSequencerTest {
 
 		assertedOrder(reactSequence, Sets.newHashSet(_s3), Lists.newArrayList(//
 				new StepHistory(historyEntry, false), //
-				new StepLeaf(_s3.getEnterSequence()) //
+				new StepLeaf(_s3.getEnterSequences().get(0)) //
 				));
 		assertedOrder(reactSequence, Sets.newHashSet(_s3), Lists.newArrayList(//
 				new StepHistory(historyEntry, true), //
-				new StepLeaf(_s3.getEnterSequence()) //
+				new StepLeaf(_s3.getEnterSequences().get(0)) //
 				));
 		assertedOrder(reactSequence, Sets.newHashSet(_s5), Lists.newArrayList(//
 				new StepHistory(historyEntry, true), //
-				new StepLeaf(_s4.getEnterSequence()) //
+				new StepLeaf(_s4.getEnterSequences().get(0)) //
 				));
 	}
 
@@ -251,16 +251,16 @@ public class HistoryTest extends ModelSequencerTest {
 
 		assertedOrder(reactSequence, Sets.newHashSet(_s3), Lists.newArrayList(//
 				new StepHistory(historyEntry, false), //
-				new StepLeaf(_s3.getEnterSequence()) //
+				new StepLeaf(_s3.getEnterSequences().get(0)) //
 				));
 		assertedOrder(reactSequence, Sets.newHashSet(_s3), Lists.newArrayList(//
 				new StepHistory(historyEntry, true), //
-				new StepLeaf(_s3.getEnterSequence()) //
+				new StepLeaf(_s3.getEnterSequences().get(0)) //
 				));
 		assertedOrder(reactSequence, Sets.newHashSet(_s5), Lists.newArrayList(//
 				new StepHistory(historyEntry, true), //
 				new StepLeaf(_s4.getEntryAction()),//
-				new StepLeaf(_s5.getEnterSequence()) //
+				new StepLeaf(_s5.getEnterSequences().get(0)) //
 				));
 		// assertCall(assertedSequence(tr0.getEffect()), 0,
 		// _s2.getEnterSequence());
@@ -328,14 +328,14 @@ public class HistoryTest extends ModelSequencerTest {
 				historyEntryStep instanceof HistoryEntry);
 
 		HistoryEntry historyEntry = (HistoryEntry) historyEntryStep;
-		assertCall(historyEntry.getInitialStep(), _s3.getEnterSequence());
+		assertCall(historyEntry.getInitialStep(), _s3.getEnterSequences().get(0));
 		ExecutionRegion _r2 = (ExecutionRegion) _s3.getSuperScope();
 		assertCall(historyEntry.getHistoryStep(), _r2.getDeepEnterSequence());
 
 		Step _s3EnterStep = assertedStateCase(
 				_r2.getDeepEnterSequence().getSteps().get(0), _s3).getStep();
 		Step _s3EnterCall = assertedSequence(_s3EnterStep).getSteps().get(0);
-		assertCall(_s3EnterCall, _s3.getEnterSequence());
+		assertCall(_s3EnterCall, _s3.getEnterSequences().get(0));
 	}
 
 	@Test
@@ -378,10 +378,10 @@ public class HistoryTest extends ModelSequencerTest {
 		ExecutionFlow flow = sequencer.transform(sc);
 		ExecutionState _s1 = flow.getStates().get(0);
 		assertEquals("sc.r.s1", _s1.getName());
-		Sequence enterSequence = flow.getEnterSequence();
+		Sequence enterSequence = flow.getEnterSequences().get(0);
 		ExecutionRegion _r = (ExecutionRegion) _s1.getSuperScope();
 
 		assertCall(enterSequence, 0, flow.getEntryAction());
-		assertCall(enterSequence, 1, _r.getEnterSequence());
+		assertCall(enterSequence, 1, _r.getEnterSequences().get(0));
 	}
 }

+ 1 - 1
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/LocalReactionTest.java

@@ -105,7 +105,7 @@ public class LocalReactionTest extends ModelSequencerTest {
 
 		assertCall(_effect, 0, _s1.getExitSequence());
 		assertCall(_effect, 1, _s2.getEntryAction());
-		assertCall(_effect, 2, _s6.getEnterSequence());
+		assertCall(_effect, 2, _s6.getEnterSequences().get(0));
 		assertEquals(3, _effect.getSteps().size());
 
 		List<Step> steps = flattenSequenceStepsAsList(_s3.getReactSequence());

+ 5 - 5
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerHierarchyTest.java

@@ -99,7 +99,7 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 		Sequence _effect = (Sequence) _t.getEffect();
 		assertEquals(4, _effect.getSteps().size());
 
-		assertCall(_effect, 3, _s4.getEnterSequence());
+		assertCall(_effect, 3, _s4.getEnterSequences().get(0));
 		assertCall(_effect, 2, _s3.getEntryAction());
 		assertCall(_effect, 1, _s1.getEntryAction());
 
@@ -178,7 +178,7 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 		Sequence _effect = (Sequence) _t.getEffect();
 		assertEquals(3, _effect.getSteps().size());
 
-		assertCall(_effect, 2, _s4.getEnterSequence());
+		assertCall(_effect, 2, _s4.getEnterSequences().get(0));
 		assertCall(_effect, 1, _s1.getEntryAction());
 	}
 
@@ -253,7 +253,7 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 		Sequence _effect = (Sequence) _t.getEffect();
 		assertEquals(2, _effect.getSteps().size());
 
-		assertCall(_effect, 1, _s4.getEnterSequence());
+		assertCall(_effect, 1, _s4.getEnterSequences().get(0));
 	}
 
 	/**
@@ -328,7 +328,7 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 		assertEquals(2, _effect.getSteps().size());
 
 		assertCall(_effect, 0, _s1.getExitSequence());
-		assertCall(_effect, 1, _s6.getEnterSequence());
+		assertCall(_effect, 1, _s6.getEnterSequences().get(0));
 
 		assertCall(_s1.getExitSequence(), 0, _s1.getSubScopes().get(0)
 				.getExitSequence());
@@ -527,7 +527,7 @@ public class ModelSequencerHierarchyTest extends ModelSequencerTest {
 		assertEquals(2, _effect.getSteps().size());
 
 		assertCall(_effect, 0, _s1.getExitSequence());
-		assertCall(_effect, 1, _s1.getEnterSequence());
+		assertCall(_effect, 1, _s1.getEnterSequences().get(0));
 	}
 
 }

+ 5 - 5
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerHistoryTest.java

@@ -91,19 +91,19 @@ public class ModelSequencerHistoryTest extends ModelSequencerTest {
 		HistoryEntry historyStep = (HistoryEntry) reactSequence_history
 				.getSteps().get(0);
 		assertFalse(historyStep.isDeep());
-		assertCall(historyStep.getInitialStep(), _s3.getEnterSequence());
+		assertCall(historyStep.getInitialStep(), _s3.getEnterSequences().get(0));
 		Reaction reaction_history = _t1.get(0);
 		assertCall(assertedSequence(reaction_history.getEffect()), 1,
 				reactSequence_history);
 
 		Sequence reactSequence_initial = flow.getNodes().get(2)
 				.getReactSequence();
-		assertCall(reactSequence_initial, 0, _s4.getEnterSequence());
+		assertCall(reactSequence_initial, 0, _s4.getEnterSequences().get(0));
 		Reaction reaction = _t1.get(1);
 		assertCall(assertedSequence(reaction.getEffect()), 1,
-				_s2.getEnterSequence());
+				_s2.getEnterSequences().get(0));
 
-		assertCall(_s3.getSuperScope().getEnterSequence(), 0,
+		assertCall(_s3.getSuperScope().getEnterSequences().get(0), 0,
 				r2_history_entry.getReactSequence());
 
 		Step saveStep = _s3.getSuperScope().getExitSequence().getSteps().get(0);
@@ -176,7 +176,7 @@ public class ModelSequencerHistoryTest extends ModelSequencerTest {
 				new StepSaveHistory((ExecutionRegion) _s4.getSuperScope()),//
 				new StepSaveHistory((ExecutionRegion) _s5.getSuperScope()),//
 				new StepLeaf(_s5.getExitSequence().getSteps().get(0)),//
-				new StepLeaf(_s1.getEnterSequence().getSteps().get(0))//
+				new StepLeaf(_s1.getEnterSequences().get(0).getSteps().get(0))//
 				));
 	}
 

+ 37 - 37
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerOrthogonalityTest.java

@@ -77,14 +77,14 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 		ExecutionState _s1 = flow.getStates().get(0);
 		assertEquals("sc.r.s1", _s1.getName());
 
-		Sequence s1EnterSeq = _s1.getEnterSequence();
+		Sequence s1EnterSeq = _s1.getEnterSequences().get(0);
 		assertNotNull(s1EnterSeq);
 		assertEquals(2, s1EnterSeq.getSteps().size());
 
 		assertCall(s1EnterSeq, 0, flow.getStates().get(1).getSuperScope()
-				.getEnterSequence());
+				.getEnterSequences().get(0));
 		assertCall(s1EnterSeq, 1, flow.getStates().get(2).getSuperScope()
-				.getEnterSequence());
+				.getEnterSequences().get(0));
 
 	}
 
@@ -157,12 +157,12 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 				.getSteps().size());
 
 		assertCall(_effect, 0, _s5.getExitSequence());
-		assertCall(_effect, 1, _s2.getSuperScope().getEnterSequence());
-		assertCall(_s2.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 1, _s2.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s2.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(1).getReactSequence());
-		assertCall(_effect, 2, _s3.getEnterSequence());
-		assertCall(_effect, 3, _s4.getSuperScope().getEnterSequence());
-		assertCall(_s4.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 2, _s3.getEnterSequences().get(0));
+		assertCall(_effect, 3, _s4.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s4.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(3).getReactSequence());
 	}
 
@@ -266,19 +266,19 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 				.getSteps().size());
 
 		assertCall(_effect, 0, _s5.getExitSequence());
-		assertCall(_effect, 1, _s2.getSuperScope().getEnterSequence());
-		assertCall(_s2.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 1, _s2.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s2.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(1).getReactSequence());
 		assertCall(_effect, 2, _s3.getEntryAction());
-		assertCall(_effect, 3, _s3a.getSuperScope().getEnterSequence());
-		assertCall(_s3a.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 3, _s3a.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s3a.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(3).getReactSequence());
-		assertCall(_effect, 4, _s3b.getEnterSequence());
-		assertCall(_effect, 5, _s3c.getSuperScope().getEnterSequence());
-		assertCall(_s3c.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 4, _s3b.getEnterSequences().get(0));
+		assertCall(_effect, 5, _s3c.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s3c.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(5).getReactSequence());
-		assertCall(_effect, 6, _s4.getSuperScope().getEnterSequence());
-		assertCall(_s4.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 6, _s4.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s4.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(6).getReactSequence());
 	}
 
@@ -384,7 +384,7 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 		assertEquals(2, _effect.getSteps().size());
 
 		assertCall(_effect, 0, _s3b.getExitSequence());
-		assertCall(_effect, 1, _s3b2.getEnterSequence());
+		assertCall(_effect, 1, _s3b2.getEnterSequences().get(0));
 	}
 
 	/**
@@ -495,20 +495,20 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 
 		assertCall(_effect, 0, _s3z.getExitSequence());
 		assertCall(_effect, 1, _s3.getEntryAction());
-		assertCall(_effect, 2, _s3a.getSuperScope().getEnterSequence());
-		assertCall(_s3a.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_effect, 2, _s3a.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s3a.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(3).getReactSequence());
 		assertCall(flow.getNodes().get(3).getReactSequence(), 0,
-				_s3a.getEnterSequence());
-		assertCall(_effect, 3, _s3b2.getEnterSequence());
-		assertCall(_effect, 4, _s3c.getSuperScope().getEnterSequence());
-		assertCall(_s3c.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+				_s3a.getEnterSequences().get(0));
+		assertCall(_effect, 3, _s3b2.getEnterSequences().get(0));
+		assertCall(_effect, 4, _s3c.getSuperScope().getEnterSequences().get(0));
+		assertCall(_s3c.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(5).getReactSequence());
 		assertCall(flow.getNodes().get(5).getReactSequence(), 0,
-				_s3c.getEnterSequence());
-		assertTrue(_s3c.getEnterSequence().getSteps().get(0).getClass()
+				_s3c.getEnterSequences().get(0));
+		assertTrue(_s3c.getEnterSequences().get(0).getSteps().get(0).getClass()
 				.getSimpleName(),
-				_s3c.getEnterSequence().getSteps().get(0) instanceof EnterState);
+				_s3c.getEnterSequences().get(0).getSteps().get(0) instanceof EnterState);
 	}
 
 	/*
@@ -600,7 +600,7 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 						new StepLeaf(_s3.getExitSequence()),
 						new StepLeaf(_s4b.getExitSequence())));
 
-		assertCall(_effect, 1, _s5.getEnterSequence());
+		assertCall(_effect, 1, _s5.getEnterSequences().get(0));
 	}
 
 	/**
@@ -733,7 +733,7 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 		// _s4).getStep()),
 		// 0, _s4.getExitSequence());
 
-		assertCall(_effect, 1, _s5.getEnterSequence());
+		assertCall(_effect, 1, _s5.getEnterSequences().get(0));
 	}
 
 	/**
@@ -846,9 +846,9 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 				Lists.newArrayList(new StepLeaf(_s3a.getExitSequence()),
 						new StepLeaf(_s3b2.getExitSequence()), new StepLeaf(
 								_s3c.getExitSequence()),
-						new StepLeaf(_s3z.getEnterSequence())));
+						new StepLeaf(_s3z.getEnterSequences().get(0))));
 
-		assertCall(_effect, 1, _s3z.getEnterSequence());
+		assertCall(_effect, 1, _s3z.getEnterSequences().get(0));
 
 	}
 
@@ -1247,9 +1247,9 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 						new StepLeaf(_s2a2a.getExitAction()), //
 						new StepLeaf(_s2a.getExitAction()), //
 						new StepLeaf(_s.getExitAction()), //
-						new StepLeaf(_b.getEnterSequence())));
+						new StepLeaf(_b.getEnterSequences().get(0))));
 
-		assertCall(_exit, 1, _b.getEnterSequence());
+		assertCall(_exit, 1, _b.getEnterSequences().get(0));
 
 	}
 
@@ -1320,9 +1320,9 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 						new StepLeaf(_s2a2a.getExitAction()), //
 						new StepLeaf(_s2a.getExitAction()), //
 						new StepLeaf(_s.getExitAction()), //
-						new StepLeaf(_b.getEnterSequence())));
+						new StepLeaf(_b.getEnterSequences().get(0))));
 
-		assertCall(_exit, 1, _b.getEnterSequence());
+		assertCall(_exit, 1, _b.getEnterSequences().get(0));
 
 	}
 
@@ -1393,9 +1393,9 @@ public class ModelSequencerOrthogonalityTest extends ModelSequencerTest {
 						new StepLeaf(_s2a2a.getExitAction()), //
 						new StepLeaf(_s2a.getExitAction()), //
 						new StepLeaf(_s.getExitAction()), //
-						new StepLeaf(_b.getEnterSequence())));
+						new StepLeaf(_b.getEnterSequences().get(0))));
 
-		assertCall(_exit, 1, _b.getEnterSequence());
+		assertCall(_exit, 1, _b.getEnterSequences().get(0));
 
 	}
 

+ 20 - 20
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerSCTest.java

@@ -54,16 +54,16 @@ public class ModelSequencerSCTest extends ModelSequencerTest {
 
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 
-		assertNotNull(flow.getEnterSequence());
-		assertEquals(2, flow.getEnterSequence().getSteps().size());
+		assertNotNull(flow.getEnterSequences().get(0));
+		assertEquals(2, flow.getEnterSequences().get(0).getSteps().size());
 
-		assertCall(flow.getEnterSequence(), 1, flow.getStates().get(0)
-				.getSuperScope().getEnterSequence());
+		assertCall(flow.getEnterSequences().get(0), 1, flow.getStates().get(0)
+				.getSuperScope().getEnterSequences().get(0));
 
-		assertCall(flow.getStates().get(0).getSuperScope().getEnterSequence(),
+		assertCall(flow.getStates().get(0).getSuperScope().getEnterSequences().get(0),
 				0, flow.getNodes().get(0).getReactSequence());
 		assertCall(flow.getNodes().get(0).getReactSequence(), 0, flow
-				.getStates().get(0).getEnterSequence());
+				.getStates().get(0).getEnterSequences().get(0));
 	}
 
 	/**
@@ -75,23 +75,23 @@ public class ModelSequencerSCTest extends ModelSequencerTest {
 
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 
-		assertNotNull(flow.getEnterSequence());
-		assertEquals(3, flow.getEnterSequence().getSteps().size());
+		assertNotNull(flow.getEnterSequences().get(0));
+		assertEquals(3, flow.getEnterSequences().get(0).getSteps().size());
 
-		assertCall(flow.getEnterSequence(), 0, flow.getEntryAction());
-		assertCall(flow.getEnterSequence(), 1, flow.getStates().get(0)
-				.getSuperScope().getEnterSequence());
-		assertCall(flow.getStates().get(0).getSuperScope().getEnterSequence(),
+		assertCall(flow.getEnterSequences().get(0), 0, flow.getEntryAction());
+		assertCall(flow.getEnterSequences().get(0), 1, flow.getStates().get(0)
+				.getSuperScope().getEnterSequences().get(0));
+		assertCall(flow.getStates().get(0).getSuperScope().getEnterSequences().get(0),
 				0, flow.getNodes().get(0).getReactSequence());
 		assertCall(flow.getNodes().get(0).getReactSequence(), 0, flow
-				.getStates().get(0).getEnterSequence());
+				.getStates().get(0).getEnterSequences().get(0));
 
-		assertCall(flow.getEnterSequence(), 2, flow.getStates().get(2)
-				.getSuperScope().getEnterSequence());
-		assertCall(flow.getStates().get(2).getSuperScope().getEnterSequence(),
+		assertCall(flow.getEnterSequences().get(0), 2, flow.getStates().get(2)
+				.getSuperScope().getEnterSequences().get(0));
+		assertCall(flow.getStates().get(2).getSuperScope().getEnterSequences().get(0),
 				0, flow.getNodes().get(1).getReactSequence());
 		assertCall(flow.getNodes().get(1).getReactSequence(), 0, flow
-				.getStates().get(2).getEnterSequence());
+				.getStates().get(2).getEnterSequences().get(0));
 
 	}
 
@@ -104,10 +104,10 @@ public class ModelSequencerSCTest extends ModelSequencerTest {
 
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 
-		assertNotNull(flow.getEnterSequence());
-		assertEquals(1, flow.getEnterSequence().getSteps().size());
+		assertNotNull(flow.getEnterSequences().get(0));
+		assertEquals(1, flow.getEnterSequences().get(0).getSteps().size());
 
-		assertCall(flow.getEnterSequence(), 0, flow.getEntryAction());
+		assertCall(flow.getEnterSequences().get(0), 0, flow.getEntryAction());
 	}
 
 	/**

+ 23 - 23
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateTest.java

@@ -188,10 +188,10 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertSame(fs, _fs.getSourceElement());
 
 		assertNull(_fs.getEntryAction());
-		assertNotNull(_fs.getEnterSequence());
+		assertNotNull(_fs.getEnterSequences().get(0));
 
-		assertEquals(1, _fs.getEnterSequence().getSteps().size());
-		assertClass(EnterState.class, _fs.getEnterSequence().getSteps().get(0));
+		assertEquals(1, _fs.getEnterSequences().get(0).getSteps().size());
+		assertClass(EnterState.class, _fs.getEnterSequences().get(0).getSteps().get(0));
 	}
 
 	/**
@@ -216,12 +216,12 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertEquals(s1.getName(), _s1.getSimpleName());
 
 		assertNotNull(_s1.getEntryAction());
-		assertNotNull(_s1.getEnterSequence());
-		assertEquals(2, _s1.getEnterSequence().getSteps().size());
+		assertNotNull(_s1.getEnterSequences().get(0));
+		assertEquals(2, _s1.getEnterSequences().get(0).getSteps().size());
 
-		assertCall(_s1.getEnterSequence(), 0, _s1.getEntryAction());
+		assertCall(_s1.getEnterSequences().get(0), 0, _s1.getEntryAction());
 
-		assertClass(EnterState.class, _s1.getEnterSequence().getSteps().get(1));
+		assertClass(EnterState.class, _s1.getEnterSequences().get(0).getSteps().get(1));
 	}
 
 	/**
@@ -270,23 +270,23 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertEquals("s3", _s3.getSimpleName());
 
 		assertNotNull(_s1.getEntryAction());
-		assertNotNull(_s1.getEnterSequence());
-		assertEquals(3, _s1.getEnterSequence().getSteps().size());
+		assertNotNull(_s1.getEnterSequences().get(0));
+		assertEquals(3, _s1.getEnterSequences().get(0).getSteps().size());
 
-		assertCall(_s1.getEnterSequence(), 0, _s1.getEntryAction());
-		assertCall(_s1.getEnterSequence(), 1, _s2.getSuperScope()
-				.getEnterSequence());
-		assertCall(_s2.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_s1.getEnterSequences().get(0), 0, _s1.getEntryAction());
+		assertCall(_s1.getEnterSequences().get(0), 1, _s2.getSuperScope()
+				.getEnterSequences().get(0));
+		assertCall(_s2.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(0).getReactSequence());
 		assertCall(flow.getNodes().get(0).getReactSequence(), 0,
-				_s2.getEnterSequence());
+				_s2.getEnterSequences().get(0));
 
-		assertCall(_s1.getEnterSequence(), 2, _s3.getSuperScope()
-				.getEnterSequence());
-		assertCall(_s3.getSuperScope().getEnterSequence(), 0, flow.getNodes()
+		assertCall(_s1.getEnterSequences().get(0), 2, _s3.getSuperScope()
+				.getEnterSequences().get(0));
+		assertCall(_s3.getSuperScope().getEnterSequences().get(0), 0, flow.getNodes()
 				.get(1).getReactSequence());
 		assertCall(flow.getNodes().get(1).getReactSequence(), 0,
-				_s3.getEnterSequence());
+				_s3.getEnterSequences().get(0));
 	}
 
 	/**
@@ -539,7 +539,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		Sequence seq = (Sequence) reaction.getEffect();
 
 		assertCall(seq, 0, s1.getExitSequence());
-		assertCall(seq, 1, s2.getEnterSequence());
+		assertCall(seq, 1, s2.getEnterSequences().get(0));
 	}
 
 	/**
@@ -581,7 +581,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertNotSame(_assign.getVarRef(), assign.getVarRef());
 		assertNotSame(_assign.getVarRef(), v1);
 
-		assertCall(seq, 2, s2.getEnterSequence());
+		assertCall(seq, 2, s2.getEnterSequences().get(0));
 	}
 
 	/**
@@ -650,8 +650,8 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertEquals(2, seq.getSteps().size());
 
 		assertCall(seq, 0, _s1.getExitSequence());
-		assertCall(seq, 1, _s2.getEnterSequence());
-		assertCall(_s2.getEnterSequence(), 0, _s2.getEntryAction());
+		assertCall(seq, 1, _s2.getEnterSequences().get(0));
+		assertCall(_s2.getEnterSequences().get(0), 0, _s2.getEntryAction());
 	}
 
 	@Test
@@ -1234,7 +1234,7 @@ public class ModelSequencerStateTest extends ModelSequencerTest {
 		assertCall(_if.getThenStep(), _s1.getReactions().get(0).getEffect());
 
 		Sequence _seq = (Sequence) _s1.getReactions().get(0).getEffect();
-		assertCall(_seq, 1, _fs.getEnterSequence());
+		assertCall(_seq, 1, _fs.getEnterSequences().get(0));
 
 	}
 

+ 1 - 1
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SelfTransitionTest.java

@@ -66,6 +66,6 @@ public class SelfTransitionTest extends ModelSequencerTest {
 
 		Reaction tr0 = _t.get(0);
 		assertCall(assertedSequence(tr0.getEffect()), 0, _s2.getExitSequence());
-		assertCall(assertedSequence(tr0.getEffect()), 1, _s2.getEnterSequence());
+		assertCall(assertedSequence(tr0.getEffect()), 1, _s2.getEnterSequences().get(0));
 	}
 }

+ 2 - 2
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/StatechartEnterExistActionTest.java

@@ -66,9 +66,9 @@ public class StatechartEnterExistActionTest extends ModelSequencerTest {
 
 		assertEquals(0, flow.getReactions().size());
 
-		assertedOrder(flow.getEnterSequence(), null, Lists.newArrayList(
+		assertedOrder(flow.getEnterSequences().get(0), null, Lists.newArrayList(
 				new StepLeaf(flow.getEntryAction()),
-				new StepLeaf(region.getEnterSequence())));
+				new StepLeaf(region.getEnterSequences().get(0))));
 
 		assertedOrder(flow.getExitSequence(), null, Lists.newArrayList(
 				new StepLeaf(region.getExitSequence()),