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

Improved trnsformation and extended sesec model

terfloth@itemis.de 14 лет назад
Родитель
Сommit
588ce5df48
69 измененных файлов с 3005 добавлено и 563 удалено
  1. 29 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/templates/Dump.xpt
  2. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateCheck_condition_Statement.gif
  3. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionState_reactions_Reaction.gif
  4. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionState_reactions_Transition.gif
  5. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateIf_check_Check.gif
  6. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateIf_check_CheckRef.gif
  7. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_check_Check.gif
  8. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_check_CheckRef.gif
  9. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_Call.gif
  10. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_Check.gif
  11. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_CheckRef.gif
  12. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_Cycle.gif
  13. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_EnterState.gif
  14. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_Execution.gif
  15. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_ExitState.gif
  16. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_If.gif
  17. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_Sequence.gif
  18. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateReaction_effect_SequenceExecution.gif
  19. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateSequence_steps_Call.gif
  20. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateSequence_steps_Check.gif
  21. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateSequence_steps_CheckRef.gif
  22. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/Call.gif
  23. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/Check.gif
  24. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/CheckRef.gif
  25. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/Reaction.gif
  26. 12 0
      plugins/org.yakindu.sct.model.sexec.edit/plugin.properties
  27. 15 15
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SequenceExecutionItemProvider.java
  28. 161 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/CheckItemProvider.java
  29. 139 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/CheckRefItemProvider.java
  30. 1 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/EnterStateItemProvider.java
  31. 1 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionItemProvider.java
  32. 32 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionStateItemProvider.java
  33. 1 1
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExitStateItemProvider.java
  34. 11 5
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/IfItemProvider.java
  35. 235 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ReactionItemProvider.java
  36. 11 27
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SequenceItemProvider.java
  37. 82 10
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SexecItemProviderAdapterFactory.java
  38. 2 13
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/StepItemProvider.java
  39. 3 0
      plugins/org.yakindu.sct.model.sexec/.settings/org.eclipse.core.resources.prefs
  40. 32 13
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecore
  41. 18 4
      plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel
  42. 53 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Call.java
  43. 54 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Check.java
  44. 53 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/CheckRef.java
  45. 46 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionState.java
  46. 21 21
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/If.java
  47. 80 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Reaction.java
  48. 1 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Sequence.java
  49. 0 53
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SequenceExecution.java
  50. 30 3
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecFactory.java
  51. 481 89
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java
  52. 1 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Step.java
  53. 33 33
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SequenceExecutionImpl.java
  54. 180 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/CheckImpl.java
  55. 171 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/CheckRefImpl.java
  56. 96 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionStateImpl.java
  57. 75 62
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/IfImpl.java
  58. 246 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ReactionImpl.java
  59. 0 100
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SequenceImpl.java
  60. 39 6
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecFactoryImpl.java
  61. 160 28
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java
  62. 1 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/StepImpl.java
  63. 29 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/FactoryExtension.xtend
  64. 94 26
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend
  65. 27 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StatechartExtensions.xtend
  66. 65 11
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java
  67. 94 19
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java
  68. 2 2
      test-plugins/org.yakindu.sct.generator.cpp.test/src/org/yakindu/sct/generator/cpp/test/generator/CPPGeneratorTest.java
  69. 88 15
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerTest.java

+ 29 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/templates/Dump.xpt

@@ -28,6 +28,8 @@ Execution States:
 Name: «this.name»
 Simple Name: «this.simpleName»
 
+«EXPAND ReactionFunctions FOR this»
+
 Cycle: «EXPAND code FOR this.cycle»
 «ENDDEFINE»
 
@@ -39,7 +41,7 @@ Cycle: 
 
 
 «DEFINE code FOR If»
-		if («EXPAND code FOR condition») then «EXPAND code FOR this.thenStep»
+		if («EXPAND code FOR check») then «EXPAND code FOR this.thenStep»
 		«IF this.elseStep != null -»else «EXPAND code FOR this.elseStep»«ENDIF-»
 «ENDDEFINE»
 
@@ -51,6 +53,19 @@ Cycle: 
  exit «this.state.name -»
 «ENDDEFINE»
 
+«DEFINE code FOR Check -»
+«EXPAND code FOR this.condition -»
+«ENDDEFINE»
+
+
+«DEFINE code FOR CheckRef -»
+check_«this.check.name -»()
+«ENDDEFINE»
+
+«DEFINE code FOR Call -»
+take_«this.step.name -»()
+«ENDDEFINE»
+
 
 «DEFINE code FOR Step»
 !!! UNKNOWN STEP !!!
@@ -69,3 +84,16 @@ Cycle: 
 «DEFINE code FOR ElementReferenceExpression -»
 «this.value.name -»
 «ENDDEFINE»
+
+
+«DEFINE ReactionFunctions FOR ExecutionState»
+«FOREACH reactions AS r»
+public boolean check_«r.name»() {
+	«EXPAND code FOR r.check»
+}
+
+public void take_«r.name»() {
+	«EXPAND code FOR r.effect»
+}
+«ENDFOREACH»
+«ENDDEFINE»

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

@@ -54,3 +54,15 @@ _UI_StateVector_type = State Vector
 _UI_ExecutionFlow_stateVector_feature = State Vector
 _UI_StateVector_size_feature = Size
 _UI_StateVector_offset_feature = Offset
+_UI_Check_type = Check
+_UI_Check_condition_feature = Condition
+_UI_If_check_feature = Check
+_UI_Reaction_type = Reaction
+_UI_ExecutionState_reactions_feature = Reactions
+_UI_Reaction_check_feature = Check
+_UI_Reaction_effect_feature = Effect
+_UI_ExecutionState_leaf_feature = Leaf
+_UI_CheckRef_type = Check Ref
+_UI_CheckRef_check_feature = Check
+_UI_Call_type = Call
+_UI_Call_step_feature = Step

+ 15 - 15
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SequenceExecutionItemProvider.java

@@ -21,16 +21,16 @@ 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.SequenceExecution;
+import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.SexecPackage;
 
 /**
- * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.SequenceExecution} object.
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.Call} object.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @generated
  */
-public class SequenceExecutionItemProvider
+public class CallItemProvider
 	extends StepItemProvider
 	implements
 		IEditingDomainItemProvider,
