Andreas Mülder 14 лет назад
Родитель
Сommit
e8e214b841
28 измененных файлов с 733 добавлено и 318 удалено
  1. 10 2
      plugins/org.yakindu.sct.model.statechart/model/emf/statechart.ecore
  2. 1 1
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/NamedElement.java
  3. 1 1
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/Region.java
  4. 1 1
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/State.java
  5. 1 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/Vertex.java
  6. 1 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/StatechartFactoryImpl.java
  7. 11 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/StatechartPackageImpl.java
  8. 10 2
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/statechart.ecore
  9. 1 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartAdapterFactory.java
  10. 1 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartSwitch.java
  11. 599 0
      plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartValidator.java
  12. 0 1
      plugins/org.yakindu.sct.statechart.diagram/plugin.xml
  13. 0 119
      plugins/org.yakindu.sct.statechart.diagram/schema/org.yakindu.sct.statechart.diagram.validation.provider.exsd
  14. 2 1
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartDiagramActionbarContributor.java
  15. 29 20
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartDiagramEditor.java
  16. 3 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/EllipseFixedSizeShapeNodeEditPart.java
  17. 2 1
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/EntryEditPart.java
  18. 2 2
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/FinalStateEditPart.java
  19. 3 2
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/JunctionEditPart.java
  20. 0 1
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/PlugableExternalXtextLabelEditPart.java
  21. 20 1
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/StateEditPart.java
  22. 2 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/CompartmentEditPolicy.java
  23. 0 67
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/ExpressionDirectEditPolicy.java
  24. 5 0
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/RegionCompartmentXYLayoutEditPolicy.java
  25. 0 6
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/StatePrimaryDragEditPolicy.java
  26. 3 3
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/preferences/PreferenceInitializer.java
  27. 0 58
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartMarkerNavigationProvider.java
  28. 25 29
      plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/validation/ValidationAction.java

+ 10 - 2
plugins/org.yakindu.sct.model.statechart/model/emf/statechart.ecore

@@ -6,6 +6,9 @@
   <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"/>
   <eClassifiers xsi:type="ecore:EClass" name="Pseudostate" abstract="true" eSuperTypes="#//Vertex"/>
   <eClassifiers xsi:type="ecore:EClass" name="Vertex" abstract="true" eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="IncomingTransitionCount OutgoingTransitionCount"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="parentRegion" ordered="false"
         lowerBound="1" eType="#//Region" eOpposite="#//Region/vertices"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="incomingTransitions" ordered="false"
@@ -14,10 +17,12 @@
         upperBound="-1" eType="#//Transition" containment="true" eOpposite="#//Transition/source"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="ExactlyOneInitialState"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="vertices" ordered="false"
         upperBound="-1" eType="#//Vertex" containment="true" eOpposite="#//Vertex/parentRegion"/>
   </eClassifiers>
@@ -31,6 +36,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//State"/>
   <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Vertex #//ExpressionElement #//ReactiveElement #//ScopedElement">
     <eAnnotations source="InjectMembers"/>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="NameIsNotEmpty"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="subRegions" ordered="false"
         upperBound="-1" eType="#//Region" containment="true"/>
   </eClassifiers>

+ 1 - 1
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/NamedElement.java

