Prechádzať zdrojové kódy

added support for the join case of synchronization pseudostates

terfloth@itemis.de 13 rokov pred
rodič
commit
869e07dc10
61 zmenil súbory, kde vykonal 4894 pridanie a 3544 odobranie
  1. 0 1
      plugins/org.yakindu.sct.generator.genmodel.ui/.settings/org.eclipse.core.resources.prefs
  2. 102 102
      plugins/org.yakindu.sct.generator.genmodel.ui/xtend-gen/org/yakindu/sct/generator/genmodel/ui/templates/SGenProposalCreator.java
  3. 1272 1272
      plugins/org.yakindu.sct.generator.genmodel.ui/xtend-gen/org/yakindu/sct/generator/genmodel/ui/wizard/GeneratorProjectTemplate.java
  4. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/ctool16/CreateExecutionFlow_nodes_ExecutionSynchronization.gif
  5. BIN
      plugins/org.yakindu.sct.model.sexec.edit/icons/full/obj16/ExecutionSynchronization.gif
  6. 1 0
      plugins/org.yakindu.sct.model.sexec.edit/plugin.properties
  7. 5 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionFlowItemProvider.java
  8. 110 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/ExecutionSynchronizationItemProvider.java
  9. 24 0
      plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SexecItemProviderAdapterFactory.java
  10. 542 542
      plugins/org.yakindu.sct.model.sexec.interpreter/xtend-gen/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.java
  11. 521 521
      plugins/org.yakindu.sct.model.sexec.interpreter/xtend-gen/org/yakindu/sct/model/sexec/interpreter/stext/StextStatementInterpreter.java
  12. 3 4
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecore
  13. 31 56
      plugins/org.yakindu.sct.model.sexec/model/sexec.ecorediag
  14. 17 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/ExecutionSynchronization.java
  15. 9 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecFactory.java
  16. 85 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/SexecPackage.java
  17. 39 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/ExecutionSynchronizationImpl.java
  18. 12 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecFactoryImpl.java
  19. 22 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/impl/SexecPackageImpl.java
  20. 90 21
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend
  21. 1 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ModelSequencer.xtend
  22. 22 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.xtend
  23. 14 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend
  24. 5 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StatechartExtensions.xtend
  25. 16 5
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StextExtensions.xtend
  26. 2 4
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StructureMapping.xtend
  27. 19 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java
  28. 25 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java
  29. 151 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.java
  30. 1 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ModelSequencer.java
  31. 39 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.java
  32. 263 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.smap
  33. 63 21
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.java
  34. 146 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.smap
  35. 7 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StatechartExtensions.java
  36. 20 4
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StextExtensions.java
  37. 12 0
      plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StructureMapping.java
  38. 1 1
      plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/debugmodel/SCTDebugTarget.java
  39. 8 8
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/.classpath
  40. 55 56
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/AlwaysOncycleTest.java
  41. 70 71
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/ChoiceTest.java
  42. 61 61
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/DeepHistoryTest.java
  43. 44 44
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/GuardTest.java
  44. 54 55
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/PriorityValuesTest.java
  45. 72 73
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/ShallowHistoryTest.java
  46. 47 47
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SimpleEventTest.java
  47. 49 48
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SimpleHierachyTest.java
  48. 50 50
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/StateIsActiveTest.java
  49. 55 55
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/StatechartLocalReactionsTest.java
  50. 44 44
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SyncForkTest.java
  51. 106 0
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SyncJoinTest.java
  52. 48 53
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/TimeTriggerTest.java
  53. 2 1
      test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src/org/yakindu/sct/model/sexec/interpreter/test/AllTests.java
  54. 15 0
      test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateReactionTest.java
  55. 320 320
      test-plugins/org.yakindu.sct.test.models/testmodels/SyncJoin.sct
  56. 2 1
      test-plugins/org.yakindu.sct.test.models/tests/DeepHistory.sctunit
  57. 1 1
      test-plugins/org.yakindu.sct.test.models/tests/Guard.sctunit
  58. 1 1
      test-plugins/org.yakindu.sct.test.models/tests/SimpleEvent.sctunit
  59. 2 0
      test-plugins/org.yakindu.sct.test.models/tests/SimpleHierachy.sctunit
  60. 95 0
      test-plugins/org.yakindu.sct.test.models/tests/SyncJoin.sctunit
  61. 1 1
      test-plugins/org.yakindu.sct.test.models/tests/TimeTrigger.sctunit

+ 0 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/.settings/org.eclipse.core.resources.prefs

@@ -1,5 +1,4 @@
 eclipse.preferences.version=1
 encoding//src/org/yakindu/sct/generator/genmodel/ui/wizard/GeneratorProjectTemplate.xtend=UTF-8
 encoding//src/org/yakindu/sct/generator/genmodel/ui/wizard/XpandDefaultTemplate.xpt=ISO-8859-1
-encoding//xtend-gen/org/yakindu/sct/generator/genmodel/ui/wizard/GeneratorProjectTemplate.java=UTF-8
 encoding/<project>=UTF-8

+ 102 - 102
plugins/org.yakindu.sct.generator.genmodel.ui/xtend-gen/org/yakindu/sct/generator/genmodel/ui/templates/SGenProposalCreator.java