@@ -44,7 +44,7 @@ public class SequenceExecutionItemProvider
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public SequenceExecutionItemProvider(AdapterFactory adapterFactory) {
+	public CallItemProvider(AdapterFactory adapterFactory) {
 		super(adapterFactory);
 	}
 
@@ -59,25 +59,25 @@ public class SequenceExecutionItemProvider
 		if (itemPropertyDescriptors == null) {
 			super.getPropertyDescriptors(object);
 
-			addSequencePropertyDescriptor(object);
+			addStepPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
 
 	/**
-	 * This adds a property descriptor for the Sequence feature.
+	 * This adds a property descriptor for the Step feature.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected void addSequencePropertyDescriptor(Object object) {
+	protected void addStepPropertyDescriptor(Object object) {
 		itemPropertyDescriptors.add
 			(createItemPropertyDescriptor
 				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
 				 getResourceLocator(),
-				 getString("_UI_SequenceExecution_sequence_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_SequenceExecution_sequence_feature", "_UI_SequenceExecution_type"),
-				 SexecPackage.Literals.SEQUENCE_EXECUTION__SEQUENCE,
+				 getString("_UI_Call_step_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Call_step_feature", "_UI_Call_type"),
+				 SexecPackage.Literals.CALL__STEP,
 				 true,
 				 false,
 				 true,
@@ -87,14 +87,14 @@ public class SequenceExecutionItemProvider
 	}
 
 	/**
-	 * This returns SequenceExecution.gif.
+	 * This returns Call.gif.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
 	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/SequenceExecution"));
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Call"));
 	}
 
 	/**
@@ -105,10 +105,10 @@ public class SequenceExecutionItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((SequenceExecution)object).getComment();
+		String label = ((Call)object).getName();
 		return label == null || label.length() == 0 ?
-			getString("_UI_SequenceExecution_type") :
-			getString("_UI_SequenceExecution_type") + " " + label;
+			getString("_UI_Call_type") :
+			getString("_UI_Call_type") + " " + label;
 	}
 
 	/**

+ 161 - 0
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/CheckItemProvider.java

@@ -0,0 +1,161 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+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.ecore.EStructuralFeature;
+
+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.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.sct.model.sexec.Check;
+import org.yakindu.sct.model.sexec.SexecPackage;
+
+import org.yakindu.sct.model.sgraph.SGraphFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.Check} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CheckItemProvider
+	extends StepItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CheckItemProvider(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 specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(SexecPackage.Literals.CHECK__CONDITION);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Check.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Check"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Check)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Check_type") :
+			getString("_UI_Check_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);
+
+		switch (notification.getFeatureID(Check.class)) {
+			case SexecPackage.CHECK__CONDITION:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		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);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.CHECK__CONDITION,
+				 SGraphFactory.eINSTANCE.createStatement()));
+	}
+
+}

+ 139 - 0
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/CheckRefItemProvider.java

@@ -0,0 +1,139 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+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.ComposeableAdapterFactory;
+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.CheckRef;
+import org.yakindu.sct.model.sexec.SexecPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.CheckRef} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CheckRefItemProvider
+	extends CheckItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CheckRefItemProvider(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);
+
+			addCheckPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Check feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCheckPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CheckRef_check_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CheckRef_check_feature", "_UI_CheckRef_type"),
+				 SexecPackage.Literals.CHECK_REF__CHECK,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns CheckRef.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/CheckRef"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((CheckRef)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_CheckRef_type") :
+			getString("_UI_CheckRef_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);
+	}
+
+}

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

@@ -105,7 +105,7 @@ public class EnterStateItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((EnterState)object).getComment();
+		String label = ((EnterState)object).getName();
 		return label == null || label.length() == 0 ?
 			getString("_UI_EnterState_type") :
 			getString("_UI_EnterState_type") + " " + label;

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

@@ -105,7 +105,7 @@ public class ExecutionItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((Execution)object).getComment();
+		String label = ((Execution)object).getName();
 		return label == null || label.length() == 0 ?
 			getString("_UI_Execution_type") :
 			getString("_UI_Execution_type") + " " + label;

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

@@ -28,6 +28,7 @@ import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.yakindu.sct.model.sexec.ExecutionState;
 import org.yakindu.sct.model.sexec.SexecFactory;
 import org.yakindu.sct.model.sexec.SexecPackage;
+import org.yakindu.sct.model.sgraph.SGraphFactory;
 
 /**
  * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.ExecutionState} object.
@@ -65,6 +66,7 @@ public class ExecutionStateItemProvider
 			super.getPropertyDescriptors(object);
 
 			addSimpleNamePropertyDescriptor(object);
+			addLeafPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -91,6 +93,28 @@ public class ExecutionStateItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Leaf feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLeafPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExecutionState_leaf_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExecutionState_leaf_feature", "_UI_ExecutionState_type"),
+				 SexecPackage.Literals.EXECUTION_STATE__LEAF,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
@@ -104,6 +128,7 @@ public class ExecutionStateItemProvider
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
 			childrenFeatures.add(SexecPackage.Literals.EXECUTION_STATE__CYCLE);
+			childrenFeatures.add(SexecPackage.Literals.EXECUTION_STATE__REACTIONS);
 		}
 		return childrenFeatures;
 	}
@@ -159,9 +184,11 @@ public class ExecutionStateItemProvider
 
 		switch (notification.getFeatureID(ExecutionState.class)) {
 			case SexecPackage.EXECUTION_STATE__SIMPLE_NAME:
+			case SexecPackage.EXECUTION_STATE__LEAF:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case SexecPackage.EXECUTION_STATE__CYCLE:
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -183,6 +210,11 @@ public class ExecutionStateItemProvider
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_STATE__CYCLE,
 				 SexecFactory.eINSTANCE.createCycle()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_STATE__REACTIONS,
+				 SexecFactory.eINSTANCE.createReaction()));
 	}
 
 }

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

@@ -105,7 +105,7 @@ public class ExitStateItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((ExitState)object).getComment();
+		String label = ((ExitState)object).getName();
 		return label == null || label.length() == 0 ?
 			getString("_UI_ExitState_type") :
 			getString("_UI_ExitState_type") + " " + label;

+ 11 - 5
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/IfItemProvider.java

@@ -25,6 +25,7 @@ import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 
 import org.yakindu.sct.model.sexec.If;
+import org.yakindu.sct.model.sexec.SexecFactory;
 import org.yakindu.sct.model.sexec.SexecPackage;
 import org.yakindu.sct.model.sgraph.SGraphFactory;
 
@@ -125,7 +126,7 @@ public class IfItemProvider
 	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
 		if (childrenFeatures == null) {
 			super.getChildrenFeatures(object);
-			childrenFeatures.add(SexecPackage.Literals.IF__CONDITION);
+			childrenFeatures.add(SexecPackage.Literals.IF__CHECK);
 		}
 		return childrenFeatures;
 	}
@@ -162,7 +163,7 @@ public class IfItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((If)object).getComment();
+		String label = ((If)object).getName();
 		return label == null || label.length() == 0 ?
 			getString("_UI_If_type") :
 			getString("_UI_If_type") + " " + label;
@@ -180,7 +181,7 @@ public class IfItemProvider
 		updateChildren(notification);
 
 		switch (notification.getFeatureID(If.class)) {
-			case SexecPackage.IF__CONDITION:
+			case SexecPackage.IF__CHECK:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
 		}
@@ -200,8 +201,13 @@ public class IfItemProvider
 
 		newChildDescriptors.add
 			(createChildParameter
-				(SexecPackage.Literals.IF__CONDITION,
-				 SGraphFactory.eINSTANCE.createStatement()));
+				(SexecPackage.Literals.IF__CHECK,
+				 SexecFactory.eINSTANCE.createCheck()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.IF__CHECK,
+				 SexecFactory.eINSTANCE.createCheckRef()));
 	}
 
 }

+ 235 - 0
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ReactionItemProvider.java

@@ -0,0 +1,235 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+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.ecore.EStructuralFeature;
+
+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.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.sct.model.sexec.Reaction;
+import org.yakindu.sct.model.sexec.SexecFactory;
+import org.yakindu.sct.model.sexec.SexecPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.Reaction} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ReactionItemProvider
+	extends NamedElementItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ReactionItemProvider(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 specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(SexecPackage.Literals.REACTION__CHECK);
+			childrenFeatures.add(SexecPackage.Literals.REACTION__EFFECT);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Reaction.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Reaction"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Reaction)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Reaction_type") :
+			getString("_UI_Reaction_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);
+
+		switch (notification.getFeatureID(Reaction.class)) {
+			case SexecPackage.REACTION__CHECK:
+			case SexecPackage.REACTION__EFFECT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		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);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__CHECK,
+				 SexecFactory.eINSTANCE.createCheck()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__CHECK,
+				 SexecFactory.eINSTANCE.createCheckRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createSequence()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createCycle()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createCheck()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createIf()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createExecution()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createEnterState()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createExitState()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createCall()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.REACTION__EFFECT,
+				 SexecFactory.eINSTANCE.createCheckRef()));
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify =
+			childFeature == SexecPackage.Literals.REACTION__CHECK ||
+			childFeature == SexecPackage.Literals.REACTION__EFFECT;
+
+		if (qualify) {
+			return getString
+				("_UI_CreateChild_text2",
+				 new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+}

+ 11 - 27
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SequenceItemProvider.java

@@ -64,33 +64,10 @@ public class SequenceItemProvider
 		if (itemPropertyDescriptors == null) {
 			super.getPropertyDescriptors(object);
 
-			addNamePropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
 
-	/**
-	 * This adds a property descriptor for the Name feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addNamePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_NamedElement_name_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_NamedElement_name_feature", "_UI_NamedElement_type"),
-				 SexecPackage.Literals.NAMED_ELEMENT__NAME,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
 	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
@@ -158,9 +135,6 @@ public class SequenceItemProvider
 		updateChildren(notification);
 
 		switch (notification.getFeatureID(Sequence.class)) {
-			case SexecPackage.SEQUENCE__NAME:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
 			case SexecPackage.SEQUENCE__STEPS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
@@ -189,6 +163,11 @@ public class SequenceItemProvider
 				(SexecPackage.Literals.SEQUENCE__STEPS,
 				 SexecFactory.eINSTANCE.createCycle()));
 
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.SEQUENCE__STEPS,
+				 SexecFactory.eINSTANCE.createCheck()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.SEQUENCE__STEPS,
@@ -212,7 +191,12 @@ public class SequenceItemProvider
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.SEQUENCE__STEPS,
-				 SexecFactory.eINSTANCE.createSequenceExecution()));
+				 SexecFactory.eINSTANCE.createCall()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.SEQUENCE__STEPS,
+				 SexecFactory.eINSTANCE.createCheckRef()));
 	}
 
 }

+ 82 - 10
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SexecItemProviderAdapterFactory.java

@@ -121,6 +121,29 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		return executionStateItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.Reaction} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ReactionItemProvider reactionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.Reaction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createReactionAdapter() {
+		if (reactionItemProvider == null) {
+			reactionItemProvider = new ReactionItemProvider(this);
+		}
+
+		return reactionItemProvider;
+	}
+
 	/**
 	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.NamedElement} instances.
 	 * <!-- begin-user-doc -->
@@ -167,6 +190,29 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		return cycleItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.Check} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CheckItemProvider checkItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.Check}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCheckAdapter() {
+		if (checkItemProvider == null) {
+			checkItemProvider = new CheckItemProvider(this);
+		}
+
+		return checkItemProvider;
+	}
+
 	/**
 	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.Sequence} instances.
 	 * <!-- begin-user-doc -->
@@ -283,26 +329,49 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.SequenceExecution} instances.
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.Call} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CallItemProvider callItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.Call}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCallAdapter() {
+		if (callItemProvider == null) {
+			callItemProvider = new CallItemProvider(this);
+		}
+
+		return callItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.CheckRef} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected SequenceExecutionItemProvider sequenceExecutionItemProvider;
+	protected CheckRefItemProvider checkRefItemProvider;
 
 	/**
-	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.SequenceExecution}.
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.CheckRef}.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
-	public Adapter createSequenceExecutionAdapter() {
-		if (sequenceExecutionItemProvider == null) {
-			sequenceExecutionItemProvider = new SequenceExecutionItemProvider(this);
+	public Adapter createCheckRefAdapter() {
+		if (checkRefItemProvider == null) {
+			checkRefItemProvider = new CheckRefItemProvider(this);
 		}
 
-		return sequenceExecutionItemProvider;
+		return checkRefItemProvider;
 	}
 
 	/**
@@ -429,15 +498,18 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 	public void dispose() {
 		if (executionFlowItemProvider != null) executionFlowItemProvider.dispose();
 		if (executionStateItemProvider != null) executionStateItemProvider.dispose();
+		if (reactionItemProvider != null) reactionItemProvider.dispose();
+		if (stateVectorItemProvider != null) stateVectorItemProvider.dispose();
 		if (namedElementItemProvider != null) namedElementItemProvider.dispose();
-		if (cycleItemProvider != null) cycleItemProvider.dispose();
 		if (sequenceItemProvider != null) sequenceItemProvider.dispose();
+		if (cycleItemProvider != null) cycleItemProvider.dispose();
+		if (checkItemProvider != null) checkItemProvider.dispose();
 		if (ifItemProvider != null) ifItemProvider.dispose();
 		if (executionItemProvider != null) executionItemProvider.dispose();
 		if (enterStateItemProvider != null) enterStateItemProvider.dispose();
 		if (exitStateItemProvider != null) exitStateItemProvider.dispose();
-		if (sequenceExecutionItemProvider != null) sequenceExecutionItemProvider.dispose();
-		if (stateVectorItemProvider != null) stateVectorItemProvider.dispose();
+		if (callItemProvider != null) callItemProvider.dispose();
+		if (checkRefItemProvider != null) checkRefItemProvider.dispose();
 	}
 
 }

+ 2 - 13
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/StepItemProvider.java

@@ -36,7 +36,7 @@ import org.yakindu.sct.model.sexec.Step;
  * @generated
  */
 public class StepItemProvider
-	extends ItemProviderAdapter
+	extends NamedElementItemProvider
 	implements
 		IEditingDomainItemProvider,
 		IStructuredItemContentProvider,
@@ -99,7 +99,7 @@ public class StepItemProvider
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((Step)object).getComment();
+		String label = ((Step)object).getName();
 		return label == null || label.length() == 0 ?
 			getString("_UI_Step_type") :
 			getString("_UI_Step_type") + " " + label;
@@ -136,15 +136,4 @@ public class StepItemProvider
 		super.collectNewChildDescriptors(newChildDescriptors, object);
 	}
 
-	/**
-	 * Return the resource locator for this item provider's resources.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ResourceLocator getResourceLocator() {
-		return SexecEditPlugin.INSTANCE;
-	}
-
 }

+ 3 - 0
plugins/org.yakindu.sct.model.sexec/.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,3 @@
+#Tue Sep 13 11:56:39 CEST 2011
+eclipse.preferences.version=1
+encoding//model/sexec.ecorediag=UTF-8

+ 32 - 13
plugins/org.yakindu.sct.model.sexec/model/sexec.ecore

@@ -17,23 +17,45 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="simpleName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="cycle" eType="#//Cycle"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reactions" upperBound="-1"
+        eType="#//Reaction" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="leaf" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Reaction" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="check" eType="#//Check"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="effect" eType="#//Step"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StateVector">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="size" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="1"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="0"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NamedElement">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Cycle" eSuperTypes="#//Sequence"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Step" abstract="true">
+  <eClassifiers xsi:type="ecore:EClass" name="Step" abstract="true" eSuperTypes="#//NamedElement">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Sequence" eSuperTypes="#//Step #//NamedElement">
+  <eClassifiers xsi:type="ecore:EClass" name="Sequence" eSuperTypes="#//Step">
     <eStructuralFeatures xsi:type="ecore:EReference" name="steps" upperBound="-1"
         eType="#//Step" containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="If" eSuperTypes="#//Step">
+  <eClassifiers xsi:type="ecore:EClass" name="Cycle" eSuperTypes="#//Sequence"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Check" eSuperTypes="#//Step">
     <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//Statement"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="thenStep" eType="#//Step"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="elseStep" eType="#//Step"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="If" eSuperTypes="#//Step">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="check" eType="#//Check"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenStep" eType="#//Step"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseStep" eType="#//Step"
+        containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Execution" eSuperTypes="#//Step">
     <eStructuralFeatures xsi:type="ecore:EReference" name="statement" eType="ecore:EClass ../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//Statement"/>
@@ -44,13 +66,10 @@
   <eClassifiers xsi:type="ecore:EClass" name="ExitState" eSuperTypes="#//Step">
     <eStructuralFeatures xsi:type="ecore:EReference" name="state" eType="#//ExecutionState"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="SequenceExecution" eSuperTypes="#//Step">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="sequence" eType="#//Sequence"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Call" eSuperTypes="#//Step">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="step" eType="#//Step"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="StateVector">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="size" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
-        defaultValueLiteral="1"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
-        defaultValueLiteral="0"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CheckRef" eSuperTypes="#//Check">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="check" eType="#//Check"/>
   </eClassifiers>
 </ecore:EPackage>

+ 18 - 4
plugins/org.yakindu.sct.model.sexec/model/sexec.genmodel

@@ -10,25 +10,39 @@
     <genClasses ecoreClass="sexec.ecore#//ExecutionFlow">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/states"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/sequences"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/enterSequence"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionFlow/stateVector"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//ExecutionState">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sexec.ecore#//ExecutionState/simpleName"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionState/cycle"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//ExecutionState/reactions"/>
+    </genClasses>
+    <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"/>
+    </genClasses>
+    <genClasses ecoreClass="sexec.ecore#//StateVector">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sexec.ecore#//StateVector/size"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sexec.ecore#//StateVector/offset"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//NamedElement">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sexec.ecore#//NamedElement/name"/>
     </genClasses>
-    <genClasses ecoreClass="sexec.ecore#//Cycle"/>
     <genClasses image="false" ecoreClass="sexec.ecore#//Step">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sexec.ecore#//Step/comment"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//Sequence">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//Sequence/steps"/>
     </genClasses>
+    <genClasses ecoreClass="sexec.ecore#//Cycle"/>
+    <genClasses ecoreClass="sexec.ecore#//Check">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//Check/condition"/>
+    </genClasses>
     <genClasses ecoreClass="sexec.ecore#//If">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//If/condition"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//If/then"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//If/else"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sexec.ecore#//If/check"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//If/thenStep"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//If/elseStep"/>
     </genClasses>
     <genClasses ecoreClass="sexec.ecore#//Execution">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sexec.ecore#//Execution/statement"/>

+ 53 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Call.java

@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Call</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.Call#getStep <em>Step</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.sct.model.sexec.SexecPackage#getCall()
+ * @model
+ * @generated
+ */
+public interface Call extends Step {
+	/**
+	 * Returns the value of the '<em><b>Step</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Step</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Step</em>' reference.
+	 * @see #setStep(Step)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getCall_Step()
+	 * @model
+	 * @generated
+	 */
+	Step getStep();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.Call#getStep <em>Step</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Step</em>' reference.
+	 * @see #getStep()
+	 * @generated
+	 */
+	void setStep(Step value);
+
+} // Call

+ 54 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Check.java

@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec;
+
+import org.yakindu.sct.model.sgraph.Statement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Check</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.Check#getCondition <em>Condition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.sct.model.sexec.SexecPackage#getCheck()
+ * @model
+ * @generated
+ */
+public interface Check extends Step {
+	/**
+	 * Returns the value of the '<em><b>Condition</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Condition</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>Condition</em>' containment reference.
+	 * @see #setCondition(Statement)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getCheck_Condition()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Statement getCondition();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.Check#getCondition <em>Condition</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Condition</em>' containment reference.
+	 * @see #getCondition()
+	 * @generated
+	 */
+	void setCondition(Statement value);
+
+} // Check

+ 53 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/CheckRef.java

@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Check Ref</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.CheckRef#getCheck <em>Check</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.sct.model.sexec.SexecPackage#getCheckRef()
+ * @model
+ * @generated
+ */
+public interface CheckRef extends Check {
+	/**
+	 * Returns the value of the '<em><b>Check</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Check</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Check</em>' reference.
+	 * @see #setCheck(Check)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getCheckRef_Check()
+	 * @model
+	 * @generated
+	 */
+	Check getCheck();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.CheckRef#getCheck <em>Check</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Check</em>' reference.
+	 * @see #getCheck()
+	 * @generated
+	 */
+	void setCheck(Check value);
+
+} // CheckRef

+ 46 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionState.java

@@ -6,6 +6,7 @@
  */
 package org.yakindu.sct.model.sexec;
 
+import org.eclipse.emf.common.util.EList;
 
 /**
  * <!-- begin-user-doc -->
@@ -17,6 +18,8 @@ package org.yakindu.sct.model.sexec;
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionState#getSimpleName <em>Simple Name</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.ExecutionState#getCycle <em>Cycle</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.ExecutionState#getReactions <em>Reactions</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.ExecutionState#isLeaf <em>Leaf</em>}</li>
  * </ul>
  * </p>
  *
@@ -77,4 +80,47 @@ public interface ExecutionState extends NamedElement {
 	 */
 	void setCycle(Cycle value);
 
+	/**
+	 * Returns the value of the '<em><b>Reactions</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.sct.model.sexec.Reaction}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Reactions</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Reactions</em>' containment reference list.
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionState_Reactions()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Reaction> getReactions();
+
+	/**
+	 * Returns the value of the '<em><b>Leaf</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Leaf</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Leaf</em>' attribute.
+	 * @see #setLeaf(boolean)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getExecutionState_Leaf()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isLeaf();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.ExecutionState#isLeaf <em>Leaf</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Leaf</em>' attribute.
+	 * @see #isLeaf()
+	 * @generated
+	 */
+	void setLeaf(boolean value);
+
 } // ExecutionState

+ 21 - 21
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/If.java

@@ -16,7 +16,7 @@ import org.yakindu.sct.model.sgraph.Statement;
  * <p>
  * The following features are supported:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sexec.If#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.If#getCheck <em>Check</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.If#getThenStep <em>Then Step</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.If#getElseStep <em>Else Step</em>}</li>
  * </ul>