@@ -47,7 +47,7 @@ public interface NamedElement extends EObject {
 	 * @return the value of the '<em>Name</em>' attribute.
 	 * @see #setName(String)
 	 * @see org.yakindu.model.sct.statechart.StatechartPackage#getNamedElement_Name()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getName();

+ 1 - 1
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/Region.java

@@ -25,7 +25,7 @@ import org.eclipse.emf.common.util.EList;
  * </p>
  *
  * @see org.yakindu.model.sct.statechart.StatechartPackage#getRegion()
- * @model
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='ExactlyOneInitialState'"
  * @generated
  */
 public interface Region extends NamedElement {

+ 1 - 1
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/State.java

@@ -25,7 +25,7 @@ import org.eclipse.emf.common.util.EList;
  * </p>
  *
  * @see org.yakindu.model.sct.statechart.StatechartPackage#getState()
- * @model
+ * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='NameIsNotEmpty'"
  * @generated
  */
 public interface State extends Vertex, ExpressionElement, ReactiveElement, ScopedElement {

+ 1 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/Vertex.java

@@ -28,6 +28,7 @@ import org.eclipse.emf.common.util.EList;
  *
  * @see org.yakindu.model.sct.statechart.StatechartPackage#getVertex()
  * @model abstract="true"
+ *        annotation="http://www.eclipse.org/emf/2002/Ecore constraints='IncomingTransitionCount OutgoingTransitionCount'"
  * @generated
  */
 public interface Vertex extends NamedElement {

+ 1 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/StatechartFactoryImpl.java

@@ -16,6 +16,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.yakindu.model.sct.statechart.*;
 import org.yakindu.model.sct.statechart.Choice;
 import org.yakindu.model.sct.statechart.Entry;
 import org.yakindu.model.sct.statechart.EntryKind;

+ 11 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/StatechartPackageImpl.java

@@ -21,11 +21,13 @@ import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
 import org.yakindu.model.sct.statechart.StatechartFactory;
 import org.yakindu.model.sct.statechart.StatechartPackage;
+import org.yakindu.model.sct.statechart.util.StatechartValidator;
 
 /**
  * <!-- begin-user-doc -->
@@ -259,6 +261,15 @@ public class StatechartPackageImpl extends EPackageImpl implements StatechartPac
 		// Fix loaded packages
 		theStatechartPackage.fixPackageContents();
 
+		// Register package validator
+		EValidator.Registry.INSTANCE.put
+			(theStatechartPackage, 
+			 new EValidator.Descriptor() {
+				 public EValidator getEValidator() {
+					 return StatechartValidator.INSTANCE;
+				 }
+			 });
+
 		// Mark meta-data to indicate it can't be changed
 		theStatechartPackage.freeze();
 

+ 10 - 2
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/impl/statechart.ecore

@@ -5,6 +5,9 @@
     nsURI="http://www.yakindu.org/sct/2.0.0" nsPrefix="statechart">
   <eClassifiers xsi:type="ecore:EClass" name="Pseudostate" abstract="true" eSuperTypes="#//Vertex"/>
   <eClassifiers xsi:type="ecore:EClass" name="Vertex" abstract="true" eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="IncomingTransitionCount OutgoingTransitionCount"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="parentRegion" ordered="false"
         lowerBound="1" eType="#//Region" eOpposite="#//Region/vertices"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="incomingTransitions" ordered="false"
@@ -13,10 +16,12 @@
         upperBound="-1" eType="#//Transition" containment="true" eOpposite="#//Transition/source"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="ExactlyOneInitialState"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="vertices" ordered="false"
         upperBound="-1" eType="#//Vertex" containment="true" eOpposite="#//Vertex/parentRegion"/>
   </eClassifiers>
@@ -30,6 +35,9 @@
   <eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//State"/>
   <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Vertex #//ExpressionElement #//ReactiveElement #//ScopedElement">
     <eAnnotations source="InjectMembers"/>
+    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+      <details key="constraints" value="NameIsNotEmpty"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="subRegions" ordered="false"
         upperBound="-1" eType="#//Region" containment="true"/>
   </eClassifiers>

+ 1 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartAdapterFactory.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
+import org.yakindu.model.sct.statechart.*;
 import org.yakindu.model.sct.statechart.Choice;
 import org.yakindu.model.sct.statechart.Declaration;
 import org.yakindu.model.sct.statechart.Effect;

+ 1 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartSwitch.java

@@ -13,6 +13,7 @@ package org.yakindu.model.sct.statechart.util;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
+import org.yakindu.model.sct.statechart.*;
 import org.yakindu.model.sct.statechart.Choice;
 import org.yakindu.model.sct.statechart.Declaration;
 import org.yakindu.model.sct.statechart.Effect;

+ 599 - 0
plugins/org.yakindu.sct.model.statechart/src/org/yakindu/model/sct/statechart/util/StatechartValidator.java

@@ -0,0 +1,599 @@
+/**
+ * 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.model.sct.statechart.util;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.EObjectValidator;
+import org.yakindu.model.sct.statechart.*;
+import org.yakindu.model.sct.statechart.Choice;
+import org.yakindu.model.sct.statechart.Declaration;
+import org.yakindu.model.sct.statechart.Effect;
+import org.yakindu.model.sct.statechart.Entry;
+import org.yakindu.model.sct.statechart.EntryKind;
+import org.yakindu.model.sct.statechart.Event;
+import org.yakindu.model.sct.statechart.Exit;
+import org.yakindu.model.sct.statechart.ExpressionElement;
+import org.yakindu.model.sct.statechart.FinalState;
+import org.yakindu.model.sct.statechart.Junction;
+import org.yakindu.model.sct.statechart.NamedElement;
+import org.yakindu.model.sct.statechart.Pseudostate;
+import org.yakindu.model.sct.statechart.Reaction;
+import org.yakindu.model.sct.statechart.ReactiveElement;
+import org.yakindu.model.sct.statechart.Region;
+import org.yakindu.model.sct.statechart.Scope;
+import org.yakindu.model.sct.statechart.ScopedElement;
+import org.yakindu.model.sct.statechart.State;
+import org.yakindu.model.sct.statechart.Statechart;
+import org.yakindu.model.sct.statechart.StatechartPackage;
+import org.yakindu.model.sct.statechart.Transition;
+import org.yakindu.model.sct.statechart.Trigger;
+import org.yakindu.model.sct.statechart.Variable;
+import org.yakindu.model.sct.statechart.Vertex;
+
+/**
+ * <!-- begin-user-doc --> The <b>Validator</b> for the model. <!-- end-user-doc
+ * -->
+ * 
+ * @see org.yakindu.model.sct.statechart.StatechartPackage
+ * @generated
+ */
+public class StatechartValidator extends EObjectValidator {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2011 committers of YAKINDU and others.\r\nAll rights reserved. This program and the accompanying materials\r\nare made available under the terms of the Eclipse Public License v1.0\r\nwhich accompanies this distribution, and is available at\r\nhttp://www.eclipse.org/legal/epl-v10.html\r\nContributors:\r\ncommitters of YAKINDU - initial API and implementation\r\n";
+
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final StatechartValidator INSTANCE = new StatechartValidator();
+
+	/**
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+	 * @generated
+	 */
+	public static final String DIAGNOSTIC_SOURCE = "org.yakindu.model.sct.statechart";
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public StatechartValidator() {
+		super();
+	}
+
+	/**
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EPackage getEPackage() {
+	  return StatechartPackage.eINSTANCE;
+	}
+
+	/**
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean validate(int classifierID, Object value,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		switch (classifierID) {
+			case StatechartPackage.PSEUDOSTATE:
+				return validatePseudostate((Pseudostate)value, diagnostics, context);
+			case StatechartPackage.VERTEX:
+				return validateVertex((Vertex)value, diagnostics, context);
+			case StatechartPackage.NAMED_ELEMENT:
+				return validateNamedElement((NamedElement)value, diagnostics, context);
+			case StatechartPackage.REGION:
+				return validateRegion((Region)value, diagnostics, context);
+			case StatechartPackage.TRANSITION:
+				return validateTransition((Transition)value, diagnostics, context);
+			case StatechartPackage.FINAL_STATE:
+				return validateFinalState((FinalState)value, diagnostics, context);
+			case StatechartPackage.STATE:
+				return validateState((State)value, diagnostics, context);
+			case StatechartPackage.VARIABLE:
+				return validateVariable((Variable)value, diagnostics, context);
+			case StatechartPackage.JUNCTION:
+				return validateJunction((Junction)value, diagnostics, context);
+			case StatechartPackage.EVENT:
+				return validateEvent((Event)value, diagnostics, context);
+			case StatechartPackage.CHOICE:
+				return validateChoice((Choice)value, diagnostics, context);
+			case StatechartPackage.STATECHART:
+				return validateStatechart((Statechart)value, diagnostics, context);
+			case StatechartPackage.ENTRY:
+				return validateEntry((Entry)value, diagnostics, context);
+			case StatechartPackage.TRIGGER:
+				return validateTrigger((Trigger)value, diagnostics, context);
+			case StatechartPackage.EFFECT:
+				return validateEffect((Effect)value, diagnostics, context);
+			case StatechartPackage.EXPRESSION_ELEMENT:
+				return validateExpressionElement((ExpressionElement)value, diagnostics, context);
+			case StatechartPackage.DECLARATION:
+				return validateDeclaration((Declaration)value, diagnostics, context);
+			case StatechartPackage.REACTION:
+				return validateReaction((Reaction)value, diagnostics, context);
+			case StatechartPackage.REACTIVE_ELEMENT:
+				return validateReactiveElement((ReactiveElement)value, diagnostics, context);
+			case StatechartPackage.EXIT:
+				return validateExit((Exit)value, diagnostics, context);
+			case StatechartPackage.SCOPE:
+				return validateScope((Scope)value, diagnostics, context);
+			case StatechartPackage.SCOPED_ELEMENT:
+				return validateScopedElement((ScopedElement)value, diagnostics, context);
+			case StatechartPackage.ENTRY_KIND:
+				return validateEntryKind((EntryKind)value, diagnostics, context);
+			default:
+				return true;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePseudostate(Pseudostate pseudostate,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(pseudostate, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(pseudostate, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(pseudostate, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateVertex(Vertex vertex, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(vertex, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(vertex, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(vertex, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the IncomingTransitionCount constraint of '<em>Vertex</em>'.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean validateVertex_IncomingTransitionCount(Vertex vertex,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (vertex.getIncomingTransitions().size() == 0
+				&& !(vertex instanceof Entry)) {
+			if (diagnostics != null) {
+				diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
+						DIAGNOSTIC_SOURCE, 0,
+						"A state must have at least one outgoing transition!",
+						new Object[] { vertex }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Validates the OutgoingTransitionCount constraint of '<em>Vertex</em>'.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean validateVertex_OutgoingTransitionCount(Vertex vertex,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+
+		if (vertex.getOutgoingTransitions().size() == 0
+				&& !(vertex instanceof FinalState)) {
+			if (diagnostics != null) {
+				diagnostics
+						.add(new BasicDiagnostic(
+								Diagnostic.WARNING,
+								DIAGNOSTIC_SOURCE,
+								0,
+								"A state should have at least one outgoing transition.",
+								new Object[] { vertex }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateNamedElement(NamedElement namedElement,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(namedElement, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateRegion(Region region, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(region, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(region, diagnostics, context);
+		if (result || diagnostics != null) result &= validateRegion_ExactlyOneInitialState(region, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the ExactlyOneInitialState constraint of '<em>Region</em>'.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean validateRegion_ExactlyOneInitialState(Region region,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+
+		int entryCount = 0;
+		EList<Vertex> vertices = region.getVertices();
+		for (Vertex vertex : vertices) {
+			if (vertex instanceof Entry) {
+				entryCount++;
+			}
+		}
+		if (entryCount != 1) {
+			if (diagnostics != null) {
+				diagnostics.add(new BasicDiagnostic(Diagnostic.WARNING,
+						DIAGNOSTIC_SOURCE, 0,
+						"A region must contain exactly one initial state!",
+						new Object[] { region }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateTransition(Transition transition,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(transition, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateFinalState(FinalState finalState,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(finalState, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(finalState, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameIsNotEmpty(finalState, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateState(State state, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(state, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(state, diagnostics, context);
+		if (result || diagnostics != null) result &= validateState_NameIsNotEmpty(state, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the NameIsNotEmpty constraint of '<em>State</em>'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public boolean validateState_NameIsNotEmpty(State state,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		// TODO implement the constraint
+		// -> specify the condition that violates the constraint
+		// -> verify the diagnostic details, including severity, code, and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(createDiagnostic
+						(Diagnostic.ERROR,
+						 DIAGNOSTIC_SOURCE,
+						 0,
+						 "_UI_GenericConstraint_diagnostic",
+						 new Object[] { "NameIsNotEmpty", getObjectLabel(state, context) },
+						 new Object[] { state },
+						 context));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateVariable(Variable variable,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(variable, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateJunction(Junction junction,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(junction, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(junction, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(junction, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateEvent(Event event, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(event, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateChoice(Choice choice, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(choice, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(choice, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(choice, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateStatechart(Statechart statechart,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(statechart, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateEntry(Entry entry, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(entry, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(entry, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(entry, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateTrigger(Trigger trigger,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(trigger, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateEffect(Effect effect, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(effect, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateExpressionElement(
+			ExpressionElement expressionElement, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(expressionElement, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateDeclaration(Declaration declaration,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(declaration, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateReaction(Reaction reaction,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(reaction, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateReactiveElement(ReactiveElement reactiveElement,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(reactiveElement, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateExit(Exit exit, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		if (!validate_NoCircularContainment(exit, diagnostics, context)) return false;
+		boolean result = validate_EveryMultiplicityConforms(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryKeyUnique(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_IncomingTransitionCount(exit, diagnostics, context);
+		if (result || diagnostics != null) result &= validateVertex_OutgoingTransitionCount(exit, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateScope(Scope scope, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(scope, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateScopedElement(ScopedElement scopedElement,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(scopedElement, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateEntryKind(EntryKind entryKind,
+			DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return true;
+	}
+
+	/**
+	 * Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		// TODO
+		// Specialize this to return a resource locator for messages specific to this validator.
+		// Ensure that you remove @generated or mark it @generated NOT
+		return super.getResourceLocator();
+	}
+
+} // StatechartValidator

+ 0 - 1
plugins/org.yakindu.sct.statechart.diagram/plugin.xml

@@ -3,7 +3,6 @@
 <plugin>
 	<!-- Extension Points -->
 	
-   <extension-point id="org.yakindu.sct.statechart.diagram.validation.provider" name="org.yakindu.sct.statechart.diagram.validation.provider" schema="schema/org.yakindu.sct.statechart.diagram.validation.provider.exsd"/>
    <extension-point id="org.yakindu.sct.statechart.diagram.expressions" name="org.yakindu.sct.statechart.diagram.expressions" schema="schema/org.yakindu.sct.statechart.diagram.expressions.exsd"/>
   
     <!-- Editor -->

+ 0 - 119
plugins/org.yakindu.sct.statechart.diagram/schema/org.yakindu.sct.statechart.diagram.validation.provider.exsd

@@ -1,119 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.yakindu.sct.statechart.diagram" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.yakindu.sct.statechart.diagram" id="org.yakindu.sct.statechart.diagram.validation.provider" name="org.yakindu.sct.statechart.diagram.validation.provider"/>
-      </appinfo>
-      <documentation>
-         Extension point for Custom Validation Providers. A Validation Provider checks a semantic model element for validation errors.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <sequence>
-            <element ref="ValidationProvider"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute translatable="true"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="ValidationProvider">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.yakindu.sct.statechart.diagram.validation.IValidationProvider"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="examples"/>
-      </appinfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="apiinfo"/>
-      </appinfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="implementation"/>
-      </appinfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="copyright"/>
-      </appinfo>
-      <documentation>
-         /**
- * Copyright (c) 2010 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
- * 
- */
-      </documentation>
-   </annotation>
-
-</schema>

+ 2 - 1
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartDiagramActionbarContributor.java

@@ -10,6 +10,7 @@
  */
 package org.yakindu.sct.statechart.diagram.editor;
 
+import org.eclipse.gmf.runtime.common.ui.action.global.GlobalActionId;
 import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramActionBarContributor;
 import org.eclipse.ui.IActionBars;
 /**
@@ -25,7 +26,7 @@ public class StatechartDiagramActionbarContributor extends
 	public void init(IActionBars bars) {
 		super.init(bars);
 		//workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=346648
-		bars.clearGlobalActionHandlers();
+		bars.setGlobalActionHandler(GlobalActionId.SAVE, null);
 	}
 	
 	@Override

+ 29 - 20
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editor/StatechartDiagramEditor.java

@@ -11,11 +11,15 @@
 package org.yakindu.sct.statechart.diagram.editor;
 
 import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.transaction.ResourceSetChangeEvent;
+import org.eclipse.emf.transaction.ResourceSetListenerImpl;
 import org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService;
 import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
 import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.ide.IGotoMarker;
 import org.yakindu.sct.statechart.diagram.DiagramActivator;
 import org.yakindu.sct.statechart.diagram.validation.ValidationAction;
@@ -23,42 +27,47 @@ import org.yakindu.sct.statechart.diagram.validation.ValidationAction;
 /**
  * 
  * @author muelder
- *
+ * 
  */
-public class StatechartDiagramEditor extends DiagramDocumentEditor implements IGotoMarker {
+public class StatechartDiagramEditor extends DiagramDocumentEditor implements
+		IGotoMarker {
 
 	public static final String ID = "org.yakindu.sct.statechart.diagram.StatechartDiagramEditor";
 
 	public StatechartDiagramEditor() {
 		super(true);
 	}
-	
+
 	@Override
 	public String getContributorId() {
-		//This is for property sheet page registration
 		return ID;
 	}
-	
-
 
 	@Override
-	public void doSave(IProgressMonitor progressMonitor) {
-		Display.getDefault().asyncExec(new Runnable() {
-			
-			public void run() {
-				if(getDiagram() != null){
-				ValidationAction.validate(getDiagramEditPart(), getDiagram());
-				}
-			}
-		});
-		super.doSave(progressMonitor);
+	public void init(IEditorSite site, IEditorInput input)
+			throws PartInitException {
+		super.init(site, input);
+
+		getEditingDomain().addResourceSetListener(
+				new ResourceSetListenerImpl() {
+					@Override
+					public void resourceSetChanged(ResourceSetChangeEvent event) {
+						Display.getDefault().asyncExec(new Runnable() {
+							public void run() {
+								if (getDiagram() != null) {
+									ValidationAction.validate(
+											getDiagramEditPart(), getDiagram());
+								}
+							}
+						});
+
+					}
+				});
 	}
-	
-	
+
 	public void gotoMarker(IMarker marker) {
 		MarkerNavigationService.getInstance().gotoMarker(this, marker);
 	}
-	
 
 	@Override
 	protected PreferencesHint getPreferencesHint() {

+ 3 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/EllipseFixedSizeShapeNodeEditPart.java

@@ -1,5 +1,6 @@
 package org.yakindu.sct.statechart.diagram.editparts;
 
+import org.eclipse.draw2d.Ellipse;
 import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
 import org.eclipse.gmf.runtime.notation.View;
 import org.yakindu.sct.statechart.diagram.editor.figures.EllipseAnchorDefaultSizeNodeFigure;
@@ -24,5 +25,7 @@ public abstract class EllipseFixedSizeShapeNodeEditPart extends
 		figure.add(getPrimaryShape());
 		return figure;
 	}
+	
+	public abstract Ellipse getPrimaryShape();
 
 }

+ 2 - 1
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/EntryEditPart.java

@@ -10,6 +10,7 @@
  */
 package org.yakindu.sct.statechart.diagram.editparts;
 
+import org.eclipse.draw2d.Ellipse;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.emf.common.notify.Notification;
@@ -56,7 +57,7 @@ public class EntryEditPart extends EllipseFixedSizeShapeNodeEditPart {
 	}
 
 	@Override
-	public IFigure getPrimaryShape() {
+	public Ellipse getPrimaryShape() {
 		switch (resolveSemanticElement().getKind()) {
 		case DEEP_HISTORY:
 			return new DeepHistoryFigure();

+ 2 - 2
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/FinalStateEditPart.java

@@ -10,7 +10,7 @@
  */
 package org.yakindu.sct.statechart.diagram.editparts;
 
-import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Ellipse;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
 import org.eclipse.gmf.runtime.diagram.ui.handles.ConnectionHandle.HandleDirection;
@@ -47,7 +47,7 @@ public class FinalStateEditPart extends EllipseFixedSizeShapeNodeEditPart {
 	}
 
 	@Override
-	public IFigure getPrimaryShape() {
+	public Ellipse getPrimaryShape() {
 		return new FinalStateFigure(getMapMode());
 	}
 

+ 3 - 2
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/JunctionEditPart.java

@@ -10,6 +10,7 @@
  */
 package org.yakindu.sct.statechart.diagram.editparts;
 
+import org.eclipse.draw2d.Ellipse;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
@@ -24,7 +25,7 @@ import org.yakindu.sct.statechart.diagram.policies.RelationshipSemanticEditPolic
  *         href="mailto:andreas.muelder@itemis.de">andreas.muelder@itemis.de</a>
  * 
  */
-public class JunctionEditPart extends FixedSizeShapeNodeEditPart {
+public class JunctionEditPart extends EllipseFixedSizeShapeNodeEditPart {
 
 	private static final Dimension DIMENSION = new Dimension(10, 10);
 	
@@ -45,7 +46,7 @@ public class JunctionEditPart extends FixedSizeShapeNodeEditPart {
 	}
 
 	@Override
-	public IFigure getPrimaryShape() {
+	public Ellipse getPrimaryShape() {
 		return new JunctionFigure();
 	}
 

+ 0 - 1
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/PlugableExternalXtextLabelEditPart.java

@@ -13,7 +13,6 @@ import com.google.inject.Injector;
 
 import de.itemis.xtext.utils.gmf.directedit.ExternalXtextLabelEditPart;
 import de.itemis.xtext.utils.gmf.directedit.XtextDirectEditManager;
-import de.itemis.xtext.utils.gmf.directedit.XtextLabelEditPart;
 
 /**
  * 

+ 20 - 1
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/editparts/StateEditPart.java

@@ -20,6 +20,7 @@ import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.commands.UnexecutableCommand;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
@@ -41,16 +42,33 @@ import org.yakindu.sct.statechart.diagram.editor.figures.utils.MapModeUtils;
 import org.yakindu.sct.statechart.diagram.policies.RelationshipSemanticEditPolicy;
 
 /**
- * @author muelder
+ * The EditPart for the State.
+ * 
+ * 
+ * @author andreas muelder
  * 
  */
 public class StateEditPart extends ShapeNodeEditPart implements
 		IPrimaryEditPart {
+	
+	private EditPart figureCompartmentEditPart;
 
 	public StateEditPart(View view) {
 		super(view);
 	}
 
+	/**
+	 * Delegates all {@link CreateViewAndElementRequest}s to the figure
+	 * compartment.
+	 */
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		if (request instanceof CreateViewAndElementRequest) {
+			return figureCompartmentEditPart;
+		}
+		return super.getTargetEditPart(request);
+	}
+
 	@Override
 	protected NodeFigure createNodeFigure() {
 		final NodeFigure figure = new DefaultSizeNodeFigure(
@@ -171,6 +189,7 @@ public class StateEditPart extends ShapeNodeEditPart implements
 	@Override
 	protected void addChildVisual(EditPart childEditPart, int index) {
 		if (childEditPart instanceof StateFigureCompartmentEditPart) {
+			figureCompartmentEditPart = childEditPart;
 			IFigure pane = getPrimaryShape().getFigureCompartmentPane();
 			IFigure compartmentFigure = ((StateFigureCompartmentEditPart) childEditPart)
 					.getFigure();

+ 2 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/CompartmentEditPolicy.java

@@ -17,6 +17,7 @@ import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
 import org.eclipse.gmf.runtime.notation.View;
 import org.yakindu.sct.statechart.diagram.commands.CompartmentRepositionEObjectCommand;
 
+//TODO: Move to commons
 public class CompartmentEditPolicy extends
 		org.eclipse.gef.editpolicies.FlowLayoutEditPolicy {
 
@@ -38,6 +39,7 @@ public class CompartmentEditPolicy extends
 		return policy;
 	}
 
+	@SuppressWarnings("rawtypes")
 	protected Command createMoveChildCommand(EditPart child, EditPart after) {
 
 		int newIndex;

+ 0 - 67
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/ExpressionDirectEditPolicy.java

@@ -1,36 +1,16 @@
 package org.yakindu.sct.statechart.diagram.policies;
 
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.commands.CompoundCommand;
 import org.eclipse.gef.editpolicies.DirectEditPolicy;
 import org.eclipse.gef.requests.DirectEditRequest;
 import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
-import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
 import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
 import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
-import org.eclipse.xtext.EcoreUtil2;
-import org.eclipse.xtext.validation.Issue;
-import org.yakindu.model.sct.statechart.Event;
-import org.yakindu.model.sct.statechart.Statechart;
 import org.yakindu.model.sct.statechart.StatechartPackage;
-import org.yakindu.model.sct.statechart.Variable;
-import org.yakindu.sct.statechart.diagram.DiagramActivator;
-import org.yakindu.sct.statechart.diagram.validation.GMFMarkerUtil;
 import org.yakindu.sct.statechart.diagram.validation.IMarkerType;
 
 import de.itemis.xtext.utils.gmf.directedit.IXtextAwareEditPart;
-import de.itemis.xtext.utils.jface.viewers.XtextCellEditor;
 
 /**
  * 
@@ -46,57 +26,10 @@ public class ExpressionDirectEditPolicy extends DirectEditPolicy implements
 				.resolveSemanticElement(),
 				StatechartPackage.Literals.EXPRESSION_ELEMENT__EXPRESSION,
 				request.getCellEditor().getValue());
-	//	setRequest.setEditingDomain(getHost().getEditingDomain());
 		SetValueCommand setCommand = new SetValueCommand(setRequest);
 		return new ICommandProxy(setCommand);
 	}
 
-//	private void handleIssues(List<Issue> issues) {
-//		deleteOldMarkers();
-//		createNewMarkers(issues);
-//	}
-
-//	private void createNewMarkers(List<Issue> diagnostics) {
-//		IFile target = GMFMarkerUtil.getTargetFile(getHost().getNotationView());
-//		for (Issue issue : diagnostics) {
-//			GMFMarkerUtil.createMarker(target, new Status(getSeverity(issue),
-//					DiagramActivator.PLUGIN_ID, issue.getMessage()),
-//					getHost().getNotationView().getDiagram(),
-//					XTEXT_MARKER_TYPE, getHost().resolveSemanticElement());
-//		}
-//
-//	}
-//	
-//	private static int getSeverity(Issue issue) {
-//		switch (issue.getSeverity()) {
-//			case ERROR : 
-//				return IStatus.ERROR;
-//			case WARNING : 
-//				return IStatus.WARNING;
-//			case INFO : 
-//				return IStatus.INFO;
-//		}
-//		throw new IllegalArgumentException();
-//	}
-//
-//	private void deleteOldMarkers() {
-//		final IFile target = GMFMarkerUtil.getTargetFile(getHost()
-//				.getNotationView());
-//		try {
-//			IMarker[] markers = target.findMarkers(XTEXT_MARKER_TYPE, true,
-//					IResource.DEPTH_ZERO);
-//			for (IMarker iMarker : markers) {
-//				if (iMarker.getAttribute(IMarker.LOCATION).equals(
-//						EMFCoreUtil.getQualifiedName(getHost()
-//								.resolveSemanticElement(), true))) {
-//					iMarker.delete();
-//				}
-//			}
-//		} catch (CoreException e) {
-//			e.printStackTrace();
-//		}
-//	}
-
 	@Override
 	public IGraphicalEditPart getHost() {
 		return (IGraphicalEditPart) super.getHost();

+ 5 - 0
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/RegionCompartmentXYLayoutEditPolicy.java

@@ -2,7 +2,10 @@ package org.yakindu.sct.statechart.diagram.policies;
 
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalEditPart;
 import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gef.requests.CreateRequest;
 import org.eclipse.gmf.runtime.common.core.command.ICommand;
 import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
 import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
@@ -14,6 +17,7 @@ import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
 import org.eclipse.gmf.runtime.notation.NotationPackage;
 import org.eclipse.gmf.runtime.notation.View;
 import org.yakindu.sct.statechart.diagram.editparts.RegionCompartmentEditPart;
+import org.yakindu.sct.statechart.diagram.editparts.RegionEditPart;
 import org.yakindu.sct.statechart.diagram.editparts.StateEditPart;
 
 /**
@@ -53,6 +57,7 @@ public class RegionCompartmentXYLayoutEditPolicy extends XYLayoutEditPolicy {
 		}
 	}
 
+	
 	@Override
 	public IGraphicalEditPart getHost() {
 		return (IGraphicalEditPart) super.getHost();

+ 0 - 6
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/policies/StatePrimaryDragEditPolicy.java

@@ -19,12 +19,6 @@ public class StatePrimaryDragEditPolicy extends ResizableEditPolicyEx {
 		req.setResizeDirection(request.getResizeDirection());
 		return getHost().getParent().getCommand(req);
 		
-//		List<Compartment> notationCompartmentChildren = getHost().getNotationCompartmentChildren();
-//		for (Compartment compartment : notationCompartmentChildren) {
-//			Double ratio = (Double) ViewUtil.getStructuralFeatureValue(
-//					compartment,
-//					NotationPackage.eINSTANCE.getRatio_Value());
-//		}
 	}
 	
 	@Override

+ 3 - 3
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/preferences/PreferenceInitializer.java

@@ -21,21 +21,21 @@ import org.yakindu.sct.statechart.diagram.DiagramActivator;
 /**
  * 
  * @author muelder
- *
+ * 
  */
 public class PreferenceInitializer extends DiagramPreferenceInitializer
 		implements StatechartColorConstants {
 
 	public void initializeDefaultPreferences() {
 		super.initializeDefaultPreferences();
-	
 		// Line colors
 		Color lineColor = DiagramColorConstants.black;
 		PreferenceConverter.setDefault(getPreferenceStore(),
 				IPreferenceConstants.PREF_LINE_COLOR, lineColor.getRGB());
 
 		// rulers and grid defaults
-		getPreferenceStore().setDefault(IPreferenceConstants.PREF_SNAP_TO_GEOMETRY, true);
+		getPreferenceStore().setDefault(
+				IPreferenceConstants.PREF_SNAP_TO_GEOMETRY, true);
 
 	}
 

+ 0 - 58
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/providers/StatechartMarkerNavigationProvider.java

@@ -78,64 +78,6 @@ public class StatechartMarkerNavigationProvider extends
 
 	}
 
-	// public void gotoMarker(IMarker marker) {
-	// if (fIsUpdatingMarkerViews)
-	// return;
-	//
-	// if (getSourceViewer() == null)
-	// return;
-	//
-	// int start= MarkerUtilities.getCharStart(marker);
-	// int end= MarkerUtilities.getCharEnd(marker);
-	//
-	// boolean selectLine= start < 0 || end < 0;
-	//
-	// // look up the current range of the marker when the document has been
-	// edited
-	// IAnnotationModel model=
-	// getDocumentProvider().getAnnotationModel(getEditorInput());
-	// if (model instanceof AbstractMarkerAnnotationModel) {
-	//
-	// AbstractMarkerAnnotationModel markerModel=
-	// (AbstractMarkerAnnotationModel) model;
-	// Position pos= markerModel.getMarkerPosition(marker);
-	// if (pos != null && !pos.isDeleted()) {
-	// // use position instead of marker values
-	// start= pos.getOffset();
-	// end= pos.getOffset() + pos.getLength();
-	// }
-	//
-	// if (pos != null && pos.isDeleted()) {
-	// // do nothing if position has been deleted
-	// return;
-	// }
-	// }
-
-	// IDocument document= getDocumentProvider().getDocument(getEditorInput());
-	//
-	// if (selectLine) {
-	// int line;
-	// try {
-	// if (start >= 0)
-	// line= document.getLineOfOffset(start);
-	// else {
-	// line= MarkerUtilities.getLineNumber(marker);
-	// // Marker line numbers are 1-based
-	// -- line;
-	// start= document.getLineOffset(line);
-	// }
-	// end= start + document.getLineLength(line) - 1;
-	// } catch (BadLocationException e) {
-	// return;
-	// }
-	// }
-	//
-	// int length= document.getLength();
-	// if (end <= length && start <= length) {
-	// fIsComingFromGotoMarker= true;
-	// selectAndReveal(start, end - start);
-	// }
-	// }
 
 	public static void selectElementsInDiagram(
 			IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {

+ 25 - 29
plugins/org.yakindu.sct.statechart.diagram/src/org/yakindu/sct/statechart/diagram/validation/ValidationAction.java

@@ -1,18 +1,18 @@
 package org.yakindu.sct.statechart.diagram.validation;
 
 import java.util.List;
-import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.common.util.TreeIterator;
+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.Diagnostician;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
 import org.eclipse.gmf.runtime.notation.Diagram;
-import org.yakindu.sct.statechart.diagram.extensions.Extensions;
-import org.yakindu.sct.statechart.diagram.extensions.IValidationProvider;
+
+import de.itemis.xtext.utils.gmf.resource.InjectMembersResource;
 
 /**
  * 
@@ -21,40 +21,36 @@ import org.yakindu.sct.statechart.diagram.extensions.IValidationProvider;
  */
 public class ValidationAction implements IMarkerType {
 
-	private static final String VALIDATOR_EXTENSION_ID = "org.yakindu.sct.statechart.diagram.validation.provider";
-
 	public static void validate(DiagramEditPart diagramEditPart, Diagram view) {
 		IFile target = GMFMarkerUtil.getTargetFile(view);
 		if (target != null) {
 			try {
-				target.deleteMarkers(DIAGRAM_MARKER_TYPE, true, IResource.DEPTH_ZERO);
+				target.deleteMarkers(DIAGRAM_MARKER_TYPE, true,
+						IResource.DEPTH_ZERO);
 			} catch (CoreException e) {
 				e.printStackTrace();
 			}
 		}
-		Extensions<IValidationProvider> extensions = new Extensions<IValidationProvider>(
-				VALIDATOR_EXTENSION_ID);
-		List<IValidationProvider> validationProvider = extensions
-				.loadRegisteredProvider();
-
-		if (view.isSetElement() && view.getElement() != null) {
-			EObject statechart = view.getElement();
-			TreeIterator<EObject> allContents = statechart.eAllContents();
-			while (allContents.hasNext()) {
-				EObject current = allContents.next();
-				for (IValidationProvider provider : validationProvider) {
-					if (provider.isProviderFor(current)) {
-						Set<IStatus> status = provider.validate(current);
-						for (IStatus validationStatus : status) {
-							GMFMarkerUtil.createMarker(target,
-									validationStatus, diagramEditPart.getDiagramView(),
-									DIAGRAM_MARKER_TYPE, current);
-						}
-					}
-				}
-			}
 
+		// // Ecore constraints
+		Diagnostic diagnostic = Diagnostician.INSTANCE.validate(view
+				.getElement());
+		List<Diagnostic> children = diagnostic.getChildren();
+		for (Diagnostic child : children) {
+			GMFMarkerUtil.createMarker(target,
+					BasicDiagnostic.toIStatus(child), view,
+					DIAGRAM_MARKER_TYPE, (EObject) child.getData().get(0));
 		}
+
+		InjectMembersResource resource = (InjectMembersResource) view
+				.eResource();
+		List<Diagnostic> diagnostics = resource.getDiagnostics();
+		for (Diagnostic child : diagnostics) {
+			GMFMarkerUtil.createMarker(target,
+					BasicDiagnostic.toIStatus(child), view,
+					DIAGRAM_MARKER_TYPE, (EObject) child.getData().get(0));
+		}
+
 	}
 
 }