فهرست منبع

Merge branch 'master' into test_2.6

Conflicts:
	manual-tests/org.yakindu.sct.test.manual/YakinduTestReport.ods
Rainer Klute 10 سال پیش
والد
کامیت
9d88975a5a
27فایلهای تغییر یافته به همراه1290 افزوده شده و 318 حذف شده
  1. 3 3
      README.md
  2. BIN
      manual-tests/org.yakindu.sct.test.manual/reports/macos_20160401.ods
  3. 118 12
      plugins/org.yakindu.sct.doc.user/src/documentation.textile
  4. BIN
      plugins/org.yakindu.sct.doc.user/src/images/comparing_statecharts_010_result.png
  5. 4 4
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/FlowCode.xtend
  6. 8 8
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineSource.xtend
  7. 1 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/Timer.xtend
  8. 3 2
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/Types.xtend
  9. 112 111
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/AbstractDefaultFeatureValueProvider.java
  10. 1 1
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/util/EFSHelper.java
  11. 8 8
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineHeader.xtend
  12. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineImplementation.xtend
  13. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Types.xtend
  14. 1 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/highlighting/SGenSemanticHighlightingCalculator.java
  15. 12 12
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/CycleBasedSynchronizedWrapper.xtend
  16. 2 2
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/EventBasedRunnableWrapper.xtend
  17. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/FlowCode.xtend
  18. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/JavaGenerator.xtend
  19. 11 11
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/RuntimeService.xtend
  20. 4 4
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/Statemachine.xtend
  21. 4 4
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/TimerService.xtend
  22. 173 0
      plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/util/SGgraphUtil.java
  23. 76 61
      plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/validation/SGraphJavaValidator.java
  24. 145 66
      test-plugins/org.yakindu.sct.model.sgraph.test/src/org/yakindu/sct/model/sgraph/test/SGraphJavaValidationTest.java
  25. 3 3
      test-plugins/org.yakindu.sct.test.models/testmodels/validation/NotOrthogonalRegion03.sct
  26. 276 0
      test-plugins/org.yakindu.sct.test.models/testmodels/validation/OrthogonalTransition.sct
  27. 321 0
      test-plugins/org.yakindu.sct.test.models/testmodels/validation/SyncLocation_Issue58.sct

+ 3 - 3
README.md

@@ -7,12 +7,12 @@
 The free to use, open source toolkit YAKINDU Statechart Tools (SCT) provides an integrated modeling environment for the specification and development of reactive, event-driven systems based on the concept of Harel statecharts. 
 
 ## Professional Support
-Need professional support for Yakindu Statechart Tools? Contact us: statecharts@itemis.com
+Need professional support for YAKINDU Statechart Tools? Contact us: statecharts@itemis.com
 ## License
 
-The source code is provided under the <a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License</a>. 
+The source code of YAKINDU Statechart Tools is provided under the <a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License</a>. 
 
-The provided open source code generators do not imply any licence constraint on the generated code. The generated code is property of the user (as person or organization). There is no need to make the generate code open source and the user is free to choose any licence model for the generated code.
+The open source code generators coming with YAKINDU Statechart Tools do not imply any license constraints on the generated code whatsoever. The generated code is property of the user (as person or organization). There is no need to make the generated code open source. The user is free to choose any license model for the generated code.
 
 ## Download & Installation
 

BIN
manual-tests/org.yakindu.sct.test.manual/reports/macos_20160401.ods


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 118 - 12
plugins/org.yakindu.sct.doc.user/src/documentation.textile


BIN
plugins/org.yakindu.sct.doc.user/src/images/comparing_statecharts_010_result.png


+ 4 - 4
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/FlowCode.xtend