@@ -28,78 +28,78 @@ import org.yakindu.sct.model.sgraph.Statement;
  */
 public interface If extends Step {
 	/**
-	 * Returns the value of the '<em><b>Condition</b></em>' containment reference.
+	 * Returns the value of the '<em><b>Check</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Condition</em>' containment reference isn't clear,
+	 * If the meaning of the '<em>Check</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>Condition</em>' containment reference.
-	 * @see #setCondition(Statement)
-	 * @see org.yakindu.sct.model.sexec.SexecPackage#getIf_Condition()
+	 * @return the value of the '<em>Check</em>' containment reference.
+	 * @see #setCheck(Check)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getIf_Check()
 	 * @model containment="true"
 	 * @generated
 	 */
-	Statement getCondition();
+	Check getCheck();
 
 	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getCondition <em>Condition</em>}' containment reference.
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getCheck <em>Check</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Condition</em>' containment reference.
-	 * @see #getCondition()
+	 * @param value the new value of the '<em>Check</em>' containment reference.
+	 * @see #getCheck()
 	 * @generated
 	 */
-	void setCondition(Statement value);
+	void setCheck(Check value);
 
 	/**
-	 * Returns the value of the '<em><b>Then Step</b></em>' reference.
+	 * Returns the value of the '<em><b>Then Step</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Then Step</em>' reference isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Then Step</em>' reference.
+	 * @return the value of the '<em>Then Step</em>' containment reference.
 	 * @see #setThenStep(Step)
 	 * @see org.yakindu.sct.model.sexec.SexecPackage#getIf_ThenStep()
-	 * @model
+	 * @model containment="true"
 	 * @generated
 	 */
 	Step getThenStep();
 
 	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getThenStep <em>Then Step</em>}' reference.
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getThenStep <em>Then Step</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Then Step</em>' reference.
+	 * @param value the new value of the '<em>Then Step</em>' containment reference.
 	 * @see #getThenStep()
 	 * @generated
 	 */
 	void setThenStep(Step value);
 
 	/**
-	 * Returns the value of the '<em><b>Else Step</b></em>' reference.
+	 * Returns the value of the '<em><b>Else Step</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Else Step</em>' reference isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Else Step</em>' reference.
+	 * @return the value of the '<em>Else Step</em>' containment reference.
 	 * @see #setElseStep(Step)
 	 * @see org.yakindu.sct.model.sexec.SexecPackage#getIf_ElseStep()
-	 * @model
+	 * @model containment="true"
 	 * @generated
 	 */
 	Step getElseStep();
 
 	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getElseStep <em>Else Step</em>}' reference.
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.If#getElseStep <em>Else Step</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Else Step</em>' reference.
+	 * @param value the new value of the '<em>Else Step</em>' containment reference.
 	 * @see #getElseStep()
 	 * @generated
 	 */

+ 80 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Reaction.java

@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Reaction</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.Reaction#getCheck <em>Check</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.Reaction#getEffect <em>Effect</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.sct.model.sexec.SexecPackage#getReaction()
+ * @model
+ * @generated
+ */
+public interface Reaction extends NamedElement {
+	/**
+	 * Returns the value of the '<em><b>Check</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Check</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>Check</em>' containment reference.
+	 * @see #setCheck(Check)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getReaction_Check()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Check getCheck();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.Reaction#getCheck <em>Check</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Check</em>' containment reference.
+	 * @see #getCheck()
+	 * @generated
+	 */
+	void setCheck(Check value);
+
+	/**
+	 * Returns the value of the '<em><b>Effect</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Effect</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>Effect</em>' containment reference.
+	 * @see #setEffect(Step)
+	 * @see org.yakindu.sct.model.sexec.SexecPackage#getReaction_Effect()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Step getEffect();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.Reaction#getEffect <em>Effect</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Effect</em>' containment reference.
+	 * @see #getEffect()
+	 * @generated
+	 */
+	void setEffect(Step value);
+
+} // Reaction

+ 1 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Sequence.java

@@ -24,7 +24,7 @@ import org.eclipse.emf.common.util.EList;
  * @model
  * @generated
  */
