Bladeren bron

Fixed bugs: "Exit and enter on self transitions" (705), "Guards are not applied to entry and exit actions" (706), "Statechart enter sequence also contains variable initialization to defaults" (716)

terfloth@itemis.de 13 jaren geleden
bovenliggende
commit
45f22edf4d
60 gewijzigde bestanden met toevoegingen van 1314 en 336 verwijderingen
  1. 2 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineC.xtend
  2. 8 8
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/FlowCode.xtend
  3. 4 2
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/Statemachine.xtend
  4. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_Call.gif
  5. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_Check.gif
  6. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_CheckRef.gif
  7. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_EnterState.gif
  8. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_Execution.gif
  9. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_ExitState.gif
  10. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_HistoryEntry.gif
  11. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_If.gif
  12. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_ReactionFired.gif
  13. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_SaveHistory.gif
  14. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_ScheduleTimeEvent.gif
  15. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_Sequence.gif
  16. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_StateSwitch.gif
  17. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_TraceBeginRunCycle.gif
  18. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_TraceEndRunCycle.gif
  19. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_TraceNodeExecuted.gif
  20. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_TraceStateEntered.gif
  21. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_TraceStateExited.gif
  22. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_initAction_UnscheduleTimeEvent.gif
  23. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_nodes_ExecutionExit.gif
  24. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionScope_initSequence_Sequence.gif
  25. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/ExecutionExit.gif
  26. 3 0
      plugins/org.yakindu.sct.model.sexec.edit/plugin.properties
  27. 110 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionExitItemProvider.java
  28. 13 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionFlowItemProvider.java
  29. 1 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionRegionItemProvider.java
  30. 9 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionScopeItemProvider.java
  31. 8 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionStateItemProvider.java
  32. 25 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SexecItemProviderAdapterFactory.java
  33. 2 0
      plugins/org.yakindu.sct.model.sexec.interpreter/src/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.xtend
  34. 4 1
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecore
  35. 10 5
      plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel
  36. 17 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionExit.java
  37. 27 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionScope.java
  38. 9 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecFactory.java
  39. 379 246
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java
  40. 39 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionExitImpl.java
  41. 68 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java
  42. 66 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionScopeImpl.java
  43. 68 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionStateImpl.java
  44. 12 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecFactoryImpl.java
  45. 38 5
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java
  46. 2 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend
  47. 85 8
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend
  48. 4 2
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend
  49. 22 4
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java
  50. 33 9
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java
  51. BIN
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.ModelSequencer.java._trace
  52. BIN
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.SequenceBuilder.java._trace
  53. BIN
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.SexecElementMapping.java._trace
  54. 1 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java
  55. 167 31
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.java
  56. 1 3
      plugins/org.yakindu.sct.ui.editor/plugin.xml
  57. 10 0
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/Assert.java
  58. 44 4
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerSCTest.java
  59. 20 1
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/SCTTestUtil.java
  60. 3 3
      test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/util/StextTestFactory.java

+ 2 - 1
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineC.xtend

@@ -78,7 +78,8 @@ class StatemachineC {
 		clearOutEvents(handle);
 		
 			// TODO: initialize all events ...
-			// TODO: initialize all variables ... (set default values - here or inenter sequence ?!?)
+
+			«initSequence.code»
 
 		}
 	'''

+ 8 - 8
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/FlowCode.xtend

@@ -133,12 +133,12 @@ class FlowCode {
 		historyVector[«region.historyVector.offset»] = stateVector[«region.stateVector.offset»];
 	'''
 	
-	def String getInitialValueAssignment(VariableDefinition it) {
-		if (initialValue != null) {
-			return " = " + initialValue.code
-		}
-		else {
-			return ""
-		}
-	}
+//	def String getInitialValueAssignment(VariableDefinition it) {
+//		if (initialValue != null) {
+//			return " = " + initialValue.code
+//		}
+//		else {
+//			return ""
+//		}
+//	}
 }

+ 4 - 2
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/Statemachine.xtend

@@ -114,7 +114,7 @@ class Statemachine {
 		};
 		
 		«FOR variable : flow.internalScopeVariables»
-		private «variable.type.getJavaType()» «variable.name.asEscapedIdentifier»«variable.getInitialValueAssignment()»;
+		private «variable.type.getJavaType()» «variable.name.asEscapedIdentifier»;
 		«ENDFOR»
 		
 		«IF flow.hasHistory»