@@ -112,10 +112,10 @@ class FlowCode {
 		«flow.type.toFirstLower»_unsetTimer(«scHandle», (sc_eventid) &(«scHandle»->timeEvents.«timeEvent.shortName»_raised) );		
 	'''
 
-	def dispatch CharSequence code(Execution it) 
+	def dispatch CharSequence code(Execution it)
 		'''«statement.code»;'''
 	
-	def dispatch CharSequence code(Call it) 
+	def dispatch CharSequence code(Call it)
 		'''«step.shortName»(«scHandle»);'''
 
 	def dispatch CharSequence code(Sequence it) '''
@@ -125,10 +125,10 @@ class FlowCode {
 		«ENDFOR»
 	'''	
 
-	def dispatch CharSequence code(Check it) 
+	def dispatch CharSequence code(Check it)
 		'''«IF condition != null»«condition.sc_boolean_code»«ELSE»bool_true«ENDIF»'''
 	
-	def dispatch CharSequence code(CheckRef it) 
+	def dispatch CharSequence code(CheckRef it)
 		'''«IF check != null»«check.shortName»(«scHandle»)«ELSE»bool_true«ENDIF»'''
 
 	def dispatch CharSequence code(If it) '''

+ 8 - 8
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/StatemachineSource.xtend

@@ -136,12 +136,12 @@ class StatemachineSource {
 			«ENDFOR»
 			«IF hasLocalScope»
 				«FOR event : internalScope.events»
-				«event.access» = bool_false; 
+				«event.access» = bool_false;
 				«ENDFOR»
 			«ENDIF»
 			«IF timed»
 				«FOR event : timeEventScope.events»
-				«event.access» = bool_false; 
+				«event.access» = bool_false;
 				«ENDFOR»
 			«ENDIF»
 		}
@@ -209,13 +209,13 @@ class StatemachineSource {
 			switch (state)
 			{
 				«FOR s : states»
-				case «s.shortName» : 
+				case «s.shortName» :
 					result = (sc_boolean) («IF s.leaf»«scHandle»->stateConfVector[«s.stateVector.offset»] == «s.shortName»
 					«ELSE»«scHandle»->stateConfVector[«s.stateVector.offset»] >= «s.shortName»
 						&& «scHandle»->stateConfVector[«s.stateVector.offset»] <= «s.subStates.last.shortName»«ENDIF»);
 					break;
 				«ENDFOR»
-				default: 
+				default:
 					result = bool_false;
 					break;
 			}
@@ -248,10 +248,10 @@ class StatemachineSource {
 			 * Always returns 'false' since this state machine can never become final.
 			 */
 			«ENDIF»
-			sc_boolean «isFinalFctID»(const «scHandleDecl») 
+			sc_boolean «isFinalFctID»(const «scHandleDecl»)
 			{
 		''' +
-		// only if the impact vector is completely covered by final states the state machine 
+		// only if the impact vector is completely covered by final states the state machine
 		// can become final
 		{if (finalStateImpactVector.isCompletelyCovered) {'''	return «FOR i : 0 ..<finalStateImpactVector.size SEPARATOR ' && '»(«FOR fs : finalStateImpactVector.get(i) SEPARATOR ' || '»«scHandle»->stateConfVector[«i»] == «IF fs.stateVector.offset == i»«fs.shortName»«ELSE»«null_state»«ENDIF»«ENDFOR»)«ENDFOR»;
 		'''} else {'''   return bool_false;'''} }		
@@ -319,7 +319,7 @@ class StatemachineSource {
 		«exitSequenceFunctions.toPrototypes»
 		«reactFunctions.toPrototypes»
 		static void «clearInEventsFctID»(«scHandleDecl»);
-		static void «clearOutEventsFctID»(«scHandleDecl»);	
+		static void «clearOutEventsFctID»(«scHandleDecl»);
 	'''
 	
 	def constantDefinitions(ExecutionFlow it) '''
@@ -329,7 +329,7 @@ class StatemachineSource {
 			«ENDFOR»
 		«ENDFOR»
 	'''
-	 
+	
 	def toPrototypes(List<Step> steps) '''
 		«FOR s : steps»
 			«s.functionPrototype»

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

@@ -56,7 +56,7 @@ class Timer {
 		
 		#ifdef __cplusplus
 		}
-		#endif 
+		#endif
 		 
 		#endif /* «timerModule.define»_H_ */
 	'''

+ 3 - 2
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/Types.xtend

@@ -54,8 +54,9 @@ class Types {
 		typedef bool			sc_boolean;
 		typedef int_fast16_t	sc_short;
 		typedef uint_fast16_t	sc_ushort;
-		typedef int32_t			sc_integer; 
-		typedef uint32_t		sc_uinteger; 
+		typedef int32_t			sc_integer;
+		typedef uint32_t		sc_uinteger;
+		
 		typedef double			sc_real;
 		
 		typedef void*			sc_eventid;

+ 112 - 111
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/AbstractDefaultFeatureValueProvider.java

@@ -1,111 +1,112 @@
-/**
- * Copyright (c) 2011 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.generator.core.features;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-import org.yakindu.sct.generator.core.GeneratorActivator;
-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.SGenFactory;
-
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public abstract class AbstractDefaultFeatureValueProvider implements IDefaultFeatureValueProvider {
-
-	protected static final SGenFactory factory = SGenFactory.eINSTANCE;
-
-	protected abstract void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
-			EObject contextElement);
-
-	public final FeatureConfiguration createDefaultFeatureConfiguration(FeatureType type, EObject contextElement) {
-		FeatureConfiguration config = createConfiguration(type);
-		EList<FeatureParameter> parameters = type.getParameters();
-		for (FeatureParameter parameter : parameters) {
-			FeatureParameterValue parameterValue = createParameterValue(type, parameter, contextElement);
-			if (parameterValue != null && parameterValue.getExpression() != null) {
-				config.getParameterValues().add(parameterValue);
-			}
-		}
-		return config;
-	}
-
-	protected FeatureParameterValue createParameterValue(FeatureType featureType, FeatureParameter parameter,
-			EObject contextElement) {
-		FeatureParameterValue parameterValue = factory.createFeatureParameterValue();
-		parameterValue.setParameter(parameter);
-		setDefaultValue(featureType, parameterValue, contextElement);
-		return parameterValue;
-	}
-
-	protected FeatureConfiguration createConfiguration(FeatureType type) {
-		FeatureConfiguration result = factory.createFeatureConfiguration();
-		result.setType(type);
-		return result;
-	}
-
-	protected IProject getProject(EObject contextElement) {
-		return WorkspaceSynchronizer.getFile(contextElement.eResource()).getProject();
-	}
-
-	protected IStatus error(String msg) {
-		return new Status(IStatus.ERROR, GeneratorActivator.PLUGIN_ID, msg);
-	}
-
-	protected IStatus warning(String msg) {
-		return new Status(IStatus.WARNING, GeneratorActivator.PLUGIN_ID, msg);
-	}
-
-	protected boolean projectExists(String value) {
-		try {
-			return ResourcesPlugin.getWorkspace().getRoot().getProject(value).exists();
-		} catch (IllegalArgumentException e) {
-			return false;
-		}
-	}
-
-	protected boolean projectOpened(String value) {
-		try {
-			return ResourcesPlugin.getWorkspace().getRoot().getProject(value).isOpen();
-		} catch (IllegalArgumentException e) {
-			return false;
-		}
-	}
-
-	protected boolean folderExists(String projectName, String folderPath) {
-		try {
-			return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName).getFolder(new Path(folderPath))
-					.exists();
-		} catch (IllegalArgumentException e) {
-			return false;
-		}
-	}
-
-	protected boolean fileExists(String projectName, String folderPath) {
-		try {
-			return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName).getFile(new Path(folderPath))
-					.exists();
-		} catch (IllegalArgumentException e) {
-			return false;
-		}
-	}
-}
+/**
+ * Copyright (c) 2011 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.generator.core.features;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.yakindu.sct.generator.core.GeneratorActivator;
+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.SGenFactory;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public abstract class AbstractDefaultFeatureValueProvider implements IDefaultFeatureValueProvider {
+
+	protected static final SGenFactory factory = SGenFactory.eINSTANCE;
+
+	protected abstract void setDefaultValue(FeatureType featureType, FeatureParameterValue parameterValue,
+			EObject contextElement);
+
+	public final FeatureConfiguration createDefaultFeatureConfiguration(FeatureType type, EObject contextElement) {
+		FeatureConfiguration config = createConfiguration(type);
+		EList<FeatureParameter> parameters = type.getParameters();
+		for (FeatureParameter parameter : parameters) {
+			FeatureParameterValue parameterValue = createParameterValue(type, parameter, contextElement);
+			if (parameterValue != null && parameterValue.getExpression() != null) {
+				config.getParameterValues().add(parameterValue);
+			}
+		}
+		return config;
+	}
+
+	protected FeatureParameterValue createParameterValue(FeatureType featureType, FeatureParameter parameter,
+			EObject contextElement) {
+		FeatureParameterValue parameterValue = factory.createFeatureParameterValue();
+		parameterValue.setParameter(parameter);
+		setDefaultValue(featureType, parameterValue, contextElement);
+		return parameterValue;
+	}
+
+	protected FeatureConfiguration createConfiguration(FeatureType type) {
+		FeatureConfiguration result = factory.createFeatureConfiguration();
+		result.setType(type);
+		return result;
+	}
+
+	protected IProject getProject(EObject contextElement) {
+		return WorkspaceSynchronizer.getFile(contextElement.eResource()).getProject();
+	}
+
+	protected IStatus error(String msg) {
+		return new Status(IStatus.ERROR, GeneratorActivator.PLUGIN_ID, msg);
+	}
+
+	protected IStatus warning(String msg) {
+		return new Status(IStatus.WARNING, GeneratorActivator.PLUGIN_ID, msg);
+	}
+
+	protected boolean projectExists(String value) {
+		try {
+			return ResourcesPlugin.getWorkspace().getRoot().getProject(value).exists();
+		} catch (IllegalArgumentException e) {
+			return false;
+		}
+	}
+
+	protected boolean projectOpened(String value) {
+		try {
+			return ResourcesPlugin.getWorkspace().getRoot().getProject(value).isOpen();
+		} catch (IllegalArgumentException e) {
+			return false;
+		}
+	}
+
+	protected boolean folderExists(String projectName, String folderPath) {
+			try {
+				IPath workspaceRelativePath = Path.fromPortableString(projectName).append(folderPath);
+				return ResourcesPlugin.getWorkspace().getRoot().exists(workspaceRelativePath);
+			} catch (IllegalArgumentException e) {
+				return false;
+			}
+	}
+
+	protected boolean fileExists(String projectName, String folderPath) {
+		try {
+			return ResourcesPlugin.getWorkspace().getRoot().getProject(projectName).getFile(new Path(folderPath))
+					.exists();
+		} catch (IllegalArgumentException e) {
+			return false;
+		}
+	}
+}

+ 1 - 1
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/util/EFSHelper.java

@@ -88,7 +88,7 @@ public class EFSHelper {
 	 */
 	public IContainer getContainer(OutputConfiguration outputConfig,IProject project) {
 		String path = outputConfig.getOutputDirectory();
-		if (".".equals(path) || "./".equals(path) || "".equals(path) || project == null) {
+		if (".".equals(path) ||"/".equals(path) || "./".equals(path) || "".equals(path) || project == null) {
 			return project;
 		}
 		return project.getFolder(new Path(path));

+ 8 - 8
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineHeader.xtend

@@ -251,27 +251,27 @@ class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader
 
 	override dispatch functionPrototypes(EventDefinition it) '''
 		«IF direction == Direction::LOCAL»
-			/*! Raises the in event '«name»' that is defined in the «scope.scopeDescription». */ 
+			/*! Raises the in event '«name»' that is defined in the «scope.scopeDescription». */
 			void «asRaiser»(«valueParams»);
 			
-			/*! Checks if the out event '«name»' that is defined in the «scope.scopeDescription» has been raised. */ 
+			/*! Checks if the out event '«name»' that is defined in the «scope.scopeDescription» has been raised. */
 			sc_boolean «asRaised»();
 			
 			«IF hasValue»
-				/*! Gets the value of the out event '«name»' that is defined in the «scope.scopeDescription». */ 
+				/*! Gets the value of the out event '«name»' that is defined in the «scope.scopeDescription». */
 				«type.targetLanguageName» «asGetter»();
 				
 			«ENDIF»
 		«ELSEIF direction == Direction::IN»
-			/*! Raises the in event '«name»' that is defined in the «scope.scopeDescription». */ 
+			/*! Raises the in event '«name»' that is defined in the «scope.scopeDescription». */
 			void «asRaiser»(«valueParams»);
 			
 		«ELSE»
-			/*! Checks if the out event '«name»' that is defined in the «scope.scopeDescription» has been raised. */ 
+			/*! Checks if the out event '«name»' that is defined in the «scope.scopeDescription» has been raised. */
 			sc_boolean «asRaised»();
 			
 			«IF hasValue»
-				/*! Gets the value of the out event '«name»' that is defined in the «scope.scopeDescription». */ 
+				/*! Gets the value of the out event '«name»' that is defined in the «scope.scopeDescription». */
 				«type.targetLanguageName» «asGetter»();
 				
 			«ENDIF»
@@ -279,11 +279,11 @@ class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader
 	'''
 
 	override dispatch functionPrototypes(VariableDefinition it) '''
-		/*! Gets the value of the variable '«name»' that is defined in the «scope.scopeDescription». */ 
+		/*! Gets the value of the variable '«name»' that is defined in the «scope.scopeDescription». */
 		«IF const»const «ENDIF»«type.targetLanguageName» «it.asGetter»();
 
 		«IF !readonly && !const»
-			/*! Sets the value of the variable '«name»' that is defined in the «scope.scopeDescription». */ 
+			/*! Sets the value of the variable '«name»' that is defined in the «scope.scopeDescription». */
 			void «asSetter»(«type.targetLanguageName» value);
 			
 		«ENDIF»

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineImplementation.xtend

@@ -323,7 +323,7 @@ class StatemachineImplementation {
 					}
 					
 				«ENDIF»
-				«IF event.hasValue» 
+				«IF event.hasValue»
 					«event.type.targetLanguageName» «module»::«scope.interfaceName»::«event.asGetter»()
 					{
 						return «event.localValueAccess»;

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Types.xtend

@@ -38,7 +38,7 @@ class Types {
 		#define sc_string		char*
 		
 		typedef unsigned char	sc_ushort;
-		typedef int				sc_integer;  
+		typedef int				sc_integer;
 		typedef double			sc_real;
 		typedef bool			sc_boolean;
 		

+ 1 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/highlighting/SGenSemanticHighlightingCalculator.java

@@ -56,7 +56,7 @@ public class SGenSemanticHighlightingCalculator implements ISemanticHighlighting
 					if (node.getSemanticElement() instanceof FeatureConfigurationImpl) {
 						FeatureConfigurationImpl feature = (FeatureConfigurationImpl) node.getSemanticElement();
 						DeprecatableElement deprecatableElement = feature.getType();
-						if (deprecatableElement.isDeprecated()) {
+						if (deprecatableElement != null && deprecatableElement.isDeprecated()) {
 							acceptor.addPosition(node.getTotalOffset(), node.getTotalLength(),
 									SGenHighlightingConfiguration.DEPRECATION);
 						}

+ 12 - 12
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/CycleBasedSynchronizedWrapper.xtend

@@ -70,8 +70,8 @@ class CycleBasedSynchronizedWrapper {
 			«flow.timingFunctions(entry)»
 			
 			/**
-			 * init() will be delegated thread-safely to the wrapped state machine. 
-			 */ 
+			 * init() will be delegated thread-safely to the wrapped state machine.
+			 */
 			public void init() {
 				synchronized(statemachine) {
 					statemachine.init();
@@ -79,8 +79,8 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * enter() will be delegated thread-safely to the wrapped state machine.  
-			 */ 
+			 * enter() will be delegated thread-safely to the wrapped state machine.
+			 */
 			public void enter() {
 				synchronized(statemachine) {
 					statemachine.enter();
@@ -88,8 +88,8 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * exit() will be delegated thread-safely to the wrapped state machine.  
-			 */ 
+			 * exit() will be delegated thread-safely to the wrapped state machine.
+			 */
 			public void exit() {
 				synchronized(statemachine) {
 					statemachine.exit();
@@ -97,8 +97,8 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * isActive() will be delegated thread-safely to the wrapped state machine.  
-			 */ 
+			 * isActive() will be delegated thread-safely to the wrapped state machine.
+			 */
 			public boolean isActive() {
 				synchronized(statemachine) {
 					return statemachine.isActive();
@@ -106,8 +106,8 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * isFinal() will be delegated thread-safely to the wrapped state machine.  
-			 */ 
+			 * isFinal() will be delegated thread-safely to the wrapped state machine.
+			 */
 			public boolean isFinal() {
 				synchronized(statemachine) {
 					return statemachine.isFinal();
@@ -115,7 +115,7 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * isStateActive() will be delegated thread-safely to the wrapped state machine.  
+			 * isStateActive() will be delegated thread-safely to the wrapped state machine.
 			 */
 			public boolean isStateActive(State state) {
 				synchronized(statemachine) {
@@ -124,7 +124,7 @@ class CycleBasedSynchronizedWrapper {
 			}
 			
 			/**
-			 * runCycle() will be delegated thread-safely to the wrapped state machine.  
+			 * runCycle() will be delegated thread-safely to the wrapped state machine.
 			 */ 
 			@Override
 			public void runCycle() {

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

@@ -25,7 +25,7 @@ import org.yakindu.sct.model.sgen.GeneratorEntry
 import org.yakindu.sct.model.stext.stext.InterfaceScope
 
 /**
- * Generates the runnable wrapper for the state machine. This wrapper implies event based execution semantics. 
+ * Generates the runnable wrapper for the state machine. This wrapper implies event based execution semantics.
  */
 class EventBasedRunnableWrapper {
 
@@ -57,7 +57,7 @@ class EventBasedRunnableWrapper {
 		 * the {@link Runnable} interface and can be started in a thread by the client
 		 * code. The run method then starts the main event processing loop for this
 		 * state machine.
-		 * 
+		 *
 		 * Please report bugs and issues...
 		 */
 		

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

@@ -115,7 +115,7 @@ class FlowCode {
 	
 	def dispatch CharSequence code(If it) '''
 		«stepComment»
-		if («check.code») { 
+		if («check.code») {
 			«thenStep.code»
 		}
 		«IF elseStep != null»

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

@@ -19,7 +19,7 @@ import org.yakindu.sct.generator.java.features.CycleBasedWrapperFeature
 import org.yakindu.sct.model.sexec.naming.INamingService
 
 /**
- * This is the Java code generators main class. 
+ * This is the Java code generators main class.
  * 
  * @author Markus Mühlbrandt
  * @author Axel Terfloth - extensions

+ 11 - 11
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/RuntimeService.xtend

@@ -17,7 +17,7 @@ import com.google.inject.Inject
 class RuntimeService {
 	
 	@Inject
-	extension Naming 
+	extension Naming
 	
 	@Inject
 	extension GenmodelEntries
@@ -73,7 +73,7 @@ class RuntimeService {
 
 				/**
 				 * Adds the given state machine to the TimerTask.
-				 * 
+				 *
 				 * @param statemachine
 				 * @return {@code true} if state machine is added properly.
 				 */
@@ -86,7 +86,7 @@ class RuntimeService {
 
 				/**
 				 * Removes the given state machine from the TimerTask.
-				 * 
+				 *
 				 * @param statemachine
 				 * @return {@code true} if state machine is removed properly.
 				 */
@@ -112,7 +112,7 @@ class RuntimeService {
 
 			/**
 			 * Returns the {@code RuntimeService} instance as singleton.
-			 * 
+			 *
 			 * @return The singleton {@code RuntimeService} instance
 			 */
 			public static RuntimeService getInstance() {
@@ -124,7 +124,7 @@ class RuntimeService {
 
 			/**
 			 * Registers an {@link IStatemachine} for scheduled fixed rate execution
-			 * 
+			 *
 			 * @param statemachine
 			 *            - The state machine to execute
 			 * @param cyclePeriod
@@ -154,7 +154,7 @@ class RuntimeService {
 
 			/**
 			 * Removes the given state machine from runtime service.
-			 * 
+			 *
 			 * @param statemachine
 			 *            - the state machine to be removed
 			 * @param cyclePeriod
@@ -176,7 +176,7 @@ class RuntimeService {
 			 * Cancels the execution of state machines for the given cycle period. This
 			 * stops the execution of state machines which are registered for the given
 			 * cycle period and cancels the executing {@link TimerTask}.
-			 * 
+			 *
 			 * @return {@code true} if poperly cancelled
 			 */
 			public boolean cancelAll(long cyclePeriod) {
@@ -193,10 +193,10 @@ class RuntimeService {
 			/**
 			 * Pauses the execution of all state machines which are registered for the
 			 * given cyclePeriod.
-			 * 
+			 *
 			 * @param cyclePeriod
 			 * @return {@code true} if properly paused
-			 * 
+			 *
 			 */
 			public boolean pauseAll(long cyclePeriod) {
 				if (timerTasks.containsKey(cyclePeriod)) {
@@ -209,10 +209,10 @@ class RuntimeService {
 			/**
 			 * Resumes the execution of all state machines which are registered for the
 			 * given cyclePeriod.
-			 * 
+			 *
 			 * @param cyclePeriod
 			 * @return {@code true} if properly resumed
-			 * 
+			 *
 			 */
 			public boolean resumeAll(long cyclePeriod) {
 				if (timerTasks.containsKey(cyclePeriod)) {

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

@@ -262,7 +262,7 @@ class Statemachine {
 			
 			return 
 				«FOR i : 0 ..< flow.stateVector.size SEPARATOR '||'»
-				stateVector[«i»] != State.«nullStateName» 
+				stateVector[«i»] != State.«nullStateName»
 				«ENDFOR»;
 		}
 	'''
@@ -276,16 +276,16 @@ class Statemachine {
 			 * Always returns 'false' since this state machine can never become final.
 			 *
 			«ENDIF»
-			 * @see IStatemachine#isFinal() 
+			 * @see IStatemachine#isFinal()
 			 */
 			public boolean isFinal(){
 		''' +
 		
-		// only if the impact vector is completely covered by final states the state machine 
+		// only if the impact vector is completely covered by final states the state machine
 		// can become final
 		{if (finalStateImpactVector.isCompletelyCovered) {'''
 			return «FOR i : 0 ..<finalStateImpactVector.size SEPARATOR ' && '»
-				(«FOR fs : finalStateImpactVector.get(i) SEPARATOR ' || '» 
+				(«FOR fs : finalStateImpactVector.get(i) SEPARATOR ' || '»
 					stateVector[«i»] == «
 					IF fs.stateVector.offset == i
 						»State.«fs.stateName.asEscapedIdentifier»«

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

@@ -39,7 +39,7 @@ class TimerService {
 		
 		/**
 		 * Default timer service implementation.
-		 * 
+		 *
 		 */
 		public class TimerService implements ITimer {
 
@@ -52,7 +52,7 @@ class TimerService {
 			/**
 			 * Timer task that reflects a time event. It's internally used by
 			 * {@link TimerService}.
-			 * 
+			 *
 			 */
 			private class TimeEventTask extends TimerTask {
 			
@@ -62,11 +62,11 @@ class TimerService {
 			
 				/**
 				 * Constructor for a time event.
-				 * 
+				 *
 				 * @param callback
 				 *            : Set to {@code true} if event should be repeated
 				 *            periodically.
-				 * 
+				 *
 				 * @param eventID
 				 *            : Index position within the state machine's timeEvent
 				 *            array.

+ 173 - 0
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/util/SGgraphUtil.java

@@ -0,0 +1,173 @@
+/**
+ * Copyright (c) 2016 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:
+ *     Axel Terfloth - initial API and implementation
+ */
+package org.yakindu.sct.model.sgraph.util;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.model.sgraph.Region;
+import org.yakindu.sct.model.sgraph.Transition;
+import org.yakindu.sct.model.sgraph.Vertex;
+
+/**
+ * Provides a collection of static functions that perform set operations and calculate derived properties based on the sgraph structure.
+ *  
+ * @author terfloth
+ */
+public class SGgraphUtil {
+
+	
+	/**
+	 * Calculates the common ancestor of to EObjects
+	 *  
+	 * @param o1
+	 * @param o2
+	 * @return
+	 */
+	public static EObject commonAncestor(EObject o1, EObject o2) {
+		
+		List<EObject> o1Anchestors = collectAncestors(o1, new ArrayList<EObject>());
+		List<EObject> o2Anchestors = collectAncestors(o2, new ArrayList<EObject>());
+		
+		return findCommonAncestor(o1Anchestors, o2Anchestors);
+	}
+
+	
+	/**
+	 * Calculates the common ancestor of to EObjects based on two ancestor list.  The lists are compareredstarting from the root. 
+	 * The last same element is the common ancestor.
+	 *  
+	 * @param o1Anchestors
+	 * @param o2Anchestors
+	 * @return
+	 */
+	public static EObject findCommonAncestor(List<EObject> o1Anchestors, List<EObject> o2Anchestors) {
+		int max = Math.min(o1Anchestors.size(), o2Anchestors.size());
+		EObject commonAncestor = null;
+		
+		for (int i=0; i<max; i++) {
+			if (o1Anchestors.get(i) == o2Anchestors.get(i)) {
+				commonAncestor = o1Anchestors.get(i);
+			} else {
+				break; // do not continue if we came across different amcestors.
+			}
+		}
+		
+		return commonAncestor;
+	}
+	
+
+	/**
+	 * Adds all ancestors of an EObject to the provided list. Ancestors are all eContainers starting from the specified element. The ancestors are added starting with the root.
+	 *  
+	 * @param o1 The EObject instance for which we want to get the ancestors.
+	 * @param al A list where the ancestors are added.
+	 * @return The list with ancestors (same as @param al) 
+	 */
+	public static List<EObject> collectAncestors(EObject o1, List<EObject> al) {
+
+		if ( o1 != null ) {
+		
+			if ( o1.eContainer() != null ) {
+				collectAncestors(o1.eContainer(), al);
+				al.add(o1.eContainer());
+			}
+		
+		}		
+		return al;
+	}
+	
+
+	/**
+	 * Checks if all provided vertices are orthogonal to each other.
+	 * 
+	 * @param vertices
+	 * @return true if the vertices are orthogonal to each other.
+	 */
+	public static boolean areOrthogonal(List<Vertex> vertices) {
+		
+		if (vertices == null || vertices.isEmpty()) return true;
+		
+		List<List<EObject>> ancestorLists = new ArrayList<List<EObject>>();
+		
+		for (Vertex vertex : vertices) {
+			ancestorLists.add(collectAncestors(vertex, new ArrayList<EObject>()));
+		}
+		
+		// check all pairs of verices for orthogonality ...
+		for ( int i=0; i<vertices.size()-1; i++) {
+			for ( int j=i+1; j<vertices.size(); j++) {
+				// ... by checking their common ancestor. f it is a region then the pair of vertices are not orthogonal.
+				EObject commonAncestor = findCommonAncestor(ancestorLists.get(i), ancestorLists.get(j));
+				if ( commonAncestor instanceof Region ) {
+					return false;
+				}
+			}
+		}
+		
+		return true;
+	}
+	
+	
+	/**
+	 * Provides a list of Vertex objects that are source of the provided transitions.
+	 * 
+	 * @param transitions
+	 * @return
+	 */
+	public static List<Vertex> sources(List<Transition> transitions) {
+		List<Vertex> vertices = new ArrayList<Vertex>();
+		
+		for (Transition transition : transitions) {
+			vertices.add(transition.getSource());
+		}
+		
+		return vertices;
+	}
+	
+	
+	/**
+	 * Provides a list of Vertex objects that are target of the provided transitions.
+	 * 
+	 * @param transitions
+	 * @return
+	 */
+	public static List<Vertex> targets(List<Transition> transitions) {
+		List<Vertex> vertices = new ArrayList<Vertex>();
+		
+		for (Transition transition : transitions) {
+			vertices.add(transition.getTarget());
+		}
+		
+		return vertices;
+	}
+	
+	
+	/**
+	 * Returns the first NamedElement from the specified collection that matches the specified name.
+	 * 
+	 * @param coll
+	 * @param name
+	 * @return
+	 */
+	public static <T extends NamedElement> T firstNamed(Collection<T> coll, String name) {
+		
+		for (T t : coll) {
+			if (name.equals(t.getName())) return t;
+		}
+		return null;
+	}
+
+}

+ 76 - 61
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/validation/SGraphJavaValidator.java

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2012 committers of YAKINDU and others.
+ * Copyright (c) 2012-2016 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
@@ -10,6 +10,13 @@
  */
 package org.yakindu.sct.model.sgraph.validation;
 
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.areOrthogonal;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.collectAncestors;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.commonAncestor;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.findCommonAncestor;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.sources;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.targets;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -18,7 +25,6 @@ import java.util.Set;
 
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
 import org.eclipse.xtext.validation.Check;
@@ -74,6 +80,7 @@ public class SGraphJavaValidator extends AbstractDeclarativeValidator {
 	public static final String ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL = "The source states of a synchronization must be orthogonal!";
 	public static final String ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE = "The source states of a synchronization have to be contained in the same parent state within different regions!";
 	public static final String ISSUE_SYNCHRONIZATION_TRANSITION_COUNT = "A synchronization should have at least two incoming or two outgoing transitions";
+	public static final String ISSUE_TRANSITION_ORTHOGONAL = "Source and target of a transition must not be located in orthogonal regions!";
 	public static final String ISSUE_INITIAL_ENTRY_WITH_TRANSITION_TO_CONTAINER = "Outgoing Transitions from Entries can only target to sibling or inner states.";
 
 	@Check(CheckType.FAST)
@@ -296,75 +303,83 @@ public class SGraphJavaValidator extends AbstractDeclarativeValidator {
 
 	}
 
-	@Check(CheckType.FAST)
-	public void orthogonalStates(Synchronization fork) {
-		// check target states
-		orthogonalStates(fork, true);
-		// check source states
-		orthogonalStates(fork, false);
+	@Check public void orthogonalTransition(Transition transition) {
+		
+		Vertex source = transition.getSource();
+		Vertex target = transition.getTarget();
+		
+		if ( (source instanceof Synchronization) || (target instanceof Synchronization) ) return; // ... the check does not apply.
+		
+		EObject commonAncestor = commonAncestor(source, target);
+		
+		if (commonAncestor instanceof CompositeElement) {
+			
+			error(ISSUE_TRANSITION_ORTHOGONAL, transition, null, -1);	
+		}
+	}
+	
+	
+	@Check public void orthogonalSourceStates(Synchronization sync) {
+		
+		List<Vertex> sourceVertices = sources(sync.getIncomingTransitions());
+		
+		if ( ! areOrthogonal(sourceVertices) ) {
+			error(ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL, sync, null, -1);
+		}
 	}
 
-	private void orthogonalStates(Synchronization fork, boolean searchTarget) {
-		List<Transition> transitions = searchTarget ? fork
-				.getOutgoingTransitions() : fork.getIncomingTransitions();
-		if (transitions.size() > 1) {
-			final Transition firstTransition = transitions.get(0);
-			final Vertex vertex = searchTarget ? firstTransition.getTarget()
-					: firstTransition.getSource();
-
-			CompositeElement root = findCommonRootCompositeElement(vertex
-					.getParentRegion().getComposite(), fork, searchTarget);
-
-			if (root != null) {
-				for (Transition t : transitions) {
-					Region parentRegion = searchTarget ? t.getTarget()
-							.getParentRegion() : t.getSource()
-							.getParentRegion();
-					for (Transition transition : transitions) {
-						if (transition != t
-								&& EcoreUtil.isAncestor(parentRegion,
-										searchTarget ? transition.getTarget()
-												: transition.getSource())) {
-							error(searchTarget ? ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_ORTHOGONAL
-									: ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL,
-									fork, null, -1);
-							break;
-						}
-					}
-				}
-			} else {
-				error(searchTarget ? ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_WITHIN_SAME_PARENTSTATE
-						: ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE,
-						fork, null, -1);
-			}
+	
 
+	@Check public void orthogonalTargetStates(Synchronization sync) {
+		
+		List<Vertex> sourceVertices = targets(sync.getOutgoingTransitions());
+		
+		if ( ! areOrthogonal(sourceVertices) ) {
+			error(ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_ORTHOGONAL, sync, null, -1);
 		}
 	}
 
-	private CompositeElement findCommonRootCompositeElement(
-			CompositeElement root, Synchronization fork, boolean searchTarget) {
-
-		CompositeElement ret = root;
-
-		if (ret != fork.getParentRegion().getComposite()) {
-			for (Transition transition : searchTarget ? fork
-					.getOutgoingTransitions() : fork.getIncomingTransitions()) {
-				if (ret != null
-						&& !EcoreUtil.isAncestor(ret,
-								searchTarget ? transition.getTarget()
-										: transition.getSource())) {
-					if (ret.eContainer() instanceof Region) {
-						final CompositeElement newRoot = ((Region) root
-								.eContainer()).getComposite();
-						ret = findCommonRootCompositeElement(newRoot, fork,
-								searchTarget);
-					}
+
+
+	@Check public void orthogonalSynchronizedTransition(Synchronization sync) {
+		
+		List<Transition> incoming = sync.getIncomingTransitions();		
+		List<List<EObject>> inAncestorsList = new ArrayList<List<EObject>>();
+		for (Transition trans : incoming) { inAncestorsList.add(collectAncestors(trans.getSource(), new ArrayList<EObject>())); }
+
+		List<Transition> outgoing = sync.getOutgoingTransitions();
+		List<List<EObject>> outAncestorsList = new ArrayList<List<EObject>>(); 
+		for (Transition trans : outgoing) { outAncestorsList.add(collectAncestors(trans.getTarget(), new ArrayList<EObject>())); }
+				
+		
+		Set<Transition> inOrthogonal = new HashSet<Transition>(incoming);
+		Set<Transition> outOrthogonal = new HashSet<Transition>(outgoing);
+		
+		for ( int i=0; i<incoming.size(); i++) {
+			for ( int j=0; j<outgoing.size(); j++ ) {
+				
+				EObject commonAncestor = findCommonAncestor(inAncestorsList.get(i), outAncestorsList.get(j));
+
+				if ( commonAncestor instanceof Region ) {					
+					inOrthogonal.remove(incoming.get(i));
+					outOrthogonal.remove(outgoing.get(j));
 				}
 			}
-			return ret;
 		}
-		return null;
+
+		for ( Transition trans : inOrthogonal ) {
+			error(ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE, trans, null, -1);				
+		}
+		
+		for ( Transition trans : outOrthogonal ) {
+			error(ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_WITHIN_SAME_PARENTSTATE, trans, null, -1);				
+		}
+		
 	}
+	
+	
+	
+
 
 	@Override
 	public boolean isLanguageSpecific() {

+ 145 - 66
test-plugins/org.yakindu.sct.model.sgraph.test/src/org/yakindu/sct/model/sgraph/test/SGraphJavaValidationTest.java

@@ -13,14 +13,20 @@ package org.yakindu.sct.model.sgraph.test;
 import static org.junit.Assert.*;
 import static org.yakindu.sct.model.sgraph.validation.SGraphJavaValidator.*;
 import static org.yakindu.sct.test.models.AbstractTestModelsUtil.VALIDATION_TESTMODEL_DIR;
+import static org.yakindu.sct.model.sgraph.util.SGgraphUtil.*;
+
 
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Iterator;
 
+import javax.swing.plaf.synth.SynthGraphicsUtils;
+
 import org.eclipse.emf.common.util.BasicDiagnostic;
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.junit4.InjectWith;
 import org.eclipse.xtext.junit4.XtextRunner;
 import org.eclipse.xtext.validation.Check;
@@ -579,82 +585,147 @@ public class SGraphJavaValidationTest {
 		assertWarning(diagnostics, ISSUE_SYNCHRONIZATION_TRANSITION_COUNT);
 	}
 
-	@Test
-	public void orthogonalStates() {
-		statechart = AbstractTestModelsUtil
-				.loadStatechart(VALIDATION_TESTMODEL_DIR
-						+ "NotOrthogonalRegion01.sct");
-		Iterator<EObject> iter = statechart.eAllContents();
-		while (iter.hasNext()) {
-			EObject element = iter.next();
-			if (element instanceof Synchronization) {
-				assertFalse(validator.validate(element, diagnostics,
-						new HashMap<Object, Object>()));
-			}
-		}
+	
+	@Test public void orthogonalTransition() {
+		statechart = loadStatechart("OrthogonalTransition.sct");
+		
+		State state = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B2");
+		Transition trans = state.getOutgoingTransitions().get(0);
+		
+		assertTrue(validator.validate(trans, diagnostics, new HashMap<Object, Object>()));
+		assertNoIssues(diagnostics);
+	}
 
-		assertIssueCount(diagnostics, 2);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_ORTHOGONAL);
 
-		diagnostics = new BasicDiagnostic();
-		statechart = AbstractTestModelsUtil
-				.loadStatechart(VALIDATION_TESTMODEL_DIR
-						+ "NotOrthogonalRegion02.sct");
-		iter = statechart.eAllContents();
-		while (iter.hasNext()) {
-			EObject element = iter.next();
-			if (element instanceof Synchronization) {
-				assertFalse(validator.validate(element, diagnostics,
-						new HashMap<Object, Object>()));
-			}
-		}
+	@Test public void orthogonalTransition_BetweenTopLevelRegions() {
+		statechart = loadStatechart("OrthogonalTransition.sct");
+		
+		State state = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "A");
+		Transition trans = state.getOutgoingTransitions().get(0);
+		
+		assertFalse(validator.validate(trans, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_TRANSITION_ORTHOGONAL);
+	}
+	
+	
+	@Test public void orthogonalTransition_BetweenStateRegions() {
+		statechart = loadStatechart("OrthogonalTransition.sct");
+		
+		State state = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B1");
+		Transition trans = state.getOutgoingTransitions().get(0);
+		
+		assertFalse(validator.validate(trans, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_TRANSITION_ORTHOGONAL);
+	}
 
-		assertIssueCount(diagnostics, 2);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_WITHIN_SAME_PARENTSTATE);
 
-		diagnostics = new BasicDiagnostic();
-		statechart = AbstractTestModelsUtil
-				.loadStatechart(VALIDATION_TESTMODEL_DIR
-						+ "NotOrthogonalRegion03.sct");
-		iter = statechart.eAllContents();
-		while (iter.hasNext()) {
-			EObject element = iter.next();
-			if (element instanceof Synchronization) {
-				assertFalse(validator.validate(element, diagnostics,
-						new HashMap<Object, Object>()));
-			}
-		}
+	@Test public void orthogonalSourceStates() {
+		statechart = loadStatechart("OrthogonalRegion01.sct");
+		
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "AA");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertTrue(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertNoIssues(diagnostics);
+	}
+		
+	@Test public void orthogonalSourceStates_StateInParentStateRegion() {
+		statechart = loadStatechart("NotOrthogonalRegion01.sct");
 
-		assertIssueCount(diagnostics, 2);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE);
-		assertError(diagnostics,
-				ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_WITHIN_SAME_PARENTSTATE);
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "AA");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL);
 	}
 
-	@Test
-	public void orthogonalStatesValid() {
-		statechart = AbstractTestModelsUtil
-				.loadStatechart(VALIDATION_TESTMODEL_DIR
-						+ "OrthogonalRegion01.sct");
-		Iterator<EObject> iter = statechart.eAllContents();
-		while (iter.hasNext()) {
-			EObject element = iter.next();
-			if (element instanceof Synchronization) {
-				assertTrue(validator.validate(element, diagnostics,
-						new HashMap<Object, Object>()));
-			}
-		}
+	@Test public void orthogonalSourceStates_StateInTopLevelRegion() {
+		statechart = loadStatechart("NotOrthogonalRegion02.sct");
 
-		assertIssueCount(diagnostics, 0);
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "AA");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL);
 	}
 
+
+	
+	@Test public void orthogonalTargetStates() {
+		statechart = loadStatechart("OrthogonalRegion01.sct");
+		
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertTrue(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertNoIssues(diagnostics);
+	}
+		
+	@Test public void orthogonalTargetStates_StateInParentStateRegion() {
+		statechart = loadStatechart("NotOrthogonalRegion01.sct");
+
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_ORTHOGONAL);
+	}
+
+
+	@Test public void orthogonalTargetStates_StateInTopLevelRegion() {
+		statechart = loadStatechart("NotOrthogonalRegion02.sct");
+
+		State b = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B");
+		Synchronization sync = (Synchronization) b.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_ORTHOGONAL);
+	}
+
+	
+		
+	@Test public void orthogonalSynchronizedTransition() {
+		statechart = loadStatechart("NotOrthogonalRegion03.sct");
+		
+		State stateB = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "B");
+		Synchronization sync = (Synchronization) stateB.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_TARGET_STATES_NOT_WITHIN_SAME_PARENTSTATE);
+	}
+
+
+	@Test public void orthogonalSynchronizedTransition_Source() {
+		statechart = loadStatechart("NotOrthogonalRegion03.sct");
+		
+		State stateC = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "C");
+		Synchronization sync = (Synchronization) stateC.getOutgoingTransitions().get(0).getTarget();
+		
+		assertFalse(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+		assertError(diagnostics, ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE);
+	}
+
+
+	@Test public void syncLocation_Issue58() {
+		statechart = loadStatechart("SyncLocation_Issue58.sct");
+		
+		State state = firstNamed(EcoreUtil2.eAllOfType(statechart, State.class), "AA");
+		Synchronization sync = (Synchronization) state.getOutgoingTransitions().get(0).getTarget();
+		
+		assertTrue(validator.validate(sync, diagnostics, new HashMap<Object, Object>()));
+		assertNoIssues(diagnostics);
+	}
+		
+
+
 	@Test
 	public void regionCantBeEnteredUsingShallowHistory() {
 		statechart = AbstractTestModelsUtil
@@ -828,5 +899,13 @@ public class SGraphJavaValidationTest {
 		return validator.validate(obj, diagnostics,
 				new HashMap<Object, Object>());
 	}
+	
+	protected Statechart loadStatechart(String modelName) {
+		return AbstractTestModelsUtil
+				.loadStatechart(VALIDATION_TESTMODEL_DIR
+						+ modelName);
+	}
+
+
 
 }

+ 3 - 3
test-plugins/org.yakindu.sct.test.models/testmodels/validation/NotOrthogonalRegion03.sct

@@ -41,7 +41,7 @@
       </vertices>
     </regions>
     <regions xmi:id="_pGDpAKgvEeKc3Yk9SnH-yA">
-      <vertices xsi:type="sgraph:State" xmi:id="_oz1cIKglEeKc3Yk9SnH-yA" name="bdd" incomingTransitions="_p4ORUKglEeKc3Yk9SnH-yA">
+      <vertices xsi:type="sgraph:State" xmi:id="_oz1cIKglEeKc3Yk9SnH-yA" name="C" incomingTransitions="_p4ORUKglEeKc3Yk9SnH-yA">
         <outgoingTransitions xmi:id="_sLAzUKglEeKc3Yk9SnH-yA" specification="" target="_CUGPgKWjEeKBrrCTA2_OoQ"/>
       </vertices>
     </regions>
@@ -251,12 +251,12 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_o0RhAaglEeKc3Yk9SnH-yA" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_o0RhAqglEeKc3Yk9SnH-yA"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_o0T9Q6glEeKc3Yk9SnH-yA" name="isHorizontal" booleanValue="true"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_o0RhA6glEeKc3Yk9SnH-yA" x="29" y="297"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_o0RhA6glEeKc3Yk9SnH-yA" x="9" y="293"/>
         </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_pGIhhKgvEeKc3Yk9SnH-yA"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_pGH6cagvEeKc3Yk9SnH-yA" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_pGH6cqgvEeKc3Yk9SnH-yA" x="780" y="10" width="91" height="389"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_pGH6cqgvEeKc3Yk9SnH-yA" x="780" y="10" width="113" height="396"/>
     </children>
     <styles xsi:type="notation:DiagramStyle" xmi:id="_cCYv8YcVEeK5XMQGITKBlg"/>
     <edges xmi:id="_cDXAUIcVEeK5XMQGITKBlg" type="Transition" element="_cDVyM4cVEeK5XMQGITKBlg" source="_cDT9AIcVEeK5XMQGITKBlg" target="_pTH-AKWlEeKBrrCTA2_OoQ">

+ 276 - 0
test-plugins/org.yakindu.sct.test.models/testmodels/validation/OrthogonalTransition.sct

@@ -0,0 +1,276 @@
+<?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="_Lx-1QPf6EeWEP4pglzmtIA" specification="interface:&#xA;// Define events and&#xA;// and variables here" name="OrthogonalTransition">
+    <regions xmi:id="_LyCfoff6EeWEP4pglzmtIA" name="r1">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_LyGxEff6EeWEP4pglzmtIA">
+        <outgoingTransitions xmi:id="_LyJNU_f6EeWEP4pglzmtIA" target="_LyH_Mvf6EeWEP4pglzmtIA"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_LyH_Mvf6EeWEP4pglzmtIA" name="A" incomingTransitions="_LyJNU_f6EeWEP4pglzmtIA">
+        <outgoingTransitions xmi:id="_cSJb8Pf6EeWEP4pglzmtIA" specification="always" target="_Z6vfs_f6EeWEP4pglzmtIA"/>
+      </vertices>
+    </regions>
+    <regions xmi:id="_Z6vfsPf6EeWEP4pglzmtIA" name="r2">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_Z6vfsff6EeWEP4pglzmtIA">
+        <outgoingTransitions xmi:id="_Z6vfsvf6EeWEP4pglzmtIA" target="_Z6vfs_f6EeWEP4pglzmtIA"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_Z6vfs_f6EeWEP4pglzmtIA" name="B" incomingTransitions="_Z6vfsvf6EeWEP4pglzmtIA _cSJb8Pf6EeWEP4pglzmtIA _wMOkwPf6EeWEP4pglzmtIA">
+        <regions xmi:id="_mARHEPf6EeWEP4pglzmtIA" name="">
+          <vertices xsi:type="sgraph:Entry" xmi:id="_mARHEff6EeWEP4pglzmtIA">
+            <outgoingTransitions xmi:id="_mARHEvf6EeWEP4pglzmtIA" specification="" target="_mARHE_f6EeWEP4pglzmtIA"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_mARHE_f6EeWEP4pglzmtIA" name="B1" incomingTransitions="_mARHEvf6EeWEP4pglzmtIA">
+            <outgoingTransitions xmi:id="_rPgzIPf6EeWEP4pglzmtIA" specification="always" target="_mcvAo_f6EeWEP4pglzmtIA"/>
+          </vertices>
+        </regions>
+        <regions xmi:id="_mcvAoPf6EeWEP4pglzmtIA" name="">
+          <vertices xsi:type="sgraph:Entry" xmi:id="_mcvAoff6EeWEP4pglzmtIA">
+            <outgoingTransitions xmi:id="_mcvAovf6EeWEP4pglzmtIA" specification="" target="_mcvAo_f6EeWEP4pglzmtIA"/>
+          </vertices>
+          <vertices xsi:type="sgraph:State" xmi:id="_mcvAo_f6EeWEP4pglzmtIA" name="B2" incomingTransitions="_mcvAovf6EeWEP4pglzmtIA _rPgzIPf6EeWEP4pglzmtIA">
+            <outgoingTransitions xmi:id="_wMOkwPf6EeWEP4pglzmtIA" specification="always" target="_Z6vfs_f6EeWEP4pglzmtIA"/>
+          </vertices>
+        </regions>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_LyB4kPf6EeWEP4pglzmtIA" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_Lx-1QPf6EeWEP4pglzmtIA" measurementUnit="Pixel">
+    <children xmi:id="_LyEU0Pf6EeWEP4pglzmtIA" type="Region" element="_LyCfoff6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_LyGKAPf6EeWEP4pglzmtIA" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_LyGKAff6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_LyGKAvf6EeWEP4pglzmtIA"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_LyGKA_f6EeWEP4pglzmtIA" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_LyHYIPf6EeWEP4pglzmtIA" type="Entry" element="_LyGxEff6EeWEP4pglzmtIA">
+          <children xmi:id="_LyHYJPf6EeWEP4pglzmtIA" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_LyHYJ_f6EeWEP4pglzmtIA" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_LyHYKPf6EeWEP4pglzmtIA"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_LyH_MPf6EeWEP4pglzmtIA"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_LyHYJff6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyHYJvf6EeWEP4pglzmtIA"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_LyHYIff6EeWEP4pglzmtIA" fontName="Verdana" fillColor="0" lineColor="16777215"/>
+          <styles xsi:type="notation:NamedStyle" xmi:id="_LyHYIvf6EeWEP4pglzmtIA" name="allowColors"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyH_Mff6EeWEP4pglzmtIA" x="23" y="25"/>
+        </children>
+        <children xmi:id="_LyH_Nff6EeWEP4pglzmtIA" type="State" element="_LyH_Mvf6EeWEP4pglzmtIA">
+          <children xsi:type="notation:DecorationNode" xmi:id="_LyImQPf6EeWEP4pglzmtIA" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_LyImQff6EeWEP4pglzmtIA"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_LyImQvf6EeWEP4pglzmtIA"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_LyImQ_f6EeWEP4pglzmtIA" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_LyImRPf6EeWEP4pglzmtIA" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyImRff6EeWEP4pglzmtIA"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_LyJNUPf6EeWEP4pglzmtIA" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_LyH_Nvf6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_LyH_N_f6EeWEP4pglzmtIA"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_LyJNUff6EeWEP4pglzmtIA" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyJNUvf6EeWEP4pglzmtIA" x="13" y="125" width="40" height="53"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyGKBPf6EeWEP4pglzmtIA"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_LyEU0ff6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyGxEPf6EeWEP4pglzmtIA" x="220" y="10" width="93" height="400"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_LyLCg_f6EeWEP4pglzmtIA" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_LyLpkPf6EeWEP4pglzmtIA" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_LyLpkff6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_LyLpkvf6EeWEP4pglzmtIA"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_LyLpk_f6EeWEP4pglzmtIA" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyLplPf6EeWEP4pglzmtIA"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LyLplff6EeWEP4pglzmtIA" x="10" y="10" width="200" height="400"/>
+    </children>
+    <children xmi:id="_Z6scYPf6EeWEP4pglzmtIA" type="Region" element="_Z6vfsPf6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_Z6scYff6EeWEP4pglzmtIA" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scYvf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_Z6scY_f6EeWEP4pglzmtIA"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_Z6scZPf6EeWEP4pglzmtIA" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_Z6scZff6EeWEP4pglzmtIA" type="Entry" element="_Z6vfsff6EeWEP4pglzmtIA">
+          <children xmi:id="_Z6scZvf6EeWEP4pglzmtIA" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_Z6scZ_f6EeWEP4pglzmtIA" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scaPf6EeWEP4pglzmtIA"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_Z6scaff6EeWEP4pglzmtIA"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scavf6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6sca_f6EeWEP4pglzmtIA"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scbPf6EeWEP4pglzmtIA" fontName="Verdana" fillColor="0" lineColor="16777215"/>
+          <styles xsi:type="notation:NamedStyle" xmi:id="_Z6scbff6EeWEP4pglzmtIA" name="allowColors"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6scbvf6EeWEP4pglzmtIA" x="164" y="37" width="15" height="15"/>
+        </children>
+        <children xmi:id="_Z6scb_f6EeWEP4pglzmtIA" type="State" element="_Z6vfs_f6EeWEP4pglzmtIA">
+          <children xsi:type="notation:DecorationNode" xmi:id="_Z6sccPf6EeWEP4pglzmtIA" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6sccff6EeWEP4pglzmtIA"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_Z6sccvf6EeWEP4pglzmtIA"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_Z6scc_f6EeWEP4pglzmtIA" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_Z6scdPf6EeWEP4pglzmtIA" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6scdff6EeWEP4pglzmtIA"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_Z6scdvf6EeWEP4pglzmtIA" type="StateFigureCompartment">
+            <children xmi:id="_mAQgAPf6EeWEP4pglzmtIA" type="Region" element="_mARHEPf6EeWEP4pglzmtIA">
+              <children xsi:type="notation:DecorationNode" xmi:id="_mAQgAff6EeWEP4pglzmtIA" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgAvf6EeWEP4pglzmtIA"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_mAQgA_f6EeWEP4pglzmtIA"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_mAQgBPf6EeWEP4pglzmtIA" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_mAQgBff6EeWEP4pglzmtIA" type="Entry" element="_mARHEff6EeWEP4pglzmtIA">
+                  <children xmi:id="_mAQgBvf6EeWEP4pglzmtIA" type="BorderItemLabelContainer">
+                    <children xsi:type="notation:DecorationNode" xmi:id="_mAQgB_f6EeWEP4pglzmtIA" type="BorderItemLabel">
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgCPf6EeWEP4pglzmtIA"/>
+                      <layoutConstraint xsi:type="notation:Location" xmi:id="_mAQgCff6EeWEP4pglzmtIA"/>
+                    </children>
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgCvf6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgC_f6EeWEP4pglzmtIA"/>
+                  </children>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgDPf6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgDff6EeWEP4pglzmtIA" x="29" y="8"/>
+                </children>
+                <children xmi:id="_mAQgDvf6EeWEP4pglzmtIA" type="State" element="_mARHE_f6EeWEP4pglzmtIA">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_mAQgD_f6EeWEP4pglzmtIA" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgEPf6EeWEP4pglzmtIA"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_mAQgEff6EeWEP4pglzmtIA"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_mAQgEvf6EeWEP4pglzmtIA" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_mAQgE_f6EeWEP4pglzmtIA" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgFPf6EeWEP4pglzmtIA"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_mAQgFff6EeWEP4pglzmtIA" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgFvf6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_mAQgF_f6EeWEP4pglzmtIA"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_mAQgGPf6EeWEP4pglzmtIA" name="isHorizontal" booleanValue="true"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgGff6EeWEP4pglzmtIA" x="29" y="56"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgGvf6EeWEP4pglzmtIA"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_mAQgG_f6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mAQgHPf6EeWEP4pglzmtIA" x="90" y="10"/>
+            </children>
+            <children xmi:id="_mctygPf6EeWEP4pglzmtIA" type="Region" element="_mcvAoPf6EeWEP4pglzmtIA">
+              <children xsi:type="notation:DecorationNode" xmi:id="_mctygff6EeWEP4pglzmtIA" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_mctygvf6EeWEP4pglzmtIA"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_mctyg_f6EeWEP4pglzmtIA"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_mctyhPf6EeWEP4pglzmtIA" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_mctyhff6EeWEP4pglzmtIA" type="Entry" element="_mcvAoff6EeWEP4pglzmtIA">
+                  <children xmi:id="_mctyhvf6EeWEP4pglzmtIA" type="BorderItemLabelContainer">
+                    <children xsi:type="notation:DecorationNode" xmi:id="_mctyh_f6EeWEP4pglzmtIA" type="BorderItemLabel">
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_mctyiPf6EeWEP4pglzmtIA"/>
+                      <layoutConstraint xsi:type="notation:Location" xmi:id="_mctyiff6EeWEP4pglzmtIA"/>
+                    </children>
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_mctyivf6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+                    <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctyi_f6EeWEP4pglzmtIA"/>
+                  </children>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_mctyjPf6EeWEP4pglzmtIA" fontName="Verdana" lineColor="4210752"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctyjff6EeWEP4pglzmtIA" x="51" y="12"/>
+                </children>
+                <children xmi:id="_mctyjvf6EeWEP4pglzmtIA" type="State" element="_mcvAo_f6EeWEP4pglzmtIA">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_mctyj_f6EeWEP4pglzmtIA" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_mctykPf6EeWEP4pglzmtIA"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_mctykff6EeWEP4pglzmtIA"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_mctykvf6EeWEP4pglzmtIA" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_mctyk_f6EeWEP4pglzmtIA" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctylPf6EeWEP4pglzmtIA"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_mctylff6EeWEP4pglzmtIA" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_mctylvf6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_mctyl_f6EeWEP4pglzmtIA"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_mctymPf6EeWEP4pglzmtIA" name="isHorizontal" booleanValue="true"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctymff6EeWEP4pglzmtIA" x="41" y="56"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctymvf6EeWEP4pglzmtIA"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_mctym_f6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_mctynPf6EeWEP4pglzmtIA" x="90" y="10"/>
+            </children>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scd_f6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_Z6scePf6EeWEP4pglzmtIA"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Z6sceff6EeWEP4pglzmtIA" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6scevf6EeWEP4pglzmtIA" x="29" y="109" width="290" height="190"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6sce_f6EeWEP4pglzmtIA"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6scfPf6EeWEP4pglzmtIA" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Z6scfff6EeWEP4pglzmtIA" x="320" y="10" width="386" height="400"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_LyCfoPf6EeWEP4pglzmtIA"/>
+    <edges xmi:id="_LyKbcPf6EeWEP4pglzmtIA" type="Transition" element="_LyJNU_f6EeWEP4pglzmtIA" source="_LyHYIPf6EeWEP4pglzmtIA" target="_LyH_Nff6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_LyLCgPf6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_LyLCgff6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_LyLCgvf6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_LyKbcff6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_LyKbc_f6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_LyKbcvf6EeWEP4pglzmtIA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    </edges>
+    <edges xmi:id="_Z6wt0Pf6EeWEP4pglzmtIA" type="Transition" element="_Z6vfsvf6EeWEP4pglzmtIA" source="_Z6scZff6EeWEP4pglzmtIA" target="_Z6scb_f6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_Z6wt0ff6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_Z6wt0vf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_Z6wt0_f6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_Z6wt1Pf6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_Z6wt1ff6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_Z6wt1vf6EeWEP4pglzmtIA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    </edges>
+    <edges xmi:id="_cSKqEPf6EeWEP4pglzmtIA" type="Transition" element="_cSJb8Pf6EeWEP4pglzmtIA" source="_LyH_Nff6EeWEP4pglzmtIA" target="_Z6scb_f6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_cSLRIff6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_cSLRIvf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_cSLRI_f6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_cSKqEff6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_cSLRIPf6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_cSKqEvf6EeWEP4pglzmtIA" points="[32, 8, -203, 8]$[170, 8, -65, 8]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_cSNGUPf6EeWEP4pglzmtIA" id="(0.7555555555555555,0.5)"/>
+    </edges>
+    <edges xmi:id="_mARHFvf6EeWEP4pglzmtIA" type="Transition" element="_mARHEvf6EeWEP4pglzmtIA" source="_mAQgBff6EeWEP4pglzmtIA" target="_mAQgDvf6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_mARHF_f6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_mARHGPf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_mARHGff6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_mARHGvf6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_mARHG_f6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_mARHHPf6EeWEP4pglzmtIA" points="[7, 2, -94, -35]$[103, 30, 2, -7]"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_mARHHff6EeWEP4pglzmtIA" id="(0.32,0.1509433962264151)"/>
+    </edges>
+    <edges xmi:id="_mcvnsPf6EeWEP4pglzmtIA" type="Transition" element="_mcvAovf6EeWEP4pglzmtIA" source="_mctyhff6EeWEP4pglzmtIA" target="_mctyjvf6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_mcvnsff6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_mcvnsvf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_mcvns_f6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_mcvntPf6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_mcvntff6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_mcvntvf6EeWEP4pglzmtIA" points="[7, 2, -94, -35]$[103, 30, 2, -7]"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_mcvnt_f6EeWEP4pglzmtIA" id="(0.32,0.1509433962264151)"/>
+    </edges>
+    <edges xmi:id="_rPiBQPf6EeWEP4pglzmtIA" type="Transition" element="_rPgzIPf6EeWEP4pglzmtIA" source="_mAQgDvf6EeWEP4pglzmtIA" target="_mctyjvf6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_rPioUff6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_rPioUvf6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_rPioU_f6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_rPiBQff6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_rPioUPf6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_rPiBQvf6EeWEP4pglzmtIA" points="[18, -1, -72, 3]$[94, 20, 4, 24]"/>
+    </edges>
+    <edges xmi:id="_wMPy4Pf6EeWEP4pglzmtIA" type="Transition" element="_wMOkwPf6EeWEP4pglzmtIA" source="_mctyjvf6EeWEP4pglzmtIA" target="_Z6scb_f6EeWEP4pglzmtIA">
+      <children xsi:type="notation:DecorationNode" xmi:id="_wMPy5Pf6EeWEP4pglzmtIA" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_wMPy5ff6EeWEP4pglzmtIA"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_wMPy5vf6EeWEP4pglzmtIA" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_wMPy4ff6EeWEP4pglzmtIA" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_wMPy4_f6EeWEP4pglzmtIA" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_wMPy4vf6EeWEP4pglzmtIA" points="[0, 0, -28, 59]$[33, -57, 5, 2]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_wMgRkPf6EeWEP4pglzmtIA" id="(0.8,0.5094339622641509)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_wMg4oPf6EeWEP4pglzmtIA" id="(0.9862068965517241,0.7157894736842105)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>

+ 321 - 0
test-plugins/org.yakindu.sct.test.models/testmodels/validation/SyncLocation_Issue58.sct

@@ -0,0 +1,321 @@
+<?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="_cCYI4IcVEeK5XMQGITKBlg" name="default">
+    <regions xmi:id="_cCYv8ocVEeK5XMQGITKBlg" name="main region">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_cDTV8YcVEeK5XMQGITKBlg">
+        <outgoingTransitions xmi:id="_cDVyM4cVEeK5XMQGITKBlg" target="_pTDskKWlEeKBrrCTA2_OoQ"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_o7MjAKWhEeKBrrCTA2_OoQ" name="A">
+        <regions xmi:id="_rHmwMKWhEeKBrrCTA2_OoQ">
+          <vertices xsi:type="sgraph:State" xmi:id="_rwcR0KWhEeKBrrCTA2_OoQ" specification="" name="AA" incomingTransitions="_aR_5cKgcEeKmQrSVAGlxRw">
+            <outgoingTransitions xmi:id="_D06iAKWjEeKBrrCTA2_OoQ" target="_CUGPgKWjEeKBrrCTA2_OoQ"/>
+          </vertices>
+        </regions>
+        <regions xmi:id="_qyRZYKWhEeKBrrCTA2_OoQ">
+          <vertices xsi:type="sgraph:State" xmi:id="_sQOlIKWhEeKBrrCTA2_OoQ" name="AB">
+            <regions xmi:id="_wwVTQKWhEeKBrrCTA2_OoQ">
+              <vertices xsi:type="sgraph:State" xmi:id="_yOAyMKWhEeKBrrCTA2_OoQ" name="ABA" incomingTransitions="_2kUEEKWhEeKBrrCTA2_OoQ">
+                <outgoingTransitions xmi:id="_El0agKWjEeKBrrCTA2_OoQ" target="_CUGPgKWjEeKBrrCTA2_OoQ"/>
+              </vertices>
+              <vertices xsi:type="sgraph:Synchronization" xmi:id="_CUGPgKWjEeKBrrCTA2_OoQ" incomingTransitions="_D06iAKWjEeKBrrCTA2_OoQ _El0agKWjEeKBrrCTA2_OoQ _FMkRcKWjEeKBrrCTA2_OoQ">
+                <outgoingTransitions xmi:id="_M2xkEKWjEeKBrrCTA2_OoQ" specification="" target="_I2WbkKWjEeKBrrCTA2_OoQ"/>
+              </vertices>
+            </regions>
+            <regions xmi:id="_wDLSUKWhEeKBrrCTA2_OoQ">
+              <vertices xsi:type="sgraph:State" xmi:id="_ymDewKWhEeKBrrCTA2_OoQ" name="ABB" incomingTransitions="_2EAzYKWhEeKBrrCTA2_OoQ">
+                <outgoingTransitions xmi:id="_FMkRcKWjEeKBrrCTA2_OoQ" target="_CUGPgKWjEeKBrrCTA2_OoQ"/>
+              </vertices>
+            </regions>
+          </vertices>
+        </regions>
+      </vertices>
+      <vertices xsi:type="sgraph:FinalState" xmi:id="_I2WbkKWjEeKBrrCTA2_OoQ" incomingTransitions="_M2xkEKWjEeKBrrCTA2_OoQ"/>
+      <vertices xsi:type="sgraph:State" xmi:id="_pTDskKWlEeKBrrCTA2_OoQ" name="B" incomingTransitions="_cDVyM4cVEeK5XMQGITKBlg">
+        <outgoingTransitions xmi:id="_0mhhsKWhEeKBrrCTA2_OoQ" specification="always" target="_zGFCoKWhEeKBrrCTA2_OoQ"/>
+      </vertices>
+      <vertices xsi:type="sgraph:Synchronization" xmi:id="_zGFCoKWhEeKBrrCTA2_OoQ" incomingTransitions="_0mhhsKWhEeKBrrCTA2_OoQ">
+        <outgoingTransitions xmi:id="_2EAzYKWhEeKBrrCTA2_OoQ" specification="" target="_ymDewKWhEeKBrrCTA2_OoQ"/>
+        <outgoingTransitions xmi:id="_2kUEEKWhEeKBrrCTA2_OoQ" specification="" target="_yOAyMKWhEeKBrrCTA2_OoQ"/>
+        <outgoingTransitions xmi:id="_aR_5cKgcEeKmQrSVAGlxRw" specification="" target="_rwcR0KWhEeKBrrCTA2_OoQ"/>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_cCYv8IcVEeK5XMQGITKBlg" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_cCYI4IcVEeK5XMQGITKBlg" measurementUnit="Pixel">
+    <children xmi:id="_cCbzQIcVEeK5XMQGITKBlg" type="Region" element="_cCYv8ocVEeK5XMQGITKBlg">
+      <children xsi:type="notation:DecorationNode" xmi:id="_cDSu4IcVEeK5XMQGITKBlg" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_cDSu4YcVEeK5XMQGITKBlg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_cDSu4ocVEeK5XMQGITKBlg"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_cDSu44cVEeK5XMQGITKBlg" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_cDT9AIcVEeK5XMQGITKBlg" type="Entry" element="_cDTV8YcVEeK5XMQGITKBlg">
+          <children xmi:id="_cDT9A4cVEeK5XMQGITKBlg" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_cDUkEIcVEeK5XMQGITKBlg" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_cDUkEYcVEeK5XMQGITKBlg"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_cDUkEocVEeK5XMQGITKBlg"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_cDT9BIcVEeK5XMQGITKBlg" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDT9BYcVEeK5XMQGITKBlg"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_cDT9AYcVEeK5XMQGITKBlg" fontName="Verdana" lineColor="4210752"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDUkE4cVEeK5XMQGITKBlg" x="269" y="12" width="15" height="15"/>
+        </children>
+        <children xmi:id="_o8EFsKWhEeKBrrCTA2_OoQ" type="State" element="_o7MjAKWhEeKBrrCTA2_OoQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_o8F64KWhEeKBrrCTA2_OoQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_o8F64aWhEeKBrrCTA2_OoQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_o8F64qWhEeKBrrCTA2_OoQ"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_o8F646WhEeKBrrCTA2_OoQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_o8Gh8KWhEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_o8Gh8aWhEeKBrrCTA2_OoQ"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_o8Gh8qWhEeKBrrCTA2_OoQ" type="StateFigureCompartment">
+            <children xmi:id="_rHsPwKWhEeKBrrCTA2_OoQ" type="Region" element="_rHmwMKWhEeKBrrCTA2_OoQ">
+              <children xsi:type="notation:DecorationNode" xmi:id="_rHsPw6WhEeKBrrCTA2_OoQ" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_rHsPxKWhEeKBrrCTA2_OoQ"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_rHs20KWhEeKBrrCTA2_OoQ"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_rHs20aWhEeKBrrCTA2_OoQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_rwgjQKWhEeKBrrCTA2_OoQ" type="State" element="_rwcR0KWhEeKBrrCTA2_OoQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_rwhxYKWhEeKBrrCTA2_OoQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_rwhxYaWhEeKBrrCTA2_OoQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_rwhxYqWhEeKBrrCTA2_OoQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_rwhxY6WhEeKBrrCTA2_OoQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_rwhxZKWhEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_rwhxZaWhEeKBrrCTA2_OoQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_rwiYcKWhEeKBrrCTA2_OoQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_rwgjQaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_rwgjQqWhEeKBrrCTA2_OoQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_rwiYcaWhEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_rwgjQ6WhEeKBrrCTA2_OoQ" x="43" y="38"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_rHs20qWhEeKBrrCTA2_OoQ"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_rHsPwaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_rHsPwqWhEeKBrrCTA2_OoQ"/>
+            </children>
+            <children xmi:id="_qyUcsKWhEeKBrrCTA2_OoQ" type="Region" element="_qyRZYKWhEeKBrrCTA2_OoQ">
+              <children xsi:type="notation:DecorationNode" xmi:id="_qyWR4KWhEeKBrrCTA2_OoQ" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_qyWR4aWhEeKBrrCTA2_OoQ"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_qyWR4qWhEeKBrrCTA2_OoQ"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_qyW48KWhEeKBrrCTA2_OoQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_sQRocKWhEeKBrrCTA2_OoQ" type="State" element="_sQOlIKWhEeKBrrCTA2_OoQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_sQS2kKWhEeKBrrCTA2_OoQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_sQS2kaWhEeKBrrCTA2_OoQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_sQS2kqWhEeKBrrCTA2_OoQ"/>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_sQTdoKWhEeKBrrCTA2_OoQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_sQTdoaWhEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_sQTdoqWhEeKBrrCTA2_OoQ"/>
+                    </children>
+                  </children>
+                  <children xsi:type="notation:Compartment" xmi:id="_sQUrwKWhEeKBrrCTA2_OoQ" type="StateFigureCompartment">
+                    <children xmi:id="_wwbZ4KWhEeKBrrCTA2_OoQ" type="Region" element="_wwVTQKWhEeKBrrCTA2_OoQ">
+                      <children xsi:type="notation:DecorationNode" xmi:id="_wwbZ46WhEeKBrrCTA2_OoQ" type="RegionName">
+                        <styles xsi:type="notation:ShapeStyle" xmi:id="_wwbZ5KWhEeKBrrCTA2_OoQ"/>
+                        <layoutConstraint xsi:type="notation:Location" xmi:id="_wwbZ5aWhEeKBrrCTA2_OoQ"/>
+                      </children>
+                      <children xsi:type="notation:Shape" xmi:id="_wwbZ5qWhEeKBrrCTA2_OoQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                        <children xmi:id="_yOD1gKWhEeKBrrCTA2_OoQ" type="State" element="_yOAyMKWhEeKBrrCTA2_OoQ">
+                          <children xsi:type="notation:DecorationNode" xmi:id="_yOEckKWhEeKBrrCTA2_OoQ" type="StateName">
+                            <styles xsi:type="notation:ShapeStyle" xmi:id="_yOEckaWhEeKBrrCTA2_OoQ"/>
+                            <layoutConstraint xsi:type="notation:Location" xmi:id="_yOFDoKWhEeKBrrCTA2_OoQ"/>
+                          </children>
+                          <children xsi:type="notation:Compartment" xmi:id="_yOFDoaWhEeKBrrCTA2_OoQ" type="StateTextCompartment">
+                            <children xsi:type="notation:Shape" xmi:id="_yOFqsKWhEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_yOFqsaWhEeKBrrCTA2_OoQ"/>
+                            </children>
+                          </children>
+                          <children xsi:type="notation:Compartment" xmi:id="_yOGRwKWhEeKBrrCTA2_OoQ" type="StateFigureCompartment"/>
+                          <styles xsi:type="notation:ShapeStyle" xmi:id="_yOD1gaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                          <styles xsi:type="notation:FontStyle" xmi:id="_yOD1gqWhEeKBrrCTA2_OoQ"/>
+                          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_yOG40KWhEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+                          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_yOD1g6WhEeKBrrCTA2_OoQ" x="52" y="21"/>
+                        </children>
+                        <children xsi:type="notation:Shape" xmi:id="_CUIEsKWjEeKBrrCTA2_OoQ" type="Synchronization" element="_CUGPgKWjEeKBrrCTA2_OoQ" fontName="Verdana" lineColor="4210752">
+                          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_CUIEsaWjEeKBrrCTA2_OoQ" x="20" y="114" width="43" height="8"/>
+                        </children>
+                        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wwbZ56WhEeKBrrCTA2_OoQ"/>
+                      </children>
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_wwbZ4aWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wwbZ4qWhEeKBrrCTA2_OoQ"/>
+                    </children>
+                    <children xmi:id="_wDL5YKWhEeKBrrCTA2_OoQ" type="Region" element="_wDLSUKWhEeKBrrCTA2_OoQ">
+                      <children xsi:type="notation:DecorationNode" xmi:id="_wDMgcKWhEeKBrrCTA2_OoQ" type="RegionName">
+                        <styles xsi:type="notation:ShapeStyle" xmi:id="_wDMgcaWhEeKBrrCTA2_OoQ"/>
+                        <layoutConstraint xsi:type="notation:Location" xmi:id="_wDMgcqWhEeKBrrCTA2_OoQ"/>
+                      </children>
+                      <children xsi:type="notation:Shape" xmi:id="_wDMgc6WhEeKBrrCTA2_OoQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                        <children xmi:id="_ymHwMKWhEeKBrrCTA2_OoQ" type="State" element="_ymDewKWhEeKBrrCTA2_OoQ">
+                          <children xsi:type="notation:DecorationNode" xmi:id="_ymI-UKWhEeKBrrCTA2_OoQ" type="StateName">
+                            <styles xsi:type="notation:ShapeStyle" xmi:id="_ymI-UaWhEeKBrrCTA2_OoQ"/>
+                            <layoutConstraint xsi:type="notation:Location" xmi:id="_ymJlYKWhEeKBrrCTA2_OoQ"/>
+                          </children>
+                          <children xsi:type="notation:Compartment" xmi:id="_ymJlYaWhEeKBrrCTA2_OoQ" type="StateTextCompartment">
+                            <children xsi:type="notation:Shape" xmi:id="_ymJlYqWhEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_ymJlY6WhEeKBrrCTA2_OoQ"/>
+                            </children>
+                          </children>
+                          <children xsi:type="notation:Compartment" xmi:id="_ymJlZKWhEeKBrrCTA2_OoQ" type="StateFigureCompartment"/>
+                          <styles xsi:type="notation:ShapeStyle" xmi:id="_ymHwMaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                          <styles xsi:type="notation:FontStyle" xmi:id="_ymHwMqWhEeKBrrCTA2_OoQ"/>
+                          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_ymKMcKWhEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+                          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_ymHwM6WhEeKBrrCTA2_OoQ" x="23" y="47"/>
+                        </children>
+                        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wDMgdKWhEeKBrrCTA2_OoQ"/>
+                      </children>
+                      <styles xsi:type="notation:ShapeStyle" xmi:id="_wDL5YaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_wDL5YqWhEeKBrrCTA2_OoQ"/>
+                    </children>
+                  </children>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_sQSPgKWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_sQSPgaWhEeKBrrCTA2_OoQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_sQVS0KWhEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_sQSPgqWhEeKBrrCTA2_OoQ" x="8" y="23" width="263" height="201"/>
+                </children>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_qyW48aWhEeKBrrCTA2_OoQ"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_qyUcsaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_qyUcsqWhEeKBrrCTA2_OoQ"/>
+            </children>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_o8EFsaWhEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_o8EFsqWhEeKBrrCTA2_OoQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_o8Gh86WhEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_o8EFs6WhEeKBrrCTA2_OoQ" x="29" y="172" width="423" height="301"/>
+        </children>
+        <children xsi:type="notation:Shape" xmi:id="_I2XCoKWjEeKBrrCTA2_OoQ" type="FinalState" element="_I2WbkKWjEeKBrrCTA2_OoQ" fontName="Verdana" lineColor="4210752">
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_I2XCoaWjEeKBrrCTA2_OoQ" x="266" y="553" width="15" height="15"/>
+        </children>
+        <children xmi:id="_pTH-AKWlEeKBrrCTA2_OoQ" type="State" element="_pTDskKWlEeKBrrCTA2_OoQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_pTIlEKWlEeKBrrCTA2_OoQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_pTIlEaWlEeKBrrCTA2_OoQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_pTIlEqWlEeKBrrCTA2_OoQ"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_pTIlE6WlEeKBrrCTA2_OoQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_pTJMIKWlEeKBrrCTA2_OoQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_pTJMIaWlEeKBrrCTA2_OoQ"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_pTJMIqWlEeKBrrCTA2_OoQ" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_pTH-AaWlEeKBrrCTA2_OoQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_pTH-AqWlEeKBrrCTA2_OoQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_pTJzMKWlEeKBrrCTA2_OoQ" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_pTH-A6WlEeKBrrCTA2_OoQ" x="256" y="67" width="40" height="53"/>
+        </children>
+        <children xsi:type="notation:Shape" xmi:id="_zGIF8KWhEeKBrrCTA2_OoQ" type="Synchronization" element="_zGFCoKWhEeKBrrCTA2_OoQ" fontName="Verdana" lineColor="4210752">
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_zGIF8aWhEeKBrrCTA2_OoQ" x="174" y="136" width="47" height="8"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDSu5IcVEeK5XMQGITKBlg"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_cCbzQYcVEeK5XMQGITKBlg" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDTV8IcVEeK5XMQGITKBlg" x="215" y="10" width="556" height="646"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_cDXnYIcVEeK5XMQGITKBlg" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_cDXnYocVEeK5XMQGITKBlg" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_cDXnY4cVEeK5XMQGITKBlg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_cDXnZIcVEeK5XMQGITKBlg"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_cDXnZYcVEeK5XMQGITKBlg" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDXnZocVEeK5XMQGITKBlg"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_cDYOcIcVEeK5XMQGITKBlg" x="10" y="10" width="200" height="400"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_cCYv8YcVEeK5XMQGITKBlg"/>
+    <edges xmi:id="_cDXAUIcVEeK5XMQGITKBlg" type="Transition" element="_cDVyM4cVEeK5XMQGITKBlg" source="_cDT9AIcVEeK5XMQGITKBlg" target="_pTH-AKWlEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_cDXAVIcVEeK5XMQGITKBlg" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_cDXAVYcVEeK5XMQGITKBlg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_cDXAVocVEeK5XMQGITKBlg" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_cDXAUYcVEeK5XMQGITKBlg" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_cDXAU4cVEeK5XMQGITKBlg" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_cDXAUocVEeK5XMQGITKBlg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_rEktgKWlEeKBrrCTA2_OoQ" id="(0.45,0.24528301886792453)"/>
+    </edges>
+    <edges xmi:id="_0mjW4KWhEeKBrrCTA2_OoQ" type="Transition" element="_0mhhsKWhEeKBrrCTA2_OoQ" source="_pTH-AKWlEeKBrrCTA2_OoQ" target="_zGIF8KWhEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_0mj98aWhEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_0mj98qWhEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_0mklAKWhEeKBrrCTA2_OoQ" x="-39" y="-14"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_0mjW4aWhEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_0mj98KWhEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_0mjW4qWhEeKBrrCTA2_OoQ" points="[48, 13, -131, -26]$[97, 39, -82, 0]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_qOn88KWlEeKBrrCTA2_OoQ" id="(0.775,0.6981132075471698)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_twF4kKWlEeKBrrCTA2_OoQ" id="(0.5333333333333333,0.0)"/>
+    </edges>
+    <edges xmi:id="_2EEdwKWhEeKBrrCTA2_OoQ" type="Transition" element="_2EAzYKWhEeKBrrCTA2_OoQ" source="_zGIF8KWhEeKBrrCTA2_OoQ" target="_ymHwMKWhEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_2EFr4aWhEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_2EFr4qWhEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_2EGS8KWhEeKBrrCTA2_OoQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_2EEdwaWhEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_2EFr4KWhEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_2EEdwqWhEeKBrrCTA2_OoQ" points="[-3, 4, 135, -152]$[-103, 148, 35, -8]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_O1LJUKc2EeKIfO2sJ02rIQ" id="(0.8424242424242424,0.5)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_L_pGoKc2EeKIfO2sJ02rIQ" id="(0.4418604651162791,0.24528301886792453)"/>
+    </edges>
+    <edges xmi:id="_2kWgUKWhEeKBrrCTA2_OoQ" type="Transition" element="_2kUEEKWhEeKBrrCTA2_OoQ" source="_zGIF8KWhEeKBrrCTA2_OoQ" target="_yOD1gKWhEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_2kXHYKWhEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_2kXHYaWhEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_2kXHYqWhEeKBrrCTA2_OoQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_2kWgUaWhEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_2kWgU6WhEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_2kWgUqWhEeKBrrCTA2_OoQ" points="[0, 1, -58, -236]$[49, 261, -9, 24]"/>
+    </edges>
+    <edges xmi:id="_D09lUKWjEeKBrrCTA2_OoQ" type="Transition" element="_D06iAKWjEeKBrrCTA2_OoQ" source="_rwgjQKWhEeKBrrCTA2_OoQ" target="_CUIEsKWjEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_D0-MYaWjEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_D0-MYqWjEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_D0-MY6WjEeKBrrCTA2_OoQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_D09lUaWjEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_D0-MYKWjEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_D09lUqWjEeKBrrCTA2_OoQ" points="[24, 34, -152, -200]$[170, 230, -6, -4]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_D0_agKWjEeKBrrCTA2_OoQ" id="(0.125,0.3018867924528302)"/>
+    </edges>
+    <edges xmi:id="_El3d0KWjEeKBrrCTA2_OoQ" type="Transition" element="_El0agKWjEeKBrrCTA2_OoQ" source="_yOD1gKWhEeKBrrCTA2_OoQ" target="_CUIEsKWjEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_El4E4aWjEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_El4E4qWjEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_El4r8KWjEeKBrrCTA2_OoQ" x="-24" y="-18"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_El3d0aWjEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_El4E4KWjEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_El3d0qWjEeKBrrCTA2_OoQ" points="[-2, 22, 13, -112]$[-15, 134, 0, 0]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_El89YKWjEeKBrrCTA2_OoQ" id="(0.23255813953488372,0.5471698113207547)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_El89YaWjEeKBrrCTA2_OoQ" id="(0.5066666666666667,0.0)"/>
+    </edges>
+    <edges xmi:id="_FMmtsKWjEeKBrrCTA2_OoQ" type="Transition" element="_FMkRcKWjEeKBrrCTA2_OoQ" source="_ymHwMKWhEeKBrrCTA2_OoQ" target="_CUIEsKWjEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_FMnUwaWjEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_FMnUwqWjEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_FMnUw6WjEeKBrrCTA2_OoQ" x="-44" y="-43"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_FMmtsaWjEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_FMnUwKWjEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_FMmtsqWjEeKBrrCTA2_OoQ" points="[-11, 12, 107, -111]$[-114, 119, 4, -4]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_FMpJ8KWjEeKBrrCTA2_OoQ" id="(0.4418604651162791,0.7547169811320755)"/>
+    </edges>
+    <edges xmi:id="_M20nYKWjEeKBrrCTA2_OoQ" type="Transition" element="_M2xkEKWjEeKBrrCTA2_OoQ" source="_CUIEsKWjEeKBrrCTA2_OoQ" target="_I2XCoKWjEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_M22ckKWjEeKBrrCTA2_OoQ" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_M22ckaWjEeKBrrCTA2_OoQ"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_M22ckqWjEeKBrrCTA2_OoQ" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_M20nYaWjEeKBrrCTA2_OoQ" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_M211gKWjEeKBrrCTA2_OoQ" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_M20nYqWjEeKBrrCTA2_OoQ" points="[1, 4, 2, -69]$[3, 67, 4, -6]"/>
+    </edges>
+    <edges xmi:id="_aSEK4KgcEeKmQrSVAGlxRw" type="Transition" element="_aR_5cKgcEeKmQrSVAGlxRw" source="_zGIF8KWhEeKBrrCTA2_OoQ" target="_rwgjQKWhEeKBrrCTA2_OoQ">
+      <children xsi:type="notation:DecorationNode" xmi:id="_aSFZAKgcEeKmQrSVAGlxRw" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_aSFZAagcEeKmQrSVAGlxRw"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_aSFZAqgcEeKmQrSVAGlxRw" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_aSEK4agcEeKmQrSVAGlxRw" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_aSEx8KgcEeKmQrSVAGlxRw" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_aSEK4qgcEeKmQrSVAGlxRw" points="[1, 2, -165, -201]$[176, 179, 10, -24]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_aSIcUKgcEeKmQrSVAGlxRw" id="(0.19393939393939394,0.625)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>