-public interface Sequence extends Step, NamedElement {
+public interface Sequence extends Step {
 	/**
 	 * Returns the value of the '<em><b>Steps</b></em>' containment reference list.
 	 * The list contents are of type {@link org.yakindu.sct.model.sexec.Step}.

+ 0 - 53
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SequenceExecution.java

@@ -1,53 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.yakindu.sct.model.sexec;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Sequence Execution</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.yakindu.sct.model.sexec.SequenceExecution#getSequence <em>Sequence</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.yakindu.sct.model.sexec.SexecPackage#getSequenceExecution()
- * @model
- * @generated
- */
-public interface SequenceExecution extends Step {
-	/**
-	 * Returns the value of the '<em><b>Sequence</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Sequence</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Sequence</em>' reference.
-	 * @see #setSequence(Sequence)
-	 * @see org.yakindu.sct.model.sexec.SexecPackage#getSequenceExecution_Sequence()
-	 * @model
-	 * @generated
-	 */
-	Sequence getSequence();
-
-	/**
-	 * Sets the value of the '{@link org.yakindu.sct.model.sexec.SequenceExecution#getSequence <em>Sequence</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Sequence</em>' reference.
-	 * @see #getSequence()
-	 * @generated
-	 */
-	void setSequence(Sequence value);
-
-} // SequenceExecution

+ 30 - 3
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecFactory.java

@@ -43,6 +43,15 @@ public interface SexecFactory extends EFactory {
 	 */
 	ExecutionState createExecutionState();
 
+	/**
+	 * Returns a new object of class '<em>Reaction</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Reaction</em>'.
+	 * @generated
+	 */
+	Reaction createReaction();
+
 	/**
 	 * Returns a new object of class '<em>Named Element</em>'.
 	 * <!-- begin-user-doc -->
@@ -61,6 +70,15 @@ public interface SexecFactory extends EFactory {
 	 */
 	Cycle createCycle();
 
+	/**
+	 * Returns a new object of class '<em>Check</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Check</em>'.
+	 * @generated
+	 */
+	Check createCheck();
+
 	/**
 	 * Returns a new object of class '<em>Sequence</em>'.
 	 * <!-- begin-user-doc -->
@@ -107,13 +125,22 @@ public interface SexecFactory extends EFactory {
 	ExitState createExitState();
 
 	/**
-	 * Returns a new object of class '<em>Sequence Execution</em>'.
+	 * Returns a new object of class '<em>Call</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Call</em>'.
+	 * @generated
+	 */
+	Call createCall();
+
+	/**
+	 * Returns a new object of class '<em>Check Ref</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Sequence Execution</em>'.
+	 * @return a new object of class '<em>Check Ref</em>'.
 	 * @generated
 	 */
-	SequenceExecution createSequenceExecution();
+	CheckRef createCheckRef();
 
 	/**
 	 * Returns a new object of class '<em>State Vector</em>'.

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

@@ -141,7 +141,7 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getNamedElement()
 	 * @generated
 	 */
-	int NAMED_ELEMENT = 2;
+	int NAMED_ELEMENT = 4;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -198,6 +198,24 @@ public interface SexecPackage extends EPackage {
 	 */
 	int EXECUTION_STATE__CYCLE = NAMED_ELEMENT_FEATURE_COUNT + 1;
 
+	/**
+	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_STATE__REACTIONS = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Leaf</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_STATE__LEAF = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
 	/**
 	 * The number of structural features of the '<em>Execution State</em>' class.
 	 * <!-- begin-user-doc -->
@@ -205,35 +223,63 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int EXECUTION_STATE_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 2;
+	int EXECUTION_STATE_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 4;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StepImpl <em>Step</em>}' class.
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ReactionImpl <em>Reaction</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.StepImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStep()
+	 * @see org.yakindu.sct.model.sexec.impl.ReactionImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getReaction()
 	 * @generated
 	 */
-	int STEP = 4;
+	int REACTION = 2;
 
 	/**
-	 * The feature id for the '<em><b>Comment</b></em>' attribute.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STEP__COMMENT = 0;
+	int REACTION__NAME = NAMED_ELEMENT__NAME;
 
 	/**
-	 * The number of structural features of the '<em>Step</em>' class.
+	 * The feature id for the '<em><b>Check</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STEP_FEATURE_COUNT = 1;
+	int REACTION__CHECK = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Effect</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REACTION__EFFECT = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Reaction</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REACTION_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StepImpl <em>Step</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.StepImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStep()
+	 * @generated
+	 */
+	int STEP = 5;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.SequenceImpl <em>Sequence</em>}' class.
@@ -243,16 +289,104 @@ public interface SexecPackage extends EPackage {
 	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSequence()
 	 * @generated
 	 */
-	int SEQUENCE = 5;
+	int SEQUENCE = 6;
 
 	/**
-	 * The feature id for the '<em><b>Comment</b></em>' attribute.
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CycleImpl <em>Cycle</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.CycleImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCycle()
+	 * @generated
+	 */
+	int CYCLE = 7;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CheckImpl <em>Check</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.CheckImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheck()
+	 * @generated
+	 */
+	int CHECK = 8;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.IfImpl <em>If</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.IfImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getIf()
+	 * @generated
+	 */
+	int IF = 9;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionImpl <em>Execution</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ExecutionImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecution()
+	 * @generated
+	 */
+	int EXECUTION = 10;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.EnterStateImpl <em>Enter State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.EnterStateImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getEnterState()
+	 * @generated
+	 */
+	int ENTER_STATE = 11;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExitStateImpl <em>Exit State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ExitStateImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExitState()
+	 * @generated
+	 */
+	int EXIT_STATE = 12;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateVectorImpl <em>State Vector</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.StateVectorImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateVector()
+	 * @generated
+	 */
+	int STATE_VECTOR = 3;
+
+	/**
+	 * The feature id for the '<em><b>Size</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE__COMMENT = STEP__COMMENT;
+	int STATE_VECTOR__SIZE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Offset</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_VECTOR__OFFSET = 1;
+
+	/**
+	 * The number of structural features of the '<em>State Vector</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_VECTOR_FEATURE_COUNT = 2;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -261,35 +395,34 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE__NAME = STEP_FEATURE_COUNT + 0;
+	int STEP__NAME = NAMED_ELEMENT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Steps</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Comment</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE__STEPS = STEP_FEATURE_COUNT + 1;
+	int STEP__COMMENT = NAMED_ELEMENT_FEATURE_COUNT + 0;
 
 	/**
-	 * The number of structural features of the '<em>Sequence</em>' class.
+	 * The number of structural features of the '<em>Step</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE_FEATURE_COUNT = STEP_FEATURE_COUNT + 2;
+	int STEP_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.CycleImpl <em>Cycle</em>}' class.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.CycleImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCycle()
 	 * @generated
+	 * @ordered
 	 */
-	int CYCLE = 3;
+	int SEQUENCE__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -298,7 +431,25 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int CYCLE__COMMENT = SEQUENCE__COMMENT;
+	int SEQUENCE__COMMENT = STEP__COMMENT;
+
+	/**
+	 * The feature id for the '<em><b>Steps</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE__STEPS = STEP_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Sequence</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -309,6 +460,15 @@ public interface SexecPackage extends EPackage {
 	 */
 	int CYCLE__NAME = SEQUENCE__NAME;
 
+	/**
+	 * The feature id for the '<em><b>Comment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CYCLE__COMMENT = SEQUENCE__COMMENT;
+
 	/**
 	 * The feature id for the '<em><b>Steps</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -328,14 +488,13 @@ public interface SexecPackage extends EPackage {
 	int CYCLE_FEATURE_COUNT = SEQUENCE_FEATURE_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.IfImpl <em>If</em>}' class.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.IfImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getIf()
 	 * @generated
+	 * @ordered
 	 */
-	int IF = 6;
+	int CHECK__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -344,7 +503,7 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int IF__COMMENT = STEP__COMMENT;
+	int CHECK__COMMENT = STEP__COMMENT;
 
 	/**
 	 * The feature id for the '<em><b>Condition</b></em>' containment reference.
@@ -353,10 +512,46 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int IF__CONDITION = STEP_FEATURE_COUNT + 0;
+	int CHECK__CONDITION = STEP_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Check</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHECK_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IF__NAME = STEP__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Comment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IF__COMMENT = STEP__COMMENT;
 
 	/**
-	 * The feature id for the '<em><b>Then Step</b></em>' reference.
+	 * The feature id for the '<em><b>Check</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IF__CHECK = STEP_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Then Step</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -365,7 +560,7 @@ public interface SexecPackage extends EPackage {
 	int IF__THEN_STEP = STEP_FEATURE_COUNT + 1;
 
 	/**
-	 * The feature id for the '<em><b>Else Step</b></em>' reference.
+	 * The feature id for the '<em><b>Else Step</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -383,14 +578,13 @@ public interface SexecPackage extends EPackage {
 	int IF_FEATURE_COUNT = STEP_FEATURE_COUNT + 3;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionImpl <em>Execution</em>}' class.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.ExecutionImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecution()
 	 * @generated
+	 * @ordered
 	 */
-	int EXECUTION = 7;
+	int EXECUTION__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -420,14 +614,13 @@ public interface SexecPackage extends EPackage {
 	int EXECUTION_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.EnterStateImpl <em>Enter State</em>}' class.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.EnterStateImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getEnterState()
 	 * @generated
+	 * @ordered
 	 */
-	int ENTER_STATE = 8;
+	int ENTER_STATE__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -457,14 +650,13 @@ public interface SexecPackage extends EPackage {
 	int ENTER_STATE_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExitStateImpl <em>Exit State</em>}' class.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.ExitStateImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExitState()
 	 * @generated
+	 * @ordered
 	 */
-	int EXIT_STATE = 9;
+	int EXIT_STATE__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -494,14 +686,23 @@ public interface SexecPackage extends EPackage {
 	int EXIT_STATE_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.SequenceExecutionImpl <em>Sequence Execution</em>}' class.
+	 * 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 = 13;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.SequenceExecutionImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSequenceExecution()
 	 * @generated
+	 * @ordered
 	 */
-	int SEQUENCE_EXECUTION = 10;
+	int CALL__NAME = STEP__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Comment</b></em>' attribute.
@@ -510,63 +711,80 @@ public interface SexecPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE_EXECUTION__COMMENT = STEP__COMMENT;
+	int CALL__COMMENT = STEP__COMMENT;
 
 	/**
-	 * The feature id for the '<em><b>Sequence</b></em>' reference.
+	 * The feature id for the '<em><b>Step</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE_EXECUTION__SEQUENCE = STEP_FEATURE_COUNT + 0;
+	int CALL__STEP = STEP_FEATURE_COUNT + 0;
 
 	/**
-	 * The number of structural features of the '<em>Sequence Execution</em>' class.
+	 * The number of structural features of the '<em>Call</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int SEQUENCE_EXECUTION_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
+	int CALL_FEATURE_COUNT = STEP_FEATURE_COUNT + 1;
+
+	/**
+	 * 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 -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CHECK_REF__NAME = CHECK__NAME;
 
 	/**
-	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.StateVectorImpl <em>State Vector</em>}' class.
+	 * The feature id for the '<em><b>Comment</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.sct.model.sexec.impl.StateVectorImpl
-	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getStateVector()
 	 * @generated
+	 * @ordered
 	 */
-	int STATE_VECTOR = 11;
+	int CHECK_REF__COMMENT = CHECK__COMMENT;
 
 	/**
-	 * The feature id for the '<em><b>Size</b></em>' attribute.
+	 * The feature id for the '<em><b>Condition</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STATE_VECTOR__SIZE = 0;
+	int CHECK_REF__CONDITION = CHECK__CONDITION;
 
 	/**
-	 * The feature id for the '<em><b>Offset</b></em>' attribute.
+	 * The feature id for the '<em><b>Check</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STATE_VECTOR__OFFSET = 1;
+	int CHECK_REF__CHECK = CHECK_FEATURE_COUNT + 0;
 
 	/**
-	 * The number of structural features of the '<em>State Vector</em>' class.
+	 * The number of structural features of the '<em>Check Ref</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int STATE_VECTOR_FEATURE_COUNT = 2;
+	int CHECK_REF_FEATURE_COUNT = CHECK_FEATURE_COUNT + 1;
 
 
 	/**
@@ -655,6 +873,60 @@ public interface SexecPackage extends EPackage {
 	 */
 	EReference getExecutionState_Cycle();
 
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.sct.model.sexec.ExecutionState#getReactions <em>Reactions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Reactions</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionState#getReactions()
+	 * @see #getExecutionState()
+	 * @generated
+	 */
+	EReference getExecutionState_Reactions();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.sct.model.sexec.ExecutionState#isLeaf <em>Leaf</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Leaf</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionState#isLeaf()
+	 * @see #getExecutionState()
+	 * @generated
+	 */
+	EAttribute getExecutionState_Leaf();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.Reaction <em>Reaction</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Reaction</em>'.
+	 * @see org.yakindu.sct.model.sexec.Reaction
+	 * @generated
+	 */
+	EClass getReaction();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.Reaction#getCheck <em>Check</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Check</em>'.
+	 * @see org.yakindu.sct.model.sexec.Reaction#getCheck()
+	 * @see #getReaction()
+	 * @generated
+	 */
+	EReference getReaction_Check();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.Reaction#getEffect <em>Effect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Effect</em>'.
+	 * @see org.yakindu.sct.model.sexec.Reaction#getEffect()
+	 * @see #getReaction()
+	 * @generated
+	 */
+	EReference getReaction_Effect();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.NamedElement <em>Named Element</em>}'.
 	 * <!-- begin-user-doc -->
@@ -686,6 +958,27 @@ public interface SexecPackage extends EPackage {
 	 */
 	EClass getCycle();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.Check <em>Check</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Check</em>'.
+	 * @see org.yakindu.sct.model.sexec.Check
+	 * @generated
+	 */
+	EClass getCheck();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.Check#getCondition <em>Condition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Condition</em>'.
+	 * @see org.yakindu.sct.model.sexec.Check#getCondition()
+	 * @see #getCheck()
+	 * @generated
+	 */
+	EReference getCheck_Condition();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.Step <em>Step</em>}'.
 	 * <!-- begin-user-doc -->
@@ -739,21 +1032,21 @@ public interface SexecPackage extends EPackage {
 	EClass getIf();
 
 	/**
-	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.If#getCondition <em>Condition</em>}'.
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.If#getCheck <em>Check</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference '<em>Condition</em>'.
-	 * @see org.yakindu.sct.model.sexec.If#getCondition()
+	 * @return the meta object for the containment reference '<em>Check</em>'.
+	 * @see org.yakindu.sct.model.sexec.If#getCheck()
 	 * @see #getIf()
 	 * @generated
 	 */
-	EReference getIf_Condition();
+	EReference getIf_Check();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sexec.If#getThenStep <em>Then Step</em>}'.
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.If#getThenStep <em>Then Step</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Then Step</em>'.
+	 * @return the meta object for the containment reference '<em>Then Step</em>'.
 	 * @see org.yakindu.sct.model.sexec.If#getThenStep()
 	 * @see #getIf()
 	 * @generated
@@ -761,10 +1054,10 @@ public interface SexecPackage extends EPackage {
 	EReference getIf_ThenStep();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sexec.If#getElseStep <em>Else Step</em>}'.
+	 * Returns the meta object for the containment reference '{@link org.yakindu.sct.model.sexec.If#getElseStep <em>Else Step</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Else Step</em>'.
+	 * @return the meta object for the containment reference '<em>Else Step</em>'.
 	 * @see org.yakindu.sct.model.sexec.If#getElseStep()
 	 * @see #getIf()
 	 * @generated
@@ -835,25 +1128,46 @@ public interface SexecPackage extends EPackage {
 	EReference getExitState_State();
 
 	/**
-	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.SequenceExecution <em>Sequence Execution</em>}'.
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.Call <em>Call</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Sequence Execution</em>'.
-	 * @see org.yakindu.sct.model.sexec.SequenceExecution
+	 * @return the meta object for class '<em>Call</em>'.
+	 * @see org.yakindu.sct.model.sexec.Call
 	 * @generated
 	 */
-	EClass getSequenceExecution();
+	EClass getCall();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sexec.SequenceExecution#getSequence <em>Sequence</em>}'.
+	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sexec.Call#getStep <em>Step</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Sequence</em>'.
-	 * @see org.yakindu.sct.model.sexec.SequenceExecution#getSequence()
-	 * @see #getSequenceExecution()
+	 * @return the meta object for the reference '<em>Step</em>'.
+	 * @see org.yakindu.sct.model.sexec.Call#getStep()
+	 * @see #getCall()
 	 * @generated
 	 */
-	EReference getSequenceExecution_Sequence();
+	EReference getCall_Step();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.CheckRef <em>Check Ref</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Check Ref</em>'.
+	 * @see org.yakindu.sct.model.sexec.CheckRef
+	 * @generated
+	 */
+	EClass getCheckRef();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.yakindu.sct.model.sexec.CheckRef#getCheck <em>Check</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Check</em>'.
+	 * @see org.yakindu.sct.model.sexec.CheckRef#getCheck()
+	 * @see #getCheckRef()
+	 * @generated
+	 */
+	EReference getCheckRef_Check();
 
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.StateVector <em>State Vector</em>}'.
@@ -977,6 +1291,48 @@ public interface SexecPackage extends EPackage {
 		 */
 		EReference EXECUTION_STATE__CYCLE = eINSTANCE.getExecutionState_Cycle();
 
+		/**
+		 * The meta object literal for the '<em><b>Reactions</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EXECUTION_STATE__REACTIONS = eINSTANCE.getExecutionState_Reactions();
+
+		/**
+		 * The meta object literal for the '<em><b>Leaf</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXECUTION_STATE__LEAF = eINSTANCE.getExecutionState_Leaf();
+
+		/**
+		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ReactionImpl <em>Reaction</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.sct.model.sexec.impl.ReactionImpl
+		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getReaction()
+		 * @generated
+		 */
+		EClass REACTION = eINSTANCE.getReaction();
+
+		/**
+		 * The meta object literal for the '<em><b>Check</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference REACTION__CHECK = eINSTANCE.getReaction_Check();
+
+		/**
+		 * The meta object literal for the '<em><b>Effect</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference REACTION__EFFECT = eINSTANCE.getReaction_Effect();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.NamedElementImpl <em>Named Element</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -1005,6 +1361,24 @@ public interface SexecPackage extends EPackage {
 		 */
 		EClass CYCLE = eINSTANCE.getCycle();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.CheckImpl <em>Check</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.sct.model.sexec.impl.CheckImpl
+		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheck()
+		 * @generated
+		 */
+		EClass CHECK = eINSTANCE.getCheck();
+
+		/**
+		 * The meta object literal for the '<em><b>Condition</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference CHECK__CONDITION = eINSTANCE.getCheck_Condition();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.StepImpl <em>Step</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -1052,15 +1426,15 @@ public interface SexecPackage extends EPackage {
 		EClass IF = eINSTANCE.getIf();
 
 		/**
-		 * The meta object literal for the '<em><b>Condition</b></em>' containment reference feature.
+		 * The meta object literal for the '<em><b>Check</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference IF__CONDITION = eINSTANCE.getIf_Condition();
+		EReference IF__CHECK = eINSTANCE.getIf_Check();
 
 		/**
-		 * The meta object literal for the '<em><b>Then Step</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Then Step</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
@@ -1068,7 +1442,7 @@ public interface SexecPackage extends EPackage {
 		EReference IF__THEN_STEP = eINSTANCE.getIf_ThenStep();
 
 		/**
-		 * The meta object literal for the '<em><b>Else Step</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Else Step</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
@@ -1130,22 +1504,40 @@ public interface SexecPackage extends EPackage {
 		EReference EXIT_STATE__STATE = eINSTANCE.getExitState_State();
 
 		/**
-		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.SequenceExecutionImpl <em>Sequence Execution</em>}' class.
+		 * The meta object literal 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
+		 */
+		EClass CALL = eINSTANCE.getCall();
+
+		/**
+		 * The meta object literal for the '<em><b>Step</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference CALL__STEP = eINSTANCE.getCall_Step();
+
+		/**
+		 * The meta object literal 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.SequenceExecutionImpl
-		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getSequenceExecution()
+		 * @see org.yakindu.sct.model.sexec.impl.CheckRefImpl
+		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getCheckRef()
 		 * @generated
 		 */
-		EClass SEQUENCE_EXECUTION = eINSTANCE.getSequenceExecution();
+		EClass CHECK_REF = eINSTANCE.getCheckRef();
 
 		/**
-		 * The meta object literal for the '<em><b>Sequence</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Check</b></em>' reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference SEQUENCE_EXECUTION__SEQUENCE = eINSTANCE.getSequenceExecution_Sequence();
+		EReference CHECK_REF__CHECK = eINSTANCE.getCheckRef_Check();
 
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.StateVectorImpl <em>State Vector</em>}' class.

+ 1 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/Step.java

@@ -24,7 +24,7 @@ import org.eclipse.emf.ecore.EObject;
  * @model abstract="true"
  * @generated
  */
-public interface Step extends EObject {
+public interface Step extends NamedElement {
 	/**
 	 * Returns the value of the '<em><b>Comment</b></em>' attribute.
 	 * <!-- begin-user-doc -->

+ 33 - 33
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SequenceExecutionImpl.java

@@ -13,40 +13,40 @@ import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 
-import org.yakindu.sct.model.sexec.Sequence;
-import org.yakindu.sct.model.sexec.SequenceExecution;
+import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.SexecPackage;
+import org.yakindu.sct.model.sexec.Step;
 
 /**
  * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Sequence Execution</b></em>'.
+ * An implementation of the model object '<em><b>Call</b></em>'.
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.SequenceExecutionImpl#getSequence <em>Sequence</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.CallImpl#getStep <em>Step</em>}</li>
  * </ul>
  * </p>
  *
  * @generated
  */
-public class SequenceExecutionImpl extends StepImpl implements SequenceExecution {
+public class CallImpl extends StepImpl implements Call {
 	/**
-	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' reference.
+	 * The cached value of the '{@link #getStep() <em>Step</em>}' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getSequence()
+	 * @see #getStep()
 	 * @generated
 	 * @ordered
 	 */
-	protected Sequence sequence;
+	protected Step step;
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected SequenceExecutionImpl() {
+	protected CallImpl() {
 		super();
 	}
 
@@ -57,7 +57,7 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	 */
 	@Override
 	protected EClass eStaticClass() {
-		return SexecPackage.Literals.SEQUENCE_EXECUTION;
+		return SexecPackage.Literals.CALL;
 	}
 
 	/**
@@ -65,16 +65,16 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Sequence getSequence() {
-		if (sequence != null && sequence.eIsProxy()) {
-			InternalEObject oldSequence = (InternalEObject)sequence;
-			sequence = (Sequence)eResolveProxy(oldSequence);
-			if (sequence != oldSequence) {
+	public Step getStep() {
+		if (step != null && step.eIsProxy()) {
+			InternalEObject oldStep = (InternalEObject)step;
+			step = (Step)eResolveProxy(oldStep);
+			if (step != oldStep) {
 				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SexecPackage.SEQUENCE_EXECUTION__SEQUENCE, oldSequence, sequence));
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SexecPackage.CALL__STEP, oldStep, step));
 			}
 		}
-		return sequence;
+		return step;
 	}
 
 	/**
@@ -82,8 +82,8 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Sequence basicGetSequence() {
-		return sequence;
+	public Step basicGetStep() {
+		return step;
 	}
 
 	/**
@@ -91,11 +91,11 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setSequence(Sequence newSequence) {
-		Sequence oldSequence = sequence;
-		sequence = newSequence;
+	public void setStep(Step newStep) {
+		Step oldStep = step;
+		step = newStep;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.SEQUENCE_EXECUTION__SEQUENCE, oldSequence, sequence));
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.CALL__STEP, oldStep, step));
 	}
 
 	/**
@@ -106,9 +106,9 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE_EXECUTION__SEQUENCE:
-				if (resolve) return getSequence();
-				return basicGetSequence();
+			case SexecPackage.CALL__STEP:
+				if (resolve) return getStep();
+				return basicGetStep();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -121,8 +121,8 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE_EXECUTION__SEQUENCE:
-				setSequence((Sequence)newValue);
+			case SexecPackage.CALL__STEP:
+				setStep((Step)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -136,8 +136,8 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE_EXECUTION__SEQUENCE:
-				setSequence((Sequence)null);
+			case SexecPackage.CALL__STEP:
+				setStep((Step)null);
 				return;
 		}
 		super.eUnset(featureID);
@@ -151,10 +151,10 @@ public class SequenceExecutionImpl extends StepImpl implements SequenceExecution
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE_EXECUTION__SEQUENCE:
-				return sequence != null;
+			case SexecPackage.CALL__STEP:
+				return step != null;
 		}
 		return super.eIsSet(featureID);
 	}
 
-} //SequenceExecutionImpl
+} //CallImpl

+ 180 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/CheckImpl.java

@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.yakindu.sct.model.sexec.Check;
+import org.yakindu.sct.model.sexec.SexecPackage;
+
+import org.yakindu.sct.model.sgraph.Statement;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Check</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.CheckImpl#getCondition <em>Condition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CheckImpl extends StepImpl implements Check {
+	/**
+	 * The cached value of the '{@link #getCondition() <em>Condition</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCondition()
+	 * @generated
+	 * @ordered
+	 */
+	protected Statement condition;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CheckImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SexecPackage.Literals.CHECK;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Statement getCondition() {
+		return condition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCondition(Statement newCondition, NotificationChain msgs) {
+		Statement oldCondition = condition;
+		condition = newCondition;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.CHECK__CONDITION, oldCondition, newCondition);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCondition(Statement newCondition) {
+		if (newCondition != condition) {
+			NotificationChain msgs = null;
+			if (condition != null)
+				msgs = ((InternalEObject)condition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.CHECK__CONDITION, null, msgs);
+			if (newCondition != null)
+				msgs = ((InternalEObject)newCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.CHECK__CONDITION, null, msgs);
+			msgs = basicSetCondition(newCondition, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.CHECK__CONDITION, newCondition, newCondition));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case SexecPackage.CHECK__CONDITION:
+				return basicSetCondition(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SexecPackage.CHECK__CONDITION:
+				return getCondition();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SexecPackage.CHECK__CONDITION:
+				setCondition((Statement)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SexecPackage.CHECK__CONDITION:
+				setCondition((Statement)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SexecPackage.CHECK__CONDITION:
+				return condition != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //CheckImpl

+ 171 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/CheckRefImpl.java

@@ -0,0 +1,171 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.yakindu.sct.model.sexec.Check;
+import org.yakindu.sct.model.sexec.CheckRef;
+import org.yakindu.sct.model.sexec.SexecPackage;
+import org.yakindu.sct.model.sgraph.Statement;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Check Ref</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.CheckRefImpl#getCheck <em>Check</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CheckRefImpl extends CheckImpl implements CheckRef {
+	/**
+	 * The cached value of the '{@link #getCheck() <em>Check</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCheck()
+	 * @generated
+	 * @ordered
+	 */
+	protected Check check;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CheckRefImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SexecPackage.Literals.CHECK_REF;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Check getCheck() {
+		if (check != null && check.eIsProxy()) {
+			InternalEObject oldCheck = (InternalEObject)check;
+			check = (Check)eResolveProxy(oldCheck);
+			if (check != oldCheck) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SexecPackage.CHECK_REF__CHECK, oldCheck, check));
+			}
+		}
+		return check;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Check basicGetCheck() {
+		return check;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCheck(Check newCheck) {
+		Check oldCheck = check;
+		check = newCheck;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.CHECK_REF__CHECK, oldCheck, check));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SexecPackage.CHECK_REF__CHECK:
+				if (resolve) return getCheck();
+				return basicGetCheck();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SexecPackage.CHECK_REF__CHECK:
+				setCheck((Check)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SexecPackage.CHECK_REF__CHECK:
+				setCheck((Check)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SexecPackage.CHECK_REF__CHECK:
+				return check != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	
+	@Override
+	public Statement getCondition() {
+		return (check != null) ? check.getCondition() : null;
+	}
+
+	@Override
+	public void setCondition(Statement newCondition) {
+		if (check != null) check.setCondition(newCondition);
+	}
+
+	
+	
+} //CheckRefImpl

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

@@ -6,16 +6,21 @@
  */
 package org.yakindu.sct.model.sexec.impl;
 
+import java.util.Collection;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.sct.model.sexec.Cycle;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.Reaction;
 import org.yakindu.sct.model.sexec.SexecPackage;
 
 /**
@@ -27,6 +32,8 @@ import org.yakindu.sct.model.sexec.SexecPackage;
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getSimpleName <em>Simple Name</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getCycle <em>Cycle</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#getReactions <em>Reactions</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ExecutionStateImpl#isLeaf <em>Leaf</em>}</li>
  * </ul>
  * </p>
  *
@@ -63,6 +70,36 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 	 */
 	protected Cycle cycle;
 
+	/**
+	 * The cached value of the '{@link #getReactions() <em>Reactions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReactions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Reaction> reactions;
+
+	/**
+	 * The default value of the '{@link #isLeaf() <em>Leaf</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLeaf()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LEAF_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isLeaf() <em>Leaf</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLeaf()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean leaf = LEAF_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -146,6 +183,39 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__CYCLE, newCycle, newCycle));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Reaction> getReactions() {
+		if (reactions == null) {
+			reactions = new EObjectContainmentEList<Reaction>(Reaction.class, this, SexecPackage.EXECUTION_STATE__REACTIONS);
+		}
+		return reactions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLeaf() {
+		return leaf;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLeaf(boolean newLeaf) {
+		boolean oldLeaf = leaf;
+		leaf = newLeaf;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.EXECUTION_STATE__LEAF, oldLeaf, leaf));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -156,6 +226,8 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 		switch (featureID) {
 			case SexecPackage.EXECUTION_STATE__CYCLE:
 				return basicSetCycle(null, msgs);
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
+				return ((InternalEList<?>)getReactions()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -172,6 +244,10 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 				return getSimpleName();
 			case SexecPackage.EXECUTION_STATE__CYCLE:
 				return getCycle();
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
+				return getReactions();
+			case SexecPackage.EXECUTION_STATE__LEAF:
+				return isLeaf();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -181,6 +257,7 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
@@ -190,6 +267,13 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 			case SexecPackage.EXECUTION_STATE__CYCLE:
 				setCycle((Cycle)newValue);
 				return;
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
+				getReactions().clear();
+				getReactions().addAll((Collection<? extends Reaction>)newValue);
+				return;
+			case SexecPackage.EXECUTION_STATE__LEAF:
+				setLeaf((Boolean)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -208,6 +292,12 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 			case SexecPackage.EXECUTION_STATE__CYCLE:
 				setCycle((Cycle)null);
 				return;
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
+				getReactions().clear();
+				return;
+			case SexecPackage.EXECUTION_STATE__LEAF:
+				setLeaf(LEAF_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -224,6 +314,10 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 				return SIMPLE_NAME_EDEFAULT == null ? simpleName != null : !SIMPLE_NAME_EDEFAULT.equals(simpleName);
 			case SexecPackage.EXECUTION_STATE__CYCLE:
 				return cycle != null;
+			case SexecPackage.EXECUTION_STATE__REACTIONS:
+				return reactions != null && !reactions.isEmpty();
+			case SexecPackage.EXECUTION_STATE__LEAF:
+				return leaf != LEAF_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -240,6 +334,8 @@ public class ExecutionStateImpl extends NamedElementImpl implements ExecutionSta
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (simpleName: ");
 		result.append(simpleName);
+		result.append(", leaf: ");
+		result.append(leaf);
 		result.append(')');
 		return result.toString();
 	}

+ 75 - 62
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/IfImpl.java

@@ -11,6 +11,7 @@ import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.yakindu.sct.model.sexec.Check;
 import org.yakindu.sct.model.sexec.If;
 import org.yakindu.sct.model.sexec.SexecPackage;
 import org.yakindu.sct.model.sexec.Step;
@@ -23,7 +24,7 @@ import org.yakindu.sct.model.sgraph.Statement;
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.IfImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.IfImpl#getCheck <em>Check</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.IfImpl#getThenStep <em>Then Step</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.IfImpl#getElseStep <em>Else Step</em>}</li>
  * </ul>
@@ -33,17 +34,17 @@ import org.yakindu.sct.model.sgraph.Statement;
  */
 public class IfImpl extends StepImpl implements If {
 	/**
-	 * The cached value of the '{@link #getCondition() <em>Condition</em>}' containment reference.
+	 * The cached value of the '{@link #getCheck() <em>Check</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getCondition()
+	 * @see #getCheck()
 	 * @generated
 	 * @ordered
 	 */
-	protected Statement condition;
+	protected Check check;
 
 	/**
-	 * The cached value of the '{@link #getThenStep() <em>Then Step</em>}' reference.
+	 * The cached value of the '{@link #getThenStep() <em>Then Step</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @see #getThenStep()
@@ -53,7 +54,7 @@ public class IfImpl extends StepImpl implements If {
 	protected Step thenStep;
 
 	/**
-	 * The cached value of the '{@link #getElseStep() <em>Else Step</em>}' reference.
+	 * The cached value of the '{@link #getElseStep() <em>Else Step</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @see #getElseStep()
@@ -86,8 +87,8 @@ public class IfImpl extends StepImpl implements If {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Statement getCondition() {
-		return condition;
+	public Check getCheck() {
+		return check;
 	}
 
 	/**
@@ -95,11 +96,11 @@ public class IfImpl extends StepImpl implements If {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public NotificationChain basicSetCondition(Statement newCondition, NotificationChain msgs) {
-		Statement oldCondition = condition;
-		condition = newCondition;
+	public NotificationChain basicSetCheck(Check newCheck, NotificationChain msgs) {
+		Check oldCheck = check;
+		check = newCheck;
 		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.IF__CONDITION, oldCondition, newCondition);
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.IF__CHECK, oldCheck, newCheck);
 			if (msgs == null) msgs = notification; else msgs.add(notification);
 		}
 		return msgs;
@@ -110,18 +111,18 @@ public class IfImpl extends StepImpl implements If {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setCondition(Statement newCondition) {
-		if (newCondition != condition) {
+	public void setCheck(Check newCheck) {
+		if (newCheck != check) {
 			NotificationChain msgs = null;
-			if (condition != null)
-				msgs = ((InternalEObject)condition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__CONDITION, null, msgs);
-			if (newCondition != null)
-				msgs = ((InternalEObject)newCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__CONDITION, null, msgs);
-			msgs = basicSetCondition(newCondition, msgs);
+			if (check != null)
+				msgs = ((InternalEObject)check).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__CHECK, null, msgs);
+			if (newCheck != null)
+				msgs = ((InternalEObject)newCheck).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__CHECK, null, msgs);
+			msgs = basicSetCheck(newCheck, msgs);
 			if (msgs != null) msgs.dispatch();
 		}
 		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__CONDITION, newCondition, newCondition));
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__CHECK, newCheck, newCheck));
 	}
 
 	/**
@@ -130,14 +131,6 @@ public class IfImpl extends StepImpl implements If {
 	 * @generated
 	 */
 	public Step getThenStep() {
-		if (thenStep != null && thenStep.eIsProxy()) {
-			InternalEObject oldThenStep = (InternalEObject)thenStep;
-			thenStep = (Step)eResolveProxy(oldThenStep);
-			if (thenStep != oldThenStep) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SexecPackage.IF__THEN_STEP, oldThenStep, thenStep));
-			}
-		}
 		return thenStep;
 	}
 
@@ -146,8 +139,14 @@ public class IfImpl extends StepImpl implements If {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Step basicGetThenStep() {
-		return thenStep;
+	public NotificationChain basicSetThenStep(Step newThenStep, NotificationChain msgs) {
+		Step oldThenStep = thenStep;
+		thenStep = newThenStep;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.IF__THEN_STEP, oldThenStep, newThenStep);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
 	}
 
 	/**
@@ -156,10 +155,17 @@ public class IfImpl extends StepImpl implements If {
 	 * @generated
 	 */
 	public void setThenStep(Step newThenStep) {
-		Step oldThenStep = thenStep;
-		thenStep = newThenStep;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__THEN_STEP, oldThenStep, thenStep));
+		if (newThenStep != thenStep) {
+			NotificationChain msgs = null;
+			if (thenStep != null)
+				msgs = ((InternalEObject)thenStep).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__THEN_STEP, null, msgs);
+			if (newThenStep != null)
+				msgs = ((InternalEObject)newThenStep).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__THEN_STEP, null, msgs);
+			msgs = basicSetThenStep(newThenStep, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__THEN_STEP, newThenStep, newThenStep));
 	}
 
 	/**
@@ -168,14 +174,6 @@ public class IfImpl extends StepImpl implements If {
 	 * @generated
 	 */
 	public Step getElseStep() {
-		if (elseStep != null && elseStep.eIsProxy()) {
-			InternalEObject oldElseStep = (InternalEObject)elseStep;
-			elseStep = (Step)eResolveProxy(oldElseStep);
-			if (elseStep != oldElseStep) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SexecPackage.IF__ELSE_STEP, oldElseStep, elseStep));
-			}
-		}
 		return elseStep;
 	}
 
@@ -184,8 +182,14 @@ public class IfImpl extends StepImpl implements If {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Step basicGetElseStep() {
-		return elseStep;
+	public NotificationChain basicSetElseStep(Step newElseStep, NotificationChain msgs) {
+		Step oldElseStep = elseStep;
+		elseStep = newElseStep;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.IF__ELSE_STEP, oldElseStep, newElseStep);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
 	}
 
 	/**
@@ -194,10 +198,17 @@ public class IfImpl extends StepImpl implements If {
 	 * @generated
 	 */
 	public void setElseStep(Step newElseStep) {
-		Step oldElseStep = elseStep;
-		elseStep = newElseStep;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__ELSE_STEP, oldElseStep, elseStep));
+		if (newElseStep != elseStep) {
+			NotificationChain msgs = null;
+			if (elseStep != null)
+				msgs = ((InternalEObject)elseStep).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__ELSE_STEP, null, msgs);
+			if (newElseStep != null)
+				msgs = ((InternalEObject)newElseStep).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.IF__ELSE_STEP, null, msgs);
+			msgs = basicSetElseStep(newElseStep, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.IF__ELSE_STEP, newElseStep, newElseStep));
 	}
 
 	/**
@@ -208,8 +219,12 @@ public class IfImpl extends StepImpl implements If {
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case SexecPackage.IF__CONDITION:
-				return basicSetCondition(null, msgs);
+			case SexecPackage.IF__CHECK:
+				return basicSetCheck(null, msgs);
+			case SexecPackage.IF__THEN_STEP:
+				return basicSetThenStep(null, msgs);
+			case SexecPackage.IF__ELSE_STEP:
+				return basicSetElseStep(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -222,14 +237,12 @@ public class IfImpl extends StepImpl implements If {
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case SexecPackage.IF__CONDITION:
-				return getCondition();
+			case SexecPackage.IF__CHECK:
+				return getCheck();
 			case SexecPackage.IF__THEN_STEP:
-				if (resolve) return getThenStep();
-				return basicGetThenStep();
+				return getThenStep();
 			case SexecPackage.IF__ELSE_STEP:
-				if (resolve) return getElseStep();
-				return basicGetElseStep();
+				return getElseStep();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -242,8 +255,8 @@ public class IfImpl extends StepImpl implements If {
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case SexecPackage.IF__CONDITION:
-				setCondition((Statement)newValue);
+			case SexecPackage.IF__CHECK:
+				setCheck((Check)newValue);
 				return;
 			case SexecPackage.IF__THEN_STEP:
 				setThenStep((Step)newValue);
@@ -263,8 +276,8 @@ public class IfImpl extends StepImpl implements If {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case SexecPackage.IF__CONDITION:
-				setCondition((Statement)null);
+			case SexecPackage.IF__CHECK:
+				setCheck((Check)null);
 				return;
 			case SexecPackage.IF__THEN_STEP:
 				setThenStep((Step)null);
@@ -284,8 +297,8 @@ public class IfImpl extends StepImpl implements If {
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case SexecPackage.IF__CONDITION:
-				return condition != null;
+			case SexecPackage.IF__CHECK:
+				return check != null;
 			case SexecPackage.IF__THEN_STEP:
 				return thenStep != null;
 			case SexecPackage.IF__ELSE_STEP:

+ 246 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ReactionImpl.java

@@ -0,0 +1,246 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sexec.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.yakindu.sct.model.sexec.Check;
+import org.yakindu.sct.model.sexec.Reaction;
+import org.yakindu.sct.model.sexec.SexecPackage;
+import org.yakindu.sct.model.sexec.Step;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Reaction</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ReactionImpl#getCheck <em>Check</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sexec.impl.ReactionImpl#getEffect <em>Effect</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ReactionImpl extends NamedElementImpl implements Reaction {
+	/**
+	 * The cached value of the '{@link #getCheck() <em>Check</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCheck()
+	 * @generated
+	 * @ordered
+	 */
+	protected Check check;
+
+	/**
+	 * The cached value of the '{@link #getEffect() <em>Effect</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEffect()
+	 * @generated
+	 * @ordered
+	 */
+	protected Step effect;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ReactionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SexecPackage.Literals.REACTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Check getCheck() {
+		return check;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCheck(Check newCheck, NotificationChain msgs) {
+		Check oldCheck = check;
+		check = newCheck;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.REACTION__CHECK, oldCheck, newCheck);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCheck(Check newCheck) {
+		if (newCheck != check) {
+			NotificationChain msgs = null;
+			if (check != null)
+				msgs = ((InternalEObject)check).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.REACTION__CHECK, null, msgs);
+			if (newCheck != null)
+				msgs = ((InternalEObject)newCheck).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.REACTION__CHECK, null, msgs);
+			msgs = basicSetCheck(newCheck, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.REACTION__CHECK, newCheck, newCheck));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Step getEffect() {
+		return effect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEffect(Step newEffect, NotificationChain msgs) {
+		Step oldEffect = effect;
+		effect = newEffect;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SexecPackage.REACTION__EFFECT, oldEffect, newEffect);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEffect(Step newEffect) {
+		if (newEffect != effect) {
+			NotificationChain msgs = null;
+			if (effect != null)
+				msgs = ((InternalEObject)effect).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SexecPackage.REACTION__EFFECT, null, msgs);
+			if (newEffect != null)
+				msgs = ((InternalEObject)newEffect).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SexecPackage.REACTION__EFFECT, null, msgs);
+			msgs = basicSetEffect(newEffect, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.REACTION__EFFECT, newEffect, newEffect));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case SexecPackage.REACTION__CHECK:
+				return basicSetCheck(null, msgs);
+			case SexecPackage.REACTION__EFFECT:
+				return basicSetEffect(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SexecPackage.REACTION__CHECK:
+				return getCheck();
+			case SexecPackage.REACTION__EFFECT:
+				return getEffect();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SexecPackage.REACTION__CHECK:
+				setCheck((Check)newValue);
+				return;
+			case SexecPackage.REACTION__EFFECT:
+				setEffect((Step)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SexecPackage.REACTION__CHECK:
+				setCheck((Check)null);
+				return;
+			case SexecPackage.REACTION__EFFECT:
+				setEffect((Step)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SexecPackage.REACTION__CHECK:
+				return check != null;
+			case SexecPackage.REACTION__EFFECT:
+				return effect != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ReactionImpl

+ 0 - 100
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SequenceImpl.java

@@ -33,7 +33,6 @@ import org.yakindu.sct.model.sexec.Step;
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.yakindu.sct.model.sexec.impl.SequenceImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sexec.impl.SequenceImpl#getSteps <em>Steps</em>}</li>
  * </ul>
  * </p>
@@ -41,26 +40,6 @@ import org.yakindu.sct.model.sexec.Step;
  * @generated
  */
 public class SequenceImpl extends StepImpl implements Sequence {
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
 	/**
 	 * The cached value of the '{@link #getSteps() <em>Steps</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -90,27 +69,6 @@ public class SequenceImpl extends StepImpl implements Sequence {
 		return SexecPackage.Literals.SEQUENCE;
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setName(String newName) {
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, SexecPackage.SEQUENCE__NAME, oldName, name));
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -145,8 +103,6 @@ public class SequenceImpl extends StepImpl implements Sequence {
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE__NAME:
-				return getName();
 			case SexecPackage.SEQUENCE__STEPS:
 				return getSteps();
 		}
@@ -162,9 +118,6 @@ public class SequenceImpl extends StepImpl implements Sequence {
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE__NAME:
-				setName((String)newValue);
-				return;
 			case SexecPackage.SEQUENCE__STEPS:
 				getSteps().clear();
 				getSteps().addAll((Collection<? extends Step>)newValue);
@@ -181,9 +134,6 @@ public class SequenceImpl extends StepImpl implements Sequence {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE__NAME:
-				setName(NAME_EDEFAULT);
-				return;
 			case SexecPackage.SEQUENCE__STEPS:
 				getSteps().clear();
 				return;
@@ -199,60 +149,10 @@ public class SequenceImpl extends StepImpl implements Sequence {
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case SexecPackage.SEQUENCE__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case SexecPackage.SEQUENCE__STEPS:
 				return steps != null && !steps.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
-		if (baseClass == NamedElement.class) {
-			switch (derivedFeatureID) {
-				case SexecPackage.SEQUENCE__NAME: return SexecPackage.NAMED_ELEMENT__NAME;
-				default: return -1;
-			}
-		}
-		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
-		if (baseClass == NamedElement.class) {
-			switch (baseFeatureID) {
-				case SexecPackage.NAMED_ELEMENT__NAME: return SexecPackage.SEQUENCE__NAME;
-				default: return -1;
-			}
-		}
-		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (name: ");
-		result.append(name);
-		result.append(')');
-		return result.toString();
-	}
-
 } //SequenceImpl

+ 39 - 6
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecFactoryImpl.java

@@ -62,15 +62,18 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 		switch (eClass.getClassifierID()) {
 			case SexecPackage.EXECUTION_FLOW: return createExecutionFlow();
 			case SexecPackage.EXECUTION_STATE: return createExecutionState();
+			case SexecPackage.REACTION: return createReaction();
+			case SexecPackage.STATE_VECTOR: return createStateVector();
 			case SexecPackage.NAMED_ELEMENT: return createNamedElement();
-			case SexecPackage.CYCLE: return createCycle();
 			case SexecPackage.SEQUENCE: return createSequence();
+			case SexecPackage.CYCLE: return createCycle();
+			case SexecPackage.CHECK: return createCheck();
 			case SexecPackage.IF: return createIf();
 			case SexecPackage.EXECUTION: return createExecution();
 			case SexecPackage.ENTER_STATE: return createEnterState();
 			case SexecPackage.EXIT_STATE: return createExitState();
-			case SexecPackage.SEQUENCE_EXECUTION: return createSequenceExecution();
-			case SexecPackage.STATE_VECTOR: return createStateVector();
+			case SexecPackage.CALL: return createCall();
+			case SexecPackage.CHECK_REF: return createCheckRef();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -96,6 +99,16 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 		return executionState;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Reaction createReaction() {
+		ReactionImpl reaction = new ReactionImpl();
+		return reaction;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -116,6 +129,16 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 		return cycle;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Check createCheck() {
+		CheckImpl check = new CheckImpl();
+		return check;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -171,9 +194,19 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public SequenceExecution createSequenceExecution() {
-		SequenceExecutionImpl sequenceExecution = new SequenceExecutionImpl();
-		return sequenceExecution;
+	public Call createCall() {
+		CallImpl call = new CallImpl();
+		return call;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CheckRef createCheckRef() {
+		CheckRefImpl checkRef = new CheckRefImpl();
+		return checkRef;
 	}
 
 	/**

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

@@ -11,6 +11,9 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.yakindu.sct.model.sexec.Call;
+import org.yakindu.sct.model.sexec.Check;
+import org.yakindu.sct.model.sexec.CheckRef;
 import org.yakindu.sct.model.sexec.Cycle;
 import org.yakindu.sct.model.sexec.EnterState;
 import org.yakindu.sct.model.sexec.Execution;
@@ -19,8 +22,8 @@ import org.yakindu.sct.model.sexec.ExecutionState;
 import org.yakindu.sct.model.sexec.ExitState;
 import org.yakindu.sct.model.sexec.If;
 import org.yakindu.sct.model.sexec.NamedElement;
+import org.yakindu.sct.model.sexec.Reaction;
 import org.yakindu.sct.model.sexec.Sequence;
-import org.yakindu.sct.model.sexec.SequenceExecution;
 import org.yakindu.sct.model.sexec.SexecFactory;
 import org.yakindu.sct.model.sexec.SexecPackage;
 import org.yakindu.sct.model.sexec.StateVector;
@@ -48,6 +51,13 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 */
 	private EClass executionStateEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass reactionEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -62,6 +72,13 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 */
 	private EClass cycleEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass checkEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -109,7 +126,14 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass sequenceExecutionEClass = null;
+	private EClass callEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass checkRefEClass = null;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -254,6 +278,51 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return (EReference)executionStateEClass.getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getExecutionState_Reactions() {
+		return (EReference)executionStateEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExecutionState_Leaf() {
+		return (EAttribute)executionStateEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getReaction() {
+		return reactionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getReaction_Check() {
+		return (EReference)reactionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getReaction_Effect() {
+		return (EReference)reactionEClass.getEStructuralFeatures().get(1);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -281,6 +350,24 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return cycleEClass;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCheck() {
+		return checkEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getCheck_Condition() {
+		return (EReference)checkEClass.getEStructuralFeatures().get(0);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -331,7 +418,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getIf_Condition() {
+	public EReference getIf_Check() {
 		return (EReference)ifEClass.getEStructuralFeatures().get(0);
 	}
 
@@ -412,8 +499,8 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EClass getSequenceExecution() {
-		return sequenceExecutionEClass;
+	public EClass getCall() {
+		return callEClass;
 	}
 
 	/**
@@ -421,8 +508,26 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getSequenceExecution_Sequence() {
-		return (EReference)sequenceExecutionEClass.getEStructuralFeatures().get(0);
+	public EReference getCall_Step() {
+		return (EReference)callEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCheckRef() {
+		return checkRefEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getCheckRef_Check() {
+		return (EReference)checkRefEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -489,20 +594,33 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		executionStateEClass = createEClass(EXECUTION_STATE);
 		createEAttribute(executionStateEClass, EXECUTION_STATE__SIMPLE_NAME);
 		createEReference(executionStateEClass, EXECUTION_STATE__CYCLE);
+		createEReference(executionStateEClass, EXECUTION_STATE__REACTIONS);
+		createEAttribute(executionStateEClass, EXECUTION_STATE__LEAF);
+
+		reactionEClass = createEClass(REACTION);
+		createEReference(reactionEClass, REACTION__CHECK);
+		createEReference(reactionEClass, REACTION__EFFECT);
+
+		stateVectorEClass = createEClass(STATE_VECTOR);
+		createEAttribute(stateVectorEClass, STATE_VECTOR__SIZE);
+		createEAttribute(stateVectorEClass, STATE_VECTOR__OFFSET);
 
 		namedElementEClass = createEClass(NAMED_ELEMENT);
 		createEAttribute(namedElementEClass, NAMED_ELEMENT__NAME);
 
-		cycleEClass = createEClass(CYCLE);
-
 		stepEClass = createEClass(STEP);
 		createEAttribute(stepEClass, STEP__COMMENT);
 
 		sequenceEClass = createEClass(SEQUENCE);
 		createEReference(sequenceEClass, SEQUENCE__STEPS);
 
+		cycleEClass = createEClass(CYCLE);
+
+		checkEClass = createEClass(CHECK);
+		createEReference(checkEClass, CHECK__CONDITION);
+
 		ifEClass = createEClass(IF);
-		createEReference(ifEClass, IF__CONDITION);
+		createEReference(ifEClass, IF__CHECK);
 		createEReference(ifEClass, IF__THEN_STEP);
 		createEReference(ifEClass, IF__ELSE_STEP);
 
@@ -515,12 +633,11 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		exitStateEClass = createEClass(EXIT_STATE);
 		createEReference(exitStateEClass, EXIT_STATE__STATE);
 
-		sequenceExecutionEClass = createEClass(SEQUENCE_EXECUTION);
-		createEReference(sequenceExecutionEClass, SEQUENCE_EXECUTION__SEQUENCE);
+		callEClass = createEClass(CALL);
+		createEReference(callEClass, CALL__STEP);
 
-		stateVectorEClass = createEClass(STATE_VECTOR);
-		createEAttribute(stateVectorEClass, STATE_VECTOR__SIZE);
-		createEAttribute(stateVectorEClass, STATE_VECTOR__OFFSET);
+		checkRefEClass = createEClass(CHECK_REF);
+		createEReference(checkRefEClass, CHECK_REF__CHECK);
 	}
 
 	/**
@@ -557,14 +674,17 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		executionFlowEClass.getESuperTypes().add(theSGraphPackage.getScopedElement());
 		executionFlowEClass.getESuperTypes().add(this.getNamedElement());
 		executionStateEClass.getESuperTypes().add(this.getNamedElement());
-		cycleEClass.getESuperTypes().add(this.getSequence());
+		reactionEClass.getESuperTypes().add(this.getNamedElement());
+		stepEClass.getESuperTypes().add(this.getNamedElement());
 		sequenceEClass.getESuperTypes().add(this.getStep());
-		sequenceEClass.getESuperTypes().add(this.getNamedElement());
+		cycleEClass.getESuperTypes().add(this.getSequence());
+		checkEClass.getESuperTypes().add(this.getStep());
 		ifEClass.getESuperTypes().add(this.getStep());
 		executionEClass.getESuperTypes().add(this.getStep());
 		enterStateEClass.getESuperTypes().add(this.getStep());
 		exitStateEClass.getESuperTypes().add(this.getStep());
-		sequenceExecutionEClass.getESuperTypes().add(this.getStep());
+		callEClass.getESuperTypes().add(this.getStep());
+		checkRefEClass.getESuperTypes().add(this.getCheck());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(executionFlowEClass, ExecutionFlow.class, "ExecutionFlow", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -576,22 +696,35 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEClass(executionStateEClass, ExecutionState.class, "ExecutionState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getExecutionState_SimpleName(), ecorePackage.getEString(), "simpleName", null, 0, 1, ExecutionState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getExecutionState_Cycle(), this.getCycle(), null, "cycle", null, 0, 1, ExecutionState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getExecutionState_Reactions(), this.getReaction(), null, "reactions", null, 0, -1, ExecutionState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getExecutionState_Leaf(), ecorePackage.getEBoolean(), "leaf", "false", 0, 1, ExecutionState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		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);
+
+		initEClass(stateVectorEClass, StateVector.class, "StateVector", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getStateVector_Size(), ecorePackage.getEInt(), "size", "1", 0, 1, StateVector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getStateVector_Offset(), ecorePackage.getEInt(), "offset", "0", 0, 1, StateVector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(namedElementEClass, NamedElement.class, "NamedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getNamedElement_Name(), ecorePackage.getEString(), "name", null, 0, 1, NamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(cycleEClass, Cycle.class, "Cycle", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-
 		initEClass(stepEClass, Step.class, "Step", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getStep_Comment(), ecorePackage.getEString(), "comment", null, 0, 1, Step.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(sequenceEClass, Sequence.class, "Sequence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getSequence_Steps(), this.getStep(), null, "steps", null, 0, -1, Sequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(cycleEClass, Cycle.class, "Cycle", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(checkEClass, Check.class, "Check", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCheck_Condition(), theSGraphPackage.getStatement(), null, "condition", null, 0, 1, Check.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		initEClass(ifEClass, If.class, "If", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getIf_Condition(), theSGraphPackage.getStatement(), null, "condition", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getIf_ThenStep(), this.getStep(), null, "thenStep", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getIf_ElseStep(), this.getStep(), null, "elseStep", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIf_Check(), this.getCheck(), null, "check", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIf_ThenStep(), this.getStep(), null, "thenStep", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIf_ElseStep(), this.getStep(), null, "elseStep", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(executionEClass, Execution.class, "Execution", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getExecution_Statement(), theSGraphPackage.getStatement(), null, "statement", null, 0, 1, Execution.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -602,12 +735,11 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEClass(exitStateEClass, ExitState.class, "ExitState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getExitState_State(), this.getExecutionState(), null, "state", null, 0, 1, ExitState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(sequenceExecutionEClass, SequenceExecution.class, "SequenceExecution", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getSequenceExecution_Sequence(), this.getSequence(), null, "sequence", null, 0, 1, SequenceExecution.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(callEClass, Call.class, "Call", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCall_Step(), this.getStep(), null, "step", null, 0, 1, Call.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(stateVectorEClass, StateVector.class, "StateVector", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getStateVector_Size(), ecorePackage.getEInt(), "size", "1", 0, 1, StateVector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getStateVector_Offset(), ecorePackage.getEInt(), "offset", "0", 0, 1, StateVector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(checkRefEClass, CheckRef.class, "CheckRef", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCheckRef_Check(), this.getCheck(), null, "check", null, 0, 1, CheckRef.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		// Create resource
 		createResource(eNS_URI);

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

@@ -29,7 +29,7 @@ import org.yakindu.sct.model.sexec.Step;
  *
  * @generated
  */
-public abstract class StepImpl extends EObjectImpl implements Step {
+public abstract class StepImpl extends NamedElementImpl implements Step {
 	/**
 	 * The default value of the '{@link #getComment() <em>Comment</em>}' attribute.
 	 * <!-- begin-user-doc -->

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

@@ -23,12 +23,20 @@ import org.yakindu.sct.model.stext.stext.EventDefinition
 import org.yakindu.sct.model.stext.stext.VariableDefinition
 import org.yakindu.sct.model.sexec.ExecutionFlow
 import org.yakindu.sct.model.sgraph.Statechart
+import org.yakindu.sct.model.sexec.Check
+import org.yakindu.sct.model.stext.stext.ReactionTrigger
+import org.yakindu.sct.model.sexec.Reaction
+import org.yakindu.sct.model.sgraph.Transition
+import org.yakindu.sct.model.sexec.CheckRef
+import org.yakindu.sct.model.sexec.Call
+import org.yakindu.sct.model.sexec.Step
 
 class FactoryExtension {
 	
 	
 	@Inject extension IQualifiedNameProvider qfnProvider
-
+	@Inject extension StatechartExtensions sce
+	
 
 	def ExecutionFlow create r : sexecFactory.createExecutionFlow create(Statechart statechart){
 		r.name = statechart.name
@@ -51,6 +59,26 @@ class FactoryExtension {
 		r.name = state.fullyQualifiedName.toString.replaceAll(" ", "")
 	}
 	
+	def Check create r : sexecFactory.createCheck createCheck(ReactionTrigger tr){
+		r.name = tr.reaction.id
+	}
+	
+	def Reaction create r : sexecFactory.createReaction create(Transition tr){
+		r.name = tr.id
+	}
+	
+	def CheckRef newRef(Check check) {
+		val r = sexecFactory.createCheckRef
+		r.check = check
+		r
+	}
+
+	def Call newCall(Step step) {
+		val r = sexecFactory.createCall
+		r.step = step
+		r
+	}
+
 	//--------- UTILS ---------------
 	def sexecFactory() { SexecFactory::eINSTANCE }
 	def stextFactory() { StextFactory::eINSTANCE }

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

@@ -34,6 +34,9 @@ import org.yakindu.sct.model.sgraph.Entry
 import org.yakindu.sct.model.sgraph.SGraphPackage
 import org.yakindu.sct.model.sexec.EnterState
 import org.yakindu.sct.model.sexec.ExitState
+import org.yakindu.sct.model.sexec.Check
+import org.yakindu.sct.model.sexec.Reaction
+import org.yakindu.sct.model.sexec.Sequence
 
 class ModelSequencer {
 	
@@ -42,19 +45,30 @@ class ModelSequencer {
 	@Inject extension StatechartExtensions sct
 
 
+	/* ==========================================================================
+	 * TRANSFORMATION ROOT
+	 */
+
 	def ExecutionFlow transform(Statechart sc) {
 		val ef = sc.create
 		
-		sc.mapExecutionFlow(ef)
+		// during mapping the basic structural elements will be mapped from the source statechart to the execution flow
 		sc.mapScopes(ef)
+		sc.mapStates(ef)
 		
+		// derive all additional information that is necessary for the execution
 		ef.defineStateVector(sc)
 		ef.defineEnterSequence(sc)
+		ef.defineStateCycles(sc)
 		
 		return ef
 	}
 	
 	
+	/* ==========================================================================
+	 * INTERFACE MAPPING
+	 */
+	
 	/**
 	 * maps all required scope defined in the statechart to the execution flow.
 	 * This includes creating the scopes and adding all relevant declarations. Empty scopes wont be mapped.
@@ -89,49 +103,103 @@ class ModelSequencer {
 	}
 	
 	
-	
-	
-	
-	def ExecutionFlow mapExecutionFlow(Statechart statechart, ExecutionFlow r){
+	/* ==========================================================================
+	 * STRUCTURAL MAPPING
+	 */
+
+		
+	def ExecutionFlow mapStates(Statechart statechart, ExecutionFlow r){
 		var content = EcoreUtil2::eAllContentsAsList(statechart)
-		val leafStates = content.filter(e | e instanceof State && (e as State).simple)
-		r.states.addAll(leafStates.map( s | (s as State).transform));
+		val allStates = content.filter(e | e instanceof State)
+		r.states.addAll(allStates.map( s | (s as State).mapState));
 		return r
 	}
 
 	
-	
-	def ExecutionState transform(State state) {
-		val _state = state.create;
-		_state.cycle = state.buildCycle
+	def ExecutionState mapState(State state) {
+		val _state = state.create
+		_state.reactions.addAll( state.outgoingTransitions.map(t | t.mapTransition))
+		_state.leaf = state.simple 
 		_state
 	}
+	 
+	 
+	def Reaction mapTransition(Transition t) {
+		val r = t.create
+		r.check = mapToCheck(t.trigger)
+		r.effect = mapToEffect(t)
+		return r
+	}
+
+
+	def Sequence mapToEffect(Transition t) {
+		val sequence = sexecFactory.createSequence 
+		if (t.source != null) sequence.steps.add(newExitStateStep(t.source as State))		
+		if (t.target != null) sequence.steps.add(newEnterStateStep(t.target as State))
+		
+		return sequence
+	}	
+	
+	
+	/* ==========================================================================
+	 * SEQUENCING
+	 */
 	
+	def defineStateCycles(ExecutionFlow flow, Statechart sc) {
+		flow.states.filter(s | s.leaf).forEach(s | defineCycle(s))	
+		return flow
+	}
 	
-	def Cycle create r : sexecFactory.createCycle buildCycle(State state) {	
-		val folded = state.outgoingTransitions.reverseView.fold(null as If, [s, t | {
-				var ifStep = t.buildTransitionSequence
-				// TODO then ...
+
+	def Cycle defineCycle(ExecutionState state) {	
+		val cycle = sexecFactory.createCycle
+		state.cycle = cycle
+		
+		val step = state.reactions.reverseView.fold(null as If, [s, reaction | {
+				var ifStep = sexecFactory.createIf
+				ifStep.check = reaction.check.newRef		
+				ifStep.thenStep = reaction.effect.newCall
 				ifStep.elseStep = s
 				ifStep
 			}])
 			
-		if (folded != null) r.steps.add(folded)
+		if (step != null) cycle.steps.add(step)
+		
+		return cycle
 	}
 	
+//	def Cycle create r : sexecFactory.createCycle buildCycle(State state) {	
+//		val folded = state.outgoingTransitions.reverseView.fold(null as If, [s, t | {
+//				var ifStep = t.buildTransitionSequence
+//				// TODO then ...
+//				ifStep.elseStep = s
+//				ifStep
+//			}])
+//			
+//		if (folded != null) r.steps.add(folded)
+//	}
+	
+	
+//	def If buildTransitionSequence(Transition t) {
+//		var ifStep = sexecFactory.createIf
+//		if (t.trigger != null) ifStep.check = t.trigger.mapToCheck 
+//		val thenSequence = sexecFactory.createSequence 
+//		ifStep.thenStep = thenSequence
+//		if (t.source != null) thenSequence.steps.add(newExitStateStep(t.source as State))		
+//		if (t.target != null) thenSequence.steps.add(newEnterStateStep(t.target as State))
+//		
+//		return ifStep	
+//	}
 	
-	def If buildTransitionSequence(Transition t) {
-		var ifStep = sexecFactory.createIf
-		if (t.trigger != null) ifStep.condition = t.trigger.buildCondition 
-		val thenSequence = sexecFactory.createSequence 
-		ifStep.thenStep = thenSequence
-		if (t.source != null) thenSequence.steps.add(newExitStateStep(t.source as State))		
-		if (t.target != null) thenSequence.steps.add(newEnterStateStep(t.target as State))
-		
-		return ifStep	
+
+	def dispatch Check mapToCheck(Trigger tr) { null }
+	  
+	def dispatch Check mapToCheck(ReactionTrigger tr) {
+		val check = tr.createCheck
+		check.condition = tr.buildCondition;
+		return check
 	}
 	
-	
 	def dispatch Statement buildCondition (Trigger t) {
 		null
 	}

+ 27 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StatechartExtensions.xtend

@@ -4,6 +4,9 @@ import org.yakindu.sct.model.sgraph.Statechart
 import org.yakindu.sct.model.sgraph.Region
 import org.yakindu.sct.model.sgraph.Vertex
 import org.yakindu.sct.model.sgraph.State
+import org.yakindu.sct.model.sgraph.Trigger
+import org.yakindu.sct.model.sgraph.Reaction
+import org.yakindu.sct.model.sgraph.Transition
 
 class StatechartExtensions {
 	
@@ -30,4 +33,28 @@ class StatechartExtensions {
 		} else 1
 	}
 
+
+	//=================================================================
+	// navigation util extensions
+	//
+		
+	def reaction(Trigger tr) { tr.eContainer as Reaction }
+
+
+	//=================================================================
+	// naming util extensions
+	//
+
+	def dispatch String id(Object obj) { null }
+		
+		
+	/**
+	 * The id of a transition is unique within the context of its source vertex.
+	 */	
+	def dispatch String id(Transition t) {
+		"tr" + if (t.source != null) t.source.outgoingTransitions.indexOf(t) else ""
+	}
+	
+	
+	
 }

+ 65 - 11
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java

@@ -81,12 +81,16 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createExecutionStateAdapter();
 			}
 			@Override
-			public Adapter caseNamedElement(NamedElement object) {
-				return createNamedElementAdapter();
+			public Adapter caseReaction(Reaction object) {
+				return createReactionAdapter();
 			}
 			@Override
-			public Adapter caseCycle(Cycle object) {
-				return createCycleAdapter();
+			public Adapter caseStateVector(StateVector object) {
+				return createStateVectorAdapter();
+			}
+			@Override
+			public Adapter caseNamedElement(NamedElement object) {
+				return createNamedElementAdapter();
 			}
 			@Override
 			public Adapter caseStep(Step object) {
@@ -97,6 +101,14 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createSequenceAdapter();
 			}
 			@Override
+			public Adapter caseCycle(Cycle object) {
+				return createCycleAdapter();
+			}
+			@Override
+			public Adapter caseCheck(Check object) {
+				return createCheckAdapter();
+			}
+			@Override
 			public Adapter caseIf(If object) {
 				return createIfAdapter();
 			}
@@ -113,12 +125,12 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createExitStateAdapter();
 			}
 			@Override
-			public Adapter caseSequenceExecution(SequenceExecution object) {
-				return createSequenceExecutionAdapter();
+			public Adapter caseCall(Call object) {
+				return createCallAdapter();
 			}
 			@Override
-			public Adapter caseStateVector(StateVector object) {
-				return createStateVectorAdapter();
+			public Adapter caseCheckRef(CheckRef object) {
+				return createCheckRefAdapter();
 			}
 			@Override
 			public Adapter caseScopedElement(ScopedElement object) {
@@ -172,6 +184,20 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.Reaction <em>Reaction</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.Reaction
+	 * @generated
+	 */
+	public Adapter createReactionAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.NamedElement <em>Named Element</em>}'.
 	 * <!-- begin-user-doc -->
@@ -200,6 +226,20 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.Check <em>Check</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.Check
+	 * @generated
+	 */
+	public Adapter createCheckAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.Step <em>Step</em>}'.
 	 * <!-- begin-user-doc -->
@@ -285,16 +325,30 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.SequenceExecution <em>Sequence Execution</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.Call <em>Call</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.Call
+	 * @generated
+	 */
+	public Adapter createCallAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.CheckRef <em>Check Ref</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.SequenceExecution
+	 * @see org.yakindu.sct.model.sexec.CheckRef
 	 * @generated
 	 */
-	public Adapter createSequenceExecutionAdapter() {
+	public Adapter createCheckRefAdapter() {
 		return null;
 	}
 

+ 94 - 19
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java

@@ -86,24 +86,29 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case SexecPackage.NAMED_ELEMENT: {
-				NamedElement namedElement = (NamedElement)theEObject;
-				T result = caseNamedElement(namedElement);
+			case SexecPackage.REACTION: {
+				Reaction reaction = (Reaction)theEObject;
+				T result = caseReaction(reaction);
+				if (result == null) result = caseNamedElement(reaction);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case SexecPackage.CYCLE: {
-				Cycle cycle = (Cycle)theEObject;
-				T result = caseCycle(cycle);
-				if (result == null) result = caseSequence(cycle);
-				if (result == null) result = caseStep(cycle);
-				if (result == null) result = caseNamedElement(cycle);
+			case SexecPackage.STATE_VECTOR: {
+				StateVector stateVector = (StateVector)theEObject;
+				T result = caseStateVector(stateVector);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SexecPackage.NAMED_ELEMENT: {
+				NamedElement namedElement = (NamedElement)theEObject;
+				T result = caseNamedElement(namedElement);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
 			case SexecPackage.STEP: {
 				Step step = (Step)theEObject;
 				T result = caseStep(step);
+				if (result == null) result = caseNamedElement(step);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -115,10 +120,28 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case SexecPackage.CYCLE: {
+				Cycle cycle = (Cycle)theEObject;
+				T result = caseCycle(cycle);
+				if (result == null) result = caseSequence(cycle);
+				if (result == null) result = caseStep(cycle);
+				if (result == null) result = caseNamedElement(cycle);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SexecPackage.CHECK: {
+				Check check = (Check)theEObject;
+				T result = caseCheck(check);
+				if (result == null) result = caseStep(check);
+				if (result == null) result = caseNamedElement(check);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case SexecPackage.IF: {
 				If if_ = (If)theEObject;
 				T result = caseIf(if_);
 				if (result == null) result = caseStep(if_);
+				if (result == null) result = caseNamedElement(if_);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -126,6 +149,7 @@ public class SexecSwitch<T> extends Switch<T> {
 				Execution execution = (Execution)theEObject;
 				T result = caseExecution(execution);
 				if (result == null) result = caseStep(execution);
+				if (result == null) result = caseNamedElement(execution);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -133,6 +157,7 @@ public class SexecSwitch<T> extends Switch<T> {
 				EnterState enterState = (EnterState)theEObject;
 				T result = caseEnterState(enterState);
 				if (result == null) result = caseStep(enterState);
+				if (result == null) result = caseNamedElement(enterState);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -140,19 +165,24 @@ public class SexecSwitch<T> extends Switch<T> {
 				ExitState exitState = (ExitState)theEObject;
 				T result = caseExitState(exitState);
 				if (result == null) result = caseStep(exitState);
+				if (result == null) result = caseNamedElement(exitState);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case SexecPackage.SEQUENCE_EXECUTION: {
-				SequenceExecution sequenceExecution = (SequenceExecution)theEObject;
-				T result = caseSequenceExecution(sequenceExecution);
-				if (result == null) result = caseStep(sequenceExecution);
+			case SexecPackage.CALL: {
+				Call call = (Call)theEObject;
+				T result = caseCall(call);
+				if (result == null) result = caseStep(call);
+				if (result == null) result = caseNamedElement(call);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case SexecPackage.STATE_VECTOR: {
-				StateVector stateVector = (StateVector)theEObject;
-				T result = caseStateVector(stateVector);
+			case SexecPackage.CHECK_REF: {
+				CheckRef checkRef = (CheckRef)theEObject;
+				T result = caseCheckRef(checkRef);
+				if (result == null) result = caseCheck(checkRef);
+				if (result == null) result = caseStep(checkRef);
+				if (result == null) result = caseNamedElement(checkRef);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -190,6 +220,21 @@ public class SexecSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Reaction</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>Reaction</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseReaction(Reaction object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Named Element</em>'.
 	 * <!-- begin-user-doc -->
@@ -220,6 +265,21 @@ public class SexecSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Check</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>Check</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCheck(Check object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Step</em>'.
 	 * <!-- begin-user-doc -->
@@ -311,17 +371,32 @@ public class SexecSwitch<T> extends Switch<T> {
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Sequence Execution</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Call</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>Call</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCall(Call object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Check Ref</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>Sequence Execution</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Check Ref</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseSequenceExecution(SequenceExecution object) {
+	public T caseCheckRef(CheckRef object) {
 		return null;
 	}
 

+ 2 - 2
test-plugins/org.yakindu.sct.generator.cpp.test/src/org/yakindu/sct/generator/cpp/test/generator/CPPGeneratorTest.java

@@ -78,7 +78,7 @@ public class CPPGeneratorTest extends AbstractGeneratorTest {
 				"src-gen");
 		
 		assertNotNull(((RegularEventSpec) ((ReactionTrigger) statechart.getRegions().get(0).getVertices().get(0).getOutgoingTransitions().get(0).getTrigger()).getTriggers().get(0)).getEvent());
-		assertNotNull(((ElementReferenceExpression) ((If) executionFlow.getStates().get(0).getCycle().getSteps().get(0)).getCondition()).getValue());
+		assertNotNull(((ElementReferenceExpression) ((If) executionFlow.getStates().get(0).getCycle().getSteps().get(0)).getCheck().getCondition()).getValue());
 	}
 
 	
@@ -107,7 +107,7 @@ public class CPPGeneratorTest extends AbstractGeneratorTest {
 				"src-gen");
 		
 		
-		assertNotNull(((ElementReferenceExpression) ((If) flow.getStates().get(0).getCycle().getSteps().get(0)).getCondition()).getValue());
+		assertNotNull(((ElementReferenceExpression) ((If) flow.getStates().get(0).getCycle().getSteps().get(0)).getCheck().getCondition()).getValue());
 
 	}
 

+ 88 - 15
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerTest.java

@@ -6,15 +6,19 @@ import static org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.*;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.EnterState;
 import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.ExecutionState;
 import org.yakindu.sct.model.sexec.ExitState;
 import org.yakindu.sct.model.sexec.If;
+import org.yakindu.sct.model.sexec.Reaction;
 import org.yakindu.sct.model.sexec.Sequence;
 import org.yakindu.sct.model.sexec.transformation.ModelSequencer;
 import org.yakindu.sct.model.sexec.transformation.SequencerModule;
 import org.yakindu.sct.model.sgraph.Declaration;
+import org.yakindu.sct.model.sgraph.Entry;
+import org.yakindu.sct.model.sgraph.EntryKind;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.Scope;
@@ -87,7 +91,7 @@ public class ModelSequencerTest {
 		assertEquals(s1.getName(), flow.getStates().get(0).getSimpleName());
 		If _if = (If) flow.getStates().get(0).getCycle().getSteps().get(0);
 
-		ElementReferenceExpression _ere = (ElementReferenceExpression) _if.getCondition();
+		ElementReferenceExpression _ere = (ElementReferenceExpression) _if.getCheck().getCondition();
 		assertSame(_e1, _ere.getValue());
 	}
 
@@ -172,6 +176,31 @@ public class ModelSequencerTest {
 	}
 	
 	
+	@Test public void testStateReaction_SimpleFlatTSC() {
+		SimpleFlatTSC tsc = new SimpleFlatTSC();
+		
+		ExecutionFlow flow = sequencer.transform(tsc.sc);
+
+		// test state with one outgoing transition
+		ExecutionState s1 = flow.getStates().get(0);
+		ExecutionState s2 = flow.getStates().get(1);
+		assertEquals(tsc.s1.getName(), s1.getSimpleName());
+		assertEquals(tsc.s2.getName(), s2.getSimpleName());
+
+		assertEquals(1, s1.getReactions().size());
+		Reaction reaction = s1.getReactions().get(0);
+
+		assertNotNull(reaction.getCheck());
+		
+		assertNotNull(reaction.getEffect());
+		Sequence seq = (Sequence) reaction.getEffect();
+		assertTrue(seq.getSteps().get(0) instanceof ExitState);
+		assertEquals(s1, ((ExitState)seq.getSteps().get(0)).getState());
+		assertTrue(seq.getSteps().get(1) instanceof EnterState);
+		assertEquals(s2, ((EnterState)seq.getSteps().get(1)).getState());
+		
+	}
+	
 	
 	@Test public void testStateCycle_SimpleFlatTSC() {
 		OrthogonalFlatTSC tsc = new OrthogonalFlatTSC();
@@ -187,15 +216,17 @@ public class ModelSequencerTest {
 		
 		If _if = (If) s1.getCycle().getSteps().get(0);
 		assertNotNull(_if.getThenStep());
-		assertTrue(_if.getThenStep() instanceof Sequence);
+		assertTrue(_if.getThenStep() instanceof Call);
 		assertNull(_if.getElseStep());
 
-		Sequence seq = (Sequence) _if.getThenStep();
-		assertTrue(seq.getSteps().get(0) instanceof ExitState);
-		assertEquals(s1, ((ExitState)seq.getSteps().get(0)).getState());
-		assertTrue(seq.getSteps().get(1) instanceof EnterState);
-		assertEquals(s2, ((EnterState)seq.getSteps().get(1)).getState());
-
+		Call seq = (Call) _if.getThenStep();
+		assertEquals(s1.getReactions().get(0).getEffect(), seq.getStep());
+		
+//		assertTrue(seq.getSteps().get(0) instanceof ExitState);
+//		assertEquals(s1, ((ExitState)seq.getSteps().get(0)).getState());
+//		assertTrue(seq.getSteps().get(1) instanceof EnterState);
+//		assertEquals(s2, ((EnterState)seq.getSteps().get(1)).getState());
+//
 		
 		// test state with two outgoing transitions
 		ExecutionState s3 = flow.getStates().get(2);
@@ -211,6 +242,8 @@ public class ModelSequencerTest {
 
 	}
 	
+
+	
 	
 	
 	/**
@@ -254,7 +287,7 @@ public class ModelSequencerTest {
 
 	
 	@Test
-	public void testTransitionTriggerSequence() {
+	public void testReactionEffectSequence() {
 
 		EventDefinition e1 = _createEventDefinition("e1", null);
 		EventDefinition e2 = _createEventDefinition("e2", null);
@@ -266,16 +299,16 @@ public class ModelSequencerTest {
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
 		t.setTrigger(tr1);
 
-		If s = sequencer.buildTransitionSequence(t);
+		Reaction reaction = sequencer.mapTransition(t);
 
-		assertTrue(s.getCondition() instanceof LogicalOrExpression);
-		assertTrue(((LogicalOrExpression) s.getCondition()).getLeftOperand() instanceof ElementReferenceExpression);
-		assertTrue(((LogicalOrExpression) s.getCondition()).getRightOperand() instanceof ElementReferenceExpression);
+		assertTrue(reaction.getCheck().getCondition() instanceof LogicalOrExpression);
+		assertTrue(((LogicalOrExpression) reaction.getCheck().getCondition()).getLeftOperand() instanceof ElementReferenceExpression);
+		assertTrue(((LogicalOrExpression) reaction.getCheck().getCondition()).getRightOperand() instanceof ElementReferenceExpression);
 
 		assertEquals(e1.getName(),
-				((ElementReferenceExpression)((LogicalOrExpression) s.getCondition()).getLeftOperand()).getValue().getName());
+				((ElementReferenceExpression)((LogicalOrExpression) reaction.getCheck().getCondition()).getLeftOperand()).getValue().getName());
 		assertEquals(e2.getName(),
-				((ElementReferenceExpression)((LogicalOrExpression) s.getCondition()).getRightOperand()).getValue().getName());
+				((ElementReferenceExpression)((LogicalOrExpression) reaction.getCheck().getCondition()).getRightOperand()).getValue().getName());
 	}
 
 	
@@ -373,5 +406,45 @@ public class ModelSequencerTest {
 		assertEquals(3, flow.getStateVector().getSize());
 		assertEquals(0, flow.getStateVector().getOffset());
 	}
+
 	
+	/**
+	 * The state vector descriptor of the ExecutionFlow must have an offset of 0 and a size that is 
+	 * the maximum orthogonality of the statechart.
+	 */
+	@Test public void testSCStateVectorEmptyRegion() {
+		Statechart sc = _createStatechart("test");
+		
+		{  // first top region 
+			Region r = _createRegion("sc_r1", sc);
+		}
+	
+		ExecutionFlow flow = sequencer.transform(sc);
+		
+		assertNotNull(flow.getStateVector());
+		assertEquals(0, flow.getStateVector().getSize());
+		assertEquals(0, flow.getStateVector().getOffset());
+	}
+
+	/**
+	 * The state vector descriptor of the ExecutionFlow must have an offset of 0 and a size that is 
+	 * the maximum orthogonality of the statechart.
+	 */
+	@Test public void testSCStateVectorPseudoStates() {
+		Statechart sc = _createStatechart("test");
+		
+		{  // first top region 
+			Region r = _createRegion("sc_r1", sc);
+			Entry e = _createEntry(EntryKind.INITIAL, null, r);
+			Entry s = _createEntry(null, "s", r);
+			_createTransition(e, s);
+		}
+	
+		ExecutionFlow flow = sequencer.transform(sc);
+		
+		assertNotNull(flow.getStateVector());
+		assertEquals(0, flow.getStateVector().getSize());
+		assertEquals(0, flow.getStateVector().getOffset());
+	}
+
 }