@@ -168,6 +168,8 @@ class Statemachine {
 			«ENDIF»
 			clearEvents();
 			clearOutEvents();
+			
+			«flow.initSequence.code»
 		}
 	'''
 	
@@ -324,7 +326,7 @@ class Statemachine {
 		
 		«FOR variable : scope.variableDefinitions»
 				
-				private «variable.type.getJavaType()» «variable.name.asEscapedIdentifier»«variable.initialValueAssignment»;
+				private «variable.type.getJavaType()» «variable.name.asEscapedIdentifier»;
 				
 				public «variable.type.getJavaType()» «variable.getter» {
 					return «variable.name.asEscapedIdentifier»;

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


BIN
plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/ExecutionExit.gif


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

@@ -136,3 +136,6 @@ _UI_ExecutionFlow_entryAction_feature = Entry Action
 _UI_ExecutionFlow_exitAction_feature = Exit Action
 _UI_ExecutionSynchronization_type = Execution Synchronization
 _UI_ExecutionRegion_nodes_feature = Nodes
+_UI_ExecutionExit_type = Execution Exit
+_UI_ExecutionFlow_initAction_feature = Init Action
+_UI_ExecutionScope_initSequence_feature = Init Sequence

+ 110 - 0
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionExitItemProvider.java

@@ -0,0 +1,110 @@
+/**
+ */
+package org.yakindu.sct.model.sexec.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.yakindu.sct.model.sexec.ExecutionExit;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.ExecutionExit} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExecutionExitItemProvider
+	extends ExecutionNodeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExecutionExitItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns ExecutionExit.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ExecutionExit"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ExecutionExit)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ExecutionExit_type") :
+			getString("_UI_ExecutionExit_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}

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

@@ -198,6 +198,7 @@ public class ExecutionFlowItemProvider
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_NODE__REACTIONS);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_NODE__REACT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_FLOW__STATES);
@@ -267,6 +268,7 @@ public class ExecutionFlowItemProvider
 			case SexecPackage.EXECUTION_FLOW__STATE_VECTOR:
 			case SexecPackage.EXECUTION_FLOW__ENTER_SEQUENCE:
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
 			case SexecPackage.EXECUTION_FLOW__STATES:
@@ -307,6 +309,11 @@ public class ExecutionFlowItemProvider
 				(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE,
 				 SexecFactory.eINSTANCE.createSequence()));
 
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE,
+				 SexecFactory.eINSTANCE.createSequence()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_NODE__REACTIONS,
@@ -342,6 +349,11 @@ public class ExecutionFlowItemProvider
 				(SexecPackage.Literals.EXECUTION_FLOW__NODES,
 				 SexecFactory.eINSTANCE.createExecutionEntry()));
 
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_FLOW__NODES,
+				 SexecFactory.eINSTANCE.createExecutionExit()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_FLOW__NODES,
@@ -569,6 +581,7 @@ public class ExecutionFlowItemProvider
 			childFeature == SexecPackage.Literals.EXECUTION_FLOW__HISTORY_VECTOR ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_NODE__REACT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_FLOW__ENTRY_ACTION ||
 			childFeature == SexecPackage.Literals.EXECUTION_FLOW__EXIT_ACTION ||

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

@@ -210,6 +210,7 @@ public class ExecutionRegionItemProvider
 			childFeature == SexecPackage.Literals.EXECUTION_REGION__HISTORY_VECTOR ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_REGION__DEEP_ENTER_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_REGION__SHALLOW_ENTER_SEQUENCE;
 

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

@@ -153,6 +153,7 @@ public class ExecutionScopeItemProvider
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 		}
 		return childrenFeatures;
 	}
@@ -213,6 +214,7 @@ public class ExecutionScopeItemProvider
 			case SexecPackage.EXECUTION_SCOPE__STATE_VECTOR:
 			case SexecPackage.EXECUTION_SCOPE__ENTER_SEQUENCE:
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -244,6 +246,11 @@ public class ExecutionScopeItemProvider
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE,
 				 SexecFactory.eINSTANCE.createSequence()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE,
+				 SexecFactory.eINSTANCE.createSequence()));
 	}
 
 	/**
@@ -259,7 +266,8 @@ public class ExecutionScopeItemProvider
 
 		boolean qualify =
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
-			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE;
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE;
 
 		if (qualify) {
 			return getString

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

@@ -149,6 +149,7 @@ public class ExecutionStateItemProvider
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__STATE_VECTOR);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_STATE__ENTRY_ACTION);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_STATE__EXIT_ACTION);
 		}
@@ -211,6 +212,7 @@ public class ExecutionStateItemProvider
 			case SexecPackage.EXECUTION_STATE__STATE_VECTOR:
 			case SexecPackage.EXECUTION_STATE__ENTER_SEQUENCE:
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
 			case SexecPackage.EXECUTION_STATE__ENTRY_ACTION:
 			case SexecPackage.EXECUTION_STATE__EXIT_ACTION:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
@@ -245,6 +247,11 @@ public class ExecutionStateItemProvider
 				(SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE,
 				 SexecFactory.eINSTANCE.createSequence()));
 
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE,
+				 SexecFactory.eINSTANCE.createSequence()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_STATE__ENTRY_ACTION,
@@ -451,6 +458,7 @@ public class ExecutionStateItemProvider
 			childFeature == SexecPackage.Literals.EXECUTION_NODE__REACT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__ENTER_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__EXIT_SEQUENCE ||
+			childFeature == SexecPackage.Literals.EXECUTION_SCOPE__INIT_SEQUENCE ||
 			childFeature == SexecPackage.Literals.EXECUTION_STATE__ENTRY_ACTION ||
 			childFeature == SexecPackage.Literals.EXECUTION_STATE__EXIT_ACTION;
 

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

@@ -211,6 +211,29 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		return executionEntryItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.ExecutionExit} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExecutionExitItemProvider executionExitItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.ExecutionExit}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createExecutionExitAdapter() {
+		if (executionExitItemProvider == null) {
+			executionExitItemProvider = new ExecutionExitItemProvider(this);
+		}
+
+		return executionExitItemProvider;
+	}
+
 	/**
 	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.ExecutionChoice} instances.
 	 * <!-- begin-user-doc -->
@@ -915,7 +938,9 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		if (executionScopeItemProvider != null) executionScopeItemProvider.dispose();
 		if (executionRegionItemProvider != null) executionRegionItemProvider.dispose();
 		if (executionEntryItemProvider != null) executionEntryItemProvider.dispose();
+		if (executionExitItemProvider != null) executionExitItemProvider.dispose();
 		if (executionChoiceItemProvider != null) executionChoiceItemProvider.dispose();
+		if (executionSynchronizationItemProvider != null) executionSynchronizationItemProvider.dispose();
 		if (reactionItemProvider != null) reactionItemProvider.dispose();
 		if (stateVectorItemProvider != null) stateVectorItemProvider.dispose();
 		if (timeEventItemProvider != null) timeEventItemProvider.dispose();
@@ -939,7 +964,6 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		if (traceEndRunCycleItemProvider != null) traceEndRunCycleItemProvider.dispose();
 		if (saveHistoryItemProvider != null) saveHistoryItemProvider.dispose();
 		if (historyEntryItemProvider != null) historyEntryItemProvider.dispose();
-		if (executionSynchronizationItemProvider != null) executionSynchronizationItemProvider.dispose();
 	}
 
 }

+ 2 - 0
plugins/org.yakindu.sct.model.sexec.interpreter/src/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.xtend

@@ -87,6 +87,8 @@ class ExecutionFlowInterpreter extends AbstractExecutionFacade implements IExecu
 		brc = SexecFactory::eINSTANCE.createTraceBeginRunCycle
 		erc = SexecFactory::eINSTANCE.createTraceEndRunCycle
 		
+		flow.initSequence.execute
+		
 	}
 	
 	override tearDown(){

+ 4 - 1
plugins/org.yakindu.sct.model.sexec/model/sexec.ecore

@@ -44,6 +44,8 @@
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="exitSequence" eType="#//Sequence"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initSequence" eType="#//Sequence"
+        containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ExecutionRegion" eSuperTypes="#//ExecutionScope">
     <eStructuralFeatures xsi:type="ecore:EReference" name="deepEnterSequence" eType="#//Sequence"
@@ -56,7 +58,9 @@
         eType="#//ExecutionNode"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ExecutionEntry" eSuperTypes="#//ExecutionNode"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ExecutionExit" eSuperTypes="#//ExecutionNode"/>
   <eClassifiers xsi:type="ecore:EClass" name="ExecutionChoice" eSuperTypes="#//ExecutionNode"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ExecutionSynchronization" eSuperTypes="#//ExecutionNode"/>
   <eClassifiers xsi:type="ecore:EClass" name="Reaction" eSuperTypes="#//MappedElement ../../org.yakindu.base.types/model/base.ecore#//NamedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="check" eType="#//Check"
         containment="true"/>
@@ -160,5 +164,4 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="historyStep" eType="#//Step"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ExecutionSynchronization" eSuperTypes="#//ExecutionNode"/>
 </ecore:EPackage>

+ 10 - 5
plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel

@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.yakindu.sct.model.sexec/src"
-    modelPluginID="org.yakindu.sct.model.sexec" modelName="Sexec" importerID="org.eclipse.emf.importer.ecore"
-    complianceLevel="6.0" copyrightFields="false" usedGenPackages="../../org.yakindu.sct.model.sgraph/model/emf/sgraph.genmodel#//sgraph ../../org.yakindu.base.types/model/base.genmodel#//base">
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.yakindu.sct.model.sexec/src" modelPluginID="org.yakindu.sct.model.sexec"
+    modelName="Sexec" importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0"
+    copyrightFields="false" usedGenPackages="../../org.yakindu.sct.model.sgraph/model/emf/sgraph.genmodel#//sgraph ../../org.yakindu.base.types/model/base.genmodel#//base">
   <foreignModel>sexec.ecore</foreignModel>
   <genPackages prefix="Sexec" basePackage="org.yakindu.sct.model" disposableProviderFactory="true"
       ecorePackage="sexec.ecore#/">
@@ -15,6 +14,8 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/nodes"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/regions"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/historyVector"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/entryAction"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/exitAction"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//ExecutionNode">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionNode/reactions"/>
@@ -32,14 +33,18 @@
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionScope/superScope"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionScope/enterSequence"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionScope/exitSequence"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionScope/initSequence"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//ExecutionRegion">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionRegion/deepEnterSequence"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionRegion/shallowEnterSequence"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionRegion/historyVector"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionRegion/nodes"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//ExecutionEntry"/>
+    <genClasses ecoreClass="sexec.ecore#//ExecutionExit"/>
     <genClasses ecoreClass="sexec.ecore#//ExecutionChoice"/>
+    <genClasses ecoreClass="sexec.ecore#//ExecutionSynchronization"/>
     <genClasses ecoreClass="sexec.ecore#//Reaction">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//Reaction/check"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//Reaction/effect"/>

+ 17 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionExit.java

@@ -0,0 +1,17 @@
+/**
+ */
+package org.yakindu.sct.model.sexec;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Execution Exit</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionExit()
+ * @model
+ * @generated
+ */
+public interface ExecutionExit extends ExecutionNode {
+} // ExecutionExit

+ 27 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionScope.java

@@ -22,6 +22,7 @@ import org.yakindu.base.base.NamedElement;
  *   <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#getExitSequence <em>Exit Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.ExecutionScope#getInitSequence <em>Init Sequence</em>}</li>
  * </ul>
  * </p>
  *
@@ -154,4 +155,30 @@ public interface ExecutionScope extends MappedElement, NamedElement {
 	 */
 	void setExitSequence(Sequence value);
 
+	/**
+	 * Returns the value of the '<em><b>Init Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Init Sequence</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Init Sequence</em>' containment reference.
+	 * @see #setInitSequence(Sequence)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionScope_InitSequence()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Sequence getInitSequence();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.ExecutionScope#getInitSequence <em>Init Sequence</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Init Sequence</em>' containment reference.
+	 * @see #getInitSequence()
+	 * @generated
+	 */
+	void setInitSequence(Sequence value);
+
 } // ExecutionScope

+ 9 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecFactory.java

@@ -79,6 +79,15 @@ public interface SexecFactory extends EFactory {
 	 */
 	ExecutionEntry createExecutionEntry();
 
+	/**
+	 * Returns a new object of class '<em>Execution Exit</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Execution Exit</em>'.
+	 * @generated
+	 */
+	ExecutionExit createExecutionExit();
+
 	/**
 	 * Returns a new object of class '<em>Execution Choice</em>'.
 	 * <!-- begin-user-doc -->

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

@@ -180,6 +180,15 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_FLOW__EXIT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 6;
 
+	/**
+	 * The feature id for the '<em><b>Init Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_FLOW__INIT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 7;
+
 	/**
 	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -187,7 +196,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__REACTIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 7;
+	int EXECUTION_FLOW__REACTIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 8;
 
 	/**
 	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
@@ -196,7 +205,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__SIMPLE_NAME = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 8;
+	int EXECUTION_FLOW__SIMPLE_NAME = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 9;
 
 	/**
 	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
@@ -205,7 +214,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__REACT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 9;
+	int EXECUTION_FLOW__REACT_SEQUENCE = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 10;
 
 	/**
 	 * The feature id for the '<em><b>States</b></em>' containment reference list.
@@ -214,7 +223,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__STATES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 10;
+	int EXECUTION_FLOW__STATES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 11;
 
 	/**
 	 * The feature id for the '<em><b>Nodes</b></em>' containment reference list.
@@ -223,7 +232,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__NODES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 11;
+	int EXECUTION_FLOW__NODES = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 12;
 
 	/**
 	 * The feature id for the '<em><b>Regions</b></em>' containment reference list.
@@ -232,7 +241,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__REGIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 12;
+	int EXECUTION_FLOW__REGIONS = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 13;
 
 	/**
 	 * The feature id for the '<em><b>History Vector</b></em>' containment reference.
@@ -241,7 +250,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__HISTORY_VECTOR = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 13;
+	int EXECUTION_FLOW__HISTORY_VECTOR = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 14;
 
 	/**
 	 * The feature id for the '<em><b>Entry Action</b></em>' containment reference.
@@ -250,7 +259,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__ENTRY_ACTION = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 14;
+	int EXECUTION_FLOW__ENTRY_ACTION = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 15;
 
 	/**
 	 * The feature id for the '<em><b>Exit Action</b></em>' containment reference.
@@ -259,7 +268,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW__EXIT_ACTION = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 15;
+	int EXECUTION_FLOW__EXIT_ACTION = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 16;
 
 	/**
 	 * The number of structural features of the '<em>Execution Flow</em>' class.
@@ -268,7 +277,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_FLOW_FEATURE_COUNT = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 16;
+	int EXECUTION_FLOW_FEATURE_COUNT = SGraphPackage.SCOPED_ELEMENT_FEATURE_COUNT + 17;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionNodeImpl <em>Execution Node</em>}' class.
@@ -352,7 +361,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getReaction()
 	 * @generated
 	 */
-	int REACTION = 8;
+	int REACTION = 10;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StepImpl <em>Step</em>}' class.
@@ -362,7 +371,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStep()
 	 * @generated
 	 */
-	int STEP = 11;
+	int STEP = 13;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.SequenceImpl <em>Sequence</em>}' class.
@@ -372,7 +381,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSequence()
 	 * @generated
 	 */
-	int SEQUENCE = 12;
+	int SEQUENCE = 14;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CheckImpl <em>Check</em>}' class.
@@ -382,7 +391,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheck()
 	 * @generated
 	 */
-	int CHECK = 13;
+	int CHECK = 15;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.IfImpl <em>If</em>}' class.
@@ -392,7 +401,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getIf()
 	 * @generated
 	 */
-	int IF = 15;
+	int IF = 17;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionImpl <em>Execution</em>}' class.
@@ -402,7 +411,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecution()
 	 * @generated
 	 */
-	int EXECUTION = 16;
+	int EXECUTION = 18;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.EnterStateImpl <em>Enter State</em>}' class.
@@ -412,7 +421,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getEnterState()
 	 * @generated
 	 */
-	int ENTER_STATE = 17;
+	int ENTER_STATE = 19;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExitStateImpl <em>Exit State</em>}' class.
@@ -422,7 +431,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExitState()
 	 * @generated
 	 */
-	int EXIT_STATE = 18;
+	int EXIT_STATE = 20;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateVectorImpl <em>State Vector</em>}' class.
@@ -432,7 +441,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateVector()
 	 * @generated
 	 */
-	int STATE_VECTOR = 9;
+	int STATE_VECTOR = 11;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TimeEventImpl <em>Time Event</em>}' class.
@@ -442,7 +451,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTimeEvent()
 	 * @generated
 	 */
-	int TIME_EVENT = 10;
+	int TIME_EVENT = 12;
 
 	/**
 	 * The feature id for the '<em><b>Source Element</b></em>' reference.
@@ -534,6 +543,15 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_STATE__EXIT_SEQUENCE = EXECUTION_NODE_FEATURE_COUNT + 4;
 
+	/**
+	 * The feature id for the '<em><b>Init Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_STATE__INIT_SEQUENCE = EXECUTION_NODE_FEATURE_COUNT + 5;
+
 	/**
 	 * The feature id for the '<em><b>Leaf</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -541,7 +559,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE__LEAF = EXECUTION_NODE_FEATURE_COUNT + 5;
+	int EXECUTION_STATE__LEAF = EXECUTION_NODE_FEATURE_COUNT + 6;
 
 	/**
 	 * The feature id for the '<em><b>Entry Action</b></em>' containment reference.
@@ -550,7 +568,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE__ENTRY_ACTION = EXECUTION_NODE_FEATURE_COUNT + 6;
+	int EXECUTION_STATE__ENTRY_ACTION = EXECUTION_NODE_FEATURE_COUNT + 7;
 
 	/**
 	 * The feature id for the '<em><b>Exit Action</b></em>' containment reference.
@@ -559,7 +577,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE__EXIT_ACTION = EXECUTION_NODE_FEATURE_COUNT + 7;
+	int EXECUTION_STATE__EXIT_ACTION = EXECUTION_NODE_FEATURE_COUNT + 8;
 
 	/**
 	 * The number of structural features of the '<em>Execution State</em>' class.
@@ -568,7 +586,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 8;
+	int EXECUTION_STATE_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 9;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl <em>Execution Scope</em>}' class.
@@ -643,6 +661,15 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_SCOPE__EXIT_SEQUENCE = MAPPED_ELEMENT_FEATURE_COUNT + 5;
 
+	/**
+	 * The feature id for the '<em><b>Init Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SCOPE__INIT_SEQUENCE = MAPPED_ELEMENT_FEATURE_COUNT + 6;
+
 	/**
 	 * The number of structural features of the '<em>Execution Scope</em>' class.
 	 * <!-- begin-user-doc -->
@@ -650,7 +677,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_SCOPE_FEATURE_COUNT = MAPPED_ELEMENT_FEATURE_COUNT + 6;
+	int EXECUTION_SCOPE_FEATURE_COUNT = MAPPED_ELEMENT_FEATURE_COUNT + 7;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionRegionImpl <em>Execution Region</em>}' class.
@@ -725,6 +752,15 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_REGION__EXIT_SEQUENCE = EXECUTION_SCOPE__EXIT_SEQUENCE;
 
+	/**
+	 * The feature id for the '<em><b>Init Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_REGION__INIT_SEQUENCE = EXECUTION_SCOPE__INIT_SEQUENCE;
+
 	/**
 	 * The feature id for the '<em><b>Deep Enter Sequence</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
@@ -834,6 +870,70 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_ENTRY_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionExitImpl <em>Execution Exit</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ExecutionExitImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionExit()
+	 * @generated
+	 */
+	int EXECUTION_EXIT = 7;
+
+	/**
+	 * The feature id for the '<em><b>Source Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT__SOURCE_ELEMENT = EXECUTION_NODE__SOURCE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT__NAME = EXECUTION_NODE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT__REACTIONS = EXECUTION_NODE__REACTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT__SIMPLE_NAME = EXECUTION_NODE__SIMPLE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT__REACT_SEQUENCE = EXECUTION_NODE__REACT_SEQUENCE;
+
+	/**
+	 * The number of structural features of the '<em>Execution Exit</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_EXIT_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
+
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionChoiceImpl <em>Execution Choice</em>}' class.
 	 * <!-- begin-user-doc -->
@@ -842,7 +942,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionChoice()
 	 * @generated
 	 */
-	int EXECUTION_CHOICE = 7;
+	int EXECUTION_CHOICE = 8;
 
 	/**
 	 * The feature id for the '<em><b>Source Element</b></em>' reference.
@@ -898,6 +998,220 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_CHOICE_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CallImpl <em>Call</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.CallImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCall()
+	 * @generated
+	 */
+	int CALL = 21;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ScheduleTimeEventImpl <em>Schedule Time Event</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ScheduleTimeEventImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getScheduleTimeEvent()
+	 * @generated
+	 */
+	int SCHEDULE_TIME_EVENT = 22;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.UnscheduleTimeEventImpl <em>Unschedule Time Event</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.UnscheduleTimeEventImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getUnscheduleTimeEvent()
+	 * @generated
+	 */
+	int UNSCHEDULE_TIME_EVENT = 23;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CheckRefImpl <em>Check Ref</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.CheckRefImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheckRef()
+	 * @generated
+	 */
+	int CHECK_REF = 16;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateSwitchImpl <em>State Switch</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.StateSwitchImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateSwitch()
+	 * @generated
+	 */
+	int STATE_SWITCH = 24;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateCaseImpl <em>State Case</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.StateCaseImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateCase()
+	 * @generated
+	 */
+	int STATE_CASE = 25;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceImpl <em>Trace</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTrace()
+	 * @generated
+	 */
+	int TRACE = 26;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceNodeExecutedImpl <em>Trace Node Executed</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceNodeExecutedImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceNodeExecuted()
+	 * @generated
+	 */
+	int TRACE_NODE_EXECUTED = 27;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ReactionFiredImpl <em>Reaction Fired</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ReactionFiredImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getReactionFired()
+	 * @generated
+	 */
+	int REACTION_FIRED = 28;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceStateEnteredImpl <em>Trace State Entered</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceStateEnteredImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceStateEntered()
+	 * @generated
+	 */
+	int TRACE_STATE_ENTERED = 29;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceStateExitedImpl <em>Trace State Exited</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceStateExitedImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceStateExited()
+	 * @generated
+	 */
+	int TRACE_STATE_EXITED = 30;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceBeginRunCycleImpl <em>Trace Begin Run Cycle</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceBeginRunCycleImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceBeginRunCycle()
+	 * @generated
+	 */
+	int TRACE_BEGIN_RUN_CYCLE = 31;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceEndRunCycleImpl <em>Trace End Run Cycle</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.TraceEndRunCycleImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceEndRunCycle()
+	 * @generated
+	 */
+	int TRACE_END_RUN_CYCLE = 32;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.SaveHistoryImpl <em>Save History</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.SaveHistoryImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSaveHistory()
+	 * @generated
+	 */
+	int SAVE_HISTORY = 33;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.HistoryEntryImpl <em>History Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.HistoryEntryImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getHistoryEntry()
+	 * @generated
+	 */
+	int HISTORY_ENTRY = 34;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl <em>Execution Synchronization</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionSynchronization()
+	 * @generated
+	 */
+	int EXECUTION_SYNCHRONIZATION = 9;
+
+	/**
+	 * The feature id for the '<em><b>Source Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__SOURCE_ELEMENT = EXECUTION_NODE__SOURCE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__NAME = EXECUTION_NODE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__REACTIONS = EXECUTION_NODE__REACTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__SIMPLE_NAME = EXECUTION_NODE__SIMPLE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__REACT_SEQUENCE = EXECUTION_NODE__REACT_SEQUENCE;
+
+	/**
+	 * The number of structural features of the '<em>Execution Synchronization</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
+
 	/**
 	 * The feature id for the '<em><b>Source Element</b></em>' reference.
 	 * <!-- begin-user-doc -->
@@ -1141,46 +1455,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int CHECK_FEATURE_COUNT = STEP_FEATURE_COUNT + 2;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CallImpl <em>Call</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.CallImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCall()
-	 * @generated
-	 */
-	int CALL = 19;
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ScheduleTimeEventImpl <em>Schedule Time Event</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.ScheduleTimeEventImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getScheduleTimeEvent()
-	 * @generated
-	 */
-	int SCHEDULE_TIME_EVENT = 20;
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.UnscheduleTimeEventImpl <em>Unschedule Time Event</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.UnscheduleTimeEventImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getUnscheduleTimeEvent()
-	 * @generated
-	 */
-	int UNSCHEDULE_TIME_EVENT = 21;
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CheckRefImpl <em>Check Ref</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.CheckRefImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheckRef()
-	 * @generated
-	 */
-	int CHECK_REF = 14;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1586,17 +1860,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int UNSCHEDULE_TIME_EVENT_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
 
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateSwitchImpl <em>State Switch</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.StateSwitchImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateSwitch()
-	 * @generated
-	 */
-	int STATE_SWITCH = 22;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1660,16 +1923,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int STATE_SWITCH_FEATURE_COUNT = STEP_FEATURE_COUNT + 3;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateCaseImpl <em>State Case</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.StateCaseImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateCase()
-	 * @generated
-	 */
-	int STATE_CASE = 23;
-
 	/**
 	 * The feature id for the '<em><b>State</b></em>' reference.
 	 * <!-- begin-user-doc -->
@@ -1697,17 +1950,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int STATE_CASE_FEATURE_COUNT = 2;
 
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceImpl <em>Trace</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTrace()
-	 * @generated
-	 */
-	int TRACE = 24;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1744,16 +1986,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_FEATURE_COUNT = STEP_FEATURE_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceNodeExecutedImpl <em>Trace Node Executed</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceNodeExecutedImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceNodeExecuted()
-	 * @generated
-	 */
-	int TRACE_NODE_EXECUTED = 25;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1799,16 +2031,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_NODE_EXECUTED_FEATURE_COUNT = TRACE_FEATURE_COUNT + 1;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ReactionFiredImpl <em>Reaction Fired</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.ReactionFiredImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getReactionFired()
-	 * @generated
-	 */
-	int REACTION_FIRED = 26;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1854,17 +2076,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int REACTION_FIRED_FEATURE_COUNT = TRACE_FEATURE_COUNT + 1;
 
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceStateEnteredImpl <em>Trace State Entered</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceStateEnteredImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceStateEntered()
-	 * @generated
-	 */
-	int TRACE_STATE_ENTERED = 27;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1910,16 +2121,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_STATE_ENTERED_FEATURE_COUNT = TRACE_FEATURE_COUNT + 1;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceStateExitedImpl <em>Trace State Exited</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceStateExitedImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceStateExited()
-	 * @generated
-	 */
-	int TRACE_STATE_EXITED = 28;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -1965,17 +2166,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_STATE_EXITED_FEATURE_COUNT = TRACE_FEATURE_COUNT + 1;
 
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceBeginRunCycleImpl <em>Trace Begin Run Cycle</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceBeginRunCycleImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceBeginRunCycle()
-	 * @generated
-	 */
-	int TRACE_BEGIN_RUN_CYCLE = 29;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -2012,16 +2202,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_BEGIN_RUN_CYCLE_FEATURE_COUNT = TRACE_FEATURE_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.TraceEndRunCycleImpl <em>Trace End Run Cycle</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.TraceEndRunCycleImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getTraceEndRunCycle()
-	 * @generated
-	 */
-	int TRACE_END_RUN_CYCLE = 30;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -2058,16 +2238,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int TRACE_END_RUN_CYCLE_FEATURE_COUNT = TRACE_FEATURE_COUNT + 0;
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.SaveHistoryImpl <em>Save History</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.SaveHistoryImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSaveHistory()
-	 * @generated
-	 */
-	int SAVE_HISTORY = 31;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -2122,17 +2292,6 @@ public interface SexecPackage extends EPackage {
 	 */
 	int SAVE_HISTORY_FEATURE_COUNT = STEP_FEATURE_COUNT + 2;
 
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.HistoryEntryImpl <em>History Entry</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.HistoryEntryImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getHistoryEntry()
-	 * @generated
-	 */
-	int HISTORY_ENTRY = 32;
-
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -2206,71 +2365,6 @@ public interface SexecPackage extends EPackage {
 	int HISTORY_ENTRY_FEATURE_COUNT = STEP_FEATURE_COUNT + 4;
 
 
-	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl <em>Execution Synchronization</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionSynchronization()
-	 * @generated
-	 */
-	int EXECUTION_SYNCHRONIZATION = 33;
-
-	/**
-	 * The feature id for the '<em><b>Source Element</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION__SOURCE_ELEMENT = EXECUTION_NODE__SOURCE_ELEMENT;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION__NAME = EXECUTION_NODE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION__REACTIONS = EXECUTION_NODE__REACTIONS;
-
-	/**
-	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION__SIMPLE_NAME = EXECUTION_NODE__SIMPLE_NAME;
-
-	/**
-	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION__REACT_SEQUENCE = EXECUTION_NODE__REACT_SEQUENCE;
-
-	/**
-	 * The number of structural features of the '<em>Execution Synchronization</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int EXECUTION_SYNCHRONIZATION_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
-
-
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionFlow <em>Execution Flow</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2487,6 +2581,17 @@ public interface SexecPackage extends EPackage {
 	 */
 	EReference getExecutionScope_ExitSequence();
 
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.ExecutionScope#getInitSequence <em>Init Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Init Sequence</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionScope#getInitSequence()
+	 * @see #getExecutionScope()
+	 * @generated
+	 */
+	EReference getExecutionScope_InitSequence();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionRegion <em>Execution Region</em>}'.
 	 * <!-- begin-user-doc -->
@@ -2551,6 +2656,16 @@ public interface SexecPackage extends EPackage {
 	 */
 	EClass getExecutionEntry();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionExit <em>Execution Exit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Execution Exit</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionExit
+	 * @generated
+	 */
+	EClass getExecutionExit();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionChoice <em>Execution Choice</em>}'.
 	 * <!-- begin-user-doc -->
@@ -3450,6 +3565,14 @@ public interface SexecPackage extends EPackage {
 		 */
 		EReference EXECUTION_SCOPE__EXIT_SEQUENCE = eINSTANCE.getExecutionScope_ExitSequence();
 
+		/**
+		 * The meta object literal for the '<em><b>Init Sequence</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EXECUTION_SCOPE__INIT_SEQUENCE = eINSTANCE.getExecutionScope_InitSequence();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionRegionImpl <em>Execution Region</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -3502,6 +3625,16 @@ public interface SexecPackage extends EPackage {
 		 */
 		EClass EXECUTION_ENTRY = eINSTANCE.getExecutionEntry();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionExitImpl <em>Execution Exit</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.sct.model.sexec.impl.ExecutionExitImpl
+		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionExit()
+		 * @generated
+		 */
+		EClass EXECUTION_EXIT = eINSTANCE.getExecutionExit();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionChoiceImpl <em>Execution Choice</em>}' class.
 		 * <!-- begin-user-doc -->

+ 39 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionExitImpl.java

@@ -0,0 +1,39 @@
+/**
+ */
+package org.yakindu.sct.model.sexec.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.yakindu.sct.model.sexec.ExecutionExit;
+import org.yakindu.sct.model.sexec.SexecPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Execution Exit</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ExecutionExitImpl extends ExecutionNodeImpl implements ExecutionExit {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExecutionExitImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SexecPackage.Literals.EXECUTION_EXIT;
+	}
+
+} //ExecutionExitImpl

+ 68 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionFlowImpl.java

@@ -47,6 +47,7 @@ import org.yakindu.sct.model.sgraph.impl.ScopedElementImpl;
  *   <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#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>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getSimpleName <em>Simple Name</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionFlowImpl#getReactSequence <em>React Sequence</em>}</li>
@@ -142,6 +143,16 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 	 */
 	protected Sequence exitSequence;
 
+	/**
+	 * The cached value of the '{@link #getInitSequence() <em>Init Sequence</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected Sequence initSequence;
+
 	/**
 	 * The cached value of the '{@link #getReactions() <em>Reactions</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -533,6 +544,49 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE, newExitSequence, newExitSequence));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequence getInitSequence() {
+		return initSequence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetInitSequence(Sequence newInitSequence, NotificationChain msgs) {
+		Sequence oldInitSequence = initSequence;
+		initSequence = newInitSequence;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE, oldInitSequence, newInitSequence);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitSequence(Sequence newInitSequence) {
+		if (newInitSequence != initSequence) {
+			NotificationChain msgs = null;
+			if (initSequence != null)
+				msgs = ((InternalEObject)initSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE, null, msgs);
+			if (newInitSequence != null)
+				msgs = ((InternalEObject)newInitSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE, null, msgs);
+			msgs = basicSetInitSequence(newInitSequence, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE, newInitSequence, newInitSequence));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -799,6 +853,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return basicSetEnterSequence(null, msgs);
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
+				return basicSetInitSequence(null, msgs);
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 				return ((InternalEList<?>)getReactions()).basicRemove(otherEnd, msgs);
 			case SexecPackage.EXECUTION_FLOW__REACT_SEQUENCE:
@@ -843,6 +899,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return getEnterSequence();
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return getExitSequence();
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
+				return getInitSequence();
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 				return getReactions();
 			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
@@ -896,6 +954,9 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
 				return;
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
+				setInitSequence((Sequence)newValue);
+				return;
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 				getReactions().clear();
 				getReactions().addAll((Collection<? extends Reaction>)newValue);
@@ -960,6 +1021,9 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
 				return;
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
+				setInitSequence((Sequence)null);
+				return;
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 				getReactions().clear();
 				return;
@@ -1013,6 +1077,8 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				return enterSequence != null;
 			case SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE:
 				return exitSequence != null;
+			case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE:
+				return initSequence != null;
 			case SexecPackage.EXECUTION_FLOW__REACTIONS:
 				return reactions != null && !reactions.isEmpty();
 			case SexecPackage.EXECUTION_FLOW__SIMPLE_NAME:
@@ -1061,6 +1127,7 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				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__EXIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE;
+				case SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE;
 				default: return -1;
 			}
 		}
@@ -1101,6 +1168,7 @@ public class ExecutionFlowImpl extends ScopedElementImpl implements ExecutionFlo
 				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__EXIT_SEQUENCE: return SexecPackage.EXECUTION_FLOW__EXIT_SEQUENCE;
+				case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE: return SexecPackage.EXECUTION_FLOW__INIT_SEQUENCE;
 				default: return -1;
 			}
 		}

+ 66 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionScopeImpl.java

@@ -36,6 +36,7 @@ import org.yakindu.sct.model.sexec.StateVector;
  *   <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#getExitSequence <em>Exit Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionScopeImpl#getInitSequence <em>Init Sequence</em>}</li>
  * </ul>
  * </p>
  *
@@ -112,6 +113,16 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 	 */
 	protected Sequence exitSequence;
 
+	/**
+	 * The cached value of the '{@link #getInitSequence() <em>Init Sequence</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected Sequence initSequence;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -353,6 +364,49 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE, newExitSequence, newExitSequence));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequence getInitSequence() {
+		return initSequence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetInitSequence(Sequence newInitSequence, NotificationChain msgs) {
+		Sequence oldInitSequence = initSequence;
+		initSequence = newInitSequence;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE, oldInitSequence, newInitSequence);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitSequence(Sequence newInitSequence) {
+		if (newInitSequence != initSequence) {
+			NotificationChain msgs = null;
+			if (initSequence != null)
+				msgs = ((InternalEObject)initSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE, null, msgs);
+			if (newInitSequence != null)
+				msgs = ((InternalEObject)newInitSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE, null, msgs);
+			msgs = basicSetInitSequence(newInitSequence, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE, newInitSequence, newInitSequence));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -390,6 +444,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 				return basicSetEnterSequence(null, msgs);
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
+				return basicSetInitSequence(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -415,6 +471,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 				return getEnterSequence();
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return getExitSequence();
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
+				return getInitSequence();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -447,6 +505,9 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
 				return;
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
+				setInitSequence((Sequence)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -477,6 +538,9 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
 				return;
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
+				setInitSequence((Sequence)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -501,6 +565,8 @@ public class ExecutionScopeImpl extends MappedElementImpl implements ExecutionSc
 				return enterSequence != null;
 			case SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE:
 				return exitSequence != null;
+			case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE:
+				return initSequence != null;
 		}
 		return super.eIsSet(featureID);
 	}

+ 68 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionStateImpl.java

@@ -35,6 +35,7 @@ import org.yakindu.sct.model.sexec.Step;
  *   <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#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>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getEntryAction <em>Entry Action</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getExitAction <em>Exit Action</em>}</li>
@@ -94,6 +95,16 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 	 */
 	protected Sequence exitSequence;
 
+	/**
+	 * The cached value of the '{@link #getInitSequence() <em>Init Sequence</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected Sequence initSequence;
+
 	/**
 	 * The default value of the '{@link #isLeaf() <em>Leaf</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -440,6 +451,49 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE, newExitSequence, newExitSequence));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequence getInitSequence() {
+		return initSequence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetInitSequence(Sequence newInitSequence, NotificationChain msgs) {
+		Sequence oldInitSequence = initSequence;
+		initSequence = newInitSequence;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__INIT_SEQUENCE, oldInitSequence, newInitSequence);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitSequence(Sequence newInitSequence) {
+		if (newInitSequence != initSequence) {
+			NotificationChain msgs = null;
+			if (initSequence != null)
+				msgs = ((InternalEObject)initSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_STATE__INIT_SEQUENCE, null, msgs);
+			if (newInitSequence != null)
+				msgs = ((InternalEObject)newInitSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.EXECUTION_STATE__INIT_SEQUENCE, null, msgs);
+			msgs = basicSetInitSequence(newInitSequence, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__INIT_SEQUENCE, newInitSequence, newInitSequence));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -498,6 +552,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				return basicSetEnterSequence(null, msgs);
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return basicSetExitSequence(null, msgs);
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
+				return basicSetInitSequence(null, msgs);
 			case SexecPackage.EXECUTION_STATE__ENTRY_ACTION:
 				return basicSetEntryAction(null, msgs);
 			case SexecPackage.EXECUTION_STATE__EXIT_ACTION:
@@ -525,6 +581,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				return getEnterSequence();
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return getExitSequence();
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
+				return getInitSequence();
 			case SexecPackage.EXECUTION_STATE__LEAF:
 				return isLeaf();
 			case SexecPackage.EXECUTION_STATE__ENTRY_ACTION:
@@ -560,6 +618,9 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)newValue);
 				return;
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
+				setInitSequence((Sequence)newValue);
+				return;
 			case SexecPackage.EXECUTION_STATE__LEAF:
 				setLeaf((Boolean)newValue);
 				return;
@@ -596,6 +657,9 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				setExitSequence((Sequence)null);
 				return;
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
+				setInitSequence((Sequence)null);
+				return;
 			case SexecPackage.EXECUTION_STATE__LEAF:
 				setLeaf(LEAF_EDEFAULT);
 				return;
@@ -627,6 +691,8 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				return enterSequence != null;
 			case SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE:
 				return exitSequence != null;
+			case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE:
+				return initSequence != null;
 			case SexecPackage.EXECUTION_STATE__LEAF:
 				return leaf != LEAF_EDEFAULT;
 			case SexecPackage.EXECUTION_STATE__ENTRY_ACTION:
@@ -651,6 +717,7 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				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__EXIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__EXIT_SEQUENCE;
+				case SexecPackage.EXECUTION_STATE__INIT_SEQUENCE: return SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE;
 				default: return -1;
 			}
 		}
@@ -671,6 +738,7 @@ public class ExecutionStateImpl extends ExecutionNodeImpl implements ExecutionSt
 				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__EXIT_SEQUENCE: return SexecPackage.EXECUTION_STATE__EXIT_SEQUENCE;
+				case SexecPackage.EXECUTION_SCOPE__INIT_SEQUENCE: return SexecPackage.EXECUTION_STATE__INIT_SEQUENCE;
 				default: return -1;
 			}
 		}

+ 12 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecFactoryImpl.java

@@ -97,7 +97,9 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 			case SexecPackage.EXECUTION_SCOPE: return createExecutionScope();
 			case SexecPackage.EXECUTION_REGION: return createExecutionRegion();
 			case SexecPackage.EXECUTION_ENTRY: return createExecutionEntry();
+			case SexecPackage.EXECUTION_EXIT: return createExecutionExit();
 			case SexecPackage.EXECUTION_CHOICE: return createExecutionChoice();
+			case SexecPackage.EXECUTION_SYNCHRONIZATION: return createExecutionSynchronization();
 			case SexecPackage.REACTION: return createReaction();
 			case SexecPackage.STATE_VECTOR: return createStateVector();
 			case SexecPackage.TIME_EVENT: return createTimeEvent();
@@ -121,7 +123,6 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 			case SexecPackage.TRACE_END_RUN_CYCLE: return createTraceEndRunCycle();
 			case SexecPackage.SAVE_HISTORY: return createSaveHistory();
 			case SexecPackage.HISTORY_ENTRY: return createHistoryEntry();
-			case SexecPackage.EXECUTION_SYNCHRONIZATION: return createExecutionSynchronization();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -187,6 +188,16 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 		return executionEntry;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExecutionExit createExecutionExit() {
+		ExecutionExitImpl executionExit = new ExecutionExitImpl();
+		return executionExit;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

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

@@ -19,6 +19,7 @@ import org.yakindu.sct.model.sexec.EnterState;
 import org.yakindu.sct.model.sexec.Execution;
 import org.yakindu.sct.model.sexec.ExecutionChoice;
 import org.yakindu.sct.model.sexec.ExecutionEntry;
+import org.yakindu.sct.model.sexec.ExecutionExit;
 import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.ExecutionNode;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
@@ -99,6 +100,13 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 */
 	private EClass executionEntryEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass executionExitEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -539,6 +547,15 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return (EReference)executionScopeEClass.getEStructuralFeatures().get(4);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getExecutionScope_InitSequence() {
+		return (EReference)executionScopeEClass.getEStructuralFeatures().get(5);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -593,6 +610,15 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return executionEntryEClass;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExecutionExit() {
+		return executionExitEClass;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1251,6 +1277,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__SUPER_SCOPE);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__ENTER_SEQUENCE);
 		createEReference(executionScopeEClass, EXECUTION_SCOPE__EXIT_SEQUENCE);
+		createEReference(executionScopeEClass, EXECUTION_SCOPE__INIT_SEQUENCE);
 
 		executionRegionEClass = createEClass(EXECUTION_REGION);
 		createEReference(executionRegionEClass, EXECUTION_REGION__DEEP_ENTER_SEQUENCE);
@@ -1260,8 +1287,12 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 
 		executionEntryEClass = createEClass(EXECUTION_ENTRY);
 
+		executionExitEClass = createEClass(EXECUTION_EXIT);
+
 		executionChoiceEClass = createEClass(EXECUTION_CHOICE);
 
+		executionSynchronizationEClass = createEClass(EXECUTION_SYNCHRONIZATION);
+
 		reactionEClass = createEClass(REACTION);
 		createEReference(reactionEClass, REACTION__CHECK);
 		createEReference(reactionEClass, REACTION__EFFECT);
@@ -1348,8 +1379,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		createEAttribute(historyEntryEClass, HISTORY_ENTRY__DEEP);
 		createEReference(historyEntryEClass, HISTORY_ENTRY__REGION);
 		createEReference(historyEntryEClass, HISTORY_ENTRY__HISTORY_STEP);
-
-		executionSynchronizationEClass = createEClass(EXECUTION_SYNCHRONIZATION);
 	}
 
 	/**
@@ -1395,7 +1424,9 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		executionScopeEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		executionRegionEClass.getESuperTypes().add(this.getExecutionScope());
 		executionEntryEClass.getESuperTypes().add(this.getExecutionNode());
+		executionExitEClass.getESuperTypes().add(this.getExecutionNode());
 		executionChoiceEClass.getESuperTypes().add(this.getExecutionNode());
+		executionSynchronizationEClass.getESuperTypes().add(this.getExecutionNode());
 		reactionEClass.getESuperTypes().add(this.getMappedElement());
 		reactionEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		timeEventEClass.getESuperTypes().add(theSGraphPackage.getEvent());
@@ -1420,7 +1451,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		traceEndRunCycleEClass.getESuperTypes().add(this.getTrace());
 		saveHistoryEClass.getESuperTypes().add(this.getStep());
 		historyEntryEClass.getESuperTypes().add(this.getStep());
-		executionSynchronizationEClass.getESuperTypes().add(this.getExecutionNode());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(mappedElementEClass, MappedElement.class, "MappedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1450,6 +1480,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		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_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);
 
 		initEClass(executionRegionEClass, ExecutionRegion.class, "ExecutionRegion", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getExecutionRegion_DeepEnterSequence(), this.getSequence(), null, "deepEnterSequence", null, 0, 1, ExecutionRegion.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -1459,8 +1490,12 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 
 		initEClass(executionEntryEClass, ExecutionEntry.class, "ExecutionEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(executionExitEClass, ExecutionExit.class, "ExecutionExit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(executionChoiceEClass, ExecutionChoice.class, "ExecutionChoice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(executionSynchronizationEClass, ExecutionSynchronization.class, "ExecutionSynchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(reactionEClass, Reaction.class, "Reaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getReaction_Check(), this.getCheck(), null, "check", null, 0, 1, Reaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getReaction_Effect(), this.getStep(), null, "effect", null, 0, 1, Reaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -1548,8 +1583,6 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEReference(getHistoryEntry_Region(), this.getExecutionRegion(), null, "region", null, 0, 1, HistoryEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getHistoryEntry_HistoryStep(), this.getStep(), null, "historyStep", null, 0, 1, HistoryEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(executionSynchronizationEClass, ExecutionSynchronization.class, "ExecutionSynchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-
 		// Create resource
 		createResource(eNS_URI);
 	}

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

@@ -58,6 +58,8 @@ class ModelSequencer {
 		ef.defineShallowEnterSequences(sc)
 		ef.defineStatechartEnterSequence(sc)
 		ef.defineStatechartExitSequence(sc)
+
+		ef.defineStatechartInitSequence(sc)
 		
 		sc.mapTransitions(ef)
 		sc.mapEntries(ef)

+ 85 - 8
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend

@@ -25,6 +25,10 @@ import org.yakindu.sct.model.stext.stext.NumericalMultiplyDivideExpression
 import org.yakindu.sct.model.stext.stext.PrimitiveValueExpression
 import org.yakindu.sct.model.stext.stext.IntLiteral
 import org.yakindu.sct.model.stext.stext.TimeUnit
+import org.yakindu.base.types.ITypeSystemAccess
+import org.yakindu.sct.model.stext.stext.BoolLiteral
+import org.yakindu.sct.model.stext.stext.RealLiteral
+import org.yakindu.sct.model.stext.stext.StringLiteral
 
 
 class SequenceBuilder {
@@ -36,6 +40,9 @@ class SequenceBuilder {
 	@Inject extension SexecElementMapping mapping
 	@Inject extension TraceExtensions trace
 	
+	@Inject extension ITypeSystemAccess tsa
+	
+	
 	@Inject @Named("ADD_TRACES") 
 	boolean _addTraceSteps 
 	
@@ -362,19 +369,15 @@ class SequenceBuilder {
 	}
 	
 	 
-	
+	/** 
+	 * Defines the execution sequence that will be performed when the statechart will be entered.
+	 */
 	def defineStatechartEnterSequence(ExecutionFlow flow, Statechart sc) {
 
 		val enterSequence = sexec.factory.createSequence
 		enterSequence.name = "enter"
 		enterSequence.comment = "Default enter sequence for statechart " + sc.name
 	    	
-		for (VariableDefinition vd : sc.scopes.map(s|s.variables).flatten.filter(typeof(VariableDefinition))) {
-			if (vd.initialValue != null) {
-		 		enterSequence.steps.add(vd.createInitialization)
-			}
-		}
-		
 		for (tes : sc.timeEventSpecs ) {
 			val timeEvent = tes.createDerivedEvent    
 			val scheduleStep = timeEvent.newScheduleTimeEvent(tes.buildValueExpression)
@@ -394,6 +397,44 @@ class SequenceBuilder {
 		return enterSequence
 	}
 	
+	
+	/**
+	 * Defines the sequence of initialization steps. 
+	 * 
+	 * These steps basically include the initialization of variables.
+	 */
+	def defineStatechartInitSequence(ExecutionFlow flow, Statechart sc) {
+		
+		val initSequence = sexec.factory.createSequence
+		initSequence.name = "init"
+		initSequence.comment = "Default init sequence for statechart " + sc.name
+	    	
+		for (VariableDefinition vd : sc.scopes.map(s|s.variables).flatten.filter(typeof(VariableDefinition))) {
+			if (vd.effectiveInitialValue != null) {
+		 		initSequence.steps.add(vd.createInitialization)
+			}
+		}
+		
+		flow.initSequence = initSequence
+		return initSequence
+	}
+	
+	
+	def effectiveInitialValue(VariableDefinition vd) {
+		if (vd.initialValue != null) {
+			return vd.initialValue
+		} else {
+			switch (vd) {
+				case vd.type.isBoolean: false.buildValue
+				case vd.type.isInteger: 0.buildValue
+				case vd.type.isReal: buildValue(0.0 as float)
+				case vd.type.isString: "".buildValue
+				default : null
+			}
+		}
+	}
+	
+	
 	def createInitialization(VariableDefinition vd) {
 		val execution = sexec.factory.createExecution
 		val assignment = stext.factory.createAssignmentExpression 
@@ -401,7 +442,7 @@ class SequenceBuilder {
 		reference.reference = vd
 		assignment.varRef = reference
 		assignment.operator = AssignmentOperator::ASSIGN
-		assignment.expression = vd.initialValue.copy
+		assignment.expression = vd.effectiveInitialValue.copy
 		execution.statement = assignment
 		return execution
 	}
@@ -452,5 +493,41 @@ class SequenceBuilder {
 		div
 	}
 
+
+	def Expression buildValue(boolean b) {
+		val PrimitiveValueExpression pve = stext.factory.createPrimitiveValueExpression
+		val BoolLiteral lit = stext.factory.createBoolLiteral
+		lit.value = b
+		pve.value = lit
+		
+		pve
+	}
+	
+	def Expression buildValue(int i) {
+		val PrimitiveValueExpression pve = stext.factory.createPrimitiveValueExpression
+		val IntLiteral lit = stext.factory.createIntLiteral
+		lit.value = i
+		pve.value = lit
+		
+		pve
+	}
+	
+	def Expression buildValue(float r) {
+		val PrimitiveValueExpression pve = stext.factory.createPrimitiveValueExpression
+		val RealLiteral lit = stext.factory.createRealLiteral
+		lit.value = r
+		pve.value = lit
+		
+		pve
+	}
+	
+	def Expression buildValue(String i) {
+		val PrimitiveValueExpression pve = stext.factory.createPrimitiveValueExpression
+		val StringLiteral lit = stext.factory.createStringLiteral
+		lit.value = i
+		pve.value = lit
+		
+		pve
+	}
 	
 }

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

@@ -52,7 +52,8 @@ import org.yakindu.sct.model.stext.stext.RegularEventSpec
 import org.yakindu.sct.model.stext.stext.StextFactory
 import org.yakindu.sct.model.stext.stext.TimeEventSpec
 import org.yakindu.sct.model.stext.stext.TimeEventType
-import org.yakindu.sct.model.stext.stext.VariableDefinition
+import org.yakindu.sct.model.stext.stext.VariableDefinition
+import org.yakindu.sct.model.sgraph.Exit
  
 
 
@@ -275,7 +276,8 @@ import org.yakindu.sct.model.stext.stext.VariableDefinition
 	def dispatch ExecutionNode mapped(State s) { s.create }
 	def dispatch ExecutionNode mapped(FinalState s) { s.create }
 	def dispatch ExecutionNode mapped(Choice s) { s.create }
-	def dispatch ExecutionNode mapped(Entry s) { s.create }
+	def dispatch ExecutionNode mapped(Entry s) { s.create }
+//	def dispatch ExecutionNode mapped(Exit s) { s.create }
 	def dispatch ExecutionNode mapped(Synchronization s) { s.create }
 
 

+ 22 - 4
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java

@@ -135,10 +135,18 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createExecutionEntryAdapter();
 			}
 			@Override
+			public Adapter caseExecutionExit(ExecutionExit object) {
+				return createExecutionExitAdapter();
+			}
+			@Override
 			public Adapter caseExecutionChoice(ExecutionChoice object) {
 				return createExecutionChoiceAdapter();
 			}
 			@Override
+			public Adapter caseExecutionSynchronization(ExecutionSynchronization object) {
+				return createExecutionSynchronizationAdapter();
+			}
+			@Override
 			public Adapter caseReaction(Reaction object) {
 				return createReactionAdapter();
 			}
@@ -239,10 +247,6 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createHistoryEntryAdapter();
 			}
 			@Override
-			public Adapter caseExecutionSynchronization(ExecutionSynchronization object) {
-				return createExecutionSynchronizationAdapter();
-			}
-			@Override
 			public Adapter caseScopedElement(ScopedElement object) {
 				return createScopedElementAdapter();
 			}
@@ -362,6 +366,20 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.ExecutionExit <em>Execution Exit</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.sct.model.sexec.ExecutionExit
+	 * @generated
+	 */
+	public Adapter createExecutionExitAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.ExecutionChoice <em>Execution Choice</em>}'.
 	 * <!-- begin-user-doc -->

+ 33 - 9
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java

@@ -167,6 +167,15 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case SexecPackage.EXECUTION_EXIT: {
+				ExecutionExit executionExit = (ExecutionExit)theEObject;
+				T result = caseExecutionExit(executionExit);
+				if (result == null) result = caseExecutionNode(executionExit);
+				if (result == null) result = caseMappedElement(executionExit);
+				if (result == null) result = caseNamedElement(executionExit);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case SexecPackage.EXECUTION_CHOICE: {
 				ExecutionChoice executionChoice = (ExecutionChoice)theEObject;
 				T result = caseExecutionChoice(executionChoice);
@@ -176,6 +185,15 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case SexecPackage.EXECUTION_SYNCHRONIZATION: {
+				ExecutionSynchronization executionSynchronization = (ExecutionSynchronization)theEObject;
+				T result = caseExecutionSynchronization(executionSynchronization);
+				if (result == null) result = caseExecutionNode(executionSynchronization);
+				if (result == null) result = caseMappedElement(executionSynchronization);
+				if (result == null) result = caseNamedElement(executionSynchronization);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case SexecPackage.REACTION: {
 				Reaction reaction = (Reaction)theEObject;
 				T result = caseReaction(reaction);
@@ -379,15 +397,6 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case SexecPackage.EXECUTION_SYNCHRONIZATION: {
-				ExecutionSynchronization executionSynchronization = (ExecutionSynchronization)theEObject;
-				T result = caseExecutionSynchronization(executionSynchronization);
-				if (result == null) result = caseExecutionNode(executionSynchronization);
-				if (result == null) result = caseMappedElement(executionSynchronization);
-				if (result == null) result = caseNamedElement(executionSynchronization);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -482,6 +491,21 @@ public class SexecSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Execution Exit</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Execution Exit</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseExecutionExit(ExecutionExit object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Execution Choice</em>'.
 	 * <!-- begin-user-doc -->

BIN
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.ModelSequencer.java._trace


BIN
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.SequenceBuilder.java._trace


BIN
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/.SexecElementMapping.java._trace


+ 1 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java

@@ -80,6 +80,7 @@ public class ModelSequencer {
     this.seqBuilder.defineShallowEnterSequences(ef, sc);
     this.seqBuilder.defineStatechartEnterSequence(ef, sc);
     this.seqBuilder.defineStatechartExitSequence(ef, sc);
+    this.seqBuilder.defineStatechartInitSequence(ef, sc);
     this.behaviorMapping.mapTransitions(sc, ef);
     this.behaviorMapping.mapEntries(sc, ef);
     this.behaviorMapping.mapLocalReactions(sc, ef);

+ 167 - 31
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.java

@@ -21,6 +21,8 @@ import org.eclipse.xtext.xbase.lib.IterableExtensions;
 import org.eclipse.xtext.xbase.lib.IteratorExtensions;
 import org.eclipse.xtext.xbase.lib.ListExtensions;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.base.types.ITypeSystemAccess;
+import org.yakindu.base.types.Type;
 import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.EnterState;
 import org.yakindu.sct.model.sexec.Execution;
@@ -59,13 +61,16 @@ import org.yakindu.sct.model.sgraph.Variable;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.stext.stext.AssignmentExpression;
 import org.yakindu.sct.model.stext.stext.AssignmentOperator;
+import org.yakindu.sct.model.stext.stext.BoolLiteral;
 import org.yakindu.sct.model.stext.stext.ElementReferenceExpression;
 import org.yakindu.sct.model.stext.stext.Expression;
 import org.yakindu.sct.model.stext.stext.IntLiteral;
 import org.yakindu.sct.model.stext.stext.MultiplicativeOperator;
 import org.yakindu.sct.model.stext.stext.NumericalMultiplyDivideExpression;
 import org.yakindu.sct.model.stext.stext.PrimitiveValueExpression;
+import org.yakindu.sct.model.stext.stext.RealLiteral;
 import org.yakindu.sct.model.stext.stext.StextFactory;
+import org.yakindu.sct.model.stext.stext.StringLiteral;
 import org.yakindu.sct.model.stext.stext.TimeEventSpec;
 import org.yakindu.sct.model.stext.stext.TimeUnit;
 import org.yakindu.sct.model.stext.stext.VariableDefinition;
@@ -90,6 +95,9 @@ public class SequenceBuilder {
   @Inject
   private TraceExtensions trace;
   
+  @Inject
+  private ITypeSystemAccess tsa;
+  
   @Inject
   @Named(value = "ADD_TRACES")
   private boolean _addTraceSteps;
@@ -667,6 +675,9 @@ public class SequenceBuilder {
     return exitSequence;
   }
   
+  /**
+   * Defines the execution sequence that will be performed when the statechart will be entered.
+   */
   public Sequence defineStatechartEnterSequence(final ExecutionFlow flow, final Statechart sc) {
     SexecFactory _factory = this.sexec.factory();
     final Sequence enterSequence = _factory.createSequence();
@@ -674,54 +685,35 @@ public class SequenceBuilder {
     String _name = sc.getName();
     String _plus = ("Default enter sequence for statechart " + _name);
     enterSequence.setComment(_plus);
-    EList<Scope> _scopes = sc.getScopes();
-    final Function1<Scope,EList<Variable>> _function = new Function1<Scope,EList<Variable>>() {
-        public EList<Variable> apply(final Scope s) {
-          EList<Variable> _variables = s.getVariables();
-          return _variables;
-        }
-      };
-    List<EList<Variable>> _map = ListExtensions.<Scope, EList<Variable>>map(_scopes, _function);
-    Iterable<Variable> _flatten = Iterables.<Variable>concat(_map);
-    Iterable<VariableDefinition> _filter = Iterables.<VariableDefinition>filter(_flatten, VariableDefinition.class);
-    for (final VariableDefinition vd : _filter) {
-      Expression _initialValue = vd.getInitialValue();
-      boolean _notEquals = (!Objects.equal(_initialValue, null));
-      if (_notEquals) {
-        EList<Step> _steps = enterSequence.getSteps();
-        Execution _createInitialization = this.createInitialization(vd);
-        _steps.add(_createInitialization);
-      }
-    }
     List<TimeEventSpec> _timeEventSpecs = this.sc.timeEventSpecs(sc);
     for (final TimeEventSpec tes : _timeEventSpecs) {
       {
         final TimeEvent timeEvent = this.mapping.createDerivedEvent(tes);
         Statement _buildValueExpression = this.buildValueExpression(tes);
         final ScheduleTimeEvent scheduleStep = this.mapping.newScheduleTimeEvent(timeEvent, _buildValueExpression);
-        EList<Step> _steps_1 = enterSequence.getSteps();
-        _steps_1.add(scheduleStep);
+        EList<Step> _steps = enterSequence.getSteps();
+        _steps.add(scheduleStep);
       }
     }
     Step _entryAction = flow.getEntryAction();
-    boolean _notEquals_1 = (!Objects.equal(_entryAction, null));
-    if (_notEquals_1) {
-      EList<Step> _steps_1 = enterSequence.getSteps();
+    boolean _notEquals = (!Objects.equal(_entryAction, null));
+    if (_notEquals) {
+      EList<Step> _steps = enterSequence.getSteps();
       Step _entryAction_1 = flow.getEntryAction();
       Call _newCall = this.mapping.newCall(_entryAction_1);
-      _steps_1.add(_newCall);
+      _steps.add(_newCall);
     }
     EList<Region> _regions = sc.getRegions();
     for (final Region r : _regions) {
       {
         final ExecutionRegion execRegion = this.mapping.create(r);
         Sequence _enterSequence = execRegion.getEnterSequence();
-        boolean _notEquals_2 = (!Objects.equal(_enterSequence, null));
-        if (_notEquals_2) {
-          EList<Step> _steps_2 = enterSequence.getSteps();
+        boolean _notEquals_1 = (!Objects.equal(_enterSequence, null));
+        if (_notEquals_1) {
+          EList<Step> _steps_1 = enterSequence.getSteps();
           Sequence _enterSequence_1 = execRegion.getEnterSequence();
           Call _newCall_1 = this.mapping.newCall(_enterSequence_1);
-          _steps_2.add(_newCall_1);
+          _steps_1.add(_newCall_1);
         }
       }
     }
@@ -729,6 +721,94 @@ public class SequenceBuilder {
     return enterSequence;
   }
   
+  /**
+   * Defines the sequence of initialization steps.
+   * 
+   * These steps basically include the initialization of variables.
+   */
+  public Sequence defineStatechartInitSequence(final ExecutionFlow flow, final Statechart sc) {
+    SexecFactory _factory = this.sexec.factory();
+    final Sequence initSequence = _factory.createSequence();
+    initSequence.setName("init");
+    String _name = sc.getName();
+    String _plus = ("Default init sequence for statechart " + _name);
+    initSequence.setComment(_plus);
+    EList<Scope> _scopes = sc.getScopes();
+    final Function1<Scope,EList<Variable>> _function = new Function1<Scope,EList<Variable>>() {
+        public EList<Variable> apply(final Scope s) {
+          EList<Variable> _variables = s.getVariables();
+          return _variables;
+        }
+      };
+    List<EList<Variable>> _map = ListExtensions.<Scope, EList<Variable>>map(_scopes, _function);
+    Iterable<Variable> _flatten = Iterables.<Variable>concat(_map);
+    Iterable<VariableDefinition> _filter = Iterables.<VariableDefinition>filter(_flatten, VariableDefinition.class);
+    for (final VariableDefinition vd : _filter) {
+      Expression _effectiveInitialValue = this.effectiveInitialValue(vd);
+      boolean _notEquals = (!Objects.equal(_effectiveInitialValue, null));
+      if (_notEquals) {
+        EList<Step> _steps = initSequence.getSteps();
+        Execution _createInitialization = this.createInitialization(vd);
+        _steps.add(_createInitialization);
+      }
+    }
+    flow.setInitSequence(initSequence);
+    return initSequence;
+  }
+  
+  public Expression effectiveInitialValue(final VariableDefinition vd) {
+    Expression _xifexpression = null;
+    Expression _initialValue = vd.getInitialValue();
+    boolean _notEquals = (!Objects.equal(_initialValue, null));
+    if (_notEquals) {
+      return vd.getInitialValue();
+    } else {
+      Expression _switchResult = null;
+      boolean _matched = false;
+      if (!_matched) {
+        Type _type = vd.getType();
+        boolean _isBoolean = this.tsa.isBoolean(_type);
+        if (_isBoolean) {
+          _matched=true;
+          Expression _buildValue = this.buildValue(false);
+          _switchResult = _buildValue;
+        }
+      }
+      if (!_matched) {
+        Type _type_1 = vd.getType();
+        boolean _isInteger = this.tsa.isInteger(_type_1);
+        if (_isInteger) {
+          _matched=true;
+          Expression _buildValue_1 = this.buildValue(0);
+          _switchResult = _buildValue_1;
+        }
+      }
+      if (!_matched) {
+        Type _type_2 = vd.getType();
+        boolean _isReal = this.tsa.isReal(_type_2);
+        if (_isReal) {
+          _matched=true;
+          Expression _buildValue_2 = this.buildValue(((float) 0.0));
+          _switchResult = _buildValue_2;
+        }
+      }
+      if (!_matched) {
+        Type _type_3 = vd.getType();
+        boolean _isString = this.tsa.isString(_type_3);
+        if (_isString) {
+          _matched=true;
+          Expression _buildValue_3 = this.buildValue("");
+          _switchResult = _buildValue_3;
+        }
+      }
+      if (!_matched) {
+        _switchResult = null;
+      }
+      _xifexpression = _switchResult;
+    }
+    return _xifexpression;
+  }
+  
   public Execution createInitialization(final VariableDefinition vd) {
     SexecFactory _factory = this.sexec.factory();
     final Execution execution = _factory.createExecution();
@@ -739,8 +819,8 @@ public class SequenceBuilder {
     reference.setReference(vd);
     assignment.setVarRef(reference);
     assignment.setOperator(AssignmentOperator.ASSIGN);
-    Expression _initialValue = vd.getInitialValue();
-    Expression _copy = EcoreUtil.<Expression>copy(_initialValue);
+    Expression _effectiveInitialValue = this.effectiveInitialValue(vd);
+    Expression _copy = EcoreUtil.<Expression>copy(_effectiveInitialValue);
     assignment.setExpression(_copy);
     execution.setStatement(assignment);
     return execution;
@@ -830,6 +910,62 @@ public class SequenceBuilder {
     return _xblockexpression;
   }
   
+  public Expression buildValue(final boolean b) {
+    PrimitiveValueExpression _xblockexpression = null;
+    {
+      StextFactory _factory = this.stext.factory();
+      final PrimitiveValueExpression pve = _factory.createPrimitiveValueExpression();
+      StextFactory _factory_1 = this.stext.factory();
+      final BoolLiteral lit = _factory_1.createBoolLiteral();
+      lit.setValue(b);
+      pve.setValue(lit);
+      _xblockexpression = (pve);
+    }
+    return _xblockexpression;
+  }
+  
+  public Expression buildValue(final int i) {
+    PrimitiveValueExpression _xblockexpression = null;
+    {
+      StextFactory _factory = this.stext.factory();
+      final PrimitiveValueExpression pve = _factory.createPrimitiveValueExpression();
+      StextFactory _factory_1 = this.stext.factory();
+      final IntLiteral lit = _factory_1.createIntLiteral();
+      lit.setValue(i);
+      pve.setValue(lit);
+      _xblockexpression = (pve);
+    }
+    return _xblockexpression;
+  }
+  
+  public Expression buildValue(final float r) {
+    PrimitiveValueExpression _xblockexpression = null;
+    {
+      StextFactory _factory = this.stext.factory();
+      final PrimitiveValueExpression pve = _factory.createPrimitiveValueExpression();
+      StextFactory _factory_1 = this.stext.factory();
+      final RealLiteral lit = _factory_1.createRealLiteral();
+      lit.setValue(r);
+      pve.setValue(lit);
+      _xblockexpression = (pve);
+    }
+    return _xblockexpression;
+  }
+  
+  public Expression buildValue(final String i) {
+    PrimitiveValueExpression _xblockexpression = null;
+    {
+      StextFactory _factory = this.stext.factory();
+      final PrimitiveValueExpression pve = _factory.createPrimitiveValueExpression();
+      StextFactory _factory_1 = this.stext.factory();
+      final StringLiteral lit = _factory_1.createStringLiteral();
+      lit.setValue(i);
+      pve.setValue(lit);
+      _xblockexpression = (pve);
+    }
+    return _xblockexpression;
+  }
+  
   public void defineStateEnterSequence(final NamedElement state) {
     if (state instanceof FinalState) {
       _defineStateEnterSequence((FinalState)state);

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

@@ -385,8 +385,7 @@
                    path="/tools/"
                    small_icon="icons/obj16/Final-State-16.png">
              </entry>
-             <!--
-               <entry
+             <entry
                    description="Creates an exit point"
                    id="org.yakindu.sct.ui.editor.Exit"
                    kind="tool"
@@ -395,7 +394,6 @@
                    path="/tools/"
                    small_icon="icons/obj16/Exit-Point-16.png">
              </entry>
-               -->
              <entry
                    description="Creates a choice"
                    id="org.yakindu.sct.ui.editor.Choice"

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

@@ -33,6 +33,8 @@ import org.yakindu.sct.model.stext.stext.FeatureCall;
 import org.yakindu.sct.model.stext.stext.IntLiteral;
 import org.yakindu.sct.model.stext.stext.Literal;
 import org.yakindu.sct.model.stext.stext.PrimitiveValueExpression;
+import org.yakindu.sct.model.stext.stext.RealLiteral;
+import org.yakindu.sct.model.stext.stext.StringLiteral;
 
 public class Assert {
 
@@ -88,6 +90,14 @@ public class Assert {
 				currentValue = Integer.toString(((IntLiteral) literal)
 						.getValue());
 			}
+			else if (literal instanceof RealLiteral) {
+				currentValue = Float.toString(((RealLiteral) literal)
+						.getValue());
+			}
+			else if (literal instanceof StringLiteral) {
+				currentValue = (((StringLiteral) literal)
+						.getValue());
+			}
 		}
 		assertEquals(expected, currentValue);
 	}

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

@@ -21,6 +21,7 @@ import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.Sequence;
 import org.yakindu.sct.model.sexec.Step;
 import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.InitializingTSC;
+import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.InitializingWithoutDefaultTSC;
 import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.MinimalTSC;
 import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.OrthogonalFlatTSC;
 import org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.SimpleFlatTSC;
@@ -95,7 +96,7 @@ public class ModelSequencerSCTest extends ModelSequencerTest {
 	}
 
 	/**
-	 * The enter step must contain variable initialization.
+	 * The enter step must not contain variable initialization.
 	 */
 	@Test
 	public void testSCEnterSequence_Variables() {
@@ -104,11 +105,50 @@ public class ModelSequencerSCTest extends ModelSequencerTest {
 		ExecutionFlow flow = sequencer.transform(tsc.sc);
 
 		assertNotNull(flow.getEnterSequence());
-		assertEquals(2, flow.getEnterSequence().getSteps().size());
+		assertEquals(1, flow.getEnterSequence().getSteps().size());
+
+		assertCall(flow.getEnterSequence(), 0, flow.getEntryAction());
+	}
+
+	/**
+	 * The init sequence must contain variable initialization.
+	 */
+	@Test
+	public void testSCInitSequence_Variables() {
+		InitializingTSC tsc = new InitializingTSC();
+
+		ExecutionFlow flow = sequencer.transform(tsc.sc);
+
+		assertNotNull(flow.getInitSequence());
+		assertEquals(1, flow.getInitSequence().getSteps().size());
 
-		assertAssignment(flow.getEnterSequence(), 0, "e1",
+		assertAssignment(flow.getInitSequence(), 0, "e1",
 				AssignmentOperator.ASSIGN, "true");
-		assertCall(flow.getEnterSequence(), 1, flow.getEntryAction());
+	}
+
+	/**
+	 * The init sequence must contain variable initialization for variables without default value.
+	 */
+	@Test
+	public void testSCInitSequence_VariablesWithoutDefaults() {
+		InitializingWithoutDefaultTSC tsc = new InitializingWithoutDefaultTSC();
+
+		ExecutionFlow flow = sequencer.transform(tsc.sc);
+
+		assertNotNull(flow.getInitSequence());
+		assertEquals(4, flow.getInitSequence().getSteps().size());
+
+		assertAssignment(flow.getInitSequence(), 0, "b",
+				AssignmentOperator.ASSIGN, "false");
+		
+		assertAssignment(flow.getInitSequence(), 1, "i",
+				AssignmentOperator.ASSIGN, "0");
+		
+		assertAssignment(flow.getInitSequence(), 2, "r",
+				AssignmentOperator.ASSIGN, "0.0");
+		
+		assertAssignment(flow.getInitSequence(), 3, "s",
+				AssignmentOperator.ASSIGN, "");
 	}
 
 	@Test

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

@@ -108,13 +108,32 @@ public class SCTTestUtil {
 		public Statechart sc = _createStatechart("test");
 		public InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
 		public VariableDefinition e1 = _createVariableDefinition("e1",
-				_createType("Boolean"), s_scope, _createValue(true));
+				_createType("boolean"), s_scope, _createValue(true));
 
 		public InitializingTSC() {
 		}
 
 	}
 
+	public static class InitializingWithoutDefaultTSC {
+		public Statechart sc = _createStatechart("test");
+		public InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
+		public VariableDefinition b = _createVariableDefinition("b",
+				_createType("boolean"), s_scope, null);
+		
+		public VariableDefinition i = _createVariableDefinition("i",
+				_createType("integer"), s_scope, null);
+		
+		public VariableDefinition r = _createVariableDefinition("r",
+				_createType("real"), s_scope, null);
+
+		public VariableDefinition s = _createVariableDefinition("s",
+				_createType("string"), s_scope, null);
+
+		public InitializingWithoutDefaultTSC() {
+		}
+	}
+
 	public static class SimpleFlatTSC {
 
 		public Statechart sc = _createStatechart("test");

+ 3 - 3
test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/util/StextTestFactory.java

@@ -299,12 +299,12 @@ public class StextTestFactory extends StextFactoryImpl {
 	}
 
 	public static PrimitiveValueExpression _createValue(boolean b) {
-		PrimitiveValueExpression assignment = StextFactory.eINSTANCE
+		PrimitiveValueExpression pve = StextFactory.eINSTANCE
 				.createPrimitiveValueExpression();
 		BoolLiteral boolLit = StextFactory.eINSTANCE.createBoolLiteral();
 		boolLit.setValue(b);
-		assignment.setValue(boolLit);
-		return assignment;
+		pve.setValue(boolLit);
+		return pve;
 	}
 
 }