@@ -1,102 +1,102 @@
-package org.yakindu.sct.generator.genmodel.ui.templates;
-
-import com.google.common.base.Objects;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtend2.lib.StringConcatenation;
-import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
-import org.yakindu.sct.model.sgen.FeatureConfiguration;
-import org.yakindu.sct.model.sgen.FeatureParameter;
-import org.yakindu.sct.model.sgen.FeatureParameterValue;
-import org.yakindu.sct.model.sgen.FeatureType;
-import org.yakindu.sct.model.sgen.Literal;
-import org.yakindu.sct.model.sgen.ParameterTypes;
-
-/**
- * @author andreas muelder - Initial contribution and API
- */
-@SuppressWarnings("all")
-public class SGenProposalCreator {
-  public String createProposal(final FeatureType featureType, final IDefaultFeatureValueProvider defaultProvider, final EObject context) {
-    String _xblockexpression = null;
-    {
-      FeatureConfiguration defaultConfiguration = defaultProvider.createDefaultFeatureConfiguration(featureType, context);
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("feature ");
-      String _name = featureType.getName();
-      _builder.append(_name, "");
-      _builder.append(" {");
-      _builder.newLineIfNotEmpty();
-      {
-        EList<FeatureParameter> _parameters = featureType.getParameters();
-        for(final FeatureParameter param : _parameters) {
-          _builder.append("\t");
-          String _name_1 = param.getName();
-          _builder.append(_name_1, "	");
-          _builder.append(" = ");
-          Object _value = this.value(defaultConfiguration, param);
-          _builder.append(_value, "	");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      _builder.append("}");
-      _builder.newLine();
-      String _string = _builder.toString();
-      _xblockexpression = (_string);
-    }
-    return _xblockexpression;
-  }
-  
-  public Object value(final FeatureConfiguration value, final FeatureParameter param) {
-    Object _xblockexpression = null;
-    {
-      String _name = param.getName();
-      FeatureParameterValue defaultValue = value.getParameterValue(_name);
-      boolean _notEquals = (!Objects.equal(defaultValue, null));
-      if (_notEquals) {
-        ParameterTypes _parameterType = param.getParameterType();
-        boolean _equals = _parameterType.equals(ParameterTypes.STRING);
-        if (_equals) {
-          StringConcatenation _builder = new StringConcatenation();
-          _builder.append(" ");
-          _builder.append("\"");
-          Literal _expression = defaultValue.getExpression();
-          _builder.append(_expression, " ");
-          _builder.append("\" ");
-          return _builder.toString();
-        } else {
-          return defaultValue.getExpression();
-        }
-      }
-      ParameterTypes _parameterType_1 = param.getParameterType();
-      final ParameterTypes _switchValue = _parameterType_1;
-      boolean _matched = false;
-      if (!_matched) {
-        if (Objects.equal(_switchValue,ParameterTypes.STRING)) {
-          _matched=true;
-          return "\"\"";
-        }
-      }
-      if (!_matched) {
-        if (Objects.equal(_switchValue,ParameterTypes.BOOLEAN)) {
-          _matched=true;
-          return "false";
-        }
-      }
-      if (!_matched) {
-        if (Objects.equal(_switchValue,ParameterTypes.FLOAT)) {
-          _matched=true;
-          return "0.0";
-        }
-      }
-      if (!_matched) {
-        if (Objects.equal(_switchValue,ParameterTypes.INTEGER)) {
-          _matched=true;
-          return "0";
-        }
-      }
-      _xblockexpression = (null);
-    }
-    return _xblockexpression;
-  }
-}
+package org.yakindu.sct.generator.genmodel.ui.templates;
+
+import com.google.common.base.Objects;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureParameter;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.Literal;
+import org.yakindu.sct.model.sgen.ParameterTypes;
+
+/**
+ * @author andreas muelder - Initial contribution and API
+ */
+@SuppressWarnings("all")
+public class SGenProposalCreator {
+  public String createProposal(final FeatureType featureType, final IDefaultFeatureValueProvider defaultProvider, final EObject context) {
+    String _xblockexpression = null;
+    {
+      FeatureConfiguration defaultConfiguration = defaultProvider.createDefaultFeatureConfiguration(featureType, context);
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append("feature ");
+      String _name = featureType.getName();
+      _builder.append(_name, "");
+      _builder.append(" {");
+      _builder.newLineIfNotEmpty();
+      {
+        EList<FeatureParameter> _parameters = featureType.getParameters();
+        for(final FeatureParameter param : _parameters) {
+          _builder.append("\t");
+          String _name_1 = param.getName();
+          _builder.append(_name_1, "	");
+          _builder.append(" = ");
+          Object _value = this.value(defaultConfiguration, param);
+          _builder.append(_value, "	");
+          _builder.newLineIfNotEmpty();
+        }
+      }
+      _builder.append("}");
+      _builder.newLine();
+      String _string = _builder.toString();
+      _xblockexpression = (_string);
+    }
+    return _xblockexpression;
+  }
+  
+  public Object value(final FeatureConfiguration value, final FeatureParameter param) {
+    Object _xblockexpression = null;
+    {
+      String _name = param.getName();
+      FeatureParameterValue defaultValue = value.getParameterValue(_name);
+      boolean _notEquals = (!Objects.equal(defaultValue, null));
+      if (_notEquals) {
+        ParameterTypes _parameterType = param.getParameterType();
+        boolean _equals = _parameterType.equals(ParameterTypes.STRING);
+        if (_equals) {
+          StringConcatenation _builder = new StringConcatenation();
+          _builder.append(" ");
+          _builder.append("\"");
+          Literal _expression = defaultValue.getExpression();
+          _builder.append(_expression, " ");
+          _builder.append("\" ");
+          return _builder.toString();
+        } else {
+          return defaultValue.getExpression();
+        }
+      }
+      ParameterTypes _parameterType_1 = param.getParameterType();
+      final ParameterTypes _switchValue = _parameterType_1;
+      boolean _matched = false;
+      if (!_matched) {
+        if (Objects.equal(_switchValue,ParameterTypes.STRING)) {
+          _matched=true;
+          return "\"\"";
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(_switchValue,ParameterTypes.BOOLEAN)) {
+          _matched=true;
+          return "false";
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(_switchValue,ParameterTypes.FLOAT)) {
+          _matched=true;
+          return "0.0";
+        }
+      }
+      if (!_matched) {
+        if (Objects.equal(_switchValue,ParameterTypes.INTEGER)) {
+          _matched=true;
+          return "0";
+        }
+      }
+      _xblockexpression = (null);
+    }
+    return _xblockexpression;
+  }
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1272 - 1272
plugins/org.yakindu.sct.generator.genmodel.ui/xtend-gen/org/yakindu/sct/generator/genmodel/ui/wizard/GeneratorProjectTemplate.java


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


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


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

@@ -134,3 +134,4 @@ _UI_TraceEndRunCycle_type = Trace End Run Cycle
 _UI_ExecutionFlow_reactions_feature = Reactions
 _UI_ExecutionFlow_entryAction_feature = Entry Action
 _UI_ExecutionFlow_exitAction_feature = Exit Action
+_UI_ExecutionSynchronization_type = Execution Synchronization

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

@@ -347,6 +347,11 @@ public class ExecutionFlowItemProvider
 				(SexecPackage.Literals.EXECUTION_FLOW__NODES,
 				 SexecFactory.eINSTANCE.createExecutionChoice()));
 
+		newChildDescriptors.add
+			(createChildParameter
+				(SexecPackage.Literals.EXECUTION_FLOW__NODES,
+				 SexecFactory.eINSTANCE.createExecutionSynchronization()));
+
 		newChildDescriptors.add
 			(createChildParameter
 				(SexecPackage.Literals.EXECUTION_FLOW__REGIONS,

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

@@ -0,0 +1,110 @@
+/**
+ */
+package org.yakindu.sct.model.sexec.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.sct.model.sexec.ExecutionSynchronization} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExecutionSynchronizationItemProvider
+	extends ExecutionNodeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExecutionSynchronizationItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns ExecutionSynchronization.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ExecutionSynchronization"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ExecutionSynchronization)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ExecutionSynchronization_type") :
+			getString("_UI_ExecutionSynchronization_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);
+	}
+
+}

+ 24 - 0
plugins/org.yakindu.sct.model.sexec.edit/src/org/yakindu/sct/model/sexec/provider/SexecItemProviderAdapterFactory.java

@@ -717,6 +717,29 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		return historyEntryItemProvider;
 	}
 
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.ExecutionSynchronization} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExecutionSynchronizationItemProvider executionSynchronizationItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.sct.model.sexec.ExecutionSynchronization}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createExecutionSynchronizationAdapter() {
+		if (executionSynchronizationItemProvider == null) {
+			executionSynchronizationItemProvider = new ExecutionSynchronizationItemProvider(this);
+		}
+
+		return executionSynchronizationItemProvider;
+	}
+
 	/**
 	 * This keeps track of the one adapter used for all {@link org.yakindu.sct.model.sexec.CheckRef} instances.
 	 * <!-- begin-user-doc -->
@@ -916,6 +939,7 @@ public class SexecItemProviderAdapterFactory extends SexecAdapterFactory impleme
 		if (traceEndRunCycleItemProvider != null) traceEndRunCycleItemProvider.dispose();
 		if (saveHistoryItemProvider != null) saveHistoryItemProvider.dispose();
 		if (historyEntryItemProvider != null) historyEntryItemProvider.dispose();
+		if (executionSynchronizationItemProvider != null) executionSynchronizationItemProvider.dispose();
 	}
 
 }

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 542 - 542
plugins/org.yakindu.sct.model.sexec.interpreter/xtend-gen/org/yakindu/sct/model/sexec/interpreter/impl/ExecutionFlowInterpreter.java


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 521 - 521
plugins/org.yakindu.sct.model.sexec.interpreter/xtend-gen/org/yakindu/sct/model/sexec/interpreter/stext/StextStatementInterpreter.java


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

@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sexec"
-    nsURI="http://www.yakindu.org/sct/sexec/1.0.0" nsPrefix="sexec">
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sexec" nsURI="http://www.yakindu.org/sct/sexec/1.0.0" nsPrefix="sexec">
   <eClassifiers xsi:type="ecore:EClass" name="MappedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="sourceElement" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
   </eClassifiers>
@@ -160,4 +158,5 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="historyStep" eType="#//Step"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ExecutionSynchronization" eSuperTypes="#//ExecutionNode"/>
 </ecore:EPackage>

+ 31 - 56
plugins/org.yakindu.sct.model.sexec/model/sexec.ecorediag

@@ -1,25 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_wsCnsBqkEeGIWuhy_7gRFw" type="EcoreTools" measurementUnit="Pixel">
-  <children xmi:type="notation:Node" xmi:id="_wsHgMBqkEeGIWuhy_7gRFw" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_wsIHQBqkEeGIWuhy_7gRFw" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_wsIuUBqkEeGIWuhy_7gRFw" type="5001">
-      <children xmi:type="notation:Node" xmi:id="_wsJVZBqkEeGIWuhy_7gRFw" type="2001">
-        <element xmi:type="ecore:EAttribute" href="sexec.ecore#//NamedElement/name"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_wsJVZRqkEeGIWuhy_7gRFw"/>
-      </children>
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_wsIuURqkEeGIWuhy_7gRFw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_wsIuUhqkEeGIWuhy_7gRFw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_wsIuUxqkEeGIWuhy_7gRFw"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_wsJVYBqkEeGIWuhy_7gRFw" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_wsJVYRqkEeGIWuhy_7gRFw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_wsJVYhqkEeGIWuhy_7gRFw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_wsJVYxqkEeGIWuhy_7gRFw"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_wsHgMRqkEeGIWuhy_7gRFw" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="sexec.ecore#//NamedElement"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wsHgMhqkEeGIWuhy_7gRFw" x="920" y="-252"/>
-  </children>
   <children xmi:type="notation:Node" xmi:id="_wsJVZhqkEeGIWuhy_7gRFw" type="1001">
     <children xmi:type="notation:Node" xmi:id="_wsJ8chqkEeGIWuhy_7gRFw" type="4001"/>
     <children xmi:type="notation:Node" xmi:id="_wsJ8cxqkEeGIWuhy_7gRFw" type="5001">
@@ -346,7 +326,7 @@
     </children>
     <styles xmi:type="notation:ShapeStyle" xmi:id="_HXl7QRulEeGIWuhy_7gRFw" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="6711039" lineColor="8421504"/>
     <element xmi:type="ecore:EClass" href="sexec.ecore#//ExecutionNode"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HXl7QhulEeGIWuhy_7gRFw" x="592" y="-52"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HXl7QhulEeGIWuhy_7gRFw" x="592" y="-100"/>
   </children>
   <children xmi:type="notation:Node" xmi:id="_tKH24BumEeGIWuhy_7gRFw" type="1001">
     <children xmi:type="notation:Node" xmi:id="_tKId8BumEeGIWuhy_7gRFw" type="4001"/>
@@ -362,7 +342,7 @@
     </children>
     <styles xmi:type="notation:ShapeStyle" xmi:id="_tKH24RumEeGIWuhy_7gRFw" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="6711039" lineColor="8421504"/>
     <element xmi:type="ecore:EClass" href="sexec.ecore#//ExecutionChoice"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKH24humEeGIWuhy_7gRFw" x="680" y="64"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tKH24humEeGIWuhy_7gRFw" x="792" y="-96"/>
   </children>
   <children xmi:type="notation:Node" xmi:id="_w0kyEUjaEeGZpvsaz2lzfQ" type="1001">
     <children xmi:type="notation:Node" xmi:id="_w0pqkEjaEeGZpvsaz2lzfQ" type="4001"/>
@@ -430,7 +410,7 @@
     </children>
     <styles xmi:type="notation:ShapeStyle" xmi:id="_wXt8UEjtEeGFD_vuePSd-Q" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="6711039" lineColor="8421504"/>
     <element xmi:type="ecore:EClass" href="sexec.ecore#//ExecutionEntry"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wXt8UUjtEeGFD_vuePSd-Q" x="680" y="16"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wXt8UUjtEeGFD_vuePSd-Q" x="792" y="-144"/>
   </children>
   <children xmi:type="notation:Node" xmi:id="_s3HG4EjuEeGFD_vuePSd-Q" type="1001">
     <children xmi:type="notation:Node" xmi:id="_s3Ht8EjuEeGFD_vuePSd-Q" type="4001"/>
@@ -478,6 +458,22 @@
     <element xsi:nil="true"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yrgKkUjyEeGFD_vuePSd-Q" x="28" y="-164"/>
   </children>
+  <children xmi:type="notation:Node" xmi:id="_21C5sKlkEeG8AdiDsntVng" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_21EH0KlkEeG8AdiDsntVng" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_21Eu4KlkEeG8AdiDsntVng" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_21Eu4alkEeG8AdiDsntVng"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_21Eu4qlkEeG8AdiDsntVng"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_21Eu46lkEeG8AdiDsntVng"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_21Eu5KlkEeG8AdiDsntVng" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_21Eu5alkEeG8AdiDsntVng"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_21FV8KlkEeG8AdiDsntVng"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_21FV8alkEeG8AdiDsntVng"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_21C5salkEeG8AdiDsntVng" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="6711039" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="sexec.ecore#//ExecutionSynchronization"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_21C5sqlkEeG8AdiDsntVng" x="792" y="-44"/>
+  </children>
   <styles xmi:type="notation:DiagramStyle" xmi:id="_wsCnsRqkEeGIWuhy_7gRFw"/>
   <element xmi:type="ecore:EPackage" href="sexec.ecore#/"/>
   <edges xmi:type="notation:Edge" xmi:id="_wsZNABqkEeGIWuhy_7gRFw" type="3002" source="_wsJVZhqkEeGIWuhy_7gRFw" target="_wsLxoBqkEeGIWuhy_7gRFw">
@@ -504,8 +500,8 @@
     <styles xmi:type="notation:ConnectorStyle" xmi:id="_wscQWRqkEeGIWuhy_7gRFw" lineColor="4210752"/>
     <styles xmi:type="notation:FontStyle" xmi:id="_wscQWhqkEeGIWuhy_7gRFw" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
     <element xmi:type="ecore:EReference" href="sexec.ecore#//ExecutionNode/reactions"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wscQWxqkEeGIWuhy_7gRFw" points="[16, 3, -131, -191]$[63, 15, -84, -179]$[124, 147, -23, -47]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wz_CwRqkEeGIWuhy_7gRFw" id="(0.8823529411764706,0.4523809523809524)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wscQWxqkEeGIWuhy_7gRFw" points="[7, 3, -196, -223]$[7, 79, -196, -147]$[140, 179, -63, -47]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wz_CwRqkEeGIWuhy_7gRFw" id="(0.6176470588235294,0.9285714285714286)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wz_CwhqkEeGIWuhy_7gRFw" id="(0.4961832061068702,1.0)"/>
   </edges>
   <edges xmi:type="notation:Edge" xmi:id="_wsc3YhqkEeGIWuhy_7gRFw" type="3002" source="_wsLxoBqkEeGIWuhy_7gRFw" target="_wsQDEhqkEeGIWuhy_7gRFw">
@@ -536,13 +532,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0Ja0RqkEeGIWuhy_7gRFw" id="(0.2518518518518518,0.0)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0Ja0hqkEeGIWuhy_7gRFw" id="(0.3333333333333333,0.02040816326530612)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_wseskBqkEeGIWuhy_7gRFw" type="3003" source="_HXl7QBulEeGIWuhy_7gRFw" target="_wsHgMBqkEeGIWuhy_7gRFw">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_wseskRqkEeGIWuhy_7gRFw" routing="Rectilinear" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_wseskhqkEeGIWuhy_7gRFw" fontName="Lucida Grande"/>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wseskxqkEeGIWuhy_7gRFw" points="[-27, -23, -339, 153]$[-27, -118, -339, 58]$[290, -118, -22, 58]$[290, -176, -22, 0]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0FJYhqkEeGIWuhy_7gRFw" id="(0.5,1.0)"/>
-  </edges>
   <edges xmi:type="notation:Edge" xmi:id="_wseslBqkEeGIWuhy_7gRFw" type="3002" source="_wsNm0BqkEeGIWuhy_7gRFw" target="_wsRRNhqkEeGIWuhy_7gRFw">
     <children xmi:type="notation:Node" xmi:id="_wsesmBqkEeGIWuhy_7gRFw" type="4011">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_wsesmRqkEeGIWuhy_7gRFw" x="-10" y="-10"/>
@@ -571,22 +560,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0Ko8BqkEeGIWuhy_7gRFw" id="(0.08396946564885496,0.0)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0Ko8RqkEeGIWuhy_7gRFw" id="(0.8083333333333333,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_wsfTpBqkEeGIWuhy_7gRFw" type="3003" source="_wsNm0BqkEeGIWuhy_7gRFw" target="_wsHgMBqkEeGIWuhy_7gRFw">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_wsfTpRqkEeGIWuhy_7gRFw" routing="Rectilinear" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_wsfTphqkEeGIWuhy_7gRFw" fontName="Lucida Grande"/>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wsfTpxqkEeGIWuhy_7gRFw" points="[-19, 0, -111, 321]$[-19, -264, -111, 57]$[87, -264, -5, 57]$[87, -321, -5, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0FJYxqkEeGIWuhy_7gRFw" id="(0.5419847328244275,0.0)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w0FwcBqkEeGIWuhy_7gRFw" id="(0.3333333333333333,1.0)"/>
-  </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_wsf6sBqkEeGIWuhy_7gRFw" type="3003" source="_wsQDEhqkEeGIWuhy_7gRFw" target="_wsHgMBqkEeGIWuhy_7gRFw">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_wsf6sRqkEeGIWuhy_7gRFw" routing="Rectilinear" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_wsf6shqkEeGIWuhy_7gRFw" fontName="Lucida Grande"/>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wsf6sxqkEeGIWuhy_7gRFw" points="[-55, 0, 32, 598]$[-55, -285, 32, 313]$[-75, -285, 12, 313]$[-75, -598, 12, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wz90oBqkEeGIWuhy_7gRFw" id="(0.5,0.0)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wz90oRqkEeGIWuhy_7gRFw" id="(0.16666666666666666,1.0)"/>
-  </edges>
   <edges xmi:type="notation:Edge" xmi:id="_wsf6tBqkEeGIWuhy_7gRFw" type="3002" source="_wsQqIhqkEeGIWuhy_7gRFw" target="_wsQDEhqkEeGIWuhy_7gRFw">
     <children xmi:type="notation:Node" xmi:id="_wsf6uBqkEeGIWuhy_7gRFw" type="4011">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_wsf6uRqkEeGIWuhy_7gRFw" x="9" y="-8"/>
@@ -880,7 +853,7 @@
     <styles xmi:type="notation:ConnectorStyle" xmi:id="_vHLZcRumEeGIWuhy_7gRFw" routing="Rectilinear" lineColor="4210752"/>
     <styles xmi:type="notation:FontStyle" xmi:id="_vHLZchumEeGIWuhy_7gRFw" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vHLZcxumEeGIWuhy_7gRFw" points="[1, -20, 123, 115]$[1, -24, 123, 111]$[-82, -24, 40, 111]$[-82, -89, 40, 46]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vHLZcxumEeGIWuhy_7gRFw" points="[-50, -8, 188, 15]$[-150, -8, 88, 15]"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vHNOoBumEeGIWuhy_7gRFw" id="(0.1259259259259259,0.04081632653061224)"/>
   </edges>
   <edges xmi:type="notation:Edge" xmi:id="_5YB-MBumEeGIWuhy_7gRFw" type="3002" source="_wsJVZhqkEeGIWuhy_7gRFw" target="_HXl7QBulEeGIWuhy_7gRFw">
@@ -1049,7 +1022,7 @@
     <styles xmi:type="notation:ConnectorStyle" xmi:id="_wX1REUjtEeGFD_vuePSd-Q" routing="Rectilinear" lineColor="4210752"/>
     <styles xmi:type="notation:FontStyle" xmi:id="_wX1REkjtEeGFD_vuePSd-Q" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wX1RE0jtEeGFD_vuePSd-Q" points="[1, -20, 73, 45]$[1, -24, 73, 41]$[-82, -24, -10, 41]$[-82, -41, -10, 24]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wX1RE0jtEeGFD_vuePSd-Q" points="[-50, -8, 150, -52]$[-199, -8, 1, -52]$[-199, 24, 1, -20]"/>
   </edges>
   <edges xmi:type="notation:Edge" xmi:id="_s3Re8EjuEeGFD_vuePSd-Q" type="3002" source="_s3HG4EjuEeGFD_vuePSd-Q" target="_wsON4hqkEeGIWuhy_7gRFw">
     <children xmi:type="notation:Node" xmi:id="_s3Re9EjuEeGFD_vuePSd-Q" type="4011">
@@ -1118,12 +1091,6 @@
     <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3WXc0juEeGFD_vuePSd-Q" points="[11, 20, -142, -296]$[82, 146, -71, -170]$[151, 312, -2, -4]"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GR3_IEjxEeGFD_vuePSd-Q" id="(0.3380281690140845,0.11904761904761904)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_s3XlkEjuEeGFD_vuePSd-Q" type="3003" source="_s3HG4EjuEeGFD_vuePSd-Q" target="_wsHgMBqkEeGIWuhy_7gRFw">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_s3XlkUjuEeGFD_vuePSd-Q" routing="Rectilinear" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_s3XlkkjuEeGFD_vuePSd-Q" fontName="Lucida Grande"/>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3Xlk0juEeGFD_vuePSd-Q" points="[43, -20, -525, 229]$[43, -168, -525, 81]$[546, -168, -22, 81]$[546, -225, -22, 24]"/>
-  </edges>
   <edges xmi:type="notation:Edge" xmi:id="_s3YMoEjuEeGFD_vuePSd-Q" type="3003" source="_wsJVZhqkEeGIWuhy_7gRFw" target="_s3HG4EjuEeGFD_vuePSd-Q">
     <styles xmi:type="notation:ConnectorStyle" xmi:id="_s3YMoUjuEeGFD_vuePSd-Q" routing="Rectilinear" lineColor="4210752"/>
     <styles xmi:type="notation:FontStyle" xmi:id="_s3YMokjuEeGFD_vuePSd-Q" fontName="Lucida Grande"/>
@@ -1142,4 +1109,12 @@
     <element xsi:nil="true"/>
     <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s3ao40juEeGFD_vuePSd-Q" points="[42, -20, -30, 232]$[42, -232, -30, 20]"/>
   </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_K4LQ0KllEeG8AdiDsntVng" type="3003" source="_21C5sKlkEeG8AdiDsntVng" target="_HXl7QBulEeGIWuhy_7gRFw">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_K4LQ0allEeG8AdiDsntVng" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_K4LQ0qllEeG8AdiDsntVng" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_K4LQ06llEeG8AdiDsntVng" points="[-31, 7, 122, 42]$[-143, 7, 10, 42]$[-143, -21, 10, 14]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_K4NtEKllEeG8AdiDsntVng" id="(0.21768707482993196,0.14285714285714285)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_K4NtEallEeG8AdiDsntVng" id="(0.7843137254901961,0.6666666666666666)"/>
+  </edges>
 </notation:Diagram>

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

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

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

@@ -277,6 +277,15 @@ public interface SexecFactory extends EFactory {
 	 */
 	HistoryEntry createHistoryEntry();
 
+	/**
+	 * Returns a new object of class '<em>Execution Synchronization</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Execution Synchronization</em>'.
+	 * @generated
+	 */
+	ExecutionSynchronization createExecutionSynchronization();
+
 	/**
 	 * Returns a new object of class '<em>Check Ref</em>'.
 	 * <!-- begin-user-doc -->

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

@@ -2197,6 +2197,71 @@ public interface SexecPackage extends EPackage {
 	int HISTORY_ENTRY_FEATURE_COUNT = STEP_FEATURE_COUNT + 4;
 
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl <em>Execution Synchronization</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl
+	 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionSynchronization()
+	 * @generated
+	 */
+	int EXECUTION_SYNCHRONIZATION = 33;
+
+	/**
+	 * The feature id for the '<em><b>Source Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__SOURCE_ELEMENT = EXECUTION_NODE__SOURCE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__NAME = EXECUTION_NODE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Reactions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__REACTIONS = EXECUTION_NODE__REACTIONS;
+
+	/**
+	 * The feature id for the '<em><b>Simple Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__SIMPLE_NAME = EXECUTION_NODE__SIMPLE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>React Sequence</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION__REACT_SEQUENCE = EXECUTION_NODE__REACT_SEQUENCE;
+
+	/**
+	 * The number of structural features of the '<em>Execution Synchronization</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXECUTION_SYNCHRONIZATION_FEATURE_COUNT = EXECUTION_NODE_FEATURE_COUNT + 0;
+
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionFlow <em>Execution Flow</em>}'.
 	 * <!-- begin-user-doc -->
@@ -3091,6 +3156,16 @@ public interface SexecPackage extends EPackage {
 	 */
 	EReference getHistoryEntry_HistoryStep();
 
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.ExecutionSynchronization <em>Execution Synchronization</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Execution Synchronization</em>'.
+	 * @see org.yakindu.sct.model.sexec.ExecutionSynchronization
+	 * @generated
+	 */
+	EClass getExecutionSynchronization();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sexec.CheckRef <em>Check Ref</em>}'.
 	 * <!-- begin-user-doc -->
@@ -3919,6 +3994,16 @@ public interface SexecPackage extends EPackage {
 		 */
 		EReference HISTORY_ENTRY__HISTORY_STEP = eINSTANCE.getHistoryEntry_HistoryStep();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl <em>Execution Synchronization</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.sct.model.sexec.impl.ExecutionSynchronizationImpl
+		 * @see org.yakindu.sct.model.sexec.impl.SexecPackageImpl#getExecutionSynchronization()
+		 * @generated
+		 */
+		EClass EXECUTION_SYNCHRONIZATION = eINSTANCE.getExecutionSynchronization();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sexec.impl.CheckRefImpl <em>Check Ref</em>}' class.
 		 * <!-- begin-user-doc -->

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

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

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

@@ -11,6 +11,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.yakindu.sct.model.sexec.*;
 import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.Check;
 import org.yakindu.sct.model.sexec.CheckRef;
@@ -120,6 +121,7 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 			case SexecPackage.TRACE_END_RUN_CYCLE: return createTraceEndRunCycle();
 			case SexecPackage.SAVE_HISTORY: return createSaveHistory();
 			case SexecPackage.HISTORY_ENTRY: return createHistoryEntry();
+			case SexecPackage.EXECUTION_SYNCHRONIZATION: return createExecutionSynchronization();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -405,6 +407,16 @@ public class SexecFactoryImpl extends EFactoryImpl implements SexecFactory {
 		return historyEntry;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExecutionSynchronization createExecutionSynchronization() {
+		ExecutionSynchronizationImpl executionSynchronization = new ExecutionSynchronizationImpl();
+		return executionSynchronization;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

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

@@ -24,6 +24,7 @@ import org.yakindu.sct.model.sexec.ExecutionNode;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
 import org.yakindu.sct.model.sexec.ExecutionScope;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
 import org.yakindu.sct.model.sexec.ExitState;
 import org.yakindu.sct.model.sexec.HistoryEntry;
 import org.yakindu.sct.model.sexec.If;
@@ -266,6 +267,13 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 	 */
 	private EClass historyEntryEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass executionSynchronizationEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1107,6 +1115,15 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		return (EReference)historyEntryEClass.getEStructuralFeatures().get(3);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExecutionSynchronization() {
+		return executionSynchronizationEClass;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1321,6 +1338,8 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		createEAttribute(historyEntryEClass, HISTORY_ENTRY__DEEP);
 		createEReference(historyEntryEClass, HISTORY_ENTRY__REGION);
 		createEReference(historyEntryEClass, HISTORY_ENTRY__HISTORY_STEP);
+
+		executionSynchronizationEClass = createEClass(EXECUTION_SYNCHRONIZATION);
 	}
 
 	/**
@@ -1391,6 +1410,7 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		traceEndRunCycleEClass.getESuperTypes().add(this.getTrace());
 		saveHistoryEClass.getESuperTypes().add(this.getStep());
 		historyEntryEClass.getESuperTypes().add(this.getStep());
+		executionSynchronizationEClass.getESuperTypes().add(this.getExecutionNode());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(mappedElementEClass, MappedElement.class, "MappedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1517,6 +1537,8 @@ public class SexecPackageImpl extends EPackageImpl implements SexecPackage {
 		initEReference(getHistoryEntry_Region(), this.getExecutionRegion(), null, "region", null, 0, 1, HistoryEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getHistoryEntry_HistoryStep(), this.getStep(), null, "historyStep", null, 0, 1, HistoryEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(executionSynchronizationEClass, ExecutionSynchronization.class, "ExecutionSynchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		// Create resource
 		createResource(eNS_URI);
 	}

+ 90 - 21
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend

@@ -30,7 +30,12 @@ import org.yakindu.sct.model.stext.stext.OnCycleEvent
 import org.yakindu.sct.model.stext.stext.ReactionEffect
 import org.yakindu.sct.model.stext.stext.ReactionTrigger
 import org.yakindu.sct.model.stext.stext.RegularEventSpec
-import org.yakindu.sct.model.stext.stext.TimeEventSpec
+import org.yakindu.sct.model.stext.stext.TimeEventSpec
+import org.yakindu.sct.model.sgraph.Vertex
+import org.yakindu.sct.model.sgraph.Synchronization
+import org.yakindu.sct.model.sgraph.Pseudostate
+import org.yakindu.sct.model.sgraph.Synchronization
+import org.yakindu.sct.model.sexec.ExecutionSynchronization
 
  
 
@@ -89,17 +94,28 @@ class BehaviorMapping {
 		if (seq.steps.size > 0) seq else null
 	}	
 
-	def ExecutionFlow mapChoiceTransitions(Statechart statechart, ExecutionFlow r) {
-		statechart.allChoices.forEach( choice | choice.mapChoiceTransition);		
-		return r
-	}
-
-	def ExecutionChoice mapChoiceTransition(Choice choice) {
-		val _choice = choice.create
-		_choice.reactions.addAll( choice.outgoingTransitions.map(t | t.mapTransition) )
-		return _choice
-	}
-
+	def ExecutionFlow mapChoiceTransitions(Statechart statechart, ExecutionFlow r) {
+		statechart.allChoices.forEach( choice | choice.mapChoiceTransition);		
+		return r
+	}
+
+	def ExecutionChoice mapChoiceTransition(Choice choice) {
+		val _choice = choice.create
+		_choice.reactions.addAll( choice.outgoingTransitions.map(t | t.mapTransition) )
+		return _choice
+	}
+
+	def ExecutionFlow mapSyncTransitions(Statechart statechart, ExecutionFlow r) {
+		statechart.allSynchronizations.forEach( sync | sync.mapSyncTransition);		
+		return r
+	}
+
+	def ExecutionSynchronization mapSyncTransition(Synchronization sync) {
+		val _sync = sync.create
+		_sync.reactions.addAll( sync.outgoingTransitions.map(t | t.mapTransition) )
+		return _sync
+	}
+
 	def ExecutionFlow mapExitActions(Statechart statechart, ExecutionFlow r){
 		val seq = sexec.factory.createSequence
 		seq.name = "exitAction"
@@ -206,13 +222,65 @@ class BehaviorMapping {
 		return _state
 	}
 	 
-	def Reaction mapTransition(Transition t) {
-		val r = t.create 
-		if (t.trigger != null) r.check = mapToCheck(t.trigger)
-		r.effect = mapToEffect(t, r)
-		
-		return r
+	def Reaction mapTransition(Transition t) {
+		return mapTransition(t, t.source, t.target);
 	}
+	
+	
+	def dispatch Reaction mapTransition(Transition t, Vertex source, Vertex target) {
+		val r = t.create 
+		if (t.trigger != null) r.check = mapToCheck(t.trigger)
+		r.effect = mapToEffect(t, r)
+		
+		return r
+	}
+	
+	
+	/** Ignore transitions from pseudostates to synchronization nodes.
+	 * 
+	 * TODO: introduce validation
+	 */
+	def dispatch Reaction mapTransition(Transition t, Pseudostate source, Synchronization target) {
+		return null
+	}
+	
+	/** Transitions to synchronization points are part of joins and must be handled specifically. */
+	def dispatch Reaction mapTransition(Transition t, State source, Synchronization target) {
+		val r = t.create 
+		
+		// create a check for the reaction
+		if (t.trigger != null) r.check = mapToCheck(t.trigger)
+		else {
+			r.check = sexecFactory.createCheck
+			r.check.name = target.create.name + "join_check"
+		} 
+		
+		// build the condition
+		var Statement condition = r.check.condition
+//		if (t.trigger != null) condition = t.trigger.buildCondition
+		
+		for ( trans : target.incomingTransitions.filter( trans | trans != t )) { 
+			if (trans.source instanceof State) { 
+				condition = condition.conjunct(stext.active(trans.source as State))
+				if (trans.trigger != null) condition = condition.conjunct(trans.trigger.buildCondition)			
+			}
+		}
+		r.check.condition = condition	
+		
+		// map effects
+		// TODO: add effects of sibling transitions
+		r.effect = mapToEffect(t, r)
+		
+		return r
+	}
+	
+	
+	def Statement conjunct(Statement c1, Statement c2) {
+		if (c1 != null && c2 != null ) stext.and(c1 as Expression, c2 as Expression)
+		else if (c1 != null) c1
+		else c2
+	}
+	
 	
 	def dispatch Check mapToCheck(Trigger tr) { null }
 	  
@@ -331,10 +399,11 @@ class BehaviorMapping {
 				sequence.steps.add((t.target as RegularState).create.enterSequence.newCall )	
 			} else if ( t.target instanceof Choice ) {
 				sequence.steps.add((t.target as Choice).create.reactSequence.newCall )	
-			} else if ( t.target instanceof Entry ) {
-				sequence.steps.add((t.target as Entry).create.reactSequence.newCall )	
+			} else if ( t.target instanceof Entry ) {
+				sequence.steps.add((t.target as Entry).create.reactSequence.newCall )	
+			} else if ( t.target instanceof Synchronization ) {
+				sequence.steps.add((t.target as Synchronization).create.reactSequence.newCall )	
 			}
-				
 		}
 		
 		

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

@@ -62,6 +62,7 @@ class ModelSequencer {
 		sc.mapTransitions(ef)
 		sc.mapLocalReactions(ef)
 		sc.mapChoiceTransitions(ef)
+		sc.mapSyncTransitions(ef)
 		
 		sc.defineEntryReactions(ef)
 		ef.defineRegularStateReactions(sc)

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

@@ -19,6 +19,7 @@ import org.yakindu.sct.model.sgraph.Statechart
 import org.yakindu.sct.model.stext.stext.BoolLiteral
 import org.yakindu.sct.model.stext.stext.PrimitiveValueExpression
 import org.yakindu.sct.model.sexec.ExecutionState
+import org.yakindu.sct.model.sgraph.Synchronization
 
 
 class ReactionBuilder {
@@ -61,6 +62,7 @@ class ReactionBuilder {
 	def definePseudoStateReactions(ExecutionFlow flow, Statechart sc) {
 		
 		sc.allChoices().forEach( choice | choice.defineReaction() )
+		sc.allSynchronizations().forEach( sync | sync.defineReaction() )
 	}
 	
 
@@ -84,6 +86,26 @@ class ReactionBuilder {
 		return execChoice.reactSequence
 	}	
 	
+	/**
+	 * TODO : support fork...
+	 */
+	def Sequence defineReaction(Synchronization sync) {
+	
+		val execSync = sync.create
+		
+		// move the default transition to the end of the reaction list
+		val _default_ = execSync.reactions.head
+		
+		execSync.reactSequence.steps.addAll(_default_.effect)
+
+		execSync.reactSequence.name = 'react'
+		execSync.reactSequence.comment = 'The reactions of state ' + sync.name + '.'
+		
+		if ( trace.addTraceSteps ) execSync.reactSequence.steps.add(0,sync.create.newTraceNodeExecuted)
+		
+		return execSync.reactSequence
+	}	
+	
 
 	def alwaysTrue(Check check) {
 		if (check != null && check.condition instanceof PrimitiveValueExpression) {

+ 14 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend

@@ -50,6 +50,8 @@ import org.yakindu.sct.model.stext.stext.StextFactory
 import org.yakindu.sct.model.stext.stext.TimeEventSpec
 import org.yakindu.sct.model.stext.stext.TimeEventType
 import org.yakindu.sct.model.stext.stext.VariableDefinition
+import org.yakindu.sct.model.sexec.ExecutionSynchronization
+import org.yakindu.sct.model.sgraph.Synchronization
  
 
 
@@ -131,6 +133,18 @@ import org.yakindu.sct.model.stext.stext.VariableDefinition
 	}
 	
 	
+	def ExecutionSynchronization create r : sexecFactory.createExecutionSynchronization create(Synchronization sync){
+		if (sync != null) {
+			val n = sync.parentRegion.vertices.filter( typeof ( Synchronization) ).toList.indexOf(sync)
+			r.simpleName =   "_sync" + n + "_"
+			r.name = sync.fullyQualifiedName.toString.replaceAll(" ", "")	
+			r.sourceElement = sync	
+			r.reactSequence = sexecFactory.createSequence
+		}
+	}
+
+	
+	
 	def ExecutionRegion create r : sexecFactory.createExecutionRegion create(Region region){
 		if (region != null) {
 			if (Strings::isEmpty(region.name)) {

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

@@ -21,6 +21,7 @@ import org.yakindu.sct.model.stext.stext.LocalReaction
 import org.yakindu.sct.model.stext.stext.ReactionTrigger
 import org.yakindu.sct.model.stext.stext.StextFactory
 import org.yakindu.sct.model.stext.stext.TimeEventSpec
+import org.yakindu.sct.model.sgraph.Synchronization
 
  
  
@@ -168,6 +169,10 @@ class StatechartExtensions {
 		return sc.eAllContents.filter( typeof(Entry)).toIterable
 	}
 	
+	def Iterable<Synchronization> allSynchronizations(Statechart sc) {
+		return sc.eAllContents.filter( typeof(Synchronization)).toIterable
+	}
+	
 	def List<LocalReaction> entryReactions(ReactiveElement state) {
 		state.localReactions
 			.filter(r | ((r as LocalReaction).trigger as ReactionTrigger).triggers.exists( t | t instanceof EntryEvent))

+ 16 - 5
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StextExtensions.xtend

@@ -2,8 +2,11 @@ package org.yakindu.sct.model.sexec.transformation
 
 import org.yakindu.sct.model.stext.stext.StextFactory
 import org.yakindu.sct.model.stext.stext.Expression
+import org.yakindu.sct.model.sgraph.State
 
-
+/**
+ * @author Axel Terfloth added 'active' extension
+ */
 class StextExtensions {
 	
 	def factory() { StextFactory::eINSTANCE }
@@ -16,9 +19,17 @@ class StextExtensions {
 	}
 	
 	def Expression and(Expression left, Expression right) {
-		val or = factory.createLogicalAndExpression
-		or.leftOperand = left
-		or.rightOperand = right
-		or
+		val and = factory.createLogicalAndExpression
+		and.leftOperand = left
+		and.rightOperand = right
+		and
 	}
+
+
+	def Expression active(State state) {
+		val active = factory.createActiveStateReferenceExpression
+		active.value = state
+		active
+	}
+
 } 

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

@@ -126,13 +126,14 @@ class StructureMapping {
 	def ExecutionFlow mapPseudoStates(Statechart statechart, ExecutionFlow r){
 		r.nodes.addAll( statechart.allChoices.map( choice | choice.create ) );
 		r.nodes.addAll( statechart.allEntries.map( entry | entry.create ) );
+		r.nodes.addAll( statechart.allSynchronizations.map( sync | sync.create ) );
 		return r
 	}
 
 	
 	
 	//==========================================================================
-	// PSEUDO STATE MAPPING
+	// TIME EVENT MAPPING
 	//
 	
 	/** Time trigger will be mapped to execution model time events for each real state. */
@@ -145,9 +146,6 @@ class StructureMapping {
 	}
 	
 	
-	//==========================================================================
-	// TIME EVENT MAPPING
-	//
 	
 	def mapTimeEventSpecs(State state) {
 		

+ 19 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecAdapterFactory.java

@@ -11,6 +11,7 @@ import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.model.sexec.*;
 import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.Check;
 import org.yakindu.sct.model.sexec.CheckRef;
@@ -238,6 +239,10 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 				return createHistoryEntryAdapter();
 			}
 			@Override
+			public Adapter caseExecutionSynchronization(ExecutionSynchronization object) {
+				return createExecutionSynchronizationAdapter();
+			}
+			@Override
 			public Adapter caseScopedElement(ScopedElement object) {
 				return createScopedElementAdapter();
 			}
@@ -707,6 +712,20 @@ public class SexecAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.sct.model.sexec.ExecutionSynchronization <em>Execution Synchronization</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.ExecutionSynchronization
+	 * @generated
+	 */
+	public Adapter createExecutionSynchronizationAdapter() {
+		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 -->

+ 25 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/util/SexecSwitch.java

@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.model.sexec.*;
 import org.yakindu.sct.model.sexec.Call;
 import org.yakindu.sct.model.sexec.Check;
 import org.yakindu.sct.model.sexec.CheckRef;
@@ -378,6 +379,15 @@ public class SexecSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case SexecPackage.EXECUTION_SYNCHRONIZATION: {
+				ExecutionSynchronization executionSynchronization = (ExecutionSynchronization)theEObject;
+				T result = caseExecutionSynchronization(executionSynchronization);
+				if (result == null) result = caseExecutionNode(executionSynchronization);
+				if (result == null) result = caseMappedElement(executionSynchronization);
+				if (result == null) result = caseNamedElement(executionSynchronization);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -847,6 +857,21 @@ public class SexecSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Execution Synchronization</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Execution Synchronization</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseExecutionSynchronization(ExecutionSynchronization object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Check Ref</em>'.
 	 * <!-- begin-user-doc -->

+ 151 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.java

@@ -26,6 +26,7 @@ import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
 import org.yakindu.sct.model.sexec.ExecutionScope;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
 import org.yakindu.sct.model.sexec.Reaction;
 import org.yakindu.sct.model.sexec.ReactionFired;
 import org.yakindu.sct.model.sexec.ScheduleTimeEvent;
@@ -45,11 +46,13 @@ import org.yakindu.sct.model.sexec.transformation.TraceExtensions;
 import org.yakindu.sct.model.sgraph.Choice;
 import org.yakindu.sct.model.sgraph.Effect;
 import org.yakindu.sct.model.sgraph.Entry;
+import org.yakindu.sct.model.sgraph.Pseudostate;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.RegularState;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Statement;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Trigger;
 import org.yakindu.sct.model.sgraph.Vertex;
@@ -236,6 +239,32 @@ public class BehaviorMapping {
     return _choice;
   }
   
+  public ExecutionFlow mapSyncTransitions(final Statechart statechart, final ExecutionFlow r) {
+    Iterable<Synchronization> _allSynchronizations = this.sc.allSynchronizations(statechart);
+    final Procedure1<Synchronization> _function = new Procedure1<Synchronization>() {
+        public void apply(final Synchronization sync) {
+          BehaviorMapping.this.mapSyncTransition(sync);
+        }
+      };
+    IterableExtensions.<Synchronization>forEach(_allSynchronizations, _function);
+    return r;
+  }
+  
+  public ExecutionSynchronization mapSyncTransition(final Synchronization sync) {
+    final ExecutionSynchronization _sync = this.factory.create(sync);
+    EList<Reaction> _reactions = _sync.getReactions();
+    EList<Transition> _outgoingTransitions = sync.getOutgoingTransitions();
+    final Function1<Transition,Reaction> _function = new Function1<Transition,Reaction>() {
+        public Reaction apply(final Transition t) {
+          Reaction _mapTransition = BehaviorMapping.this.mapTransition(t);
+          return _mapTransition;
+        }
+      };
+    List<Reaction> _map = ListExtensions.<Transition, Reaction>map(_outgoingTransitions, _function);
+    _reactions.addAll(_map);
+    return _sync;
+  }
+  
   public ExecutionFlow mapExitActions(final Statechart statechart, final ExecutionFlow r) {
     SexecFactory _factory = this.sexec.factory();
     final Sequence seq = _factory.createSequence();
@@ -425,6 +454,38 @@ public class BehaviorMapping {
   }
   
   public Reaction mapTransition(final Transition t) {
+    Vertex _source = t.getSource();
+    Vertex _target = t.getTarget();
+    return this.mapTransition(t, _source, _target);
+  }
+  
+  protected Reaction _mapTransition(final Transition t, final Vertex source, final Vertex target) {
+    final Reaction r = this.factory.create(t);
+    Trigger _trigger = t.getTrigger();
+    boolean _notEquals = (!Objects.equal(_trigger, null));
+    if (_notEquals) {
+      Trigger _trigger_1 = t.getTrigger();
+      Check _mapToCheck = this.mapToCheck(_trigger_1);
+      r.setCheck(_mapToCheck);
+    }
+    Sequence _mapToEffect = this.mapToEffect(t, r);
+    r.setEffect(_mapToEffect);
+    return r;
+  }
+  
+  /**
+   * Ignore transitions from pseudostates to synchronization nodes.
+   * 
+   * TODO: introduce validation
+   */
+  protected Reaction _mapTransition(final Transition t, final Pseudostate source, final Synchronization target) {
+    return null;
+  }
+  
+  /**
+   * Transitions to synchronization points are part of joins and must be handled specifically.
+   */
+  protected Reaction _mapTransition(final Transition t, final State source, final Synchronization target) {
     final Reaction r = this.factory.create(t);
     Trigger _trigger = t.getTrigger();
     boolean _notEquals = (!Objects.equal(_trigger, null));
@@ -432,12 +493,76 @@ public class BehaviorMapping {
       Trigger _trigger_1 = t.getTrigger();
       Check _mapToCheck = this.mapToCheck(_trigger_1);
       r.setCheck(_mapToCheck);
+    } else {
+      SexecFactory _sexecFactory = this.factory.sexecFactory();
+      Check _createCheck = _sexecFactory.createCheck();
+      r.setCheck(_createCheck);
+      Check _check = r.getCheck();
+      ExecutionSynchronization _create = this.factory.create(target);
+      String _name = _create.getName();
+      String _plus = (_name + "join_check");
+      _check.setName(_plus);
     }
+    Check _check_1 = r.getCheck();
+    Statement condition = _check_1.getCondition();
+    EList<Transition> _incomingTransitions = target.getIncomingTransitions();
+    final Function1<Transition,Boolean> _function = new Function1<Transition,Boolean>() {
+        public Boolean apply(final Transition trans) {
+          boolean _notEquals = (!Objects.equal(trans, t));
+          return Boolean.valueOf(_notEquals);
+        }
+      };
+    Iterable<Transition> _filter = IterableExtensions.<Transition>filter(_incomingTransitions, _function);
+    for (final Transition trans : _filter) {
+      Vertex _source = trans.getSource();
+      if ((_source instanceof State)) {
+        Vertex _source_1 = trans.getSource();
+        Expression _active = this.stext.active(((State) _source_1));
+        Statement _conjunct = this.conjunct(condition, _active);
+        condition = _conjunct;
+        Trigger _trigger_2 = trans.getTrigger();
+        boolean _notEquals_1 = (!Objects.equal(_trigger_2, null));
+        if (_notEquals_1) {
+          Trigger _trigger_3 = trans.getTrigger();
+          Statement _buildCondition = this.buildCondition(_trigger_3);
+          Statement _conjunct_1 = this.conjunct(condition, _buildCondition);
+          condition = _conjunct_1;
+        }
+      }
+    }
+    Check _check_2 = r.getCheck();
+    _check_2.setCondition(condition);
     Sequence _mapToEffect = this.mapToEffect(t, r);
     r.setEffect(_mapToEffect);
     return r;
   }
   
+  public Statement conjunct(final Statement c1, final Statement c2) {
+    Statement _xifexpression = null;
+    boolean _and = false;
+    boolean _notEquals = (!Objects.equal(c1, null));
+    if (!_notEquals) {
+      _and = false;
+    } else {
+      boolean _notEquals_1 = (!Objects.equal(c2, null));
+      _and = (_notEquals && _notEquals_1);
+    }
+    if (_and) {
+      Expression _and_1 = this.stext.and(((Expression) c1), ((Expression) c2));
+      _xifexpression = _and_1;
+    } else {
+      Statement _xifexpression_1 = null;
+      boolean _notEquals_2 = (!Objects.equal(c1, null));
+      if (_notEquals_2) {
+        _xifexpression_1 = c1;
+      } else {
+        _xifexpression_1 = c2;
+      }
+      _xifexpression = _xifexpression_1;
+    }
+    return _xifexpression;
+  }
+  
   protected Check _mapToCheck(final Trigger tr) {
     return null;
   }
@@ -706,6 +831,16 @@ public class BehaviorMapping {
             Sequence _reactSequence_1 = _create_3.getReactSequence();
             Call _newCall_3 = this.factory.newCall(_reactSequence_1);
             _steps_5.add(_newCall_3);
+          } else {
+            Vertex _target_7 = t.getTarget();
+            if ((_target_7 instanceof Synchronization)) {
+              EList<Step> _steps_6 = sequence.getSteps();
+              Vertex _target_8 = t.getTarget();
+              ExecutionSynchronization _create_4 = this.factory.create(((Synchronization) _target_8));
+              Sequence _reactSequence_2 = _create_4.getReactSequence();
+              Call _newCall_4 = this.factory.newCall(_reactSequence_2);
+              _steps_6.add(_newCall_4);
+            }
           }
         }
       }
@@ -937,6 +1072,22 @@ public class BehaviorMapping {
     }
   }
   
+  public Reaction mapTransition(final Transition t, final Vertex source, final Vertex target) {
+    if (source instanceof State
+         && target instanceof Synchronization) {
+      return _mapTransition(t, (State)source, (Synchronization)target);
+    } else if (source instanceof Pseudostate
+         && target instanceof Synchronization) {
+      return _mapTransition(t, (Pseudostate)source, (Synchronization)target);
+    } else if (source != null
+         && target != null) {
+      return _mapTransition(t, source, target);
+    } else {
+      throw new IllegalArgumentException("Unhandled parameter types: " +
+        Arrays.<Object>asList(t, source, target).toString());
+    }
+  }
+  
   public Check mapToCheck(final Trigger tr) {
     if (tr instanceof ReactionTrigger) {
       return _mapToCheck((ReactionTrigger)tr);

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

@@ -83,6 +83,7 @@ public class ModelSequencer {
     this.behaviorMapping.mapTransitions(sc, ef);
     this.behaviorMapping.mapLocalReactions(sc, ef);
     this.behaviorMapping.mapChoiceTransitions(sc, ef);
+    this.behaviorMapping.mapSyncTransitions(sc, ef);
     this.reactBuilder.defineEntryReactions(sc, ef);
     this.reactBuilder.defineRegularStateReactions(ef, sc);
     this.reactBuilder.definePseudoStateReactions(ef, sc);

+ 39 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/ReactionBuilder.java

@@ -8,6 +8,7 @@ import java.util.List;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.xbase.lib.CollectionExtensions;
 import org.eclipse.xtext.xbase.lib.CollectionLiterals;
 import org.eclipse.xtext.xbase.lib.Functions.Function1;
 import org.eclipse.xtext.xbase.lib.Functions.Function2;
@@ -23,6 +24,7 @@ import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.ExecutionNode;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
 import org.yakindu.sct.model.sexec.HistoryEntry;
 import org.yakindu.sct.model.sexec.If;
 import org.yakindu.sct.model.sexec.Reaction;
@@ -48,6 +50,7 @@ import org.yakindu.sct.model.sgraph.RegularState;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Statement;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.stext.stext.BoolLiteral;
 import org.yakindu.sct.model.stext.stext.Literal;
@@ -146,6 +149,13 @@ public class ReactionBuilder {
         }
       };
     IterableExtensions.<Choice>forEach(_allChoices, _function);
+    Iterable<Synchronization> _allSynchronizations = this.sct.allSynchronizations(sc);
+    final Procedure1<Synchronization> _function_1 = new Procedure1<Synchronization>() {
+        public void apply(final Synchronization sync) {
+          ReactionBuilder.this.defineReaction(sync);
+        }
+      };
+    IterableExtensions.<Synchronization>forEach(_allSynchronizations, _function_1);
   }
   
   public Sequence defineReaction(final Choice choice) {
@@ -192,6 +202,35 @@ public class ReactionBuilder {
     return execChoice.getReactSequence();
   }
   
+  /**
+   * TODO : support fork...
+   */
+  public Sequence defineReaction(final Synchronization sync) {
+    final ExecutionSynchronization execSync = this.mapping.create(sync);
+    EList<Reaction> _reactions = execSync.getReactions();
+    final Reaction _default_ = IterableExtensions.<Reaction>head(_reactions);
+    Sequence _reactSequence = execSync.getReactSequence();
+    EList<Step> _steps = _reactSequence.getSteps();
+    Step _effect = _default_.getEffect();
+    CollectionExtensions.<Step>addAll(_steps, _effect);
+    Sequence _reactSequence_1 = execSync.getReactSequence();
+    _reactSequence_1.setName("react");
+    Sequence _reactSequence_2 = execSync.getReactSequence();
+    String _name = sync.getName();
+    String _plus = ("The reactions of state " + _name);
+    String _plus_1 = (_plus + ".");
+    _reactSequence_2.setComment(_plus_1);
+    boolean _isAddTraceSteps = this.trace.isAddTraceSteps();
+    if (_isAddTraceSteps) {
+      Sequence _reactSequence_3 = execSync.getReactSequence();
+      EList<Step> _steps_1 = _reactSequence_3.getSteps();
+      ExecutionSynchronization _create = this.mapping.create(sync);
+      TraceNodeExecuted _newTraceNodeExecuted = this.trace.newTraceNodeExecuted(_create);
+      _steps_1.add(0, _newTraceNodeExecuted);
+    }
+    return execSync.getReactSequence();
+  }
+  
   public boolean alwaysTrue(final Check check) {
     boolean _and = false;
     boolean _notEquals = (!Objects.equal(check, null));

+ 263 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.smap

@@ -0,0 +1,263 @@
+SMAP
+SequenceBuilder.java
+Xtend
+*S Xtend
+*F
++ 0 SequenceBuilder.xtend
+src/org/yakindu/sct/model/sexec/transformation/SequenceBuilder.xtend
+*L
+44:98,2
+45:100
+44:101
+49:105,2
+50:107
+49:108
+55:112,3
+56:115
+55:116
+58:117,3
+59:120
+58:121
+61:122
+62:123,2
+63:125
+64:126,3
+66:129,3
+67:132
+71:136
+73:137,2
+74:139,3
+75:142,3
+76:145
+78:146,3
+80:149,15
+81:164
+82:165,2
+83:167
+84:168,6
+85:174,2
+86:176,4
+85:180
+88:181,8
+89:189,6
+90:195,2
+91:197,5
+90:202
+85:203
+94:204,4
+80:208,2
+78:210
+98:211
+102:215
+103:216,3
+104:219,2
+105:221
+106:222,2
+107:224
+108:225,3
+110:228,3
+111:231
+104:232
+103:233
+117:237
+119:238,2
+120:240,3
+121:243,3
+122:246,2
+124:248,4
+125:252
+127:253,14
+128:267,6
+127:273
+124:274,2
+132:276
+141:283,4
+146:290
+147:291,2
+148:293
+149:294,3
+152:297,4
+154:301,2
+155:303,10
+156:313,4
+155:317
+162:318
+169:325
+170:326,2
+171:328
+172:329,3
+173:332,8
+175:340,5
+177:345,3
+178:348
+185:352
+186:353,2
+187:355
+188:356,3
+189:359,8
+191:367,5
+193:372,2
+195:374,3
+193:377
+199:378,3
+200:381
+202:382
+203:383,3
+204:386,4
+203:390
+199:391,2
+193:393
+209:394
+218:401,4
+223:408
+224:409,2
+225:411
+226:412,3
+229:415,4
+231:419,3
+232:422,3
+231:425
+236:426,9
+237:435
+239:436,8
+242:444
+243:445,2
+239:447,2
+246:449
+253:456
+254:457,2
+255:459
+256:460
+257:461,3
+259:464,5
+261:469
+267:473
+268:474,2
+269:476
+270:477,3
+272:480,2
+274:482,3
+272:485
+278:486,3
+280:489
+282:490
+283:491,3
+284:494,4
+283:498
+278:499,2
+272:501
+289:502,8
+291:510,5
+293:515
+299:519,2
+300:521
+301:522,7
+303:529,18
+306:547,2
+308:549,2
+311:551
+312:552,2
+313:554
+314:555,4
+315:559,9
+316:568
+317:569,3
+315:572
+314:573,6
+323:579,3
+324:582,4
+323:586
+328:587,4
+329:591,12
+330:603
+331:604,8
+332:612,5
+329:617
+328:618,6
+337:624,8
+306:632,2
+341:634
+347:638,2
+348:640
+349:641,3
+351:644,3
+352:647
+353:648,3
+354:651,4
+353:655
+351:656,2
+358:658,8
+360:666
+361:667
+368:671,2
+369:673
+370:674,3
+372:677,11
+373:688,3
+374:691,3
+373:694
+372:695
+378:696,3
+379:699
+380:700,2
+381:702,2
+378:704,2
+384:706,8
+386:714,3
+387:717
+388:718,3
+389:721,4
+388:725
+386:726,2
+393:728
+394:729
+398:733,2
+399:735,2
+400:737,2
+401:739
+402:740
+403:741
+404:742,3
+405:745
+406:746
+411:750,2
+412:752,2
+413:754,2
+414:756,2
+415:758
+417:759,4
+418:763,6
+419:769,7
+420:776,7
+421:783,7
+417:790,3
+411:793,3
+426:799,2
+427:801,2
+428:803,2
+429:805,2
+430:807,2
+431:809
+433:810
+434:811
+435:812
+426:813,3
+440:819,2
+441:821,2
+442:823,2
+443:825,2
+444:827,2
+445:829
+447:830
+448:831
+449:832
+440:833,3
+168:839,3
+183:842,3
+145:845,3
+165:848,3
+252:858,3
+265:861,3
+222:864,3
+250:867,3
+*E

+ 63 - 21
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.java

@@ -27,6 +27,7 @@ import org.yakindu.sct.model.sexec.ExecutionEntry;
 import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
 import org.yakindu.sct.model.sexec.ScheduleTimeEvent;
 import org.yakindu.sct.model.sexec.Sequence;
 import org.yakindu.sct.model.sexec.SexecFactory;
@@ -50,6 +51,7 @@ import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Statement;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.stext.stext.AlwaysEvent;
@@ -453,25 +455,65 @@ public class SexecElementMapping {
     }
   }
   
-  public ExecutionRegion create(final Region region) {
-    final ArrayList<?>_cacheKey = CollectionLiterals.newArrayList(region);
-    final ExecutionRegion _result;
+  public ExecutionSynchronization create(final Synchronization sync) {
+    final ArrayList<?>_cacheKey = CollectionLiterals.newArrayList(sync);
+    final ExecutionSynchronization _result;
     synchronized (_createCache_create_9) {
       if (_createCache_create_9.containsKey(_cacheKey)) {
         return _createCache_create_9.get(_cacheKey);
       }
       SexecFactory _sexecFactory = this.sexecFactory();
+      ExecutionSynchronization _createExecutionSynchronization = _sexecFactory.createExecutionSynchronization();
+      _result = _createExecutionSynchronization;
+      _createCache_create_9.put(_cacheKey, _result);
+    }
+    _init_create_9(_result, sync);
+    return _result;
+  }
+  
+  private final HashMap<ArrayList<? extends Object>,ExecutionSynchronization> _createCache_create_9 = CollectionLiterals.newHashMap();
+  
+  private void _init_create_9(final ExecutionSynchronization r, final Synchronization sync) {
+    boolean _notEquals = (!Objects.equal(sync, null));
+    if (_notEquals) {
+      Region _parentRegion = sync.getParentRegion();
+      EList<Vertex> _vertices = _parentRegion.getVertices();
+      Iterable<Synchronization> _filter = Iterables.<Synchronization>filter(_vertices, Synchronization.class);
+      List<Synchronization> _list = IterableExtensions.<Synchronization>toList(_filter);
+      final int n = _list.indexOf(sync);
+      String _plus = ("_sync" + Integer.valueOf(n));
+      String _plus_1 = (_plus + "_");
+      r.setSimpleName(_plus_1);
+      QualifiedName _fullyQualifiedName = this.qfnProvider.getFullyQualifiedName(sync);
+      String _string = _fullyQualifiedName.toString();
+      String _replaceAll = _string.replaceAll(" ", "");
+      r.setName(_replaceAll);
+      r.setSourceElement(sync);
+      SexecFactory _sexecFactory = this.sexecFactory();
+      Sequence _createSequence = _sexecFactory.createSequence();
+      r.setReactSequence(_createSequence);
+    }
+  }
+  
+  public ExecutionRegion create(final Region region) {
+    final ArrayList<?>_cacheKey = CollectionLiterals.newArrayList(region);
+    final ExecutionRegion _result;
+    synchronized (_createCache_create_10) {
+      if (_createCache_create_10.containsKey(_cacheKey)) {
+        return _createCache_create_10.get(_cacheKey);
+      }
+      SexecFactory _sexecFactory = this.sexecFactory();
       ExecutionRegion _createExecutionRegion = _sexecFactory.createExecutionRegion();
       _result = _createExecutionRegion;
-      _createCache_create_9.put(_cacheKey, _result);
+      _createCache_create_10.put(_cacheKey, _result);
     }
-    _init_create_9(_result, region);
+    _init_create_10(_result, region);
     return _result;
   }
   
-  private final HashMap<ArrayList<? extends Object>,ExecutionRegion> _createCache_create_9 = CollectionLiterals.newHashMap();
+  private final HashMap<ArrayList<? extends Object>,ExecutionRegion> _createCache_create_10 = CollectionLiterals.newHashMap();
   
-  private void _init_create_9(final ExecutionRegion r, final Region region) {
+  private void _init_create_10(final ExecutionRegion r, final Region region) {
     boolean _notEquals = (!Objects.equal(region, null));
     if (_notEquals) {
       String _name = region.getName();
@@ -518,22 +560,22 @@ public class SexecElementMapping {
   public org.yakindu.sct.model.sexec.Reaction create(final Transition tr) {
     final ArrayList<?>_cacheKey = CollectionLiterals.newArrayList(tr);
     final org.yakindu.sct.model.sexec.Reaction _result;
-    synchronized (_createCache_create_10) {
-      if (_createCache_create_10.containsKey(_cacheKey)) {
-        return _createCache_create_10.get(_cacheKey);
+    synchronized (_createCache_create_11) {
+      if (_createCache_create_11.containsKey(_cacheKey)) {
+        return _createCache_create_11.get(_cacheKey);
       }
       SexecFactory _sexecFactory = this.sexecFactory();
       org.yakindu.sct.model.sexec.Reaction _createReaction = _sexecFactory.createReaction();
       _result = _createReaction;
-      _createCache_create_10.put(_cacheKey, _result);
+      _createCache_create_11.put(_cacheKey, _result);
     }
-    _init_create_10(_result, tr);
+    _init_create_11(_result, tr);
     return _result;
   }
   
-  private final HashMap<ArrayList<? extends Object>,org.yakindu.sct.model.sexec.Reaction> _createCache_create_10 = CollectionLiterals.newHashMap();
+  private final HashMap<ArrayList<? extends Object>,org.yakindu.sct.model.sexec.Reaction> _createCache_create_11 = CollectionLiterals.newHashMap();
   
-  private void _init_create_10(final org.yakindu.sct.model.sexec.Reaction r, final Transition tr) {
+  private void _init_create_11(final org.yakindu.sct.model.sexec.Reaction r, final Transition tr) {
     String _id = this.sce.id(tr);
     r.setName(_id);
     r.setTransition(true);
@@ -543,22 +585,22 @@ public class SexecElementMapping {
   public org.yakindu.sct.model.sexec.Reaction create(final LocalReaction lr) {
     final ArrayList<?>_cacheKey = CollectionLiterals.newArrayList(lr);
     final org.yakindu.sct.model.sexec.Reaction _result;
-    synchronized (_createCache_create_11) {
-      if (_createCache_create_11.containsKey(_cacheKey)) {
-        return _createCache_create_11.get(_cacheKey);
+    synchronized (_createCache_create_12) {
+      if (_createCache_create_12.containsKey(_cacheKey)) {
+        return _createCache_create_12.get(_cacheKey);
       }
       SexecFactory _sexecFactory = this.sexecFactory();
       org.yakindu.sct.model.sexec.Reaction _createReaction = _sexecFactory.createReaction();
       _result = _createReaction;
-      _createCache_create_11.put(_cacheKey, _result);
+      _createCache_create_12.put(_cacheKey, _result);
     }
-    _init_create_11(_result, lr);
+    _init_create_12(_result, lr);
     return _result;
   }
   
-  private final HashMap<ArrayList<? extends Object>,org.yakindu.sct.model.sexec.Reaction> _createCache_create_11 = CollectionLiterals.newHashMap();
+  private final HashMap<ArrayList<? extends Object>,org.yakindu.sct.model.sexec.Reaction> _createCache_create_12 = CollectionLiterals.newHashMap();
   
-  private void _init_create_11(final org.yakindu.sct.model.sexec.Reaction r, final LocalReaction lr) {
+  private void _init_create_12(final org.yakindu.sct.model.sexec.Reaction r, final LocalReaction lr) {
     String _id = this.sce.id(lr);
     r.setName(_id);
     r.setTransition(false);

+ 146 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.smap

@@ -0,0 +1,146 @@
+SMAP
+SexecElementMapping.java
+Xtend
+*S Xtend
+*F
++ 0 SexecElementMapping.xtend
+src/org/yakindu/sct/model/sexec/transformation/SexecElementMapping.xtend
+*L
+68:103,2
+69:115,2
+70:117
+73:127,2
+74:139,2
+77:150,2
+81:171,2
+82:183,2
+86:194
+88:214
+90:234
+93:254,2
+94:266,2
+95:268,5
+96:273,9
+97:282,4
+98:286
+94:287
+102:297,2
+103:309,2
+104:311,5
+105:316,3
+106:319,4
+107:323
+108:324,3
+103:327
+113:337,2
+114:349,2
+115:351,2
+116:353,2
+117:355,9
+118:364,11
+119:375,41
+120:416,4
+121:420
+122:421,2
+123:423
+124:424,4
+125:428,6
+126:434,6
+127:440,6
+124:446
+128:447
+124:448,2
+129:450,2
+124:452,2
+131:454
+114:455
+136:465,2
+137:477,2
+138:479,5
+139:484,3
+140:487,4
+141:491
+142:492,3
+137:495
+148:505,2
+149:517,2
+150:519,3
+151:522,2
+152:524,2
+153:526,2
+150:528
+155:529,2
+150:531
+157:532
+149:533
+162:543,2
+163:555,3
+166:567,2
+167:579,2
+168:581
+169:582
+172:592,2
+173:604,2
+174:606
+177:610,2
+178:612,2
+179:614
+177:615,3
+183:621,2
+184:623,2
+185:625
+183:626,3
+189:632,2
+190:634,2
+191:636
+192:637
+189:638,3
+197:644,2
+198:646,2
+199:648
+197:649,3
+204:661,2
+205:673,3
+208:679
+212:683,2
+213:685,3
+214:688
+217:692
+218:696,9
+219:708,9
+220:720,9
+221:732,2
+225:737,2
+226:739,2
+227:741
+231:745,2
+232:747,2
+233:749
+234:750
+235:751
+239:755,2
+240:757,2
+241:759
+242:760
+243:761
+247:765,2
+248:767,2
+249:769
+250:770
+251:771
+255:775
+256:779
+73:783,2
+77:785,2
+238:794,2
+246:796,2
+230:798,2
+211:800,2
+224:802,2
+208:804,2
+221:813,2
+220:815,2
+219:817,2
+218:819,2
+217:821,2
+*E

+ 7 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StatechartExtensions.java

@@ -26,6 +26,7 @@ import org.yakindu.sct.model.sgraph.RegularState;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Trigger;
 import org.yakindu.sct.model.sgraph.Vertex;
@@ -302,6 +303,12 @@ public class StatechartExtensions {
     return IteratorExtensions.<Entry>toIterable(_filter);
   }
   
+  public Iterable<Synchronization> allSynchronizations(final Statechart sc) {
+    TreeIterator<EObject> _eAllContents = sc.eAllContents();
+    Iterator<Synchronization> _filter = Iterators.<Synchronization>filter(_eAllContents, Synchronization.class);
+    return IteratorExtensions.<Synchronization>toIterable(_filter);
+  }
+  
   public List<LocalReaction> entryReactions(final ReactiveElement state) {
     EList<Reaction> _localReactions = state.getLocalReactions();
     final Function1<Reaction,Boolean> _function = new Function1<Reaction,Boolean>() {

+ 20 - 4
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StextExtensions.java

@@ -1,10 +1,15 @@
 package org.yakindu.sct.model.sexec.transformation;
 
+import org.yakindu.sct.model.sgraph.State;
+import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression;
 import org.yakindu.sct.model.stext.stext.Expression;
 import org.yakindu.sct.model.stext.stext.LogicalAndExpression;
 import org.yakindu.sct.model.stext.stext.LogicalOrExpression;
 import org.yakindu.sct.model.stext.stext.StextFactory;
 
+/**
+ * @author Axel Terfloth added 'active' extension
+ */
 @SuppressWarnings("all")
 public class StextExtensions {
   public StextFactory factory() {
@@ -27,10 +32,21 @@ public class StextExtensions {
     LogicalAndExpression _xblockexpression = null;
     {
       StextFactory _factory = this.factory();
-      final LogicalAndExpression or = _factory.createLogicalAndExpression();
-      or.setLeftOperand(left);
-      or.setRightOperand(right);
-      _xblockexpression = (or);
+      final LogicalAndExpression and = _factory.createLogicalAndExpression();
+      and.setLeftOperand(left);
+      and.setRightOperand(right);
+      _xblockexpression = (and);
+    }
+    return _xblockexpression;
+  }
+  
+  public Expression active(final State state) {
+    ActiveStateReferenceExpression _xblockexpression = null;
+    {
+      StextFactory _factory = this.factory();
+      final ActiveStateReferenceExpression active = _factory.createActiveStateReferenceExpression();
+      active.setValue(state);
+      _xblockexpression = (active);
     }
     return _xblockexpression;
   }

+ 12 - 0
plugins/org.yakindu.sct.model.sexec/xtend-gen/org/yakindu/sct/model/sexec/transformation/StructureMapping.java

@@ -20,6 +20,7 @@ import org.yakindu.sct.model.sexec.ExecutionNode;
 import org.yakindu.sct.model.sexec.ExecutionRegion;
 import org.yakindu.sct.model.sexec.ExecutionScope;
 import org.yakindu.sct.model.sexec.ExecutionState;
+import org.yakindu.sct.model.sexec.ExecutionSynchronization;
 import org.yakindu.sct.model.sexec.TimeEvent;
 import org.yakindu.sct.model.sexec.transformation.SexecElementMapping;
 import org.yakindu.sct.model.sexec.transformation.StatechartExtensions;
@@ -33,6 +34,7 @@ import org.yakindu.sct.model.sgraph.RegularState;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.sgraph.Synchronization;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.stext.stext.EventDefinition;
 import org.yakindu.sct.model.stext.stext.OperationDefinition;
@@ -204,6 +206,16 @@ public class StructureMapping {
       };
     Iterable<ExecutionEntry> _map_1 = IterableExtensions.<Entry, ExecutionEntry>map(_allEntries, _function_1);
     Iterables.<ExecutionNode>addAll(_nodes_1, _map_1);
+    EList<ExecutionNode> _nodes_2 = r.getNodes();
+    Iterable<Synchronization> _allSynchronizations = this.sct.allSynchronizations(statechart);
+    final Function1<Synchronization,ExecutionSynchronization> _function_2 = new Function1<Synchronization,ExecutionSynchronization>() {
+        public ExecutionSynchronization apply(final Synchronization sync) {
+          ExecutionSynchronization _create = StructureMapping.this.mapping.create(sync);
+          return _create;
+        }
+      };
+    Iterable<ExecutionSynchronization> _map_2 = IterableExtensions.<Synchronization, ExecutionSynchronization>map(_allSynchronizations, _function_2);
+    Iterables.<ExecutionNode>addAll(_nodes_2, _map_2);
     return r;
   }
   

+ 1 - 1
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/debugmodel/SCTDebugTarget.java

@@ -53,7 +53,7 @@ public class SCTDebugTarget extends SCTDebugElement implements IDebugTarget,
 
 	private ILaunch launch;
 
-	private IExecutionFacade facade;
+	protected IExecutionFacade facade;
 
 	private boolean stepping = false;
 	private boolean terminated = false;

+ 8 - 8
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/.classpath

@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="src-gen"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

+ 55 - 56
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/AlwaysOncycleTest.java

@@ -1,56 +1,55 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for AlwaysOncycle
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class AlwaysOncycleTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("AlwaysOncycle.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void alwaysOncycleTest() throws Exception {
-		assertTrue(isActive("StateA"));
-		while(getInteger("value") < 5) {
-			interpreter.runCycle();
-			assertTrue(isActive("StateA"));
-		}
-		interpreter.runCycle();
-		assertTrue(isActive("StateB"));
-		while(getInteger("value") < 5) {
-			interpreter.runCycle();
-			assertTrue(isActive("StateB"));
-		}
-		interpreter.runCycle();
-		assertTrue(isActive("StateA"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for AlwaysOncycle
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class AlwaysOncycleTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("AlwaysOncycle.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void alwaysOncycleTest() throws Exception {
+		assertTrue(isActive("StateA"));
+		while(getInteger("value") < 5) {
+			interpreter.runCycle();
+			assertTrue(isActive("StateA"));
+		}
+		interpreter.runCycle();
+		assertTrue(isActive("StateB"));
+		while(getInteger("value") < 5) {
+			interpreter.runCycle();
+			assertTrue(isActive("StateB"));
+		}
+		interpreter.runCycle();
+		assertTrue(isActive("StateA"));
+	}
+}

+ 70 - 71
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/ChoiceTest.java

@@ -1,71 +1,70 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for Choice
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class ChoiceTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("Choice.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void choiceTest() throws Exception {
-		assertTrue(isActive("A"));
-		assertTrue(getInteger("value") == 4);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("B"));
-		assertTrue(getInteger("value") == 3);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("A"));
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("C"));
-		assertTrue(getInteger("value") == 2);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("B"));
-		assertTrue(getInteger("value") == 1);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("A"));
-		assertTrue(getInteger("value") == 1);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("C"));
-		assertTrue(getInteger("value") == 0);
-		raiseEvent("pressKey");
-		interpreter.runCycle();
-		assertTrue(isActive("A"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for Choice
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class ChoiceTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("Choice.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void choiceTest() throws Exception {
+		assertTrue(isActive("A"));
+		assertTrue(getInteger("value") == 4);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		assertTrue(getInteger("value") == 3);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("C"));
+		assertTrue(getInteger("value") == 2);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		assertTrue(getInteger("value") == 1);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		assertTrue(getInteger("value") == 1);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("C"));
+		assertTrue(getInteger("value") == 0);
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+	}
+}

+ 61 - 61
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/DeepHistoryTest.java

@@ -1,61 +1,61 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for DeepHistory
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class DeepHistoryTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("DeepHistory.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void deepHistoryTest() throws Exception {
-		raiseEvent("event1");
-		interpreter.runCycle();
-		raiseEvent("event3");
-		interpreter.runCycle();
-		raiseEvent("event5");
-		interpreter.runCycle();
-		raiseEvent("event7");
-		interpreter.runCycle();
-		assertTrue(!isActive("State1"));
-		assertTrue(isActive("State9"));
-		raiseEvent("event2");
-		interpreter.runCycle();
-		assertTrue(isActive("State1"));
-		assertTrue(!isActive("State9"));
-		raiseEvent("event1");
-		interpreter.runCycle();
-		assertTrue(!isActive("State1"));
-		assertTrue(isActive("State9"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for DeepHistory
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class DeepHistoryTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("DeepHistory.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void deepHistoryTest() throws Exception {
+		raiseEvent("event1");
+		interpreter.runCycle();
+		raiseEvent("event3");
+		interpreter.runCycle();
+		raiseEvent("event5");
+		interpreter.runCycle();
+		raiseEvent("event7");
+		interpreter.runCycle();
+		assertTrue(!isActive("State1"));
+		assertTrue(isActive("State9"));
+		raiseEvent("event2");
+		interpreter.runCycle();
+		assertTrue(isActive("State1"));
+		assertTrue(!isActive("State9"));
+		raiseEvent("event1");
+		interpreter.runCycle();
+		assertTrue(!isActive("State1"));
+		assertTrue(isActive("State9"));
+	}
+}

+ 44 - 44
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/GuardTest.java

@@ -1,44 +1,44 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for Guard
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class GuardTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("Guard.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void guardTest() throws Exception {
-		assertTrue(isActive("A"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for Guard
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class GuardTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("Guard.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void guardTest() throws Exception {
+		assertTrue(isActive("A"));
+	}
+}

+ 54 - 55
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/PriorityValuesTest.java

@@ -1,55 +1,54 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for PriorityValues
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class PriorityValuesTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("PriorityValues.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void transitionPriority() throws Exception {
-		assertTrue(isActive("A"));
-		raiseEvent("event1");
-		interpreter.runCycle();
-		assertTrue(isActive("C"));
-	}
-	@Test
-	public void regionPriority() throws Exception {
-		assertTrue(isActive("A"));
-		raiseEvent("event2");
-		interpreter.runCycle();
-		assertTrue(isActive("B"));
-		assertTrue(!isActive("E"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for PriorityValues
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class PriorityValuesTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("PriorityValues.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void transitionPriority() throws Exception {
+		assertTrue(isActive("A"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("C"));
+	}
+	@Test
+	public void regionPriority() throws Exception {
+		assertTrue(isActive("A"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		assertTrue(!isActive("E"));
+	}
+}

+ 72 - 73
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/ShallowHistoryTest.java

@@ -1,73 +1,72 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for ShallowHistory
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class ShallowHistoryTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("ShallowHistory.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void shallowHistoryTest() throws Exception {
-		raiseEvent("event1");
-		interpreter.runCycle();
-		raiseEvent("event3");
-		interpreter.runCycle();
-		raiseEvent("event5");
-		interpreter.runCycle();
-		raiseEvent("event7");
-		interpreter.runCycle();
-		assertTrue(!isActive("State1"));
-		assertTrue(isActive("State9"));
-		raiseEvent("event6");
-		interpreter.runCycle();
-		assertTrue(!isActive("State9"));
-		assertTrue(isActive("State6"));
-		raiseEvent("event5");
-		interpreter.runCycle();
-		assertTrue(!isActive("State8"));
-		assertTrue(isActive("State9"));
-		raiseEvent("event2");
-		interpreter.runCycle();
-		assertTrue(!isActive("State9"));
-		assertTrue(isActive("State1"));
-		raiseEvent("event1");
-		interpreter.runCycle();
-		assertTrue(isActive("State6"));
-		assertTrue(!isActive("State1"));
-		raiseEvent("event5");
-		interpreter.runCycle();
-		assertTrue(!isActive("State6"));
-		assertTrue(isActive("State9"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for ShallowHistory
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class ShallowHistoryTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("ShallowHistory.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void shallowHistoryTest() throws Exception {
+		raiseEvent("");
+		interpreter.runCycle();
+		raiseEvent("");
+		interpreter.runCycle();
+		raiseEvent("");
+		interpreter.runCycle();
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(!isActive("State1"));
+		assertTrue(isActive("State9"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(!isActive("State9"));
+		assertTrue(isActive("State6"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(!isActive("State8"));
+		assertTrue(isActive("State9"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(!isActive("State9"));
+		assertTrue(isActive("State1"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("State6"));
+		assertTrue(!isActive("State1"));
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(!isActive("State6"));
+		assertTrue(isActive("State9"));
+	}
+}

+ 47 - 47
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SimpleEventTest.java

@@ -1,47 +1,47 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for SimpleEvent
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class SimpleEventTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("SimpleEvent.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void simpleEventTest() throws Exception {
-		assertTrue(isActive("A"));
-		raiseEvent("Event1");
-		interpreter.runCycle();
-		assertTrue(isActive("B"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for SimpleEvent
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class SimpleEventTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("SimpleEvent.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void simpleEventTest() throws Exception {
+		assertTrue(isActive("A"));
+		raiseEvent("Event1");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+	}
+}

+ 49 - 48
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SimpleHierachyTest.java

@@ -1,48 +1,49 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for SimpleHierachy
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class SimpleHierachyTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("SimpleHierachy.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void simpleHierachyTest() throws Exception {
-		assertTrue(isActive("A"));
-		raiseEvent("Event1");
-		interpreter.runCycle();
-		assertTrue(isActive("B"));
-		assertTrue(isActive("B1"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for SimpleHierachy
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class SimpleHierachyTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("SimpleHierachy.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void simpleHierachyTest() throws Exception {
+		assertTrue(isActive("A"));
+		raiseEvent("");
+		raiseEvent("");
+		raiseEvent("");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		assertTrue(isActive("B1"));
+	}
+}

+ 50 - 50
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/StateIsActiveTest.java

@@ -1,50 +1,50 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for StateIsActive
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class StateIsActiveTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("StateIsActive.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void stateIsActive() throws Exception {
-		assertTrue(isActive("R1A"));
-		assertTrue(isActive("R2A"));
-		raiseEvent("Event1");
-		interpreter.runCycle();
-		interpreter.runCycle();
-		assertTrue(isActive("R1B"));
-		assertTrue(isActive("R2B"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for StateIsActive
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class StateIsActiveTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("StateIsActive.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void stateIsActive() throws Exception {
+		assertTrue(isActive("R1A"));
+		assertTrue(isActive("R2A"));
+		raiseEvent("Event1");
+		interpreter.runCycle();
+		interpreter.runCycle();
+		assertTrue(isActive("R1B"));
+		assertTrue(isActive("R2B"));
+	}
+}

+ 55 - 55
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/StatechartLocalReactionsTest.java

@@ -1,55 +1,55 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for StatechartLocalReactions
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class StatechartLocalReactionsTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("StatechartLocalReactions.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void statechartLocalReactionsTest() throws Exception {
-		assertTrue(isActive("S1"));
-		assertTrue(isActive("a"));
-		while(getInteger("myInt") < 10) {
-			assertTrue(isActive("a"));
-			if(getInteger("myInt") % 2 == 0) {
-				assertTrue(isActive("S1"));
-			  }
-			else {
-				assertTrue(isActive("S2"));
-			}
-			interpreter.runCycle();
-		}
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for StatechartLocalReactions
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class StatechartLocalReactionsTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("StatechartLocalReactions.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void statechartLocalReactionsTest() throws Exception {
+		assertTrue(isActive("S1"));
+		assertTrue(isActive("a"));
+		while(getInteger("myInt") < 10) {
+			assertTrue(isActive("a"));
+			if(getInteger("myInt") % 2 == 0) {
+				assertTrue(isActive("S1"));
+			  }
+			else {
+				assertTrue(isActive("S2"));
+			}
+			interpreter.runCycle();
+		}
+	}
+}

+ 44 - 44
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SyncForkTest.java

@@ -1,44 +1,44 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for SyncFork
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class SyncForkTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("SyncFork.sct");
-		initInterpreter(flow);
-	}
-	@Test
-	public void syncForkTest() throws Exception {
-		assertTrue(isActive("A"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for SyncFork
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class SyncForkTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("SyncFork.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void syncForkTest() throws Exception {
+		assertTrue(isActive("A"));
+	}
+}

+ 106 - 0
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/SyncJoinTest.java

@@ -0,0 +1,106 @@
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for SyncJoin
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class SyncJoinTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("SyncJoin.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void syncJoin_C2_Waits() throws Exception {
+		assertTrue(isActive("B"));
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D1"));
+		raiseEvent("e");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D1"));
+		raiseEvent("jc");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D1"));
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D1"));
+		raiseEvent("jc");
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D1"));
+		raiseEvent("f");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jc");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jc");
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+	}
+	@Test
+	public void syncJoin_D2_Waits() throws Exception {
+		assertTrue(isActive("B"));
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D1"));
+		raiseEvent("f");
+		interpreter.runCycle();
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jc");
+		interpreter.runCycle();
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D2"));
+		raiseEvent("jc");
+		raiseEvent("jd");
+		interpreter.runCycle();
+		assertTrue(isActive("C1"));
+		assertTrue(isActive("D2"));
+		raiseEvent("e");
+		interpreter.runCycle();
+		assertTrue(isActive("C2"));
+		assertTrue(isActive("D2"));
+	}
+}

+ 48 - 53
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src-gen/org/yakindu/sct/model/sexec/interpreter/test/TimeTriggerTest.java

@@ -1,53 +1,48 @@
-/**
-* Copyright (c) 2012 committers of YAKINDU and others.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-*     committers of YAKINDU - initial API and implementation
-*/
-package org.yakindu.sct.model.sexec.interpreter.test;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
-import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
-import com.google.inject.Inject;
-import org.junit.Before;
-import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
-import org.yakindu.sct.model.sexec.ExecutionFlow;
-import util.TestModels;	
-import static junit.framework.Assert.*;
-/**
- *  Unit TestCase for TimeTrigger
- */
-@SuppressWarnings("all")
-@RunWith(XtextRunner.class)
-@InjectWith(SExecInjectionProvider.class)
-public class TimeTriggerTest extends AbstractExecutionFlowTest {
-	
-	@Inject
-	private TestModels models;
-	
-	@Before
-	public void setup() throws Exception{
-		ExecutionFlow flow = models.loadExecutionFlowFromResource("TimeTrigger.sct");
-		initInterpreter(flow);
-	}
-
-	@Ignore
-	public void timeTriggerTest() throws Exception {
-		assertTrue(isActive("StateA"));
-		Thread.sleep(110);
-		assertTrue(isActive("StateB"));
-		while(getInteger("value") < 10) {
-			interpreter.runCycle();
-			Thread.sleep(10);
-		}
-		assertTrue(isActive("StateA"));
-	}
-}
+/**
+* Copyright (c) 2012 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+package org.yakindu.sct.model.sexec.interpreter.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import com.google.inject.Inject;
+import org.junit.Before;
+import org.yakindu.sct.model.sexec.interpreter.IExecutionFlowInterpreter;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import util.TestModels;	
+import static junit.framework.Assert.*;
+/**
+ *  Unit TestCase for TimeTrigger
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class TimeTriggerTest extends AbstractExecutionFlowTest {
+	
+	@Inject
+	private TestModels models;
+	
+	@Before
+	public void setup() throws Exception{
+		ExecutionFlow flow = models.loadExecutionFlowFromResource("TimeTrigger.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void timeTriggerTest() throws Exception {
+		assertTrue(isActive("StateA"));
+		Thread.sleep(110);
+		assertTrue(isActive("StateB"));
+		Thread.sleep(220);
+		assertTrue(isActive("StateA"));
+	}
+}

+ 2 - 1
test-plugins/org.yakindu.sct.model.sexec.interpreter.test/src/org/yakindu/sct/model/sexec/interpreter/test/AllTests.java

@@ -13,7 +13,8 @@ import org.junit.runners.Suite.SuiteClasses;
 		DeepHistoryTest.class, GuardTest.class, PriorityValuesTest.class,
 		ShallowHistoryTest.class, SimpleEventTest.class,
 		SimpleHierachyTest.class, StatechartLocalReactionsTest.class,
-		StateIsActiveTest.class })
+		StateIsActiveTest.class,
+		SyncJoinTest.class})
 public class AllTests {
 
 }

+ 15 - 0
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/ModelSequencerStateReactionTest.java

@@ -160,6 +160,11 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
 		t.setTrigger(tr1);
+		
+		Statechart sc = _createStatechart("test");
+		Region region = _createRegion("r1", sc);
+		t.setSource(_createState("A", region));
+		t.setTarget(_createState("B", region));
 
 		Reaction reaction = behaviorMapping.mapTransition(t);
 
@@ -199,6 +204,11 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
 		t.setTrigger(tr1);
 
+		Statechart sc = _createStatechart("test");
+		Region region = _createRegion("r1", sc);
+		t.setSource(_createState("A", region));
+		t.setTarget(_createState("B", region));
+
 		Reaction reaction = behaviorMapping.mapTransition(t);
 
 		// now check the expression structure ...
@@ -236,6 +246,11 @@ public class ModelSequencerStateReactionTest extends ModelSequencerTest {
 		Transition t = SGraphFactory.eINSTANCE.createTransition();
 		t.setTrigger(tr1);
 
+		Statechart sc = _createStatechart("test");
+		Region region = _createRegion("r1", sc);
+		t.setSource(_createState("A", region));
+		t.setTarget(_createState("B", region));
+		
 		Reaction reaction = behaviorMapping.mapTransition(t);
 
 		// now check the expression structure ...

+ 320 - 320
test-plugins/org.yakindu.sct.test.models/testmodels/SyncJoin.sct

@@ -1,320 +1,320 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
-  <sgraph:Statechart xmi:id="_0Png4KimEeG5WeGhg2moBQ" specification="&#xA;interface :&#xA;&#x9;in event e&#xA;&#x9;in event f&#xA;&#x9;var x : integer = 0" name="SyncJoin">
-    <regions xmi:id="_0PovAqimEeG5WeGhg2moBQ" name="main region">
-      <vertices xsi:type="sgraph:Entry" xmi:id="_0PtngaimEeG5WeGhg2moBQ">
-        <outgoingTransitions xmi:id="_0PwDw6imEeG5WeGhg2moBQ" target="_tiWiMKinEeG5WeGhg2moBQ"/>
-      </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_0PuOl6imEeG5WeGhg2moBQ" name="A" incomingTransitions="_Eg6IoKioEeG5WeGhg2moBQ">
-        <outgoingTransitions xmi:id="_j3fnoKjBEeG5WeGhg2moBQ" specification="e, f" target="_tiWiMKinEeG5WeGhg2moBQ"/>
-      </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_tiWiMKinEeG5WeGhg2moBQ" name="B" incomingTransitions="_0PwDw6imEeG5WeGhg2moBQ _j3fnoKjBEeG5WeGhg2moBQ">
-        <regions xmi:id="_tiZlgKinEeG5WeGhg2moBQ" name="r1">
-          <vertices xsi:type="sgraph:Entry" xmi:id="_10MckKinEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_5vhCoKinEeG5WeGhg2moBQ" specification="" target="_3SNSsKinEeG5WeGhg2moBQ"/>
-          </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_3SNSsKinEeG5WeGhg2moBQ" name="C1" incomingTransitions="_5vhCoKinEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_IFECgKjBEeG5WeGhg2moBQ" specification="e" target="_G_gIoKjBEeG5WeGhg2moBQ"/>
-          </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_G_gIoKjBEeG5WeGhg2moBQ" name="C2" incomingTransitions="_IFECgKjBEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_OkRhoKjBEeG5WeGhg2moBQ" specification="e" target="_DBjOsKioEeG5WeGhg2moBQ"/>
-          </vertices>
-        </regions>
-        <regions xmi:id="_wOuB0KinEeG5WeGhg2moBQ" name="r2">
-          <vertices xsi:type="sgraph:Entry" xmi:id="_zHlFUKinEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_83T6AKinEeG5WeGhg2moBQ" specification="" target="_66ZhYKinEeG5WeGhg2moBQ"/>
-          </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_66ZhYKinEeG5WeGhg2moBQ" name="D1" incomingTransitions="_83T6AKinEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_Lr3KEKjBEeG5WeGhg2moBQ" specification="f" target="_LrdhcKjBEeG5WeGhg2moBQ"/>
-          </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_LrdhcKjBEeG5WeGhg2moBQ" name="D2" incomingTransitions="_Lr3KEKjBEeG5WeGhg2moBQ">
-            <outgoingTransitions xmi:id="_FO34gKjBEeG5WeGhg2moBQ" specification="f" target="_DBjOsKioEeG5WeGhg2moBQ"/>
-          </vertices>
-        </regions>
-      </vertices>
-      <vertices xsi:type="sgraph:Synchronization" xmi:id="_DBjOsKioEeG5WeGhg2moBQ" incomingTransitions="_FO34gKjBEeG5WeGhg2moBQ _OkRhoKjBEeG5WeGhg2moBQ">
-        <outgoingTransitions xmi:id="_Eg6IoKioEeG5WeGhg2moBQ" specification="" target="_0PuOl6imEeG5WeGhg2moBQ"/>
-      </vertices>
-    </regions>
-  </sgraph:Statechart>
-  <notation:Diagram xmi:id="_0PovAKimEeG5WeGhg2moBQ" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_0Png4KimEeG5WeGhg2moBQ" measurementUnit="Pixel">
-    <children xmi:id="_0PqkMKimEeG5WeGhg2moBQ" type="Region" element="_0PovAqimEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_0PsZYKimEeG5WeGhg2moBQ" type="RegionName">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_0PsZYaimEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_0PtAcKimEeG5WeGhg2moBQ"/>
-      </children>
-      <children xsi:type="notation:Shape" xmi:id="_0PtAcaimEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
-        <children xmi:id="_0PtngqimEeG5WeGhg2moBQ" type="Entry" element="_0PtngaimEeG5WeGhg2moBQ">
-          <children xmi:id="_0PuOkKimEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
-            <children xsi:type="notation:DecorationNode" xmi:id="_0PuOk6imEeG5WeGhg2moBQ" type="BorderItemLabel">
-              <styles xsi:type="notation:ShapeStyle" xmi:id="_0PuOlKimEeG5WeGhg2moBQ"/>
-              <layoutConstraint xsi:type="notation:Location" xmi:id="_0PuOlaimEeG5WeGhg2moBQ"/>
-            </children>
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_0PuOkaimEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PuOkqimEeG5WeGhg2moBQ"/>
-          </children>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_0Ptng6imEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PuOlqimEeG5WeGhg2moBQ" x="13" y="14"/>
-        </children>
-        <children xmi:id="_0Pu1oaimEeG5WeGhg2moBQ" type="State" element="_0PuOl6imEeG5WeGhg2moBQ">
-          <children xsi:type="notation:DecorationNode" xmi:id="_0PvcsKimEeG5WeGhg2moBQ" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_0PvcsaimEeG5WeGhg2moBQ"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_0PvcsqimEeG5WeGhg2moBQ"/>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_0Pvcs6imEeG5WeGhg2moBQ" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_0PvctKimEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PvctaimEeG5WeGhg2moBQ"/>
-            </children>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_0PwDwKimEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_0Pu1oqimEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_0Pu1o6imEeG5WeGhg2moBQ"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_0PwDwaimEeG5WeGhg2moBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PwDwqimEeG5WeGhg2moBQ" x="381" y="195"/>
-        </children>
-        <children xmi:id="_tijWgKinEeG5WeGhg2moBQ" type="State" element="_tiWiMKinEeG5WeGhg2moBQ">
-          <children xsi:type="notation:DecorationNode" xmi:id="_tij9kKinEeG5WeGhg2moBQ" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_tij9kainEeG5WeGhg2moBQ"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_tij9kqinEeG5WeGhg2moBQ"/>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_tij9k6inEeG5WeGhg2moBQ" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_tij9lKinEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tij9lainEeG5WeGhg2moBQ"/>
-            </children>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_tikkoKinEeG5WeGhg2moBQ" type="StateFigureCompartment">
-            <children xmi:id="_tiqrQKinEeG5WeGhg2moBQ" type="Region" element="_tiZlgKinEeG5WeGhg2moBQ">
-              <children xsi:type="notation:DecorationNode" xmi:id="_tirSUKinEeG5WeGhg2moBQ" type="RegionName">
-                <styles xsi:type="notation:ShapeStyle" xmi:id="_tirSUainEeG5WeGhg2moBQ"/>
-                <layoutConstraint xsi:type="notation:Location" xmi:id="_tirSUqinEeG5WeGhg2moBQ"/>
-              </children>
-              <children xsi:type="notation:Shape" xmi:id="_tir5YKinEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
-                <children xmi:id="_10WNkKinEeG5WeGhg2moBQ" type="Entry" element="_10MckKinEeG5WeGhg2moBQ">
-                  <children xmi:id="_10W0oKinEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
-                    <children xsi:type="notation:DecorationNode" xmi:id="_10W0o6inEeG5WeGhg2moBQ" type="BorderItemLabel">
-                      <styles xsi:type="notation:ShapeStyle" xmi:id="_10W0pKinEeG5WeGhg2moBQ"/>
-                      <layoutConstraint xsi:type="notation:Location" xmi:id="_10W0painEeG5WeGhg2moBQ"/>
-                    </children>
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_10W0oainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_10W0oqinEeG5WeGhg2moBQ"/>
-                  </children>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_10WNkainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_10WNkqinEeG5WeGhg2moBQ" x="3" y="12"/>
-                </children>
-                <children xmi:id="_3Sb8MKinEeG5WeGhg2moBQ" type="State" element="_3SNSsKinEeG5WeGhg2moBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_3ScjQKinEeG5WeGhg2moBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_3ScjQainEeG5WeGhg2moBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_3ScjQqinEeG5WeGhg2moBQ"/>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_3ScjQ6inEeG5WeGhg2moBQ" type="StateTextCompartment">
-                    <children xsi:type="notation:Shape" xmi:id="_3ScjRKinEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_3ScjRainEeG5WeGhg2moBQ"/>
-                    </children>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_3SdKUKinEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_3Sb8MainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_3Sb8MqinEeG5WeGhg2moBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_3SdKUainEeG5WeGhg2moBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_3Sb8M6inEeG5WeGhg2moBQ" x="31" y="26"/>
-                </children>
-                <children xmi:id="_G_ndYKjBEeG5WeGhg2moBQ" type="State" element="_G_gIoKjBEeG5WeGhg2moBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_G_oEcKjBEeG5WeGhg2moBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_G_oEcajBEeG5WeGhg2moBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_G_oEcqjBEeG5WeGhg2moBQ"/>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_G_oEc6jBEeG5WeGhg2moBQ" type="StateTextCompartment" collapsed="true">
-                    <children xsi:type="notation:Shape" xmi:id="_G_orgKjBEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_G_orgajBEeG5WeGhg2moBQ"/>
-                    </children>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_G_orgqjBEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_G_ndYajBEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_G_ndYqjBEeG5WeGhg2moBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_G_org6jBEeG5WeGhg2moBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_G_ndY6jBEeG5WeGhg2moBQ" x="139" y="26"/>
-                </children>
-                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tir5YainEeG5WeGhg2moBQ"/>
-              </children>
-              <styles xsi:type="notation:ShapeStyle" xmi:id="_tiqrQainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tiqrQqinEeG5WeGhg2moBQ"/>
-            </children>
-            <children xmi:id="_wO8EQKinEeG5WeGhg2moBQ" type="Region" element="_wOuB0KinEeG5WeGhg2moBQ">
-              <children xsi:type="notation:DecorationNode" xmi:id="_wO8rUKinEeG5WeGhg2moBQ" type="RegionName">
-                <styles xsi:type="notation:ShapeStyle" xmi:id="_wO8rUainEeG5WeGhg2moBQ"/>
-                <layoutConstraint xsi:type="notation:Location" xmi:id="_wO8rUqinEeG5WeGhg2moBQ"/>
-              </children>
-              <children xsi:type="notation:Shape" xmi:id="_wO8rU6inEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
-                <children xmi:id="_zHvdYKinEeG5WeGhg2moBQ" type="Entry" element="_zHlFUKinEeG5WeGhg2moBQ">
-                  <children xmi:id="_zHwEcKinEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
-                    <children xsi:type="notation:DecorationNode" xmi:id="_zHwrgKinEeG5WeGhg2moBQ" type="BorderItemLabel">
-                      <styles xsi:type="notation:ShapeStyle" xmi:id="_zHwrgainEeG5WeGhg2moBQ"/>
-                      <layoutConstraint xsi:type="notation:Location" xmi:id="_zHwrgqinEeG5WeGhg2moBQ"/>
-                    </children>
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_zHwEcainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_zHwEcqinEeG5WeGhg2moBQ"/>
-                  </children>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_zHvdYainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_zHvdYqinEeG5WeGhg2moBQ" x="6" y="11"/>
-                </children>
-                <children xmi:id="_66luoKinEeG5WeGhg2moBQ" type="State" element="_66ZhYKinEeG5WeGhg2moBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_66mVsKinEeG5WeGhg2moBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_66mVsainEeG5WeGhg2moBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_66mVsqinEeG5WeGhg2moBQ"/>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_66m8wKinEeG5WeGhg2moBQ" type="StateTextCompartment">
-                    <children xsi:type="notation:Shape" xmi:id="_66m8wainEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_66m8wqinEeG5WeGhg2moBQ"/>
-                    </children>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_66m8w6inEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_66luoainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_66luoqinEeG5WeGhg2moBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_66m8xKinEeG5WeGhg2moBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_66luo6inEeG5WeGhg2moBQ" x="35" y="11"/>
-                </children>
-                <children xmi:id="_Lrk2MKjBEeG5WeGhg2moBQ" type="State" element="_LrdhcKjBEeG5WeGhg2moBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_LrldQKjBEeG5WeGhg2moBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_LrldQajBEeG5WeGhg2moBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_LrldQqjBEeG5WeGhg2moBQ"/>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_LrldQ6jBEeG5WeGhg2moBQ" type="StateTextCompartment" collapsed="true">
-                    <children xsi:type="notation:Shape" xmi:id="_LrmEUKjBEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LrmEUajBEeG5WeGhg2moBQ"/>
-                    </children>
-                  </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_LrmEUqjBEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_Lrk2MajBEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_Lrk2MqjBEeG5WeGhg2moBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_LrmEU6jBEeG5WeGhg2moBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Lrk2M6jBEeG5WeGhg2moBQ" x="135" y="11"/>
-                </children>
-                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wO8rVKinEeG5WeGhg2moBQ"/>
-              </children>
-              <styles xsi:type="notation:ShapeStyle" xmi:id="_wO8EQainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wO8EQqinEeG5WeGhg2moBQ"/>
-            </children>
-          </children>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_tijWgainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_tijWgqinEeG5WeGhg2moBQ"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_tikkoainEeG5WeGhg2moBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tijWg6inEeG5WeGhg2moBQ" x="4" y="47" width="279" height="321"/>
-        </children>
-        <children xsi:type="notation:Shape" xmi:id="_DBsYoKioEeG5WeGhg2moBQ" type="Synchronization" element="_DBjOsKioEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752">
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DBsYoaioEeG5WeGhg2moBQ" x="333" y="203"/>
-        </children>
-        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PtAcqimEeG5WeGhg2moBQ"/>
-      </children>
-      <styles xsi:type="notation:ShapeStyle" xmi:id="_0PqkMaimEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PtngKimEeG5WeGhg2moBQ" x="152" y="10" width="465" height="411"/>
-    </children>
-    <children xsi:type="notation:Shape" xmi:id="_0Px486imEeG5WeGhg2moBQ" type="StatechartText" fontName="Verdana" lineColor="4210752">
-      <children xsi:type="notation:DecorationNode" xmi:id="_0Px49aimEeG5WeGhg2moBQ" type="StatechartName">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_0PygAKimEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_0PygAaimEeG5WeGhg2moBQ"/>
-      </children>
-      <children xsi:type="notation:Shape" xmi:id="_0PygAqimEeG5WeGhg2moBQ" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
-        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PygA6imEeG5WeGhg2moBQ"/>
-      </children>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PygBKimEeG5WeGhg2moBQ" x="10" y="10" width="143" height="411"/>
-    </children>
-    <children xsi:type="notation:Shape" xmi:id="_qVmTgKjBEeG5WeGhg2moBQ" type="Note" fontName="Verdana" description="A  join allows the synchonzation from a state configuration into another state configuration that substitutes the previos state configuration. When states C2 and D2 is active and enevts e and f were raised than a transition to A occurs." fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1">
-      <children xsi:type="notation:BasicDecorationNode" xmi:id="_qVm6kKjBEeG5WeGhg2moBQ" type="DiagramName">
-        <element xsi:nil="true"/>
-      </children>
-      <children xsi:type="notation:BasicDecorationNode" xmi:id="_qVm6kajBEeG5WeGhg2moBQ" type="Description">
-        <element xsi:nil="true"/>
-      </children>
-      <styles xsi:type="notation:TextStyle" xmi:id="_qVmTgajBEeG5WeGhg2moBQ"/>
-      <styles xsi:type="notation:LineTypeStyle" xmi:id="_qVmTgqjBEeG5WeGhg2moBQ"/>
-      <element xsi:nil="true"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_qVmTg6jBEeG5WeGhg2moBQ" x="624" y="56" width="307" height="110"/>
-    </children>
-    <styles xsi:type="notation:DiagramStyle" xmi:id="_0PovAaimEeG5WeGhg2moBQ"/>
-    <edges xmi:id="_0PxR4KimEeG5WeGhg2moBQ" type="Transition" element="_0PwDw6imEeG5WeGhg2moBQ" source="_0PtngqimEeG5WeGhg2moBQ" target="_tijWgKinEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_0Px48KimEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_0Px48aimEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_0Px48qimEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_0PxR4aimEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_0PxR46imEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_0PxR4qimEeG5WeGhg2moBQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_-sZzYKinEeG5WeGhg2moBQ" id="(0.07537688442211055,0.07219251336898395)"/>
-    </edges>
-    <edges xmi:id="_5vplgKinEeG5WeGhg2moBQ" type="Transition" element="_5vhCoKinEeG5WeGhg2moBQ" source="_10WNkKinEeG5WeGhg2moBQ" target="_3Sb8MKinEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_5vplhKinEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_5vplhainEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_5vqMkKinEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_5vplgainEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_5vplg6inEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_5vplgqinEeG5WeGhg2moBQ" points="[5, 5, -57, -53]$[64, 82, 2, 24]"/>
-    </edges>
-    <edges xmi:id="_83ansKinEeG5WeGhg2moBQ" type="Transition" element="_83T6AKinEeG5WeGhg2moBQ" source="_zHvdYKinEeG5WeGhg2moBQ" target="_66luoKinEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_83bOwainEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_83bOwqinEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_83bOw6inEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_83ansainEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_83bOwKinEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_83ansqinEeG5WeGhg2moBQ" points="[5, 5, -49, -51]$[59, 32, 5, -24]"/>
-    </edges>
-    <edges xmi:id="_EhA2UKioEeG5WeGhg2moBQ" type="Transition" element="_Eg6IoKioEeG5WeGhg2moBQ" source="_DBsYoKioEeG5WeGhg2moBQ" target="_0Pu1oaimEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_EhBdYKioEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_EhBdYaioEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_EhBdYqioEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_EhA2UaioEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_EhA2U6ioEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_EhA2UqioEeG5WeGhg2moBQ" points="[8, -3, -63, 13]$[69, -40, -2, -24]"/>
-    </edges>
-    <edges xmi:id="_FO-mMKjBEeG5WeGhg2moBQ" type="Transition" element="_FO34gKjBEeG5WeGhg2moBQ" source="_Lrk2MKjBEeG5WeGhg2moBQ" target="_DBsYoKioEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_FO-mNKjBEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_FO-mNajBEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_FO-mNqjBEeG5WeGhg2moBQ" x="-18" y="15"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_FO-mMajBEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_FO-mM6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_FO-mMqjBEeG5WeGhg2moBQ" points="[18, -6, -335, 118]$[353, -108, 0, 16]"/>
-    </edges>
-    <edges xmi:id="_IFIT8KjBEeG5WeGhg2moBQ" type="Transition" element="_IFECgKjBEeG5WeGhg2moBQ" source="_3Sb8MKinEeG5WeGhg2moBQ" target="_G_ndYKjBEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_IFI7AajBEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_IFI7AqjBEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_IFI7A6jBEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_IFIT8ajBEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_IFI7AKjBEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_IFIT8qjBEeG5WeGhg2moBQ" points="[28, -3, -123, -7]$[150, -20, -1, -24]"/>
-      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_IFRd4KjBEeG5WeGhg2moBQ" id="(0.2,0.41509433962264153)"/>
-    </edges>
-    <edges xmi:id="_Lr9QsKjBEeG5WeGhg2moBQ" type="Transition" element="_Lr3KEKjBEeG5WeGhg2moBQ" source="_66luoKinEeG5WeGhg2moBQ" target="_Lrk2MKjBEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_Lr9QtKjBEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_Lr9QtajBEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_Lr9QtqjBEeG5WeGhg2moBQ" y="10"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_Lr9QsajBEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_Lr9Qs6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_Lr9QsqjBEeG5WeGhg2moBQ" points="[-17, -23, 42, 54]$[-57, -74, 2, 3]"/>
-    </edges>
-    <edges xmi:id="_OkVzEKjBEeG5WeGhg2moBQ" type="Transition" element="_OkRhoKjBEeG5WeGhg2moBQ" source="_G_ndYKjBEeG5WeGhg2moBQ" target="_DBsYoKioEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_OkVzFKjBEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_OkVzFajBEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_OkWaIKjBEeG5WeGhg2moBQ" x="-26" y="9"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_OkVzEajBEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_OkVzE6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_OkVzEqjBEeG5WeGhg2moBQ" points="[35, 4, -235, -28]$[266, 31, -4, -1]"/>
-      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_Okdu4KjBEeG5WeGhg2moBQ" id="(0.0,0.5660377358490566)"/>
-    </edges>
-    <edges xmi:id="_j3iq8KjBEeG5WeGhg2moBQ" type="Transition" element="_j3fnoKjBEeG5WeGhg2moBQ" source="_0Pu1oaimEeG5WeGhg2moBQ" target="_tijWgKinEeG5WeGhg2moBQ">
-      <children xsi:type="notation:DecorationNode" xmi:id="_j3jSAKjBEeG5WeGhg2moBQ" type="TransitionExpression">
-        <styles xsi:type="notation:ShapeStyle" xmi:id="_j3jSAajBEeG5WeGhg2moBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_j3jSAqjBEeG5WeGhg2moBQ" x="7" y="15"/>
-      </children>
-      <styles xsi:type="notation:ConnectorStyle" xmi:id="_j3iq8ajBEeG5WeGhg2moBQ" lineColor="4210752"/>
-      <styles xsi:type="notation:FontStyle" xmi:id="_j3iq86jBEeG5WeGhg2moBQ" fontName="Verdana"/>
-      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_j3iq8qjBEeG5WeGhg2moBQ" points="[0, -48, 138, 133]$[0, -172, 138, 9]$[-118, -172, 20, 9]"/>
-      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_j3oxkKjBEeG5WeGhg2moBQ" id="(0.45,1.0)"/>
-      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_j3oxkajBEeG5WeGhg2moBQ" id="(0.9283154121863799,0.04984423676012461)"/>
-    </edges>
-  </notation:Diagram>
-</xmi:XMI>
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
+  <sgraph:Statechart xmi:id="_0Png4KimEeG5WeGhg2moBQ" specification="&#xA;interface :&#xA;&#x9;in event e : void&#xA;&#x9;in event f : void&#xA;&#x9;in event jc&#xA;&#x9;in event jd&#xA;" name="SyncJoin">
+    <regions xmi:id="_0PovAqimEeG5WeGhg2moBQ" name="main region">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_0PtngaimEeG5WeGhg2moBQ">
+        <outgoingTransitions xmi:id="_0PwDw6imEeG5WeGhg2moBQ" target="_tiWiMKinEeG5WeGhg2moBQ"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_0PuOl6imEeG5WeGhg2moBQ" name="A" incomingTransitions="_Eg6IoKioEeG5WeGhg2moBQ">
+        <outgoingTransitions xmi:id="_j3fnoKjBEeG5WeGhg2moBQ" specification="e,f" target="_tiWiMKinEeG5WeGhg2moBQ"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_tiWiMKinEeG5WeGhg2moBQ" name="B" incomingTransitions="_0PwDw6imEeG5WeGhg2moBQ _j3fnoKjBEeG5WeGhg2moBQ">
+        <regions xmi:id="_tiZlgKinEeG5WeGhg2moBQ" name="r1">
+          <vertices xsi:type="sgraph:Entry" xmi:id="_10MckKinEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_5vhCoKinEeG5WeGhg2moBQ" specification="" target="_3SNSsKinEeG5WeGhg2moBQ"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_3SNSsKinEeG5WeGhg2moBQ" name="C1" incomingTransitions="_5vhCoKinEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_IFECgKjBEeG5WeGhg2moBQ" specification="e" target="_G_gIoKjBEeG5WeGhg2moBQ"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_G_gIoKjBEeG5WeGhg2moBQ" name="C2" incomingTransitions="_IFECgKjBEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_OkRhoKjBEeG5WeGhg2moBQ" specification="jc" target="_DBjOsKioEeG5WeGhg2moBQ"/>
+          </vertices>
+        </regions>
+        <regions xmi:id="_wOuB0KinEeG5WeGhg2moBQ" name="r2">
+          <vertices xsi:type="sgraph:Entry" xmi:id="_zHlFUKinEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_83T6AKinEeG5WeGhg2moBQ" specification="" target="_66ZhYKinEeG5WeGhg2moBQ"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_66ZhYKinEeG5WeGhg2moBQ" name="D1" incomingTransitions="_83T6AKinEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_Lr3KEKjBEeG5WeGhg2moBQ" specification="f" target="_LrdhcKjBEeG5WeGhg2moBQ"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_LrdhcKjBEeG5WeGhg2moBQ" name="D2" incomingTransitions="_Lr3KEKjBEeG5WeGhg2moBQ">
+            <outgoingTransitions xmi:id="_FO34gKjBEeG5WeGhg2moBQ" specification="jd" target="_DBjOsKioEeG5WeGhg2moBQ"/>
+          </vertices>
+        </regions>
+      </vertices>
+      <vertices xsi:type="sgraph:Synchronization" xmi:id="_DBjOsKioEeG5WeGhg2moBQ" incomingTransitions="_FO34gKjBEeG5WeGhg2moBQ _OkRhoKjBEeG5WeGhg2moBQ">
+        <outgoingTransitions xmi:id="_Eg6IoKioEeG5WeGhg2moBQ" specification="" target="_0PuOl6imEeG5WeGhg2moBQ"/>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_0PovAKimEeG5WeGhg2moBQ" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_0Png4KimEeG5WeGhg2moBQ" measurementUnit="Pixel">
+    <children xmi:id="_0PqkMKimEeG5WeGhg2moBQ" type="Region" element="_0PovAqimEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_0PsZYKimEeG5WeGhg2moBQ" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_0PsZYaimEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_0PtAcKimEeG5WeGhg2moBQ"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_0PtAcaimEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_0PtngqimEeG5WeGhg2moBQ" type="Entry" element="_0PtngaimEeG5WeGhg2moBQ">
+          <children xmi:id="_0PuOkKimEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_0PuOk6imEeG5WeGhg2moBQ" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_0PuOlKimEeG5WeGhg2moBQ"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_0PuOlaimEeG5WeGhg2moBQ"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_0PuOkaimEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PuOkqimEeG5WeGhg2moBQ"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_0Ptng6imEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PuOlqimEeG5WeGhg2moBQ" x="13" y="14"/>
+        </children>
+        <children xmi:id="_0Pu1oaimEeG5WeGhg2moBQ" type="State" element="_0PuOl6imEeG5WeGhg2moBQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_0PvcsKimEeG5WeGhg2moBQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_0PvcsaimEeG5WeGhg2moBQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_0PvcsqimEeG5WeGhg2moBQ"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_0Pvcs6imEeG5WeGhg2moBQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_0PvctKimEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PvctaimEeG5WeGhg2moBQ"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_0PwDwKimEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_0Pu1oqimEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_0Pu1o6imEeG5WeGhg2moBQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_0PwDwaimEeG5WeGhg2moBQ"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PwDwqimEeG5WeGhg2moBQ" x="381" y="195"/>
+        </children>
+        <children xmi:id="_tijWgKinEeG5WeGhg2moBQ" type="State" element="_tiWiMKinEeG5WeGhg2moBQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_tij9kKinEeG5WeGhg2moBQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_tij9kainEeG5WeGhg2moBQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_tij9kqinEeG5WeGhg2moBQ"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_tij9k6inEeG5WeGhg2moBQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_tij9lKinEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tij9lainEeG5WeGhg2moBQ"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_tikkoKinEeG5WeGhg2moBQ" type="StateFigureCompartment">
+            <children xmi:id="_tiqrQKinEeG5WeGhg2moBQ" type="Region" element="_tiZlgKinEeG5WeGhg2moBQ">
+              <children xsi:type="notation:DecorationNode" xmi:id="_tirSUKinEeG5WeGhg2moBQ" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_tirSUainEeG5WeGhg2moBQ"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_tirSUqinEeG5WeGhg2moBQ"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_tir5YKinEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_10WNkKinEeG5WeGhg2moBQ" type="Entry" element="_10MckKinEeG5WeGhg2moBQ">
+                  <children xmi:id="_10W0oKinEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
+                    <children xsi:type="notation:DecorationNode" xmi:id="_10W0o6inEeG5WeGhg2moBQ" type="BorderItemLabel">
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_10W0pKinEeG5WeGhg2moBQ"/>
+                      <layoutConstraint xsi:type="notation:Location" xmi:id="_10W0painEeG5WeGhg2moBQ"/>
+                    </children>
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_10W0oainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_10W0oqinEeG5WeGhg2moBQ"/>
+                  </children>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_10WNkainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_10WNkqinEeG5WeGhg2moBQ" x="3" y="12"/>
+                </children>
+                <children xmi:id="_3Sb8MKinEeG5WeGhg2moBQ" type="State" element="_3SNSsKinEeG5WeGhg2moBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_3ScjQKinEeG5WeGhg2moBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_3ScjQainEeG5WeGhg2moBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_3ScjQqinEeG5WeGhg2moBQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_3ScjQ6inEeG5WeGhg2moBQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_3ScjRKinEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_3ScjRainEeG5WeGhg2moBQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_3SdKUKinEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_3Sb8MainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_3Sb8MqinEeG5WeGhg2moBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_3SdKUainEeG5WeGhg2moBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_3Sb8M6inEeG5WeGhg2moBQ" x="31" y="26"/>
+                </children>
+                <children xmi:id="_G_ndYKjBEeG5WeGhg2moBQ" type="State" element="_G_gIoKjBEeG5WeGhg2moBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_G_oEcKjBEeG5WeGhg2moBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_G_oEcajBEeG5WeGhg2moBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_G_oEcqjBEeG5WeGhg2moBQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_G_oEc6jBEeG5WeGhg2moBQ" type="StateTextCompartment" collapsed="true">
+                    <children xsi:type="notation:Shape" xmi:id="_G_orgKjBEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_G_orgajBEeG5WeGhg2moBQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_G_orgqjBEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_G_ndYajBEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_G_ndYqjBEeG5WeGhg2moBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_G_org6jBEeG5WeGhg2moBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_G_ndY6jBEeG5WeGhg2moBQ" x="139" y="26"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tir5YainEeG5WeGhg2moBQ"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_tiqrQainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tiqrQqinEeG5WeGhg2moBQ"/>
+            </children>
+            <children xmi:id="_wO8EQKinEeG5WeGhg2moBQ" type="Region" element="_wOuB0KinEeG5WeGhg2moBQ">
+              <children xsi:type="notation:DecorationNode" xmi:id="_wO8rUKinEeG5WeGhg2moBQ" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_wO8rUainEeG5WeGhg2moBQ"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_wO8rUqinEeG5WeGhg2moBQ"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_wO8rU6inEeG5WeGhg2moBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_zHvdYKinEeG5WeGhg2moBQ" type="Entry" element="_zHlFUKinEeG5WeGhg2moBQ">
+                  <children xmi:id="_zHwEcKinEeG5WeGhg2moBQ" type="BorderItemLabelContainer">
+                    <children xsi:type="notation:DecorationNode" xmi:id="_zHwrgKinEeG5WeGhg2moBQ" type="BorderItemLabel">
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_zHwrgainEeG5WeGhg2moBQ"/>
+                      <layoutConstraint xsi:type="notation:Location" xmi:id="_zHwrgqinEeG5WeGhg2moBQ"/>
+                    </children>
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_zHwEcainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_zHwEcqinEeG5WeGhg2moBQ"/>
+                  </children>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_zHvdYainEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_zHvdYqinEeG5WeGhg2moBQ" x="6" y="11"/>
+                </children>
+                <children xmi:id="_66luoKinEeG5WeGhg2moBQ" type="State" element="_66ZhYKinEeG5WeGhg2moBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_66mVsKinEeG5WeGhg2moBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_66mVsainEeG5WeGhg2moBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_66mVsqinEeG5WeGhg2moBQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_66m8wKinEeG5WeGhg2moBQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_66m8wainEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_66m8wqinEeG5WeGhg2moBQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_66m8w6inEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_66luoainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_66luoqinEeG5WeGhg2moBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_66m8xKinEeG5WeGhg2moBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_66luo6inEeG5WeGhg2moBQ" x="35" y="11"/>
+                </children>
+                <children xmi:id="_Lrk2MKjBEeG5WeGhg2moBQ" type="State" element="_LrdhcKjBEeG5WeGhg2moBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_LrldQKjBEeG5WeGhg2moBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_LrldQajBEeG5WeGhg2moBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_LrldQqjBEeG5WeGhg2moBQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_LrldQ6jBEeG5WeGhg2moBQ" type="StateTextCompartment" collapsed="true">
+                    <children xsi:type="notation:Shape" xmi:id="_LrmEUKjBEeG5WeGhg2moBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LrmEUajBEeG5WeGhg2moBQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_LrmEUqjBEeG5WeGhg2moBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_Lrk2MajBEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_Lrk2MqjBEeG5WeGhg2moBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_LrmEU6jBEeG5WeGhg2moBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Lrk2M6jBEeG5WeGhg2moBQ" x="135" y="11"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wO8rVKinEeG5WeGhg2moBQ"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_wO8EQainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wO8EQqinEeG5WeGhg2moBQ"/>
+            </children>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_tijWgainEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_tijWgqinEeG5WeGhg2moBQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_tikkoainEeG5WeGhg2moBQ"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_tijWg6inEeG5WeGhg2moBQ" x="4" y="47" width="279" height="321"/>
+        </children>
+        <children xsi:type="notation:Shape" xmi:id="_DBsYoKioEeG5WeGhg2moBQ" type="Synchronization" element="_DBjOsKioEeG5WeGhg2moBQ" fontName="Verdana" lineColor="4210752">
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DBsYoaioEeG5WeGhg2moBQ" x="333" y="203"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PtAcqimEeG5WeGhg2moBQ"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_0PqkMaimEeG5WeGhg2moBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PtngKimEeG5WeGhg2moBQ" x="152" y="10" width="465" height="411"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_0Px486imEeG5WeGhg2moBQ" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_0Px49aimEeG5WeGhg2moBQ" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_0PygAKimEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_0PygAaimEeG5WeGhg2moBQ"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_0PygAqimEeG5WeGhg2moBQ" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PygA6imEeG5WeGhg2moBQ"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_0PygBKimEeG5WeGhg2moBQ" x="10" y="10" width="143" height="411"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_qVmTgKjBEeG5WeGhg2moBQ" type="Note" fontName="Verdana" description="A  join allows the synchonzation from a state configuration into another state configuration that substitutes the previos state configuration. When states C2 and D2 is active and enevts e and f were raised than a transition to A occurs." fillColor="13369343" transparency="0" lineColor="6737151" lineWidth="1">
+      <children xsi:type="notation:BasicDecorationNode" xmi:id="_qVm6kKjBEeG5WeGhg2moBQ" type="DiagramName">
+        <element xsi:nil="true"/>
+      </children>
+      <children xsi:type="notation:BasicDecorationNode" xmi:id="_qVm6kajBEeG5WeGhg2moBQ" type="Description">
+        <element xsi:nil="true"/>
+      </children>
+      <styles xsi:type="notation:TextStyle" xmi:id="_qVmTgajBEeG5WeGhg2moBQ"/>
+      <styles xsi:type="notation:LineTypeStyle" xmi:id="_qVmTgqjBEeG5WeGhg2moBQ"/>
+      <element xsi:nil="true"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_qVmTg6jBEeG5WeGhg2moBQ" x="624" y="56" width="307" height="110"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_0PovAaimEeG5WeGhg2moBQ"/>
+    <edges xmi:id="_0PxR4KimEeG5WeGhg2moBQ" type="Transition" element="_0PwDw6imEeG5WeGhg2moBQ" source="_0PtngqimEeG5WeGhg2moBQ" target="_tijWgKinEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_0Px48KimEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_0Px48aimEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_0Px48qimEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_0PxR4aimEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_0PxR46imEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_0PxR4qimEeG5WeGhg2moBQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_-sZzYKinEeG5WeGhg2moBQ" id="(0.07537688442211055,0.07219251336898395)"/>
+    </edges>
+    <edges xmi:id="_5vplgKinEeG5WeGhg2moBQ" type="Transition" element="_5vhCoKinEeG5WeGhg2moBQ" source="_10WNkKinEeG5WeGhg2moBQ" target="_3Sb8MKinEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_5vplhKinEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_5vplhainEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_5vqMkKinEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_5vplgainEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_5vplg6inEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_5vplgqinEeG5WeGhg2moBQ" points="[5, 5, -57, -53]$[64, 82, 2, 24]"/>
+    </edges>
+    <edges xmi:id="_83ansKinEeG5WeGhg2moBQ" type="Transition" element="_83T6AKinEeG5WeGhg2moBQ" source="_zHvdYKinEeG5WeGhg2moBQ" target="_66luoKinEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_83bOwainEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_83bOwqinEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_83bOw6inEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_83ansainEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_83bOwKinEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_83ansqinEeG5WeGhg2moBQ" points="[5, 5, -49, -51]$[59, 32, 5, -24]"/>
+    </edges>
+    <edges xmi:id="_EhA2UKioEeG5WeGhg2moBQ" type="Transition" element="_Eg6IoKioEeG5WeGhg2moBQ" source="_DBsYoKioEeG5WeGhg2moBQ" target="_0Pu1oaimEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_EhBdYKioEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_EhBdYaioEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_EhBdYqioEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_EhA2UaioEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_EhA2U6ioEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_EhA2UqioEeG5WeGhg2moBQ" points="[8, -3, -63, 13]$[69, -40, -2, -24]"/>
+    </edges>
+    <edges xmi:id="_FO-mMKjBEeG5WeGhg2moBQ" type="Transition" element="_FO34gKjBEeG5WeGhg2moBQ" source="_Lrk2MKjBEeG5WeGhg2moBQ" target="_DBsYoKioEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_FO-mNKjBEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_FO-mNajBEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_FO-mNqjBEeG5WeGhg2moBQ" x="-18" y="15"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_FO-mMajBEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_FO-mM6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_FO-mMqjBEeG5WeGhg2moBQ" points="[18, -6, -335, 118]$[353, -108, 0, 16]"/>
+    </edges>
+    <edges xmi:id="_IFIT8KjBEeG5WeGhg2moBQ" type="Transition" element="_IFECgKjBEeG5WeGhg2moBQ" source="_3Sb8MKinEeG5WeGhg2moBQ" target="_G_ndYKjBEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_IFI7AajBEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_IFI7AqjBEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_IFI7A6jBEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_IFIT8ajBEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_IFI7AKjBEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_IFIT8qjBEeG5WeGhg2moBQ" points="[28, -3, -123, -7]$[150, -20, -1, -24]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_IFRd4KjBEeG5WeGhg2moBQ" id="(0.2,0.41509433962264153)"/>
+    </edges>
+    <edges xmi:id="_Lr9QsKjBEeG5WeGhg2moBQ" type="Transition" element="_Lr3KEKjBEeG5WeGhg2moBQ" source="_66luoKinEeG5WeGhg2moBQ" target="_Lrk2MKjBEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_Lr9QtKjBEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_Lr9QtajBEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_Lr9QtqjBEeG5WeGhg2moBQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_Lr9QsajBEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_Lr9Qs6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_Lr9QsqjBEeG5WeGhg2moBQ" points="[-17, -23, 42, 54]$[-57, -74, 2, 3]"/>
+    </edges>
+    <edges xmi:id="_OkVzEKjBEeG5WeGhg2moBQ" type="Transition" element="_OkRhoKjBEeG5WeGhg2moBQ" source="_G_ndYKjBEeG5WeGhg2moBQ" target="_DBsYoKioEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_OkVzFKjBEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_OkVzFajBEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_OkWaIKjBEeG5WeGhg2moBQ" x="-26" y="9"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_OkVzEajBEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_OkVzE6jBEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_OkVzEqjBEeG5WeGhg2moBQ" points="[35, 4, -235, -28]$[266, 31, -4, -1]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_Okdu4KjBEeG5WeGhg2moBQ" id="(0.0,0.5660377358490566)"/>
+    </edges>
+    <edges xmi:id="_j3iq8KjBEeG5WeGhg2moBQ" type="Transition" element="_j3fnoKjBEeG5WeGhg2moBQ" source="_0Pu1oaimEeG5WeGhg2moBQ" target="_tijWgKinEeG5WeGhg2moBQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_j3jSAKjBEeG5WeGhg2moBQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_j3jSAajBEeG5WeGhg2moBQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_j3jSAqjBEeG5WeGhg2moBQ" x="7" y="15"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_j3iq8ajBEeG5WeGhg2moBQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_j3iq86jBEeG5WeGhg2moBQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_j3iq8qjBEeG5WeGhg2moBQ" points="[0, -48, 138, 133]$[0, -172, 138, 9]$[-118, -172, 20, 9]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_j3oxkKjBEeG5WeGhg2moBQ" id="(0.45,1.0)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_j3oxkajBEeG5WeGhg2moBQ" id="(0.9283154121863799,0.04984423676012461)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>

+ 2 - 1
test-plugins/org.yakindu.sct.test.models/tests/DeepHistory.sctunit

@@ -23,7 +23,8 @@ testcase for DeepHistory  {
 		cycle
 		assert !active (DeepHistory.mainRegion.State1)
 		assert active (DeepHistory.mainRegion.State2._region0.State4._region0.State7._region0.State9)
-
+	
+	
 	}
 }
 

+ 1 - 1
test-plugins/org.yakindu.sct.test.models/tests/Guard.sctunit

@@ -1,6 +1,6 @@
 testcase for Guard {
 	test guardTest {
 		assert active (Guard.main_region.A)
-		
+	
 	}
 }

+ 1 - 1
test-plugins/org.yakindu.sct.test.models/tests/SimpleEvent.sctunit

@@ -5,4 +5,4 @@ testcase for SimpleEvent {
 		cycle
 		assert active (SimpleEvent.main_region.B)
 	}
-}
+}

+ 2 - 0
test-plugins/org.yakindu.sct.test.models/tests/SimpleHierachy.sctunit

@@ -2,6 +2,8 @@ testcase for SimpleHierachy {
 	test simpleHierachyTest {
 		assert active (SimpleHierachy.main_region.A)
 		raise Event1
+		raise Event1
+		raise Event1
 		cycle
 		assert active (SimpleHierachy.main_region.B)
 		assert active (SimpleHierachy.main_region.B.subregion1.B1)

+ 95 - 0
test-plugins/org.yakindu.sct.test.models/tests/SyncJoin.sctunit

@@ -0,0 +1,95 @@
+testcase for SyncJoin {
+	
+	
+//	test syncJoin_C2_Waits 'test intention' { 
+  
+	test syncJoin_C2_Waits {   
+		
+		assert active (SyncJoin.main_region.B)
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		// state configuration assertion: assert active (SyncJoin.main_region.B, SyncJoin.main_region.B.r1.C1, SyncJoin.main_region.B.r2.D1)
+		   		
+		   		
+		raise e
+		cycle 
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		 
+		// require configuration C2Waits 
+		raise jc
+		cycle 
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		
+		// 'If all required triggers exist' 'but the lower priority state is not active no join transition must be taken.' 
+		raise jc
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		
+		raise f
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+		raise jc
+		cycle 
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+
+		raise jc
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.A)
+	}
+	
+	test syncJoin_D2_Waits {   
+		
+		assert active (SyncJoin.main_region.B)
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D1)
+		   		
+		raise f
+		cycle 
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		 
+		raise jc
+		cycle 
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+		// 'If all required triggers exist' 'but the lower priority state is not active no join transition must be taken.' 
+		raise jc
+		raise jd
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C1)
+		assert active (SyncJoin.main_region.B.r2.D2)
+		
+		raise e
+		cycle
+		assert active (SyncJoin.main_region.B.r1.C2)
+		assert active (SyncJoin.main_region.B.r2.D2)
+				
+	}
+	
+	
+}

+ 1 - 1
test-plugins/org.yakindu.sct.test.models/tests/TimeTrigger.sctunit

@@ -6,4 +6,4 @@ testcase for TimeTrigger {
 		wait 220
 		assert active (TimeTrigger.mainRegion.StateA)		
 		}
-} 
+}