Переглянути джерело

Merge in TYPE_SYSTEM_REFACTORING branch.

Alexander Nyßen 12 роки тому
батько
коміт
5aa3bd841e
70 змінених файлів з 4587 додано та 2437 видалено
  1. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Event.gif
  2. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Operation.gif
  3. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Property.gif
  4. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Event.gif
  5. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Operation.gif
  6. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Property.gif
  7. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateEnumerationType_enumerator_Enumerator.gif
  8. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_DataType.gif
  9. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_EnumerationType.gif
  10. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_PrimitiveType.gif
  11. BIN
      plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateType_constraint_TypeConstraint.gif
  12. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/ComplexType.gif
  13. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/DataType.gif
  14. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/EnumerationType.gif
  15. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/Enumerator.gif
  16. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/PrimitiveType.gif
  17. BIN
      plugins/org.yakindu.base.types.edit/icons/full/obj16/TypeConstraint.gif
  18. 22 0
      plugins/org.yakindu.base.types.edit/plugin.properties
  19. 190 198
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/LibraryItemProvider.java
  20. 155 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/EnumerationTypeItemProvider.java
  21. 158 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/EnumeratorItemProvider.java
  22. 135 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/PrimitiveTypeItemProvider.java
  23. 158 0
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeConstraintItemProvider.java
  24. 170 204
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeItemProvider.java
  25. 391 321
      plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypesItemProviderAdapterFactory.java
  26. 1 1
      plugins/org.yakindu.base.types.scope/META-INF/MANIFEST.MF
  27. 0 38
      plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesAwareScopeProvider.java
  28. 0 91
      plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesExtensionPointScope.java
  29. 0 43
      plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesExtensionPointScopeHelper.java
  30. 0 84
      plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibraryLocation.java
  31. 46 0
      plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeSystemAwareScope.java
  32. 1 0
      plugins/org.yakindu.base.types/.classpath
  33. 3 0
      plugins/org.yakindu.base.types/.settings/org.eclipse.core.resources.prefs
  34. 2 0
      plugins/org.yakindu.base.types/.settings/org.eclipse.core.runtime.prefs
  35. 24 20
      plugins/org.yakindu.base.types/META-INF/MANIFEST.MF
  36. 2 2
      plugins/org.yakindu.base.types/build.properties
  37. 10 10
      plugins/org.yakindu.base.types/model/base.ecore
  38. 46 36
      plugins/org.yakindu.base.types/model/types.ecore
  39. 369 283
      plugins/org.yakindu.base.types/model/types.ecorediag
  40. 0 2
      plugins/org.yakindu.base.types/plugin.xml
  41. 0 99
      plugins/org.yakindu.base.types/schema/libraries.exsd
  42. 59 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ComplexType.java
  43. 59 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/DataType.java
  44. 43 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/EnumerationType.java
  45. 79 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Enumerator.java
  46. 5 5
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Feature.java
  47. 49 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/PrimitiveType.java
  48. 9 56
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Type.java
  49. 50 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypeConstraint.java
  50. 42 15
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java
  51. 453 131
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java
  52. 200 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ComplexTypeImpl.java
  53. 161 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/EnumerationTypeImpl.java
  54. 258 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/EnumeratorImpl.java
  55. 10 9
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/FeatureImpl.java
  56. 0 236
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/LibraryImpl.java
  57. 152 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PrimitiveTypeImpl.java
  58. 164 0
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeConstraintImpl.java
  59. 22 149
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeImpl.java
  60. 56 21
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java
  61. 163 60
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java
  62. 87 11
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java
  63. 110 13
      plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java
  64. 89 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/AbstractTypeSystem.java
  65. 365 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/ITypeSystem.java
  66. 0 58
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/ITypeSystemAccess.java
  67. 0 49
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/LibrariesExtensions.java
  68. 0 40
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/LibraryDescriptor.java
  69. 19 0
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/TypeSystemUtils.xtend
  70. 0 152
      plugins/org.yakindu.base.types/src/org/yakindu/base/types/impl/BaseTypeSystemAccessImpl.java

BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Event.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Operation.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateComplexType_features_Property.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Event.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Operation.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateDataType_features_Property.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateEnumerationType_enumerator_Enumerator.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_DataType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_EnumerationType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateLibrary_types_PrimitiveType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/ctool16/CreateType_constraint_TypeConstraint.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/ComplexType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/DataType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/EnumerationType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/Enumerator.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/PrimitiveType.gif


BIN
plugins/org.yakindu.base.types.edit/icons/full/obj16/TypeConstraint.gif


+ 22 - 0
plugins/org.yakindu.base.types.edit/plugin.properties

@@ -142,3 +142,25 @@ _UI_EGenericType_eLowerBound_feature = ELower Bound
 _UI_EGenericType_eTypeParameter_feature = EType Parameter
 _UI_EGenericType_eClassifier_feature = EClassifier
 _UI_ETypeParameter_eBounds_feature = EBounds
+_UI_EnumerationType_type = Enumeration Type
+_UI_PrimitiveType_type = Primitive Type
+_UI_DataType_type = Data Type
+_UI_Enumerator_type = Enumerator
+_UI_DataType_features_feature = Features
+_UI_DataType_superTypes_feature = Super Types
+_UI_EnumerationType_enumerator_feature = Enumerator
+_UI_PrimitiveType_baseType_feature = Base Type
+_UI_Enumerator_owningEnumeration_feature = Owning Enumeration
+_UI_Enumerator_value_feature = Value
+_UI_IntegerType_type = Integer Type
+_UI_RealType_type = Real Type
+_UI_BooleanType_type = Boolean Type
+_UI_StringType_type = String Type
+_UI_VoidType_type = Void Type
+_UI_TypeConstraint_type = Type Constraint
+_UI_Type_constraint_feature = Constraint
+_UI_Enumerator_literalValue_feature = Literal Value
+_UI_TypeConstraint_value_feature = Value
+_UI_ComplexType_type = Complex Type
+_UI_ComplexType_features_feature = Features
+_UI_ComplexType_superTypes_feature = Super Types

+ 190 - 198
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/LibraryItemProvider.java

@@ -1,198 +1,190 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.yakindu.base.types.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.ResourceLocator;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.yakindu.base.types.Library;
-import org.yakindu.base.types.TypesFactory;
-import org.yakindu.base.types.TypesPackage;
-
-/**
- * This is the item provider adapter for a {@link org.yakindu.base.types.Library} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class LibraryItemProvider
-	extends ItemProviderAdapter
-	implements
-		IEditingDomainItemProvider,
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider,
-		IItemLabelProvider,
-		IItemPropertySource {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LibraryItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addIdPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Id feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addIdPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_Library_id_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_Library_id_feature", "_UI_Library_type"),
-				 TypesPackage.Literals.LIBRARY__ID,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
-	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
-	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(TypesPackage.Literals.LIBRARY__TYPES);
-		}
-		return childrenFeatures;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EStructuralFeature getChildFeature(Object object, Object child) {
-		// Check the type of the specified child object and return the proper feature to use for
-		// adding (see {@link AddCommand}) it as a child.
-
-		return super.getChildFeature(object, child);
-	}
-
-	/**
-	 * This returns Library.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/Library"));
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((Library)object).getId();
-		return label == null || label.length() == 0 ?
-			getString("_UI_Library_type") :
-			getString("_UI_Library_type") + " " + label;
-	}
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(Library.class)) {
-			case TypesPackage.LIBRARY__ID:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-			case TypesPackage.LIBRARY__TYPES:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-
-		newChildDescriptors.add
-			(createChildParameter
-				(TypesPackage.Literals.LIBRARY__TYPES,
-				 TypesFactory.eINSTANCE.createType()));
-	}
-
-	/**
-	 * Return the resource locator for this item provider's resources.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ResourceLocator getResourceLocator() {
-		return TypesEditPlugin.INSTANCE;
-	}
-
-}
+/**
+ */
+package org.yakindu.base.types.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.base.types.ComplexType;
+import org.yakindu.base.types.TypesFactory;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.ComplexType} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ComplexTypeItemProvider
+	extends TypeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComplexTypeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSuperTypesPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Super Types feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSuperTypesPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ComplexType_superTypes_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ComplexType_superTypes_feature", "_UI_ComplexType_type"),
+				 TypesPackage.Literals.COMPLEX_TYPE__SUPER_TYPES,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(TypesPackage.Literals.COMPLEX_TYPE__FEATURES);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns ComplexType.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ComplexType"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ComplexType)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ComplexType_type") :
+			getString("_UI_ComplexType_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ComplexType.class)) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.COMPLEX_TYPE__FEATURES,
+				 TypesFactory.eINSTANCE.createOperation()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.COMPLEX_TYPE__FEATURES,
+				 TypesFactory.eINSTANCE.createProperty()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.COMPLEX_TYPE__FEATURES,
+				 TypesFactory.eINSTANCE.createEvent()));
+	}
+
+}

+ 155 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/EnumerationTypeItemProvider.java

@@ -0,0 +1,155 @@
+/**
+ */
+package org.yakindu.base.types.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.TypesFactory;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.EnumerationType} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EnumerationTypeItemProvider
+	extends PrimitiveTypeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnumerationTypeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(TypesPackage.Literals.ENUMERATION_TYPE__ENUMERATOR);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns EnumerationType.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/EnumerationType"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((EnumerationType)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_EnumerationType_type") :
+			getString("_UI_EnumerationType_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(EnumerationType.class)) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.ENUMERATION_TYPE__ENUMERATOR,
+				 TypesFactory.eINSTANCE.createEnumerator()));
+	}
+
+}

+ 158 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/EnumeratorItemProvider.java

@@ -0,0 +1,158 @@
+/**
+ */
+package org.yakindu.base.types.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.yakindu.base.base.provider.NamedElementItemProvider;
+
+import org.yakindu.base.types.Enumerator;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.Enumerator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EnumeratorItemProvider
+	extends NamedElementItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnumeratorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addLiteralValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Literal Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLiteralValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Enumerator_literalValue_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Enumerator_literalValue_feature", "_UI_Enumerator_type"),
+				 TypesPackage.Literals.ENUMERATOR__LITERAL_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns Enumerator.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Enumerator"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Enumerator)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Enumerator_type") :
+			getString("_UI_Enumerator_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Enumerator.class)) {
+			case TypesPackage.ENUMERATOR__LITERAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TypesEditPlugin.INSTANCE;
+	}
+
+}

+ 135 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/PrimitiveTypeItemProvider.java

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

+ 158 - 0
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeConstraintItemProvider.java

@@ -0,0 +1,158 @@
+/**
+ */
+package org.yakindu.base.types.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.yakindu.base.base.provider.NamedElementItemProvider;
+
+import org.yakindu.base.types.TypeConstraint;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.TypeConstraint} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypeConstraintItemProvider
+	extends NamedElementItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeConstraintItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TypeConstraint_value_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_TypeConstraint_value_feature", "_UI_TypeConstraint_type"),
+				 TypesPackage.Literals.TYPE_CONSTRAINT__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns TypeConstraint.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TypeConstraint"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((TypeConstraint)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TypeConstraint_type") :
+			getString("_UI_TypeConstraint_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TypeConstraint.class)) {
+			case TypesPackage.TYPE_CONSTRAINT__VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TypesEditPlugin.INSTANCE;
+	}
+
+}

+ 170 - 204
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypeItemProvider.java

@@ -1,204 +1,170 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.yakindu.base.types.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.ResourceLocator;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.yakindu.base.base.provider.NamedElementItemProvider;
-import org.yakindu.base.types.Type;
-import org.yakindu.base.types.TypesFactory;
-import org.yakindu.base.types.TypesPackage;
-
-/**
- * This is the item provider adapter for a {@link org.yakindu.base.types.Type} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class TypeItemProvider
-	extends NamedElementItemProvider
-	implements
-		IEditingDomainItemProvider,
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider,
-		IItemLabelProvider,
-		IItemPropertySource {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public TypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addSuperTypesPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Super Types feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addSuperTypesPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_Type_superTypes_feature"),
-				 getString("_UI_PropertyDescriptor_description", "_UI_Type_superTypes_feature", "_UI_Type_type"),
-				 TypesPackage.Literals.TYPE__SUPER_TYPES,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
-	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
-	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(TypesPackage.Literals.TYPE__FEATURES);
-		}
-		return childrenFeatures;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EStructuralFeature getChildFeature(Object object, Object child) {
-		// Check the type of the specified child object and return the proper feature to use for
-		// adding (see {@link AddCommand}) it as a child.
-
-		return super.getChildFeature(object, child);
-	}
-
-	/**
-	 * This returns Type.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/Type"));
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((Type)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_Type_type") :
-			getString("_UI_Type_type") + " " + label;
-	}
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(Type.class)) {
-			case TypesPackage.TYPE__FEATURES:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-
-		newChildDescriptors.add
-			(createChildParameter
-				(TypesPackage.Literals.TYPE__FEATURES,
-				 TypesFactory.eINSTANCE.createOperation()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(TypesPackage.Literals.TYPE__FEATURES,
-				 TypesFactory.eINSTANCE.createProperty()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(TypesPackage.Literals.TYPE__FEATURES,
-				 TypesFactory.eINSTANCE.createEvent()));
-	}
-
-	/**
-	 * Return the resource locator for this item provider's resources.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ResourceLocator getResourceLocator() {
-		return TypesEditPlugin.INSTANCE;
-	}
-
-}
+/**
+ */
+package org.yakindu.base.types.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.yakindu.base.base.provider.NamedElementItemProvider;
+
+import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypesFactory;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.yakindu.base.types.Type} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypeItemProvider
+	extends NamedElementItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(TypesPackage.Literals.TYPE__CONSTRAINT);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Type.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Type"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Type)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Type_type") :
+			getString("_UI_Type_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Type.class)) {
+			case TypesPackage.TYPE__CONSTRAINT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(TypesPackage.Literals.TYPE__CONSTRAINT,
+				 TypesFactory.eINSTANCE.createTypeConstraint()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TypesEditPlugin.INSTANCE;
+	}
+
+}

+ 391 - 321
plugins/org.yakindu.base.types.edit/src/org/yakindu/base/types/provider/TypesItemProviderAdapterFactory.java

@@ -1,321 +1,391 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.yakindu.base.types.provider;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.edit.provider.ChangeNotifier;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.IDisposable;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.yakindu.base.types.util.TypesAdapterFactory;
-
-/**
- * This is the factory that is used to provide the interfaces needed to support Viewers.
- * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
- * The adapters also support Eclipse property sheets.
- * Note that most of the adapters are shared among multiple instances.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class TypesItemProviderAdapterFactory extends TypesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
-	/**
-	 * This keeps track of the root adapter factory that delegates to this adapter factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ComposedAdapterFactory parentAdapterFactory;
-
-	/**
-	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IChangeNotifier changeNotifier = new ChangeNotifier();
-
-	/**
-	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected Collection<Object> supportedTypes = new ArrayList<Object>();
-
-	/**
-	 * This constructs an instance.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public TypesItemProviderAdapterFactory() {
-		supportedTypes.add(IEditingDomainItemProvider.class);
-		supportedTypes.add(IStructuredItemContentProvider.class);
-		supportedTypes.add(ITreeItemContentProvider.class);
-		supportedTypes.add(IItemLabelProvider.class);
-		supportedTypes.add(IItemPropertySource.class);
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Type} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected TypeItemProvider typeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Type}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createTypeAdapter() {
-		if (typeItemProvider == null) {
-			typeItemProvider = new TypeItemProvider(this);
-		}
-
-		return typeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Operation} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected OperationItemProvider operationItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Operation}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createOperationAdapter() {
-		if (operationItemProvider == null) {
-			operationItemProvider = new OperationItemProvider(this);
-		}
-
-		return operationItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Property} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyItemProvider propertyItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Property}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createPropertyAdapter() {
-		if (propertyItemProvider == null) {
-			propertyItemProvider = new PropertyItemProvider(this);
-		}
-
-		return propertyItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Parameter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ParameterItemProvider parameterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Parameter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createParameterAdapter() {
-		if (parameterItemProvider == null) {
-			parameterItemProvider = new ParameterItemProvider(this);
-		}
-
-		return parameterItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Library} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LibraryItemProvider libraryItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Library}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createLibraryAdapter() {
-		if (libraryItemProvider == null) {
-			libraryItemProvider = new LibraryItemProvider(this);
-		}
-
-		return libraryItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Event} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected EventItemProvider eventItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.yakindu.base.types.Event}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createEventAdapter() {
-		if (eventItemProvider == null) {
-			eventItemProvider = new EventItemProvider(this);
-		}
-
-		return eventItemProvider;
-	}
-
-	/**
-	 * This returns the root adapter factory that contains this factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ComposeableAdapterFactory getRootAdapterFactory() {
-		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
-	}
-
-	/**
-	 * This sets the composed adapter factory that contains this factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
-		this.parentAdapterFactory = parentAdapterFactory;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean isFactoryForType(Object type) {
-		return supportedTypes.contains(type) || super.isFactoryForType(type);
-	}
-
-	/**
-	 * This implementation substitutes the factory itself as the key for the adapter.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter adapt(Notifier notifier, Object type) {
-		return super.adapt(notifier, this);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object adapt(Object object, Object type) {
-		if (isFactoryForType(type)) {
-			Object adapter = super.adapt(object, type);
-			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
-				return adapter;
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * This adds a listener.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void addListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.addListener(notifyChangedListener);
-	}
-
-	/**
-	 * This removes a listener.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void removeListener(INotifyChangedListener notifyChangedListener) {
-		changeNotifier.removeListener(notifyChangedListener);
-	}
-
-	/**
-	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void fireNotifyChanged(Notification notification) {
-		changeNotifier.fireNotifyChanged(notification);
-
-		if (parentAdapterFactory != null) {
-			parentAdapterFactory.fireNotifyChanged(notification);
-		}
-	}
-
-	/**
-	 * This disposes all of the item providers created by this factory. 
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void dispose() {
-		if (libraryItemProvider != null) libraryItemProvider.dispose();
-		if (typeItemProvider != null) typeItemProvider.dispose();
-		if (operationItemProvider != null) operationItemProvider.dispose();
-		if (propertyItemProvider != null) propertyItemProvider.dispose();
-		if (parameterItemProvider != null) parameterItemProvider.dispose();
-		if (eventItemProvider != null) eventItemProvider.dispose();
-	}
-
-}
+/**
+ */
+package org.yakindu.base.types.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.yakindu.base.types.util.TypesAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesItemProviderAdapterFactory extends TypesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Operation} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OperationItemProvider operationItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.Operation}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createOperationAdapter() {
+		if (operationItemProvider == null) {
+			operationItemProvider = new OperationItemProvider(this);
+		}
+
+		return operationItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Property} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertyItemProvider propertyItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.Property}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPropertyAdapter() {
+		if (propertyItemProvider == null) {
+			propertyItemProvider = new PropertyItemProvider(this);
+		}
+
+		return propertyItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Parameter} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ParameterItemProvider parameterItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.Parameter}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createParameterAdapter() {
+		if (parameterItemProvider == null) {
+			parameterItemProvider = new ParameterItemProvider(this);
+		}
+
+		return parameterItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Event} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EventItemProvider eventItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.Event}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEventAdapter() {
+		if (eventItemProvider == null) {
+			eventItemProvider = new EventItemProvider(this);
+		}
+
+		return eventItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.EnumerationType} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnumerationTypeItemProvider enumerationTypeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.EnumerationType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEnumerationTypeAdapter() {
+		if (enumerationTypeItemProvider == null) {
+			enumerationTypeItemProvider = new EnumerationTypeItemProvider(this);
+		}
+
+		return enumerationTypeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.PrimitiveType} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PrimitiveTypeItemProvider primitiveTypeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.PrimitiveType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPrimitiveTypeAdapter() {
+		if (primitiveTypeItemProvider == null) {
+			primitiveTypeItemProvider = new PrimitiveTypeItemProvider(this);
+		}
+
+		return primitiveTypeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.ComplexType} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComplexTypeItemProvider complexTypeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.ComplexType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createComplexTypeAdapter() {
+		if (complexTypeItemProvider == null) {
+			complexTypeItemProvider = new ComplexTypeItemProvider(this);
+		}
+
+		return complexTypeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.Enumerator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnumeratorItemProvider enumeratorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.Enumerator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEnumeratorAdapter() {
+		if (enumeratorItemProvider == null) {
+			enumeratorItemProvider = new EnumeratorItemProvider(this);
+		}
+
+		return enumeratorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.yakindu.base.types.TypeConstraint} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeConstraintItemProvider typeConstraintItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.yakindu.base.types.TypeConstraint}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTypeConstraintAdapter() {
+		if (typeConstraintItemProvider == null) {
+			typeConstraintItemProvider = new TypeConstraintItemProvider(this);
+		}
+
+		return typeConstraintItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (operationItemProvider != null) operationItemProvider.dispose();
+		if (propertyItemProvider != null) propertyItemProvider.dispose();
+		if (parameterItemProvider != null) parameterItemProvider.dispose();
+		if (eventItemProvider != null) eventItemProvider.dispose();
+		if (enumerationTypeItemProvider != null) enumerationTypeItemProvider.dispose();
+		if (primitiveTypeItemProvider != null) primitiveTypeItemProvider.dispose();
+		if (complexTypeItemProvider != null) complexTypeItemProvider.dispose();
+		if (enumeratorItemProvider != null) enumeratorItemProvider.dispose();
+		if (typeConstraintItemProvider != null) typeConstraintItemProvider.dispose();
+	}
+
+}

+ 1 - 1
plugins/org.yakindu.base.types.scope/META-INF/MANIFEST.MF

@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: org.yakindu.base.types.scope
-Bundle-SymbolicName: org.yakindu.base.types.scope
+Bundle-SymbolicName: org.yakindu.base.types.scope;singleton:=true
 Bundle-Version: 2.0.0.qualifier
 Bundle-Vendor: yakindu.org
 Require-Bundle: org.eclipse.core.runtime,

+ 0 - 38
plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesAwareScopeProvider.java

@@ -1,38 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types.scope;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.scoping.IScope;
-import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
-import org.yakindu.base.types.TypesPackage;
-
-import com.google.common.base.Predicate;
-import com.google.inject.Inject;
-
-public class TypeLibrariesAwareScopeProvider extends DefaultGlobalScopeProvider {
-
-	@Inject
-	private TypeLibrariesExtensionPointScopeHelper helper;
-
-	@Override
-	protected IScope getScope(IScope parent, Resource context,
-			boolean ignoreCase, EClass type,
-			Predicate<IEObjectDescription> filter) {
-		if (type == TypesPackage.Literals.TYPE) {
-			parent = helper.createExtensionScope(parent);
-		}
-		return super.getScope(parent, context, ignoreCase, type, filter);
-	}
-
-}

+ 0 - 91
plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesExtensionPointScope.java

@@ -1,91 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types.scope;
-
-import java.util.Collections;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.xtext.naming.IQualifiedNameProvider;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.resource.XtextResourceSet;
-import org.eclipse.xtext.scoping.IScope;
-import org.eclipse.xtext.scoping.Scopes;
-import org.eclipse.xtext.scoping.impl.AbstractScope;
-import org.yakindu.base.types.Library;
-import org.yakindu.base.types.Type;
-
-import com.google.common.collect.Sets;
-
-public class TypeLibrariesExtensionPointScope extends AbstractScope {
-
-	private final TypeLibraryLocation locationData;
-
-	private Library loadedModel;
-
-	private final XtextResourceSet resourceSet;
-
-	private final IQualifiedNameProvider qualifiedNameProvider;
-
-	protected TypeLibrariesExtensionPointScope(IScope parent,
-			TypeLibraryLocation locationData, XtextResourceSet resourceSet,
-			IQualifiedNameProvider qualifiedNameProvider) {
-		super(parent, false);
-		this.locationData = locationData;
-		this.resourceSet = resourceSet;
-		this.qualifiedNameProvider = qualifiedNameProvider;
-	}
-
-	@Override
-	protected Iterable<IEObjectDescription> getAllLocalElements() {
-		if (locationData.getContainedDescriptionNames() == null
-				|| loadedModel == null) {
-			loadDefinitions();
-		}
-		Iterable<IEObjectDescription> iterable = Scopes.scopedElementsFor(
-				loadedModel.getTypes(), qualifiedNameProvider);
-		return iterable;
-	}
-
-	@Override
-	protected Iterable<IEObjectDescription> getLocalElementsByName(
-			QualifiedName name) {
-		if (locationData.getContainedDescriptionNames() == null) {
-			loadDefinitions();
-		}
-		if (locationData.getContainedDescriptionNames().contains(name))
-			return super.getLocalElementsByName(name);
-		return Collections.emptyList();
-	}
-
-	protected void loadDefinitions() {
-		URI uri = locationData.getLocation();
-		Resource resource = (Resource) resourceSet.getResource(uri, true);
-		if (resource != null && !resource.getContents().isEmpty()) {
-			loadedModel = (Library) resource.getContents().get(0);
-			if (locationData.getContainedDescriptionNames() == null) {
-				Set<QualifiedName> names = Sets.newHashSet();
-				for (Type type : loadedModel.getTypes()) {
-					QualifiedName name = qualifiedNameProvider
-							.getFullyQualifiedName(type);
-					if (name != null)
-						names.add(name);
-				}
-				locationData.setContainedDescriptionNames(names);
-			}
-		} else {
-			locationData.setContainedDescriptionNames(Collections
-					.<QualifiedName> emptySet());
-		}
-	}
-}

+ 0 - 43
plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibrariesExtensionPointScopeHelper.java

@@ -1,43 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types.scope;
-
-import java.util.List;
-
-import org.eclipse.xtext.naming.IQualifiedNameProvider;
-import org.eclipse.xtext.resource.XtextResourceSet;
-import org.eclipse.xtext.scoping.IScope;
-
-import com.google.inject.Inject;
-
-public class TypeLibrariesExtensionPointScopeHelper {
-
-	@Inject
-	private TypeLibraryLocation.Registry locationRegistry;
-
-	@Inject
-	private XtextResourceSet resourceSet;
-
-	@Inject
-	private IQualifiedNameProvider qualifiedNameProvider;
-
-	public IScope createExtensionScope(IScope parent) {
-		List<TypeLibraryLocation> locations = locationRegistry
-				.getAllLocations();
-		if (locations != null && !locations.isEmpty()) {
-			for (TypeLibraryLocation locationData : locations) {
-				parent = new TypeLibrariesExtensionPointScope(parent,
-						locationData, resourceSet, qualifiedNameProvider);
-			}
-		}
-		return parent;
-	}
-}

+ 0 - 84
plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeLibraryLocation.java

@@ -1,84 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types.scope;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.osgi.framework.Bundle;
-import org.yakindu.base.types.LibrariesExtensions;
-import org.yakindu.base.types.LibraryDescriptor;
-
-import com.google.inject.Singleton;
-
-public class TypeLibraryLocation {
-
-	private final LibraryDescriptor descriptor;
-	private Set<QualifiedName> containedDescriptionNames;
-
-	public TypeLibraryLocation(LibraryDescriptor descriptor) {
-		this.descriptor = descriptor;
-	}
-	
-	public Bundle getBundle() {
-		return descriptor.getBundle();
-	}
-	
-	public URI getLocation() {
-		return descriptor.getLocation();
-	}
-
-	public URL getLocationAsURL() {
-		return descriptor.getLocationAsURL();
-	}
-
-	public Set<QualifiedName> getContainedDescriptionNames() {
-		return containedDescriptionNames;
-	}
-
-	public void setContainedDescriptionNames(
-			Set<QualifiedName> containedDescriptionNames) {
-		this.containedDescriptionNames = containedDescriptionNames;
-	}
-
-	@Singleton
-	public static class Registry {
-
-		private volatile List<TypeLibraryLocation> allLocations;
-
-		public List<TypeLibraryLocation> getAllLocations() {
-			if (allLocations == null) {
-				synchronized (this) {
-					if (allLocations == null) {
-						allLocations = doGetAllLocations();
-					}
-				}
-			}
-			return allLocations;
-		}
-
-		protected List<TypeLibraryLocation> doGetAllLocations() {
-			List<TypeLibraryLocation> locations = new ArrayList<TypeLibraryLocation>();
-			Iterable<LibraryDescriptor> descriptors = LibrariesExtensions
-					.getRegisteredTypeLibraries();
-			for (LibraryDescriptor descriptor : descriptors) {
-				locations.add(new TypeLibraryLocation(descriptor));
-			}
-			return locations;
-		}
-	}
-
-	
-}

+ 46 - 0
plugins/org.yakindu.base.types.scope/src/org/yakindu/base/types/scope/TypeSystemAwareScope.java

@@ -0,0 +1,46 @@
+/**
+ * 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:
+ *     Alexander Nyssen (itemis AG) - initial API and implementation
+ */
+package org.yakindu.base.types.scope;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.scoping.IScope;
+import org.eclipse.xtext.scoping.Scopes;
+import org.eclipse.xtext.scoping.impl.AbstractScope;
+import org.yakindu.base.types.ITypeSystem;
+
+public class TypeSystemAwareScope extends AbstractScope {
+
+	private final ITypeSystem typeSystemAccess;
+
+	private final IQualifiedNameProvider qualifiedNameProvider;
+
+	private EClass eClass;
+
+	public TypeSystemAwareScope(IScope parent,
+			ITypeSystem typeSystemAccess,
+			IQualifiedNameProvider qualifiedNameProvider, EClass eClass) {
+		super(parent, false);
+		this.typeSystemAccess = typeSystemAccess;
+		this.qualifiedNameProvider = qualifiedNameProvider;
+		this.eClass = eClass;
+	}
+
+	@Override
+	protected Iterable<IEObjectDescription> getAllLocalElements() {
+		Iterable<IEObjectDescription> iterable = Scopes.scopedElementsFor(
+				EcoreUtil2.<EObject>getObjectsByType(typeSystemAccess.getTypes(), eClass), qualifiedNameProvider);
+		return iterable;
+	}
+}

+ 1 - 0
plugins/org.yakindu.base.types/.classpath

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="src" path="xtend-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="model"/>

+ 3 - 0
plugins/org.yakindu.base.types/.settings/org.eclipse.core.resources.prefs

@@ -1,2 +1,5 @@
 eclipse.preferences.version=1
 encoding//model/types.ecorediag=UTF-8
+encoding//src/org/yakindu/base/types/AbstractTypeSystem.java=UTF-8
+encoding//src/org/yakindu/base/types/ITypeSystem.java=UTF-8
+encoding/<project>=UTF-8

+ 2 - 0
plugins/org.yakindu.base.types/.settings/org.eclipse.core.runtime.prefs

@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n

+ 24 - 20
plugins/org.yakindu.base.types/META-INF/MANIFEST.MF

@@ -1,20 +1,24 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.yakindu.base.types;singleton:=true
-Bundle-Version: 2.0.0.qualifier
-Bundle-ClassPath: .
-Bundle-Vendor: yakindu.org
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: org.yakindu.base.base,
- org.yakindu.base.base.impl,
- org.yakindu.base.base.util,
- org.yakindu.base.types,
- org.yakindu.base.types.impl,
- org.yakindu.base.types.util
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.emf.ecore.xmi;bundle-version="2.7.0",
- com.google.inject;bundle-version="2.0.0"
-Bundle-ActivationPolicy: lazy
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.yakindu.base.types;singleton:=true
+Bundle-Version: 2.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: yakindu.org
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.yakindu.base.base,
+ org.yakindu.base.base.impl,
+ org.yakindu.base.base.util,
+ org.yakindu.base.types,
+ org.yakindu.base.types.impl,
+ org.yakindu.base.types.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;bundle-version="2.7.0",
+ com.google.inject;bundle-version="2.0.0",
+ org.eclipse.xtend.lib,
+ com.google.guava,
+ org.eclipse.xtext.xbase.lib
+Bundle-ActivationPolicy: lazy
+

+ 2 - 2
plugins/org.yakindu.base.types/build.properties

@@ -9,11 +9,11 @@ bin.includes = .,\
                META-INF/,\
                plugin.xml,\
                plugin.properties,\
-               schema/,\
                .project
 jars.compile.order = .
 jre.compilation.profile = JavaSE-1.6
 output.. = bin/
 source.. = src/,\
-		src-gen/
+           src-gen/,\
+           xtend-gen/
 src.excludes = model/

+ 10 - 10
plugins/org.yakindu.base.types/model/base.ecore

@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="base" nsURI="http://www.yakindu.org/base/base/2.0.0" nsPrefix="base">
-  <eClassifiers xsi:type="ecore:EClass" name="NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="DocumentedElement">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="base" nsURI="http://www.yakindu.org/base/base/2.0.0" nsPrefix="base">
+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DocumentedElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>

+ 46 - 36
plugins/org.yakindu.base.types/model/types.ecore

@@ -1,36 +1,46 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="types"
-    nsURI="http://www.yakindu.org/base/types/2.0.0" nsPrefix="types">
-  <eClassifiers xsi:type="ecore:EClass" name="Library">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
-        eType="#//Type" containment="true" eOpposite="#//Type/owningLibrary"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Type" eSuperTypes="base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
-        eType="#//Feature" containment="true" eOpposite="#//Feature/owningType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="superTypes" upperBound="-1"
-        eType="#//Type"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="owningLibrary" eType="#//Library"
-        eOpposite="#//Library/types"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Feature" abstract="true" eSuperTypes="#//TypedElement base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="owningType" eType="#//Type"
-        eOpposite="#//Type/features"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Operation" eSuperTypes="#//Feature">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
-        eType="#//Parameter" containment="true" eOpposite="#//Parameter/owningOperation"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//Feature"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//TypedElement base.ecore#//NamedElement">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="owningOperation" eType="#//Operation"
-        eOpposite="#//Operation/parameters"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" interface="true">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Event" eSuperTypes="#//Feature"/>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="types" nsURI="http://www.yakindu.org/base/types/2.0.0" nsPrefix="types">
+  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" upperBound="-1"
+        eType="#//TypeConstraint" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Feature" abstract="true" eSuperTypes="#//TypedElement base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="owningType" eType="#//ComplexType"
+        eOpposite="#//ComplexType/features"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Operation" eSuperTypes="#//Feature">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+        eType="#//Parameter" containment="true" eOpposite="#//Parameter/owningOperation"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//Feature"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//TypedElement base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="owningOperation" eType="#//Operation"
+        eOpposite="#//Operation/parameters"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" interface="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Event" eSuperTypes="#//Feature"/>
+  <eClassifiers xsi:type="ecore:EClass" name="EnumerationType" eSuperTypes="#//PrimitiveType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumerator" upperBound="-1"
+        eType="#//Enumerator" containment="true" eOpposite="#//Enumerator/owningEnumeration"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveType" eSuperTypes="#//Type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="baseType" eType="#//PrimitiveType"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ComplexType" eSuperTypes="#//Type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1"
+        eType="#//Feature" containment="true" eOpposite="#//Feature/owningType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="superTypes" upperBound="-1"
+        eType="#//ComplexType"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Enumerator" eSuperTypes="base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="owningEnumeration" eType="#//EnumerationType"
+        eOpposite="#//EnumerationType/enumerator"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="literalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeConstraint" eSuperTypes="base.ecore#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+  </eClassifiers>
+</ecore:EPackage>

+ 369 - 283
plugins/org.yakindu.base.types/model/types.ecorediag

@@ -1,317 +1,403 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_xfpuACZtEeGjJpJVRtToAg" type="EcoreTools" name="Types.ecorediag" measurementUnit="Pixel">
-  <children xmi:type="notation:Node" xmi:id="_zh7u0CZtEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_zh-LECZtEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_ziAnUCZtEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_ziAnUSZtEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ziAnUiZtEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ziAnUyZtEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_ziBOYCZtEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_ziBOYSZtEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ziBOYiZtEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ziBOYyZtEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_zh8V4CZtEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Type"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zh8V4SZtEeGjJpJVRtToAg" x="88" y="232"/>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_SSzIYFi2EeKoV55-G8M1SQ" type="EcoreTools" name="types.ecorediag" measurementUnit="Pixel">
+  <children xmi:type="notation:Node" xmi:id="_SS6dIli2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS7EMFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS7EMVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS7EMli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS7EM1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS7ENFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS7ENVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS7ENli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS7EN1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS7EOFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS6dI1i2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Type"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS6dJFi2EeKoV55-G8M1SQ" x="208" y="96"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_46n_4CZvEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_46om8CZvEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_46om8SZvEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_46om8iZvEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_46om8yZvEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_46om9CZvEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_46om9SZvEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_46om9iZvEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_46om9yZvEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_46om-CZvEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_46n_4SZvEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Feature"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_46n_4iZvEeGjJpJVRtToAg" x="408" y="224"/>
+  <children xmi:type="notation:Node" xmi:id="_SS7EOVi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS7rQFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS7rQVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS7rQli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS7rQ1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS7rRFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS7rRVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS7rRli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS7rR1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS7rSFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS7EOli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Feature"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS7EO1i2EeKoV55-G8M1SQ" x="518" y="150"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_YwiMECZxEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_YwizICZxEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_YwizISZxEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_YwizIiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_YwizIyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_YwizJCZxEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_YwizJSZxEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_YwizJiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_YwizJyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_YwizKCZxEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_YwiMESZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Operation"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YwiMEiZxEeGjJpJVRtToAg" x="336" y="344"/>
+  <children xmi:type="notation:Node" xmi:id="_SS8SUFi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS8SU1i2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS8SVFi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS8SVVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS8SVli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS8SV1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS85YFi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS85YVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS85Yli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS85Y1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS8SUVi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Operation"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS8SUli2EeKoV55-G8M1SQ" x="676" y="248"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_ZrJaMCZxEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_ZrKBQCZxEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_ZrKBQSZxEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_ZrKBQiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ZrKBQyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ZrKBRCZxEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_ZrKBRSZxEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_ZrKBRiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ZrKBRyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ZrKBSCZxEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_ZrJaMSZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Property"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZrJaMiZxEeGjJpJVRtToAg" x="492" y="344"/>
+  <children xmi:type="notation:Node" xmi:id="_SS85ZFi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS9gcFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS9gcVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS9gcli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS9gc1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS9gdFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS9gdVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS9gdli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS9gd1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS9geFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS85ZVi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Property"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS85Zli2EeKoV55-G8M1SQ" x="448" y="248"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_vl0hwCZxEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_vl1I0CZxEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_vl1v4CZxEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_vl1v4SZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_vl1v4iZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_vl1v4yZxEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_vl1v5CZxEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_vl1v5SZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_vl1v5iZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_vl1v5yZxEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_vl0hwSZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Parameter"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vl0hwiZxEeGjJpJVRtToAg" x="164" y="344"/>
+  <children xmi:type="notation:Node" xmi:id="_SS9geVi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS-HgFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS-HgVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS-Hgli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS-Hg1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS-HhFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS-HhVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS-Hhli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS-Hh1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS-HiFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS9geli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Parameter"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS9ge1i2EeKoV55-G8M1SQ" x="676" y="148"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_702DYCZxEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_702qcCZxEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_702qcSZxEeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_702qciZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_702qcyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_702qdCZxEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_702qdSZxEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_702qdiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_702qdyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_702qeCZxEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_702DYSZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//TypedElement"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_702DYiZxEeGjJpJVRtToAg" x="160" y="28"/>
+  <children xmi:type="notation:Node" xmi:id="_SS-HiVi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS-ukFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS-ukVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS-ukli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS-uk1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS-ulFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS-ulVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS-ulli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS-ul1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS-umFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS-Hili2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//TypedElement"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS-Hi1i2EeKoV55-G8M1SQ" x="600" y="20"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="__l7IUCZxEeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="__l7vYCZxEeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="__l7vYSZxEeGjJpJVRtToAg" type="5001">
-      <children xmi:type="notation:Node" xmi:id="_As27MCZyEeGjJpJVRtToAg" type="2001">
-        <element xmi:type="ecore:EAttribute" href="Types.ecore#//NamedElement/name"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_As27MSZyEeGjJpJVRtToAg"/>
-      </children>
-      <styles xmi:type="notation:DrawerStyle" xmi:id="__l7vYiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="__l7vYyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="__l7vZCZxEeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="__l7vZSZxEeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="__l7vZiZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="__l7vZyZxEeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="__l7vaCZxEeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="__l7IUSZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//NamedElement"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="__l7IUiZxEeGjJpJVRtToAg" x="312" y="28"/>
+  <children xmi:type="notation:Node" xmi:id="_SS-umVi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_SS-unFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_SS_VoFi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS_VoVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS_Voli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS_Vo1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_SS_VpFi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_SS_VpVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_SS_Vpli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_SS_Vp1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_SS-umli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Event"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SS-um1i2EeKoV55-G8M1SQ" x="560" y="248"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_TyDUoFi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_TyD7sFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_TyD7sVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_TyD7sli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_TyD7s1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_TyD7tFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_TyD7tVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_TyD7tli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_TyD7t1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_TyD7uFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_TyDUoVi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//EnumerationType"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TyDUoli2EeKoV55-G8M1SQ" x="116" y="396" width="119"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_WQwLsFi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_WQwywFi2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_WQwywVi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_WQwywli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_WQwyw1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_WQwyxFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_WQwyxVi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_WQwyxli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_WQwyx1i2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_WQwyyFi2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_WQwLsVi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//PrimitiveType"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WQwLsli2EeKoV55-G8M1SQ" x="116" y="284"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_DVdNwCZ1EeGjJpJVRtToAg" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_DVd00CZ1EeGjJpJVRtToAg" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_DVeb4CZ1EeGjJpJVRtToAg" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_DVeb4SZ1EeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_DVeb4iZ1EeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_DVeb4yZ1EeGjJpJVRtToAg"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_DVeb5CZ1EeGjJpJVRtToAg" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_DVeb5SZ1EeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_DVeb5iZ1EeGjJpJVRtToAg"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_DVeb5yZ1EeGjJpJVRtToAg"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_DVdNwSZ1EeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Library"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DVdNwiZ1EeGjJpJVRtToAg" x="40" y="104"/>
+  <children xmi:type="notation:Node" xmi:id="_pppTAFi2EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_pppTA1i2EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_ppp6EFi2EeKoV55-G8M1SQ" type="5001">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_ppp6EVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_ppp6Eli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_ppp6E1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_ppp6FFi2EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_ppp6FVi2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_ppp6Fli2EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_ppp6F1i2EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_pppTAVi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//ComplexType"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pppTAli2EeKoV55-G8M1SQ" x="312" y="284"/>
+  </children>
+  <children xmi:type="notation:Node" xmi:id="_7DlvcFi4EeKoV55-G8M1SQ" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_7DmWgFi4EeKoV55-G8M1SQ" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_7DmWgVi4EeKoV55-G8M1SQ" type="5001">
+      <children xmi:type="notation:Node" xmi:id="_-R86AFpGEeKEveQVn27c8A" type="2001">
+        <element xmi:type="ecore:EAttribute" href="types.ecore#//Enumerator/literalValue"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-R86AVpGEeKEveQVn27c8A"/>
+      </children>
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_7DmWgli4EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_7DmWg1i4EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_7DmWhFi4EeKoV55-G8M1SQ"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_7DmWhVi4EeKoV55-G8M1SQ" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_7DmWhli4EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_7DmWh1i4EeKoV55-G8M1SQ"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_7DmWiFi4EeKoV55-G8M1SQ"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_7DlvcVi4EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//Enumerator"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Dlvcli4EeKoV55-G8M1SQ" x="444" y="388" width="167"/>
   </children>
-  <children xmi:type="notation:Node" xmi:id="_1VKhcVcJEeGSfaursziXVw" type="1001">
-    <children xmi:type="notation:Node" xmi:id="_1VMWoFcJEeGSfaursziXVw" type="4001"/>
-    <children xmi:type="notation:Node" xmi:id="_1VM9sFcJEeGSfaursziXVw" type="5001">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_1VM9sVcJEeGSfaursziXVw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_1VM9slcJEeGSfaursziXVw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_1VM9s1cJEeGSfaursziXVw"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_1VNkwFcJEeGSfaursziXVw" type="5002">
-      <styles xmi:type="notation:DrawerStyle" xmi:id="_1VNkwVcJEeGSfaursziXVw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_1VNkwlcJEeGSfaursziXVw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_1VNkw1cJEeGSfaursziXVw"/>
-    </children>
-    <styles xmi:type="notation:ShapeStyle" xmi:id="_1VKhclcJEeGSfaursziXVw" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
-    <element xmi:type="ecore:EClass" href="Types.ecore#//Event"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1VKhc1cJEeGSfaursziXVw" x="640" y="224"/>
+  <children xmi:type="notation:Node" xmi:id="_cI8NUFpGEeKEveQVn27c8A" type="1001">
+    <children xmi:type="notation:Node" xmi:id="_cI80YFpGEeKEveQVn27c8A" type="4001"/>
+    <children xmi:type="notation:Node" xmi:id="_cI80YVpGEeKEveQVn27c8A" type="5001">
+      <children xmi:type="notation:Node" xmi:id="_iiUecFjLEeKoV55-G8M1SQ" type="2001">
+        <element xmi:type="ecore:EAttribute" href="types.ecore#//TypeConstraint/value"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iiUecVjLEeKoV55-G8M1SQ"/>
+      </children>
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_cI80YlpGEeKEveQVn27c8A"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_cI80Y1pGEeKEveQVn27c8A"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_cI80ZFpGEeKEveQVn27c8A"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_cI80ZVpGEeKEveQVn27c8A" type="5002">
+      <styles xmi:type="notation:DrawerStyle" xmi:id="_cI80ZlpGEeKEveQVn27c8A"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_cI80Z1pGEeKEveQVn27c8A"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_cI80aFpGEeKEveQVn27c8A"/>
+    </children>
+    <styles xmi:type="notation:ShapeStyle" xmi:id="_cI8NUVpGEeKEveQVn27c8A" fontColor="4210752" fontName="Lucida Grande" fontHeight="10" fillColor="13761016" lineColor="8421504"/>
+    <element xmi:type="ecore:EClass" href="types.ecore#//TypeConstraint"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cI8NUlpGEeKEveQVn27c8A" x="360" y="88"/>
   </children>
-  <styles xmi:type="notation:DiagramStyle" xmi:id="_xfpuASZtEeGjJpJVRtToAg"/>
-  <element xmi:type="ecore:EPackage" href="Types.ecore#/"/>
-  <edges xmi:type="notation:Edge" xmi:id="_cC4GkCZxEeGjJpJVRtToAg" type="3002" source="_702DYCZxEeGjJpJVRtToAg" target="_zh7u0CZtEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_cC5UsCZxEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_cC5UsSZxEeGjJpJVRtToAg" x="-2" y="-10"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_cC57wCZxEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_cC57wSZxEeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_cC4GkSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_cC4GkiZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//TypedElement/type"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cC4GkyZxEeGjJpJVRtToAg" points="[-37, 20, 137, -76]$[-145, 80, 29, -16]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cDkDECZxEeGjJpJVRtToAg" id="(0.18627450980392157,0.3469387755102041)"/>
+  <styles xmi:type="notation:DiagramStyle" xmi:id="_SSzIYVi2EeKoV55-G8M1SQ"/>
+  <element xmi:type="ecore:EPackage" href="types.ecore#/"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STDAAli2EeKoV55-G8M1SQ" type="3002" source="_pppTAFi2EeKoV55-G8M1SQ" target="_SS7EOVi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STDABli2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STDAB1i2EeKoV55-G8M1SQ" x="7" y="-10"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STDnEFi2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STDnEVi2EeKoV55-G8M1SQ" x="20" y="10"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STDAA1i2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STDABFi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//ComplexType/features"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STDABVi2EeKoV55-G8M1SQ" points="[0, -2, -160, 104]$[0, -106, -160, 0]$[0, -106, -160, 0]$[145, -106, -15, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_skhvwFi2EeKoV55-G8M1SQ" id="(0.6176470588235294,0.07142857142857142)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0A7_gFjNEeKoV55-G8M1SQ" id="(0.1568627450980392,0.7619047619047619)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_etxmkCZxEeGjJpJVRtToAg" type="3002" source="_zh7u0CZtEeGjJpJVRtToAg" target="_46n_4CZvEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_etxmlCZxEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_etxmlSZxEeGjJpJVRtToAg" x="-1" y="-8"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_etxmliZxEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_etxmlyZxEeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_etxmkSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_etxmkiZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Type/features"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_etxmkyZxEeGjJpJVRtToAg" points="[8, -2, -198, 0]$[180, -2, -26, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_et0C0CZxEeGjJpJVRtToAg" id="(0.9215686274509803,0.8571428571428571)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_et0C0SZxEeGjJpJVRtToAg" id="(0.2647058823529412,0.8163265306122449)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STDnEli2EeKoV55-G8M1SQ" type="3002" source="_pppTAFi2EeKoV55-G8M1SQ" target="_pppTAFi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STDnFli2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STDnF1i2EeKoV55-G8M1SQ" x="15" y="34"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STDnGFi2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STDnGVi2EeKoV55-G8M1SQ" x="19" y="-17"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STDnE1i2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STDnFFi2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//ComplexType/superTypes"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STDnFVi2EeKoV55-G8M1SQ" points="[-98, -6, -26, -7]$[-121, -6, -49, -7]$[-121, 47, -49, 46]$[-72, 47, 0, 46]$[-72, 7, 0, 6]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a7lRMFi4EeKoV55-G8M1SQ" id="(0.9803921568627451,0.8333333333333334)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aZZxMFi4EeKoV55-G8M1SQ" id="(0.2647058823529412,0.8571428571428571)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_jhjeoCZxEeGjJpJVRtToAg" type="3002" source="_46n_4CZvEeGjJpJVRtToAg" target="_zh7u0CZtEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_jhkFsCZxEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_jhkFsSZxEeGjJpJVRtToAg" x="-10" y="-10"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_jhkFsiZxEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_jhkFsyZxEeGjJpJVRtToAg" x="7" y="14"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_jhjeoSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_jhjeoiZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Feature/owningType"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jhjeoyZxEeGjJpJVRtToAg" points="[-26, 0, 180, -2]$[-198, 0, 8, -2]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JkFakCZyEeGjJpJVRtToAg" id="(0.2647058823529412,0.8163265306122449)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JkFakSZyEeGjJpJVRtToAg" id="(0.9215686274509803,0.8571428571428571)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STEOJFi2EeKoV55-G8M1SQ" type="3002" source="_SS7EOVi2EeKoV55-G8M1SQ" target="_pppTAFi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STEOKFi2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STEOKVi2EeKoV55-G8M1SQ" x="19" y="-32"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STEOKli2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STEOK1i2EeKoV55-G8M1SQ" x="19" y="16"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STEOJVi2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STEOJli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//Feature/owningType"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STEOJ1i2EeKoV55-G8M1SQ" points="[-15, 0, 145, -106]$[-160, 0, 0, -106]$[-160, 0, 0, -106]$[-160, 104, 0, -2]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KtvJgG91EeKjGIq1kmcCng" id="(0.1568627450980392,0.7619047619047619)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KtvJgW91EeKjGIq1kmcCng" id="(0.6176470588235294,0.07142857142857142)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_sZnrgCZxEeGjJpJVRtToAg" type="3003" source="_YwiMECZxEeGjJpJVRtToAg" target="_46n_4CZvEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_sZnrgSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_sZnrgiZxEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STE1MFi2EeKoV55-G8M1SQ" type="3003" source="_SS7EOVi2EeKoV55-G8M1SQ" target="_SS-HiVi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STE1MVi2EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STE1Mli2EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sZnrgyZxEeGjJpJVRtToAg" points="[17, -20, -63, 69]$[76, -65, -4, 24]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STE1M1i2EeKoV55-G8M1SQ" points="[0, 0, -82, 90]$[0, -46, -82, 44]$[84, -46, 2, 44]$[84, -90, 2, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU0hoVi2EeKoV55-G8M1SQ" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU1IsFi2EeKoV55-G8M1SQ" id="(0.5,1.0)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_STFcQFi2EeKoV55-G8M1SQ" type="3002" source="_SS8SUFi2EeKoV55-G8M1SQ" target="_SS9geVi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STFcRFi2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STFcRVi2EeKoV55-G8M1SQ" x="-1" y="35"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STFcRli2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STFcR1i2EeKoV55-G8M1SQ" x="-1" y="-15"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STFcQVi2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STFcQli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//Operation/parameters"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STFcQ1i2EeKoV55-G8M1SQ" points="[-9, -9, -6, 62]$[-9, -41, -6, 30]$[-9, -69, -6, 2]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0w5owGokEeKKDYR1XTkFSA" id="(0.7352941176470589,0.23809523809523808)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0w5owWokEeKKDYR1XTkFSA" id="(0.7058823529411765,0.9523809523809523)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_s0__8CZxEeGjJpJVRtToAg" type="3003" source="_ZrJaMCZxEeGjJpJVRtToAg" target="_46n_4CZvEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_s0__8SZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_s0__8iZxEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STFcSFi2EeKoV55-G8M1SQ" type="3003" source="_SS8SUFi2EeKoV55-G8M1SQ" target="_SS7EOVi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STFcSVi2EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STFcSli2EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s0__8yZxEeGjJpJVRtToAg" points="[-44, -20, 34, 74]$[-44, -70, 34, 24]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STFcS1i2EeKoV55-G8M1SQ" points="[8, 0, 107, 58]$[8, -32, 107, 26]$[-136, -32, -37, 26]$[-136, -58, -37, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU4MAli2EeKoV55-G8M1SQ" id="(0.24509803921568626,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU4MA1i2EeKoV55-G8M1SQ" id="(0.8333333333333334,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_1K8-QCZxEeGjJpJVRtToAg" type="3002" source="_YwiMECZxEeGjJpJVRtToAg" target="_vl0hwCZxEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_1K9lUCZxEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_1K9lUSZxEeGjJpJVRtToAg" x="-10" y="-10"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_1K9lUiZxEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_1K9lUyZxEeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_1K8-QSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_1K8-QiZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Operation/parameters"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1K8-QyZxEeGjJpJVRtToAg" points="[-50, -6, 122, -5]$[-175, -24, -3, -23]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6Afw4CZxEeGjJpJVRtToAg" id="(0.5,0.5)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6Afw4SZxEeGjJpJVRtToAg" id="(0.5,0.5)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STGDUFi2EeKoV55-G8M1SQ" type="3003" source="_SS85ZFi2EeKoV55-G8M1SQ" target="_SS7EOVi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STGDUVi2EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STGDUli2EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STGDU1i2EeKoV55-G8M1SQ" points="[0, 0, -70, 58]$[0, -32, -70, 26]$[66, -32, -4, 26]$[66, -58, -4, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU2W0Fi2EeKoV55-G8M1SQ" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU2W0Vi2EeKoV55-G8M1SQ" id="(0.5,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_3wXhUCZxEeGjJpJVRtToAg" type="3002" source="_vl0hwCZxEeGjJpJVRtToAg" target="_YwiMECZxEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_3wXhVCZxEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_3wXhVSZxEeGjJpJVRtToAg" x="-30" y="3"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_3wXhViZxEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_3wXhVyZxEeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_3wXhUSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_3wXhUiZxEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Parameter/owningOperation"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3wXhUyZxEeGjJpJVRtToAg" points="[-3, -23, -175, -24]$[122, -5, -50, -6]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6Ag_ACZxEeGjJpJVRtToAg" id="(0.5,0.5)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6Ag_ASZxEeGjJpJVRtToAg" id="(0.5,0.5)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STGDVFi2EeKoV55-G8M1SQ" type="3002" source="_SS9geVi2EeKoV55-G8M1SQ" target="_SS8SUFi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STGDWFi2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STGDWVi2EeKoV55-G8M1SQ" x="-9" y="-50"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STGDWli2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STGDW1i2EeKoV55-G8M1SQ" x="-13" y="15"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STGDVVi2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STGDVli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//Parameter/owningOperation"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STGDV1i2EeKoV55-G8M1SQ" points="[-6, 2, -9, -69]$[-6, 30, -9, -41]$[-6, 62, -9, -9]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU294Vi2EeKoV55-G8M1SQ" id="(0.7058823529411765,0.9523809523809523)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU3k8Fi2EeKoV55-G8M1SQ" id="(0.7352941176470589,0.23809523809523808)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_-EJzkCZxEeGjJpJVRtToAg" type="3003" source="_46n_4CZvEeGjJpJVRtToAg" target="_702DYCZxEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_-EJzkSZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_-EJzkiZxEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STGqYFi2EeKoV55-G8M1SQ" type="3003" source="_SS9geVi2EeKoV55-G8M1SQ" target="_SS-HiVi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STGqYVi2EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STGqYli2EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-EJzkyZxEeGjJpJVRtToAg" points="[-24, -23, 106, 80]$[-80, -110, 50, -7]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STGqY1i2EeKoV55-G8M1SQ" points="[0, 0, 52, 88]$[0, -44, 52, 44]$[-74, -44, -22, 44]$[-74, -88, -22, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU4MAFi2EeKoV55-G8M1SQ" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU4MAVi2EeKoV55-G8M1SQ" id="(0.7450980392156863,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_-gHW0CZxEeGjJpJVRtToAg" type="3003" source="_vl0hwCZxEeGjJpJVRtToAg" target="_702DYCZxEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_-gHW0SZxEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_-gHW0iZxEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_STGqZFi2EeKoV55-G8M1SQ" type="3002" source="_SS-HiVi2EeKoV55-G8M1SQ" target="_SS6dIli2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_STGqaFi2EeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STGqaVi2EeKoV55-G8M1SQ" x="21" y="-34"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_STGqali2EeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_STGqa1i2EeKoV55-G8M1SQ" x="-10" y="-34"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STGqZVi2EeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STGqZli2EeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//TypedElement/type"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STGqZ1i2EeKoV55-G8M1SQ" points="[-42, -6, 340, -52]$[-382, -6, 0, -52]$[-382, 46, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU5aIFi2EeKoV55-G8M1SQ" id="(0.4215686274509804,0.7619047619047619)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU5aIVi2EeKoV55-G8M1SQ" id="(0.5294117647058824,0.023809523809523808)"/>
+  </edges>
+  <edges xmi:type="notation:Edge" xmi:id="_STGqbFi2EeKoV55-G8M1SQ" type="3003" source="_SS-umVi2EeKoV55-G8M1SQ" target="_SS7EOVi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_STHRcFi2EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_STHRcVi2EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-gHW0yZxEeGjJpJVRtToAg" points="[14, -23, -124, 184]$[88, -200, -50, 7]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_STHRcli2EeKoV55-G8M1SQ" points="[39, 0, 65, 58]$[39, -32, 65, 26]$[-46, -32, -20, 26]$[-46, -58, -20, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU1vwFi2EeKoV55-G8M1SQ" id="(0.5,0.0)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SU1vwVi2EeKoV55-G8M1SQ" id="(0.6666666666666666,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_DW-_ICZyEeGjJpJVRtToAg" type="3003" source="_zh7u0CZtEeGjJpJVRtToAg" target="__l7IUCZxEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_DW-_ISZyEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_DW-_IiZyEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_S4bTEFi4EeKoV55-G8M1SQ" type="3003" source="_pppTAFi2EeKoV55-G8M1SQ" target="_SS6dIli2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_S4bTEVi4EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_S4bTEli4EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DW-_IyZyEeGjJpJVRtToAg" points="[0, -8, -12, 77]$[-13, -61, -25, 24]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DXA0UCZyEeGjJpJVRtToAg" id="(0.30392156862745096,0.21428571428571427)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_S4bTE1i4EeKoV55-G8M1SQ" points="[-33, -20, 71, 136]$[-33, -78, 71, 78]$[-102, -78, 2, 78]$[-102, -136, 2, 20]"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_D5434CZyEeGjJpJVRtToAg" type="3003" source="_46n_4CZvEeGjJpJVRtToAg" target="__l7IUCZxEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_D5434SZyEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_D5434iZyEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_Tigx4Fi4EeKoV55-G8M1SQ" type="3003" source="_WQwLsFi2EeKoV55-G8M1SQ" target="_SS6dIli2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Tigx4Vi4EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Tigx4li4EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_D5434yZyEeGjJpJVRtToAg" points="[-50, -18, 200, 71]$[-248, -73, 2, 16]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_D56tECZyEeGjJpJVRtToAg" id="(0.803921568627451,0.673469387755102)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Tigx41i4EeKoV55-G8M1SQ" points="[-2, -6, -82, 136]$[-2, -64, -82, 78]$[82, -64, 2, 78]$[82, -122, 2, 20]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fR2G0Fi4EeKoV55-G8M1SQ" id="(0.6274509803921569,0.16666666666666666)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_EfiioCZyEeGjJpJVRtToAg" type="3003" source="_vl0hwCZxEeGjJpJVRtToAg" target="__l7IUCZxEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_EfiioSZyEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_EfiioiZyEeGjJpJVRtToAg" fontName="Lucida Grande"/>
+  <edges xmi:type="notation:Edge" xmi:id="_UcXyEFi4EeKoV55-G8M1SQ" type="3003" source="_TyDUoFi2EeKoV55-G8M1SQ" target="_WQwLsFi2EeKoV55-G8M1SQ">
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_UcXyEVi4EeKoV55-G8M1SQ" routing="Rectilinear" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_UcXyEli4EeKoV55-G8M1SQ" fontName="Lucida Grande"/>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EfiioyZyEeGjJpJVRtToAg" points="[-4, -20, 2, 202]$[-4, -224, 2, -2]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EfjwwCZyEeGjJpJVRtToAg" id="(0.5686274509803921,0.061224489795918366)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UcXyE1i4EeKoV55-G8M1SQ" points="[-18, -20, -10, 92]$[-18, -92, -10, 20]"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_KGhj0CZzEeGjJpJVRtToAg" type="3002" source="_zh7u0CZtEeGjJpJVRtToAg" target="_zh7u0CZtEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_KGiK4CZzEeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_KGiK4SZzEeGjJpJVRtToAg" x="27" y="-17"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_KGiK4iZzEeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_KGiK4yZzEeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_KGhj0SZzEeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_KGhj0iZzEeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Type/superTypes"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KGhj0yZzEeGjJpJVRtToAg" points="[0, 5, 49, 21]$[0, 69, 49, 85]$[0, 69, 49, 85]$[-80, 69, -31, 85]$[-80, -12, -31, 4]$[-61, -12, -12, 4]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Z-CPECZzEeGjJpJVRtToAg" id="(0.6176470588235294,0.8809523809523809)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Z-CPESZzEeGjJpJVRtToAg" id="(0.12745098039215685,0.47619047619047616)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_Mt_2gFjLEeKoV55-G8M1SQ" type="3002" source="_WQwLsFi2EeKoV55-G8M1SQ" target="_WQwLsFi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_MuAdkFjLEeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_MuAdkVjLEeKoV55-G8M1SQ" x="17" y="28"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_MuAdkljLEeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_MuAdk1jLEeKoV55-G8M1SQ" x="13" y="-18"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mt_2gVjLEeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_Mt_2gljLEeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//PrimitiveType/baseType"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mt_2g1jLEeKoV55-G8M1SQ" points="[12, 10, 17, -3]$[48, 10, 53, -3]$[48, 58, 53, 45]$[-5, 58, 0, 45]$[-5, 18, 0, 5]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wkKSIFo3EeKEveQVn27c8A" id="(0.8823529411764706,0.5714285714285714)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xxUGQFjNEeKoV55-G8M1SQ" id="(0.8333333333333334,0.8809523809523809)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_GOtS0CZ1EeGjJpJVRtToAg" type="3002" source="_DVdNwCZ1EeGjJpJVRtToAg" target="_zh7u0CZtEeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_GOtS1CZ1EeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_GOtS1SZ1EeGjJpJVRtToAg" x="-10" y="-10"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_GOtS1iZ1EeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_GOt54CZ1EeGjJpJVRtToAg" x="10" y="10"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_GOtS0SZ1EeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_GOtS0iZ1EeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Library/types"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GOtS0yZ1EeGjJpJVRtToAg" points="[3, 20, -16, -99]$[20, 102, 1, -17]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QantMCZ1EeGjJpJVRtToAg" id="(0.5,0.5)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GOvIACZ1EeGjJpJVRtToAg" id="(0.09803921568627451,0.42857142857142855)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_T4twwFjLEeKoV55-G8M1SQ" type="3002" source="_TyDUoFi2EeKoV55-G8M1SQ" target="_7DlvcFi4EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_T4u-4FjLEeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_T4u-4VjLEeKoV55-G8M1SQ" x="-7" y="-12"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_T4u-4ljLEeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_T4u-41jLEeKoV55-G8M1SQ" x="-6" y="12"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_T4twwVjLEeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_T4twwljLEeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//EnumerationType/enumerator"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T4tww1jLEeKoV55-G8M1SQ" points="[16, 20, -42, -59]$[30, 36, -28, -43]$[42, 56, -16, -23]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0GhVAFjLEeKoV55-G8M1SQ" id="(0.5,0.5)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0GhVAVjLEeKoV55-G8M1SQ" id="(0.5,0.5)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_NOa28CZ1EeGjJpJVRtToAg" type="3002" source="_zh7u0CZtEeGjJpJVRtToAg" target="_DVdNwCZ1EeGjJpJVRtToAg">
-    <children xmi:type="notation:Node" xmi:id="_NObeACZ1EeGjJpJVRtToAg" type="4011">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_NObeASZ1EeGjJpJVRtToAg" x="-10" y="-10"/>
-    </children>
-    <children xmi:type="notation:Node" xmi:id="_NObeAiZ1EeGjJpJVRtToAg" type="4012">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_NObeAyZ1EeGjJpJVRtToAg" x="-3" y="21"/>
-    </children>
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_NOa28SZ1EeGjJpJVRtToAg" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_NOa28iZ1EeGjJpJVRtToAg" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
-    <element xmi:type="ecore:EReference" href="Types.ecore#//Type/owningLibrary"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NOa28yZ1EeGjJpJVRtToAg" points="[1, -17, 20, 102]$[-16, -99, 3, 20]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Qao7UCZ1EeGjJpJVRtToAg" id="(0.09803921568627451,0.42857142857142855)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Qao7USZ1EeGjJpJVRtToAg" id="(0.5,0.5)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_YkbR8FjLEeKoV55-G8M1SQ" type="3002" source="_7DlvcFi4EeKoV55-G8M1SQ" target="_TyDUoFi2EeKoV55-G8M1SQ">
+    <children xmi:type="notation:Node" xmi:id="_Ykb5AFjLEeKoV55-G8M1SQ" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ykb5AVjLEeKoV55-G8M1SQ" x="-26" y="13"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_Ykb5AljLEeKoV55-G8M1SQ" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_Ykb5A1jLEeKoV55-G8M1SQ" x="-8" y="-12"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_YkbR8VjLEeKoV55-G8M1SQ" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_YkbR8ljLEeKoV55-G8M1SQ" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//Enumerator/owningEnumeration"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YkbR81jLEeKoV55-G8M1SQ" points="[-16, -23, 42, 56]$[-28, -43, 30, 36]$[-42, -59, 16, 20]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hzWfoFjLEeKoV55-G8M1SQ" id="(0.5,0.5)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hzWfoVjLEeKoV55-G8M1SQ" id="(0.5,0.5)"/>
   </edges>
-  <edges xmi:type="notation:Edge" xmi:id="_4GvRMFcJEeGSfaursziXVw" type="3003" source="_1VKhcVcJEeGSfaursziXVw" target="_46n_4CZvEeGjJpJVRtToAg">
-    <styles xmi:type="notation:ConnectorStyle" xmi:id="_4GvRMVcJEeGSfaursziXVw" routing="Rectilinear" lineColor="4210752"/>
-    <styles xmi:type="notation:FontStyle" xmi:id="_4GvRMlcJEeGSfaursziXVw" fontName="Lucida Grande"/>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4GvRM1cJEeGSfaursziXVw" points="[-13, 0, 185, 19]$[-145, 0, 53, 19]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4GxtcFcJEeGSfaursziXVw" id="(0.13725490196078433,0.6190476190476191)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4GxtcVcJEeGSfaursziXVw" id="(0.47058823529411764,0.14285714285714285)"/>
+  <edges xmi:type="notation:Edge" xmi:id="_m35qYFpGEeKEveQVn27c8A" type="3002" source="_SS6dIli2EeKoV55-G8M1SQ" target="_cI8NUFpGEeKEveQVn27c8A">
+    <children xmi:type="notation:Node" xmi:id="_m37fkFpGEeKEveQVn27c8A" type="4011">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_m37fkVpGEeKEveQVn27c8A" x="-19" y="-9"/>
+    </children>
+    <children xmi:type="notation:Node" xmi:id="_m38GoFpGEeKEveQVn27c8A" type="4012">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_m38GoVpGEeKEveQVn27c8A" x="-6" y="11"/>
+    </children>
+    <styles xmi:type="notation:ConnectorStyle" xmi:id="_m35qYVpGEeKEveQVn27c8A" lineColor="4210752"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_m35qYlpGEeKEveQVn27c8A" fontColor="4210752" fontName="Lucida Grande" fontHeight="10"/>
+    <element xmi:type="ecore:EReference" href="types.ecore#//Type/constraint"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m35qY1pGEeKEveQVn27c8A" points="[18, 3, -328, -68]$[347, 91, 1, 20]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m3-i4VpGEeKEveQVn27c8A" id="(0.2032520325203252,0.5918367346938775)"/>
   </edges>
 </notation:Diagram>

+ 0 - 2
plugins/org.yakindu.base.types/plugin.xml

@@ -9,8 +9,6 @@
 -->
 
 <plugin>
-   <extension-point id="libraries" name="Yakindu Type Libraries" schema="schema/libraries.exsd"/>
-   
    <extension point="org.eclipse.emf.ecore.generated_package">
       <package
             uri="http://www.yakindu.org/base/types/2.0.0"

+ 0 - 99
plugins/org.yakindu.base.types/schema/libraries.exsd

@@ -1,99 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.yakindu.sct.base.types" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.yakindu.sct.base.types" id="org.yakindu.sct.base.types.libraries" name="Yakindu Type Libraries"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <sequence minOccurs="1" maxOccurs="unbounded">
-            <element ref="TypeLibrary"/>
-         </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="TypeLibrary">
-      <complexType>
-         <attribute name="location" type="string" use="required">
-            <annotation>
-               <documentation>
-                 Plugin-relative path pointing to the *.types file, which contains the type definitions.
-               </documentation>
-            </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>
-
-
-</schema>

+ 59 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/ComplexType.java

@@ -0,0 +1,59 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Complex Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.ComplexType#getFeatures <em>Features</em>}</li>
+ *   <li>{@link org.yakindu.base.types.ComplexType#getSuperTypes <em>Super Types</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getComplexType()
+ * @model
+ * @generated
+ */
+public interface ComplexType extends Type {
+	/**
+	 * Returns the value of the '<em><b>Features</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.Feature}.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Feature#getOwningType <em>Owning Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Features</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Features</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getComplexType_Features()
+	 * @see org.yakindu.base.types.Feature#getOwningType
+	 * @model opposite="owningType" containment="true"
+	 * @generated
+	 */
+	EList<Feature> getFeatures();
+
+	/**
+	 * Returns the value of the '<em><b>Super Types</b></em>' reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.ComplexType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Super Types</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Super Types</em>' reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getComplexType_SuperTypes()
+	 * @model
+	 * @generated
+	 */
+	EList<ComplexType> getSuperTypes();
+
+} // ComplexType

+ 59 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/DataType.java

@@ -0,0 +1,59 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Data Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.DataType#getFeatures <em>Features</em>}</li>
+ *   <li>{@link org.yakindu.base.types.DataType#getSuperTypes <em>Super Types</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getDataType()
+ * @model
+ * @generated
+ */
+public interface DataType extends Type {
+	/**
+	 * Returns the value of the '<em><b>Features</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.Feature}.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Feature#getOwningType <em>Owning Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Features</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Features</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getDataType_Features()
+	 * @see org.yakindu.base.types.Feature#getOwningType
+	 * @model opposite="owningType" containment="true"
+	 * @generated
+	 */
+	EList<Feature> getFeatures();
+
+	/**
+	 * Returns the value of the '<em><b>Super Types</b></em>' reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.DataType}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Super Types</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Super Types</em>' reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getDataType_SuperTypes()
+	 * @model
+	 * @generated
+	 */
+	EList<DataType> getSuperTypes();
+
+} // DataType

+ 43 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/EnumerationType.java

@@ -0,0 +1,43 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Enumeration Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.EnumerationType#getEnumerator <em>Enumerator</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getEnumerationType()
+ * @model
+ * @generated
+ */
+public interface EnumerationType extends PrimitiveType {
+
+	/**
+	 * Returns the value of the '<em><b>Enumerator</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.Enumerator}.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Enumerator#getOwningEnumeration <em>Owning Enumeration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Enumerator</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Enumerator</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getEnumerationType_Enumerator()
+	 * @see org.yakindu.base.types.Enumerator#getOwningEnumeration
+	 * @model opposite="owningEnumeration" containment="true"
+	 * @generated
+	 */
+	EList<Enumerator> getEnumerator();
+} // EnumerationType

+ 79 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Enumerator.java

@@ -0,0 +1,79 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.yakindu.base.base.NamedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Enumerator</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.Enumerator#getOwningEnumeration <em>Owning Enumeration</em>}</li>
+ *   <li>{@link org.yakindu.base.types.Enumerator#getLiteralValue <em>Literal Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getEnumerator()
+ * @model
+ * @generated
+ */
+public interface Enumerator extends NamedElement {
+
+	/**
+	 * Returns the value of the '<em><b>Owning Enumeration</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.EnumerationType#getEnumerator <em>Enumerator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Owning Enumeration</em>' container reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Owning Enumeration</em>' container reference.
+	 * @see #setOwningEnumeration(EnumerationType)
+	 * @see org.yakindu.base.types.TypesPackage#getEnumerator_OwningEnumeration()
+	 * @see org.yakindu.base.types.EnumerationType#getEnumerator
+	 * @model opposite="enumerator" transient="false"
+	 * @generated
+	 */
+	EnumerationType getOwningEnumeration();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.Enumerator#getOwningEnumeration <em>Owning Enumeration</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Owning Enumeration</em>' container reference.
+	 * @see #getOwningEnumeration()
+	 * @generated
+	 */
+	void setOwningEnumeration(EnumerationType value);
+
+	/**
+	 * Returns the value of the '<em><b>Literal Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Literal Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Literal Value</em>' attribute.
+	 * @see #setLiteralValue(Object)
+	 * @see org.yakindu.base.types.TypesPackage#getEnumerator_LiteralValue()
+	 * @model
+	 * @generated
+	 */
+	Object getLiteralValue();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.Enumerator#getLiteralValue <em>Literal Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Literal Value</em>' attribute.
+	 * @see #getLiteralValue()
+	 * @generated
+	 */
+	void setLiteralValue(Object value);
+} // Enumerator

+ 5 - 5
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Feature.java

@@ -28,7 +28,7 @@ import org.yakindu.base.base.NamedElement;
 public interface Feature extends TypedElement, NamedElement {
 	/**
 	 * Returns the value of the '<em><b>Owning Type</b></em>' container reference.
-	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Type#getFeatures <em>Features</em>}'.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.ComplexType#getFeatures <em>Features</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Owning Type</em>' container reference isn't clear,
@@ -36,13 +36,13 @@ public interface Feature extends TypedElement, NamedElement {
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Owning Type</em>' container reference.
-	 * @see #setOwningType(Type)
+	 * @see #setOwningType(ComplexType)
 	 * @see org.yakindu.base.types.TypesPackage#getFeature_OwningType()
-	 * @see org.yakindu.base.types.Type#getFeatures
+	 * @see org.yakindu.base.types.ComplexType#getFeatures
 	 * @model opposite="features" transient="false"
 	 * @generated
 	 */
-	Type getOwningType();
+	ComplexType getOwningType();
 
 	/**
 	 * Sets the value of the '{@link org.yakindu.base.types.Feature#getOwningType <em>Owning Type</em>}' container reference.
@@ -52,6 +52,6 @@ public interface Feature extends TypedElement, NamedElement {
 	 * @see #getOwningType()
 	 * @generated
 	 */
-	void setOwningType(Type value);
+	void setOwningType(ComplexType value);
 
 } // Feature

+ 49 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/PrimitiveType.java

@@ -0,0 +1,49 @@
+/**
+ */
+package org.yakindu.base.types;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Primitive Type</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.PrimitiveType#getBaseType <em>Base Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getPrimitiveType()
+ * @model
+ * @generated
+ */
+public interface PrimitiveType extends Type {
+
+	/**
+	 * Returns the value of the '<em><b>Base Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Type</em>' reference.
+	 * @see #setBaseType(PrimitiveType)
+	 * @see org.yakindu.base.types.TypesPackage#getPrimitiveType_BaseType()
+	 * @model
+	 * @generated
+	 */
+	PrimitiveType getBaseType();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.PrimitiveType#getBaseType <em>Base Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Type</em>' reference.
+	 * @see #getBaseType()
+	 * @generated
+	 */
+	void setBaseType(PrimitiveType value);
+} // PrimitiveType

+ 9 - 56
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/Type.java

@@ -17,77 +17,30 @@ import org.yakindu.base.base.NamedElement;
  * <p>
  * The following features are supported:
  * <ul>
- *   <li>{@link org.yakindu.base.types.Type#getFeatures <em>Features</em>}</li>
- *   <li>{@link org.yakindu.base.types.Type#getSuperTypes <em>Super Types</em>}</li>
- *   <li>{@link org.yakindu.base.types.Type#getOwningLibrary <em>Owning Library</em>}</li>
+ *   <li>{@link org.yakindu.base.types.Type#getConstraint <em>Constraint</em>}</li>
  * </ul>
  * </p>
  *
  * @see org.yakindu.base.types.TypesPackage#getType()
- * @model
+ * @model abstract="true"
  * @generated
  */
 public interface Type extends NamedElement {
-	/**
-	 * Returns the value of the '<em><b>Features</b></em>' containment reference list.
-	 * The list contents are of type {@link org.yakindu.base.types.Feature}.
-	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Feature#getOwningType <em>Owning Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Features</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Features</em>' containment reference list.
-	 * @see org.yakindu.base.types.TypesPackage#getType_Features()
-	 * @see org.yakindu.base.types.Feature#getOwningType
-	 * @model opposite="owningType" containment="true"
-	 * @generated
-	 */
-	EList<Feature> getFeatures();
 
 	/**
-	 * Returns the value of the '<em><b>Super Types</b></em>' reference list.
-	 * The list contents are of type {@link org.yakindu.base.types.Type}.
+	 * Returns the value of the '<em><b>Constraint</b></em>' containment reference list.
+	 * The list contents are of type {@link org.yakindu.base.types.TypeConstraint}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Super Types</em>' reference list isn't clear,
+	 * If the meaning of the '<em>Constraint</em>' containment reference list isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Super Types</em>' reference list.
-	 * @see org.yakindu.base.types.TypesPackage#getType_SuperTypes()
-	 * @model
-	 * @generated
-	 */
-	EList<Type> getSuperTypes();
-
-	/**
-	 * Returns the value of the '<em><b>Owning Library</b></em>' container reference.
-	 * It is bidirectional and its opposite is '{@link org.yakindu.base.types.Library#getTypes <em>Types</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Owning Library</em>' container reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Owning Library</em>' container reference.
-	 * @see #setOwningLibrary(Library)
-	 * @see org.yakindu.base.types.TypesPackage#getType_OwningLibrary()
-	 * @see org.yakindu.base.types.Library#getTypes
-	 * @model opposite="types" transient="false"
-	 * @generated
-	 */
-	Library getOwningLibrary();
-
-	/**
-	 * Sets the value of the '{@link org.yakindu.base.types.Type#getOwningLibrary <em>Owning Library</em>}' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Owning Library</em>' container reference.
-	 * @see #getOwningLibrary()
+	 * @return the value of the '<em>Constraint</em>' containment reference list.
+	 * @see org.yakindu.base.types.TypesPackage#getType_Constraint()
+	 * @model containment="true"
 	 * @generated
 	 */
-	void setOwningLibrary(Library value);
+	EList<TypeConstraint> getConstraint();
 
 } // Type

+ 50 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypeConstraint.java

@@ -0,0 +1,50 @@
+/**
+ */
+package org.yakindu.base.types;
+
+import org.yakindu.base.base.NamedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type Constraint</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.TypeConstraint#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.yakindu.base.types.TypesPackage#getTypeConstraint()
+ * @model
+ * @generated
+ */
+public interface TypeConstraint extends NamedElement {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(Object)
+	 * @see org.yakindu.base.types.TypesPackage#getTypeConstraint_Value()
+	 * @model
+	 * @generated
+	 */
+	Object getValue();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.base.types.TypeConstraint#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(Object value);
+
+} // TypeConstraint

+ 42 - 15
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesFactory.java

@@ -25,15 +25,6 @@ public interface TypesFactory extends EFactory {
 	 */
 	TypesFactory eINSTANCE = org.yakindu.base.types.impl.TypesFactoryImpl.init();
 
-	/**
-	 * Returns a new object of class '<em>Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Type</em>'.
-	 * @generated
-	 */
-	Type createType();
-
 	/**
 	 * Returns a new object of class '<em>Operation</em>'.
 	 * <!-- begin-user-doc -->
@@ -62,22 +53,58 @@ public interface TypesFactory extends EFactory {
 	Parameter createParameter();
 
 	/**
-	 * Returns a new object of class '<em>Library</em>'.
+	 * Returns a new object of class '<em>Event</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Event</em>'.
+	 * @generated
+	 */
+	Event createEvent();
+
+	/**
+	 * Returns a new object of class '<em>Enumeration Type</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Library</em>'.
+	 * @return a new object of class '<em>Enumeration Type</em>'.
 	 * @generated
 	 */
-	Library createLibrary();
+	EnumerationType createEnumerationType();
 
 	/**
-	 * Returns a new object of class '<em>Event</em>'.
+	 * Returns a new object of class '<em>Primitive Type</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Event</em>'.
+	 * @return a new object of class '<em>Primitive Type</em>'.
 	 * @generated
 	 */
-	Event createEvent();
+	PrimitiveType createPrimitiveType();
+
+	/**
+	 * Returns a new object of class '<em>Complex Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Complex Type</em>'.
+	 * @generated
+	 */
+	ComplexType createComplexType();
+
+	/**
+	 * Returns a new object of class '<em>Enumerator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Enumerator</em>'.
+	 * @generated
+	 */
+	Enumerator createEnumerator();
+
+	/**
+	 * Returns a new object of class '<em>Type Constraint</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Type Constraint</em>'.
+	 * @generated
+	 */
+	TypeConstraint createTypeConstraint();
 
 	/**
 	 * Returns the package supported by this factory.

+ 453 - 131
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/TypesPackage.java

@@ -68,7 +68,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getType()
 	 * @generated
 	 */
-	int TYPE = 1;
+	int TYPE = 0;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.TypedElement <em>Typed Element</em>}' class.
@@ -78,7 +78,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypedElement()
 	 * @generated
 	 */
-	int TYPED_ELEMENT = 6;
+	int TYPED_ELEMENT = 5;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.FeatureImpl <em>Feature</em>}' class.
@@ -88,7 +88,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getFeature()
 	 * @generated
 	 */
-	int FEATURE = 2;
+	int FEATURE = 1;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.OperationImpl <em>Operation</em>}' class.
@@ -98,7 +98,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getOperation()
 	 * @generated
 	 */
-	int OPERATION = 3;
+	int OPERATION = 2;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.PropertyImpl <em>Property</em>}' class.
@@ -108,7 +108,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getProperty()
 	 * @generated
 	 */
-	int PROPERTY = 4;
+	int PROPERTY = 3;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.base.types.impl.ParameterImpl <em>Parameter</em>}' class.
@@ -118,44 +118,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getParameter()
 	 * @generated
 	 */
-	int PARAMETER = 5;
-
-	/**
-	 * The meta object id for the '{@link org.yakindu.base.types.impl.LibraryImpl <em>Library</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.yakindu.base.types.impl.LibraryImpl
-	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getLibrary()
-	 * @generated
-	 */
-	int LIBRARY = 0;
-
-	/**
-	 * The feature id for the '<em><b>Types</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LIBRARY__TYPES = 0;
-
-	/**
-	 * The feature id for the '<em><b>Id</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LIBRARY__ID = 1;
-
-	/**
-	 * The number of structural features of the '<em>Library</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LIBRARY_FEATURE_COUNT = 2;
+	int PARAMETER = 4;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -167,31 +130,13 @@ public interface TypesPackage extends EPackage {
 	int TYPE__NAME = BasePackage.NAMED_ELEMENT__NAME;
 
 	/**
-	 * The feature id for the '<em><b>Features</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TYPE__FEATURES = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Super Types</b></em>' reference list.
+	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE__SUPER_TYPES = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Owning Library</b></em>' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TYPE__OWNING_LIBRARY = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 2;
+	int TYPE__CONSTRAINT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
 
 	/**
 	 * The number of structural features of the '<em>Type</em>' class.
@@ -200,7 +145,7 @@ public interface TypesPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 3;
+	int TYPE_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -382,7 +327,7 @@ public interface TypesPackage extends EPackage {
 	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEvent()
 	 * @generated
 	 */
-	int EVENT = 7;
+	int EVENT = 6;
 
 	/**
 	 * The feature id for the '<em><b>Type</b></em>' reference.
@@ -422,47 +367,265 @@ public interface TypesPackage extends EPackage {
 
 
 	/**
-	 * Returns the meta object for class '{@link org.yakindu.base.types.Type <em>Type</em>}'.
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.EnumerationTypeImpl <em>Enumeration Type</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Type</em>'.
-	 * @see org.yakindu.base.types.Type
+	 * @see org.yakindu.base.types.impl.EnumerationTypeImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerationType()
 	 * @generated
 	 */
-	EClass getType();
+	int ENUMERATION_TYPE = 7;
 
 	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.Type#getFeatures <em>Features</em>}'.
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.PrimitiveTypeImpl <em>Primitive Type</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Features</em>'.
-	 * @see org.yakindu.base.types.Type#getFeatures()
-	 * @see #getType()
+	 * @see org.yakindu.base.types.impl.PrimitiveTypeImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPrimitiveType()
 	 * @generated
 	 */
-	EReference getType_Features();
+	int PRIMITIVE_TYPE = 8;
 
 	/**
-	 * Returns the meta object for the reference list '{@link org.yakindu.base.types.Type#getSuperTypes <em>Super Types</em>}'.
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRIMITIVE_TYPE__NAME = TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRIMITIVE_TYPE__CONSTRAINT = TYPE__CONSTRAINT;
+
+	/**
+	 * The feature id for the '<em><b>Base Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRIMITIVE_TYPE__BASE_TYPE = TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Primitive Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRIMITIVE_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATION_TYPE__NAME = PRIMITIVE_TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATION_TYPE__CONSTRAINT = PRIMITIVE_TYPE__CONSTRAINT;
+
+	/**
+	 * The feature id for the '<em><b>Base Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATION_TYPE__BASE_TYPE = PRIMITIVE_TYPE__BASE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Enumerator</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATION_TYPE__ENUMERATOR = PRIMITIVE_TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Enumeration Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATION_TYPE_FEATURE_COUNT = PRIMITIVE_TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.ComplexTypeImpl <em>Complex Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.ComplexTypeImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getComplexType()
+	 * @generated
+	 */
+	int COMPLEX_TYPE = 9;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPLEX_TYPE__NAME = TYPE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Constraint</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPLEX_TYPE__CONSTRAINT = TYPE__CONSTRAINT;
+
+	/**
+	 * The feature id for the '<em><b>Features</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPLEX_TYPE__FEATURES = TYPE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Super Types</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPLEX_TYPE__SUPER_TYPES = TYPE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Complex Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPLEX_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.EnumeratorImpl <em>Enumerator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.EnumeratorImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerator()
+	 * @generated
+	 */
+	int ENUMERATOR = 10;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATOR__NAME = BasePackage.NAMED_ELEMENT__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Owning Enumeration</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATOR__OWNING_ENUMERATION = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Literal Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATOR__LITERAL_VALUE = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Enumerator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ENUMERATOR_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+
+	/**
+	 * The meta object id for the '{@link org.yakindu.base.types.impl.TypeConstraintImpl <em>Type Constraint</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.base.types.impl.TypeConstraintImpl
+	 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeConstraint()
+	 * @generated
+	 */
+	int TYPE_CONSTRAINT = 11;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference list '<em>Super Types</em>'.
-	 * @see org.yakindu.base.types.Type#getSuperTypes()
-	 * @see #getType()
 	 * @generated
+	 * @ordered
 	 */
-	EReference getType_SuperTypes();
+	int TYPE_CONSTRAINT__NAME = BasePackage.NAMED_ELEMENT__NAME;
 
 	/**
-	 * Returns the meta object for the container reference '{@link org.yakindu.base.types.Type#getOwningLibrary <em>Owning Library</em>}'.
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the container reference '<em>Owning Library</em>'.
-	 * @see org.yakindu.base.types.Type#getOwningLibrary()
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_CONSTRAINT__VALUE = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Type Constraint</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TYPE_CONSTRAINT_FEATURE_COUNT = BasePackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.Type <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Type</em>'.
+	 * @see org.yakindu.base.types.Type
+	 * @generated
+	 */
+	EClass getType();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.Type#getConstraint <em>Constraint</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Constraint</em>'.
+	 * @see org.yakindu.base.types.Type#getConstraint()
 	 * @see #getType()
 	 * @generated
 	 */
-	EReference getType_OwningLibrary();
+	EReference getType_Constraint();
 
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.base.types.Feature <em>Feature</em>}'.
@@ -559,46 +722,141 @@ public interface TypesPackage extends EPackage {
 	EReference getTypedElement_Type();
 
 	/**
-	 * Returns the meta object for class '{@link org.yakindu.base.types.Library <em>Library</em>}'.
+	 * Returns the meta object for class '{@link org.yakindu.base.types.Event <em>Event</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Library</em>'.
-	 * @see org.yakindu.base.types.Library
+	 * @return the meta object for class '<em>Event</em>'.
+	 * @see org.yakindu.base.types.Event
 	 * @generated
 	 */
-	EClass getLibrary();
+	EClass getEvent();
 
 	/**
-	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.Library#getTypes <em>Types</em>}'.
+	 * Returns the meta object for class '{@link org.yakindu.base.types.EnumerationType <em>Enumeration Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Types</em>'.
-	 * @see org.yakindu.base.types.Library#getTypes()
-	 * @see #getLibrary()
+	 * @return the meta object for class '<em>Enumeration Type</em>'.
+	 * @see org.yakindu.base.types.EnumerationType
 	 * @generated
 	 */
-	EReference getLibrary_Types();
+	EClass getEnumerationType();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.yakindu.base.types.Library#getId <em>Id</em>}'.
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.EnumerationType#getEnumerator <em>Enumerator</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Id</em>'.
-	 * @see org.yakindu.base.types.Library#getId()
-	 * @see #getLibrary()
+	 * @return the meta object for the containment reference list '<em>Enumerator</em>'.
+	 * @see org.yakindu.base.types.EnumerationType#getEnumerator()
+	 * @see #getEnumerationType()
 	 * @generated
 	 */
-	EAttribute getLibrary_Id();
+	EReference getEnumerationType_Enumerator();
 
 	/**
-	 * Returns the meta object for class '{@link org.yakindu.base.types.Event <em>Event</em>}'.
+	 * Returns the meta object for class '{@link org.yakindu.base.types.PrimitiveType <em>Primitive Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Event</em>'.
-	 * @see org.yakindu.base.types.Event
+	 * @return the meta object for class '<em>Primitive Type</em>'.
+	 * @see org.yakindu.base.types.PrimitiveType
 	 * @generated
 	 */
-	EClass getEvent();
+	EClass getPrimitiveType();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.yakindu.base.types.PrimitiveType#getBaseType <em>Base Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Type</em>'.
+	 * @see org.yakindu.base.types.PrimitiveType#getBaseType()
+	 * @see #getPrimitiveType()
+	 * @generated
+	 */
+	EReference getPrimitiveType_BaseType();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.ComplexType <em>Complex Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Complex Type</em>'.
+	 * @see org.yakindu.base.types.ComplexType
+	 * @generated
+	 */
+	EClass getComplexType();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.yakindu.base.types.ComplexType#getFeatures <em>Features</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Features</em>'.
+	 * @see org.yakindu.base.types.ComplexType#getFeatures()
+	 * @see #getComplexType()
+	 * @generated
+	 */
+	EReference getComplexType_Features();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.yakindu.base.types.ComplexType#getSuperTypes <em>Super Types</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Super Types</em>'.
+	 * @see org.yakindu.base.types.ComplexType#getSuperTypes()
+	 * @see #getComplexType()
+	 * @generated
+	 */
+	EReference getComplexType_SuperTypes();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.Enumerator <em>Enumerator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Enumerator</em>'.
+	 * @see org.yakindu.base.types.Enumerator
+	 * @generated
+	 */
+	EClass getEnumerator();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.yakindu.base.types.Enumerator#getOwningEnumeration <em>Owning Enumeration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Owning Enumeration</em>'.
+	 * @see org.yakindu.base.types.Enumerator#getOwningEnumeration()
+	 * @see #getEnumerator()
+	 * @generated
+	 */
+	EReference getEnumerator_OwningEnumeration();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.base.types.Enumerator#getLiteralValue <em>Literal Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Literal Value</em>'.
+	 * @see org.yakindu.base.types.Enumerator#getLiteralValue()
+	 * @see #getEnumerator()
+	 * @generated
+	 */
+	EAttribute getEnumerator_LiteralValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.yakindu.base.types.TypeConstraint <em>Type Constraint</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Type Constraint</em>'.
+	 * @see org.yakindu.base.types.TypeConstraint
+	 * @generated
+	 */
+	EClass getTypeConstraint();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.base.types.TypeConstraint#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.yakindu.base.types.TypeConstraint#getValue()
+	 * @see #getTypeConstraint()
+	 * @generated
+	 */
+	EAttribute getTypeConstraint_Value();
 
 	/**
 	 * Returns the factory that creates the instances of the model.
@@ -633,28 +891,12 @@ public interface TypesPackage extends EPackage {
 		EClass TYPE = eINSTANCE.getType();
 
 		/**
-		 * The meta object literal for the '<em><b>Features</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference TYPE__FEATURES = eINSTANCE.getType_Features();
-
-		/**
-		 * The meta object literal for the '<em><b>Super Types</b></em>' reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference TYPE__SUPER_TYPES = eINSTANCE.getType_SuperTypes();
-
-		/**
-		 * The meta object literal for the '<em><b>Owning Library</b></em>' container reference feature.
+		 * The meta object literal for the '<em><b>Constraint</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference TYPE__OWNING_LIBRARY = eINSTANCE.getType_OwningLibrary();
+		EReference TYPE__CONSTRAINT = eINSTANCE.getType_Constraint();
 
 		/**
 		 * The meta object literal for the '{@link org.yakindu.base.types.impl.FeatureImpl <em>Feature</em>}' class.
@@ -739,40 +981,120 @@ public interface TypesPackage extends EPackage {
 		EReference TYPED_ELEMENT__TYPE = eINSTANCE.getTypedElement_Type();
 
 		/**
-		 * The meta object literal for the '{@link org.yakindu.base.types.impl.LibraryImpl <em>Library</em>}' class.
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.EventImpl <em>Event</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.yakindu.base.types.impl.LibraryImpl
-		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getLibrary()
+		 * @see org.yakindu.base.types.impl.EventImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEvent()
 		 * @generated
 		 */
-		EClass LIBRARY = eINSTANCE.getLibrary();
+		EClass EVENT = eINSTANCE.getEvent();
 
 		/**
-		 * The meta object literal for the '<em><b>Types</b></em>' containment reference list feature.
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.EnumerationTypeImpl <em>Enumeration Type</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.EnumerationTypeImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerationType()
 		 * @generated
 		 */
-		EReference LIBRARY__TYPES = eINSTANCE.getLibrary_Types();
+		EClass ENUMERATION_TYPE = eINSTANCE.getEnumerationType();
 
 		/**
-		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>Enumerator</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute LIBRARY__ID = eINSTANCE.getLibrary_Id();
+		EReference ENUMERATION_TYPE__ENUMERATOR = eINSTANCE.getEnumerationType_Enumerator();
 
 		/**
-		 * The meta object literal for the '{@link org.yakindu.base.types.impl.EventImpl <em>Event</em>}' class.
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.PrimitiveTypeImpl <em>Primitive Type</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.yakindu.base.types.impl.EventImpl
-		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEvent()
+		 * @see org.yakindu.base.types.impl.PrimitiveTypeImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getPrimitiveType()
 		 * @generated
 		 */
-		EClass EVENT = eINSTANCE.getEvent();
+		EClass PRIMITIVE_TYPE = eINSTANCE.getPrimitiveType();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PRIMITIVE_TYPE__BASE_TYPE = eINSTANCE.getPrimitiveType_BaseType();
+
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.ComplexTypeImpl <em>Complex Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.ComplexTypeImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getComplexType()
+		 * @generated
+		 */
+		EClass COMPLEX_TYPE = eINSTANCE.getComplexType();
+
+		/**
+		 * The meta object literal for the '<em><b>Features</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPLEX_TYPE__FEATURES = eINSTANCE.getComplexType_Features();
+
+		/**
+		 * The meta object literal for the '<em><b>Super Types</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPLEX_TYPE__SUPER_TYPES = eINSTANCE.getComplexType_SuperTypes();
+
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.EnumeratorImpl <em>Enumerator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.EnumeratorImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getEnumerator()
+		 * @generated
+		 */
+		EClass ENUMERATOR = eINSTANCE.getEnumerator();
+
+		/**
+		 * The meta object literal for the '<em><b>Owning Enumeration</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ENUMERATOR__OWNING_ENUMERATION = eINSTANCE.getEnumerator_OwningEnumeration();
+
+		/**
+		 * The meta object literal for the '<em><b>Literal Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ENUMERATOR__LITERAL_VALUE = eINSTANCE.getEnumerator_LiteralValue();
+
+		/**
+		 * The meta object literal for the '{@link org.yakindu.base.types.impl.TypeConstraintImpl <em>Type Constraint</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.base.types.impl.TypeConstraintImpl
+		 * @see org.yakindu.base.types.impl.TypesPackageImpl#getTypeConstraint()
+		 * @generated
+		 */
+		EClass TYPE_CONSTRAINT = eINSTANCE.getTypeConstraint();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TYPE_CONSTRAINT__VALUE = eINSTANCE.getTypeConstraint_Value();
 
 	}
 

+ 200 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/ComplexTypeImpl.java

@@ -0,0 +1,200 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.yakindu.base.types.ComplexType;
+import org.yakindu.base.types.Feature;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Complex Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getFeatures <em>Features</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.ComplexTypeImpl#getSuperTypes <em>Super Types</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ComplexTypeImpl extends TypeImpl implements ComplexType {
+	/**
+	 * The cached value of the '{@link #getFeatures() <em>Features</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFeatures()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Feature> features;
+
+	/**
+	 * The cached value of the '{@link #getSuperTypes() <em>Super Types</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSuperTypes()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<ComplexType> superTypes;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComplexTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.COMPLEX_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Feature> getFeatures() {
+		if (features == null) {
+			features = new EObjectContainmentWithInverseEList<Feature>(Feature.class, this, TypesPackage.COMPLEX_TYPE__FEATURES, TypesPackage.FEATURE__OWNING_TYPE);
+		}
+		return features;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<ComplexType> getSuperTypes() {
+		if (superTypes == null) {
+			superTypes = new EObjectResolvingEList<ComplexType>(ComplexType.class, this, TypesPackage.COMPLEX_TYPE__SUPER_TYPES);
+		}
+		return superTypes;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getFeatures()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				return ((InternalEList<?>)getFeatures()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				return getFeatures();
+			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+				return getSuperTypes();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				getFeatures().clear();
+				getFeatures().addAll((Collection<? extends Feature>)newValue);
+				return;
+			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+				getSuperTypes().clear();
+				getSuperTypes().addAll((Collection<? extends ComplexType>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				getFeatures().clear();
+				return;
+			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+				getSuperTypes().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.COMPLEX_TYPE__FEATURES:
+				return features != null && !features.isEmpty();
+			case TypesPackage.COMPLEX_TYPE__SUPER_TYPES:
+				return superTypes != null && !superTypes.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ComplexTypeImpl

+ 161 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/EnumerationTypeImpl.java

@@ -0,0 +1,161 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Enumeration Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.EnumerationTypeImpl#getEnumerator <em>Enumerator</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EnumerationTypeImpl extends PrimitiveTypeImpl implements EnumerationType {
+	/**
+	 * The cached value of the '{@link #getEnumerator() <em>Enumerator</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnumerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Enumerator> enumerator;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnumerationTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.ENUMERATION_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Enumerator> getEnumerator() {
+		if (enumerator == null) {
+			enumerator = new EObjectContainmentWithInverseEList<Enumerator>(Enumerator.class, this, TypesPackage.ENUMERATION_TYPE__ENUMERATOR, TypesPackage.ENUMERATOR__OWNING_ENUMERATION);
+		}
+		return enumerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getEnumerator()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				return ((InternalEList<?>)getEnumerator()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				return getEnumerator();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				getEnumerator().clear();
+				getEnumerator().addAll((Collection<? extends Enumerator>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				getEnumerator().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATION_TYPE__ENUMERATOR:
+				return enumerator != null && !enumerator.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //EnumerationTypeImpl

+ 258 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/EnumeratorImpl.java

@@ -0,0 +1,258 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.yakindu.base.base.impl.NamedElementImpl;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Enumerator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.EnumeratorImpl#getOwningEnumeration <em>Owning Enumeration</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.EnumeratorImpl#getLiteralValue <em>Literal Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EnumeratorImpl extends NamedElementImpl implements Enumerator {
+	/**
+	 * The default value of the '{@link #getLiteralValue() <em>Literal Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLiteralValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Object LITERAL_VALUE_EDEFAULT = null;
+	/**
+	 * The cached value of the '{@link #getLiteralValue() <em>Literal Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLiteralValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Object literalValue = LITERAL_VALUE_EDEFAULT;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EnumeratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.ENUMERATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnumerationType getOwningEnumeration() {
+		if (eContainerFeatureID() != TypesPackage.ENUMERATOR__OWNING_ENUMERATION) return null;
+		return (EnumerationType)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOwningEnumeration(EnumerationType newOwningEnumeration, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newOwningEnumeration, TypesPackage.ENUMERATOR__OWNING_ENUMERATION, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOwningEnumeration(EnumerationType newOwningEnumeration) {
+		if (newOwningEnumeration != eInternalContainer() || (eContainerFeatureID() != TypesPackage.ENUMERATOR__OWNING_ENUMERATION && newOwningEnumeration != null)) {
+			if (EcoreUtil.isAncestor(this, newOwningEnumeration))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newOwningEnumeration != null)
+				msgs = ((InternalEObject)newOwningEnumeration).eInverseAdd(this, TypesPackage.ENUMERATION_TYPE__ENUMERATOR, EnumerationType.class, msgs);
+			msgs = basicSetOwningEnumeration(newOwningEnumeration, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.ENUMERATOR__OWNING_ENUMERATION, newOwningEnumeration, newOwningEnumeration));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getLiteralValue() {
+		return literalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLiteralValue(Object newLiteralValue) {
+		Object oldLiteralValue = literalValue;
+		literalValue = newLiteralValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.ENUMERATOR__LITERAL_VALUE, oldLiteralValue, literalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetOwningEnumeration((EnumerationType)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				return basicSetOwningEnumeration(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				return eInternalContainer().eInverseRemove(this, TypesPackage.ENUMERATION_TYPE__ENUMERATOR, EnumerationType.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				return getOwningEnumeration();
+			case TypesPackage.ENUMERATOR__LITERAL_VALUE:
+				return getLiteralValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				setOwningEnumeration((EnumerationType)newValue);
+				return;
+			case TypesPackage.ENUMERATOR__LITERAL_VALUE:
+				setLiteralValue(newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				setOwningEnumeration((EnumerationType)null);
+				return;
+			case TypesPackage.ENUMERATOR__LITERAL_VALUE:
+				setLiteralValue(LITERAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.ENUMERATOR__OWNING_ENUMERATION:
+				return getOwningEnumeration() != null;
+			case TypesPackage.ENUMERATOR__LITERAL_VALUE:
+				return LITERAL_VALUE_EDEFAULT == null ? literalValue != null : !LITERAL_VALUE_EDEFAULT.equals(literalValue);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (literalValue: ");
+		result.append(literalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //EnumeratorImpl

+ 10 - 9
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/FeatureImpl.java

@@ -15,6 +15,7 @@ import org.eclipse.emf.ecore.impl.EObjectImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.base.types.ComplexType;
 import org.yakindu.base.types.Feature;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypesPackage;
@@ -148,9 +149,9 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Type getOwningType() {
+	public ComplexType getOwningType() {
 		if (eContainerFeatureID() != TypesPackage.FEATURE__OWNING_TYPE) return null;
-		return (Type)eContainer();
+		return (ComplexType)eContainer();
 	}
 
 	/**
@@ -158,7 +159,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public NotificationChain basicSetOwningType(Type newOwningType, NotificationChain msgs) {
+	public NotificationChain basicSetOwningType(ComplexType newOwningType, NotificationChain msgs) {
 		msgs = eBasicSetContainer((InternalEObject)newOwningType, TypesPackage.FEATURE__OWNING_TYPE, msgs);
 		return msgs;
 	}
@@ -168,7 +169,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setOwningType(Type newOwningType) {
+	public void setOwningType(ComplexType newOwningType) {
 		if (newOwningType != eInternalContainer() || (eContainerFeatureID() != TypesPackage.FEATURE__OWNING_TYPE && newOwningType != null)) {
 			if (EcoreUtil.isAncestor(this, newOwningType))
 				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
@@ -176,7 +177,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 			if (eInternalContainer() != null)
 				msgs = eBasicRemoveFromContainer(msgs);
 			if (newOwningType != null)
-				msgs = ((InternalEObject)newOwningType).eInverseAdd(this, TypesPackage.TYPE__FEATURES, Type.class, msgs);
+				msgs = ((InternalEObject)newOwningType).eInverseAdd(this, TypesPackage.COMPLEX_TYPE__FEATURES, ComplexType.class, msgs);
 			msgs = basicSetOwningType(newOwningType, msgs);
 			if (msgs != null) msgs.dispatch();
 		}
@@ -195,7 +196,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 			case TypesPackage.FEATURE__OWNING_TYPE:
 				if (eInternalContainer() != null)
 					msgs = eBasicRemoveFromContainer(msgs);
-				return basicSetOwningType((Type)otherEnd, msgs);
+				return basicSetOwningType((ComplexType)otherEnd, msgs);
 		}
 		return super.eInverseAdd(otherEnd, featureID, msgs);
 	}
@@ -223,7 +224,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
 		switch (eContainerFeatureID()) {
 			case TypesPackage.FEATURE__OWNING_TYPE:
-				return eInternalContainer().eInverseRemove(this, TypesPackage.TYPE__FEATURES, Type.class, msgs);
+				return eInternalContainer().eInverseRemove(this, TypesPackage.COMPLEX_TYPE__FEATURES, ComplexType.class, msgs);
 		}
 		return super.eBasicRemoveFromContainerFeature(msgs);
 	}
@@ -262,7 +263,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 				setName((String)newValue);
 				return;
 			case TypesPackage.FEATURE__OWNING_TYPE:
-				setOwningType((Type)newValue);
+				setOwningType((ComplexType)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -283,7 +284,7 @@ public abstract class FeatureImpl extends EObjectImpl implements Feature {
 				setName(NAME_EDEFAULT);
 				return;
 			case TypesPackage.FEATURE__OWNING_TYPE:
-				setOwningType((Type)null);
+				setOwningType((ComplexType)null);
 				return;
 		}
 		super.eUnset(featureID);

+ 0 - 236
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/LibraryImpl.java

@@ -1,236 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.yakindu.base.types.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.yakindu.base.types.Library;
-import org.yakindu.base.types.Type;
-import org.yakindu.base.types.TypesPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Library</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.yakindu.base.types.impl.LibraryImpl#getTypes <em>Types</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.LibraryImpl#getId <em>Id</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class LibraryImpl extends EObjectImpl implements Library {
-	/**
-	 * The cached value of the '{@link #getTypes() <em>Types</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTypes()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Type> types;
-
-	/**
-	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getId()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String ID_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getId()
-	 * @generated
-	 * @ordered
-	 */
-	protected String id = ID_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LibraryImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return TypesPackage.Literals.LIBRARY;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Type> getTypes() {
-		if (types == null) {
-			types = new EObjectContainmentWithInverseEList<Type>(Type.class, this, TypesPackage.LIBRARY__TYPES, TypesPackage.TYPE__OWNING_LIBRARY);
-		}
-		return types;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getId() {
-		return id;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setId(String newId) {
-		String oldId = id;
-		id = newId;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.LIBRARY__ID, oldId, id));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getTypes()).basicAdd(otherEnd, msgs);
-		}
-		return super.eInverseAdd(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				return ((InternalEList<?>)getTypes()).basicRemove(otherEnd, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				return getTypes();
-			case TypesPackage.LIBRARY__ID:
-				return getId();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				getTypes().clear();
-				getTypes().addAll((Collection<? extends Type>)newValue);
-				return;
-			case TypesPackage.LIBRARY__ID:
-				setId((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				getTypes().clear();
-				return;
-			case TypesPackage.LIBRARY__ID:
-				setId(ID_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case TypesPackage.LIBRARY__TYPES:
-				return types != null && !types.isEmpty();
-			case TypesPackage.LIBRARY__ID:
-				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (id: ");
-		result.append(id);
-		result.append(')');
-		return result.toString();
-	}
-
-} //LibraryImpl

+ 152 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/PrimitiveTypeImpl.java

@@ -0,0 +1,152 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.yakindu.base.types.PrimitiveType;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Primitive Type</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.PrimitiveTypeImpl#getBaseType <em>Base Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PrimitiveTypeImpl extends TypeImpl implements PrimitiveType {
+	/**
+	 * The cached value of the '{@link #getBaseType() <em>Base Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBaseType()
+	 * @generated
+	 * @ordered
+	 */
+	protected PrimitiveType baseType;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PrimitiveTypeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.PRIMITIVE_TYPE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PrimitiveType getBaseType() {
+		if (baseType != null && baseType.eIsProxy()) {
+			InternalEObject oldBaseType = (InternalEObject)baseType;
+			baseType = (PrimitiveType)eResolveProxy(oldBaseType);
+			if (baseType != oldBaseType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TypesPackage.PRIMITIVE_TYPE__BASE_TYPE, oldBaseType, baseType));
+			}
+		}
+		return baseType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PrimitiveType basicGetBaseType() {
+		return baseType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBaseType(PrimitiveType newBaseType) {
+		PrimitiveType oldBaseType = baseType;
+		baseType = newBaseType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.PRIMITIVE_TYPE__BASE_TYPE, oldBaseType, baseType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.PRIMITIVE_TYPE__BASE_TYPE:
+				if (resolve) return getBaseType();
+				return basicGetBaseType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.PRIMITIVE_TYPE__BASE_TYPE:
+				setBaseType((PrimitiveType)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.PRIMITIVE_TYPE__BASE_TYPE:
+				setBaseType((PrimitiveType)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.PRIMITIVE_TYPE__BASE_TYPE:
+				return baseType != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //PrimitiveTypeImpl

+ 164 - 0
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeConstraintImpl.java

@@ -0,0 +1,164 @@
+/**
+ */
+package org.yakindu.base.types.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.yakindu.base.base.impl.NamedElementImpl;
+
+import org.yakindu.base.types.TypeConstraint;
+import org.yakindu.base.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type Constraint</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.yakindu.base.types.impl.TypeConstraintImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TypeConstraintImpl extends NamedElementImpl implements TypeConstraint {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Object VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Object value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypeConstraintImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.TYPE_CONSTRAINT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(Object newValue) {
+		Object oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE_CONSTRAINT__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.TYPE_CONSTRAINT__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.TYPE_CONSTRAINT__VALUE:
+				setValue(newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.TYPE_CONSTRAINT__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.TYPE_CONSTRAINT__VALUE:
+				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: ");
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //TypeConstraintImpl

+ 22 - 149
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypeImpl.java

@@ -7,21 +7,15 @@
 package org.yakindu.base.types.impl;
 
 import java.util.Collection;
-
-import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
-import org.eclipse.emf.ecore.util.EObjectResolvingEList;
-import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.base.base.impl.NamedElementImpl;
-import org.yakindu.base.types.Feature;
-import org.yakindu.base.types.Library;
 import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypesPackage;
 
 /**
@@ -31,34 +25,22 @@ import org.yakindu.base.types.TypesPackage;
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link org.yakindu.base.types.impl.TypeImpl#getFeatures <em>Features</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.TypeImpl#getSuperTypes <em>Super Types</em>}</li>
- *   <li>{@link org.yakindu.base.types.impl.TypeImpl#getOwningLibrary <em>Owning Library</em>}</li>
+ *   <li>{@link org.yakindu.base.types.impl.TypeImpl#getConstraint <em>Constraint</em>}</li>
  * </ul>
  * </p>
  *
  * @generated
  */
-public class TypeImpl extends NamedElementImpl implements Type {
-	/**
-	 * The cached value of the '{@link #getFeatures() <em>Features</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFeatures()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Feature> features;
-
+public abstract class TypeImpl extends NamedElementImpl implements Type {
 	/**
-	 * The cached value of the '{@link #getSuperTypes() <em>Super Types</em>}' reference list.
+	 * The cached value of the '{@link #getConstraint() <em>Constraint</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getSuperTypes()
+	 * @see #getConstraint()
 	 * @generated
 	 * @ordered
 	 */
-	protected EList<Type> superTypes;
+	protected EList<TypeConstraint> constraint;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -84,83 +66,11 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EList<Feature> getFeatures() {
-		if (features == null) {
-			features = new EObjectContainmentWithInverseEList<Feature>(Feature.class, this, TypesPackage.TYPE__FEATURES, TypesPackage.FEATURE__OWNING_TYPE);
-		}
-		return features;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Type> getSuperTypes() {
-		if (superTypes == null) {
-			superTypes = new EObjectResolvingEList<Type>(Type.class, this, TypesPackage.TYPE__SUPER_TYPES);
-		}
-		return superTypes;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Library getOwningLibrary() {
-		if (eContainerFeatureID() != TypesPackage.TYPE__OWNING_LIBRARY) return null;
-		return (Library)eContainer();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetOwningLibrary(Library newOwningLibrary, NotificationChain msgs) {
-		msgs = eBasicSetContainer((InternalEObject)newOwningLibrary, TypesPackage.TYPE__OWNING_LIBRARY, msgs);
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setOwningLibrary(Library newOwningLibrary) {
-		if (newOwningLibrary != eInternalContainer() || (eContainerFeatureID() != TypesPackage.TYPE__OWNING_LIBRARY && newOwningLibrary != null)) {
-			if (EcoreUtil.isAncestor(this, newOwningLibrary))
-				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
-			NotificationChain msgs = null;
-			if (eInternalContainer() != null)
-				msgs = eBasicRemoveFromContainer(msgs);
-			if (newOwningLibrary != null)
-				msgs = ((InternalEObject)newOwningLibrary).eInverseAdd(this, TypesPackage.LIBRARY__TYPES, Library.class, msgs);
-			msgs = basicSetOwningLibrary(newOwningLibrary, msgs);
-			if (msgs != null) msgs.dispatch();
+	public EList<TypeConstraint> getConstraint() {
+		if (constraint == null) {
+			constraint = new EObjectContainmentEList<TypeConstraint>(TypeConstraint.class, this, TypesPackage.TYPE__CONSTRAINT);
 		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.TYPE__OWNING_LIBRARY, newOwningLibrary, newOwningLibrary));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				return ((InternalEList<InternalEObject>)(InternalEList<?>)getFeatures()).basicAdd(otherEnd, msgs);
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				if (eInternalContainer() != null)
-					msgs = eBasicRemoveFromContainer(msgs);
-				return basicSetOwningLibrary((Library)otherEnd, msgs);
-		}
-		return super.eInverseAdd(otherEnd, featureID, msgs);
+		return constraint;
 	}
 
 	/**
@@ -171,28 +81,12 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				return ((InternalEList<?>)getFeatures()).basicRemove(otherEnd, msgs);
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				return basicSetOwningLibrary(null, msgs);
+			case TypesPackage.TYPE__CONSTRAINT:
+				return ((InternalEList<?>)getConstraint()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
-		switch (eContainerFeatureID()) {
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				return eInternalContainer().eInverseRemove(this, TypesPackage.LIBRARY__TYPES, Library.class, msgs);
-		}
-		return super.eBasicRemoveFromContainerFeature(msgs);
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -201,12 +95,8 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				return getFeatures();
-			case TypesPackage.TYPE__SUPER_TYPES:
-				return getSuperTypes();
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				return getOwningLibrary();
+			case TypesPackage.TYPE__CONSTRAINT:
+				return getConstraint();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -220,16 +110,9 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				getFeatures().clear();
-				getFeatures().addAll((Collection<? extends Feature>)newValue);
-				return;
-			case TypesPackage.TYPE__SUPER_TYPES:
-				getSuperTypes().clear();
-				getSuperTypes().addAll((Collection<? extends Type>)newValue);
-				return;
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				setOwningLibrary((Library)newValue);
+			case TypesPackage.TYPE__CONSTRAINT:
+				getConstraint().clear();
+				getConstraint().addAll((Collection<? extends TypeConstraint>)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -243,14 +126,8 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				getFeatures().clear();
-				return;
-			case TypesPackage.TYPE__SUPER_TYPES:
-				getSuperTypes().clear();
-				return;
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				setOwningLibrary((Library)null);
+			case TypesPackage.TYPE__CONSTRAINT:
+				getConstraint().clear();
 				return;
 		}
 		super.eUnset(featureID);
@@ -264,12 +141,8 @@ public class TypeImpl extends NamedElementImpl implements Type {
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case TypesPackage.TYPE__FEATURES:
-				return features != null && !features.isEmpty();
-			case TypesPackage.TYPE__SUPER_TYPES:
-				return superTypes != null && !superTypes.isEmpty();
-			case TypesPackage.TYPE__OWNING_LIBRARY:
-				return getOwningLibrary() != null;
+			case TypesPackage.TYPE__CONSTRAINT:
+				return constraint != null && !constraint.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}

+ 56 - 21
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesFactoryImpl.java

@@ -11,13 +11,15 @@ 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.base.types.*;
+import org.yakindu.base.types.ComplexType;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
-import org.yakindu.base.types.Library;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Parameter;
+import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.Property;
-import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
 
@@ -65,27 +67,20 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
-			case TypesPackage.LIBRARY: return createLibrary();
-			case TypesPackage.TYPE: return createType();
 			case TypesPackage.OPERATION: return createOperation();
 			case TypesPackage.PROPERTY: return createProperty();
 			case TypesPackage.PARAMETER: return createParameter();
 			case TypesPackage.EVENT: return createEvent();
+			case TypesPackage.ENUMERATION_TYPE: return createEnumerationType();
+			case TypesPackage.PRIMITIVE_TYPE: return createPrimitiveType();
+			case TypesPackage.COMPLEX_TYPE: return createComplexType();
+			case TypesPackage.ENUMERATOR: return createEnumerator();
+			case TypesPackage.TYPE_CONSTRAINT: return createTypeConstraint();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Type createType() {
-		TypeImpl type = new TypeImpl();
-		return type;
-	}
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -121,9 +116,9 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Library createLibrary() {
-		LibraryImpl library = new LibraryImpl();
-		return library;
+	public Event createEvent() {
+		EventImpl event = new EventImpl();
+		return event;
 	}
 
 	/**
@@ -131,9 +126,49 @@ public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Event createEvent() {
-		EventImpl event = new EventImpl();
-		return event;
+	public EnumerationType createEnumerationType() {
+		EnumerationTypeImpl enumerationType = new EnumerationTypeImpl();
+		return enumerationType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PrimitiveType createPrimitiveType() {
+		PrimitiveTypeImpl primitiveType = new PrimitiveTypeImpl();
+		return primitiveType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComplexType createComplexType() {
+		ComplexTypeImpl complexType = new ComplexTypeImpl();
+		return complexType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Enumerator createEnumerator() {
+		EnumeratorImpl enumerator = new EnumeratorImpl();
+		return enumerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeConstraint createTypeConstraint() {
+		TypeConstraintImpl typeConstraint = new TypeConstraintImpl();
+		return typeConstraint;
 	}
 
 	/**

+ 163 - 60
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/impl/TypesPackageImpl.java

@@ -6,27 +6,23 @@
  */
 package org.yakindu.base.types.impl;
 
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 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.base.base.BasePackage;
+import org.yakindu.base.types.ComplexType;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
-import org.yakindu.base.types.Library;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Parameter;
+import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.Property;
 import org.yakindu.base.types.Type;
+import org.yakindu.base.types.TypeConstraint;
 import org.yakindu.base.types.TypedElement;
 import org.yakindu.base.types.TypesFactory;
 import org.yakindu.base.types.TypesPackage;
@@ -77,14 +73,38 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass libraryEClass = null;
+	private EClass eventEClass = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass enumerationTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass primitiveTypeEClass = null;
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass eventEClass = null;
+	private EClass complexTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass enumeratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass typeConstraintEClass = null;
 
 	/**
 	 * Creates an instance of the model <b>Package</b>, registered with
@@ -162,26 +182,10 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getType_Features() {
+	public EReference getType_Constraint() {
 		return (EReference)typeEClass.getEStructuralFeatures().get(0);
 	}
 
-	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getType_SuperTypes() {
-		return (EReference)typeEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getType_OwningLibrary() {
-		return (EReference)typeEClass.getEStructuralFeatures().get(2);
-	}
-
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
@@ -258,24 +262,40 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EClass getLibrary() {
-		return libraryEClass;
+	public EClass getEvent() {
+		return eventEClass;
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getLibrary_Types() {
-		return (EReference)libraryEClass.getEStructuralFeatures().get(0);
+	public EClass getEnumerationType() {
+		return enumerationTypeEClass;
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EAttribute getLibrary_Id() {
-		return (EAttribute)libraryEClass.getEStructuralFeatures().get(1);
+	public EReference getEnumerationType_Enumerator() {
+		return (EReference)enumerationTypeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPrimitiveType() {
+		return primitiveTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPrimitiveType_BaseType() {
+		return (EReference)primitiveTypeEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -283,8 +303,66 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EClass getEvent() {
-		return eventEClass;
+	public EClass getComplexType() {
+		return complexTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getComplexType_Features() {
+		return (EReference)complexTypeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getComplexType_SuperTypes() {
+		return (EReference)complexTypeEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEnumerator() {
+		return enumeratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEnumerator_OwningEnumeration() {
+		return (EReference)enumeratorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEnumerator_LiteralValue() {
+		return (EAttribute)enumeratorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTypeConstraint() {
+		return typeConstraintEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTypeConstraint_Value() {
+		return (EAttribute)typeConstraintEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -296,8 +374,7 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private boolean isCreated = false;
@@ -314,14 +391,8 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		isCreated = true;
 
 		// Create classes and their features
-		libraryEClass = createEClass(LIBRARY);
-		createEReference(libraryEClass, LIBRARY__TYPES);
-		createEAttribute(libraryEClass, LIBRARY__ID);
-
 		typeEClass = createEClass(TYPE);
-		createEReference(typeEClass, TYPE__FEATURES);
-		createEReference(typeEClass, TYPE__SUPER_TYPES);
-		createEReference(typeEClass, TYPE__OWNING_LIBRARY);
+		createEReference(typeEClass, TYPE__CONSTRAINT);
 
 		featureEClass = createEClass(FEATURE);
 		createEReference(featureEClass, FEATURE__OWNING_TYPE);
@@ -338,20 +409,36 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		createEReference(typedElementEClass, TYPED_ELEMENT__TYPE);
 
 		eventEClass = createEClass(EVENT);
+
+		enumerationTypeEClass = createEClass(ENUMERATION_TYPE);
+		createEReference(enumerationTypeEClass, ENUMERATION_TYPE__ENUMERATOR);
+
+		primitiveTypeEClass = createEClass(PRIMITIVE_TYPE);
+		createEReference(primitiveTypeEClass, PRIMITIVE_TYPE__BASE_TYPE);
+
+		complexTypeEClass = createEClass(COMPLEX_TYPE);
+		createEReference(complexTypeEClass, COMPLEX_TYPE__FEATURES);
+		createEReference(complexTypeEClass, COMPLEX_TYPE__SUPER_TYPES);
+
+		enumeratorEClass = createEClass(ENUMERATOR);
+		createEReference(enumeratorEClass, ENUMERATOR__OWNING_ENUMERATION);
+		createEAttribute(enumeratorEClass, ENUMERATOR__LITERAL_VALUE);
+
+		typeConstraintEClass = createEClass(TYPE_CONSTRAINT);
+		createEAttribute(typeConstraintEClass, TYPE_CONSTRAINT__VALUE);
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
 	private boolean isInitialized = false;
 
 	/**
-	 * Complete the initialization of the package and its meta-model.  This
-	 * method is guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * Complete the initialization of the package and its meta-model. This
+	 * method is guarded to have no affect on any invocation but its first. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	public void initializePackageContents() {
@@ -379,19 +466,18 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 		parameterEClass.getESuperTypes().add(this.getTypedElement());
 		parameterEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 		eventEClass.getESuperTypes().add(this.getFeature());
+		enumerationTypeEClass.getESuperTypes().add(this.getPrimitiveType());
+		primitiveTypeEClass.getESuperTypes().add(this.getType());
+		complexTypeEClass.getESuperTypes().add(this.getType());
+		enumeratorEClass.getESuperTypes().add(theBasePackage.getNamedElement());
+		typeConstraintEClass.getESuperTypes().add(theBasePackage.getNamedElement());
 
 		// Initialize classes and features; add operations and parameters
-		initEClass(libraryEClass, Library.class, "Library", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getLibrary_Types(), this.getType(), this.getType_OwningLibrary(), "types", null, 0, -1, Library.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getLibrary_Id(), ecorePackage.getEString(), "id", null, 0, 1, Library.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		initEClass(typeEClass, Type.class, "Type", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getType_Features(), this.getFeature(), this.getFeature_OwningType(), "features", null, 0, -1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getType_SuperTypes(), this.getType(), null, "superTypes", null, 0, -1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getType_OwningLibrary(), this.getLibrary(), this.getLibrary_Types(), "owningLibrary", null, 0, 1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEClass(typeEClass, Type.class, "Type", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getType_Constraint(), this.getTypeConstraint(), null, "constraint", null, 0, -1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(featureEClass, Feature.class, "Feature", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getFeature_OwningType(), this.getType(), this.getType_Features(), "owningType", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getFeature_OwningType(), this.getComplexType(), this.getComplexType_Features(), "owningType", null, 0, 1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(operationEClass, Operation.class, "Operation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getOperation_Parameters(), this.getParameter(), this.getParameter_OwningOperation(), "parameters", null, 0, -1, Operation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -406,6 +492,23 @@ public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
 
 		initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(enumerationTypeEClass, EnumerationType.class, "EnumerationType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getEnumerationType_Enumerator(), this.getEnumerator(), this.getEnumerator_OwningEnumeration(), "enumerator", null, 0, -1, EnumerationType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(primitiveTypeEClass, PrimitiveType.class, "PrimitiveType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPrimitiveType_BaseType(), this.getPrimitiveType(), null, "baseType", null, 0, 1, PrimitiveType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(complexTypeEClass, ComplexType.class, "ComplexType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getComplexType_Features(), this.getFeature(), this.getFeature_OwningType(), "features", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getComplexType_SuperTypes(), this.getComplexType(), null, "superTypes", null, 0, -1, ComplexType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(enumeratorEClass, Enumerator.class, "Enumerator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getEnumerator_OwningEnumeration(), this.getEnumerationType(), this.getEnumerationType_Enumerator(), "owningEnumeration", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getEnumerator_LiteralValue(), ecorePackage.getEJavaObject(), "literalValue", null, 0, 1, Enumerator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(typeConstraintEClass, TypeConstraint.class, "TypeConstraint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getTypeConstraint_Value(), ecorePackage.getEJavaObject(), "value", null, 0, 1, TypeConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Create resource
 		createResource(eNS_URI);
 	}

+ 87 - 11
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesAdapterFactory.java

@@ -11,11 +11,15 @@ import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.base.types.*;
+import org.yakindu.base.types.DataType;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
-import org.yakindu.base.types.Library;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Parameter;
+import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.Property;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypedElement;
@@ -77,10 +81,6 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 	 */
 	protected TypesSwitch<Adapter> modelSwitch =
 		new TypesSwitch<Adapter>() {
-			@Override
-			public Adapter caseLibrary(Library object) {
-				return createLibraryAdapter();
-			}
 			@Override
 			public Adapter caseType(Type object) {
 				return createTypeAdapter();
@@ -110,6 +110,26 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 				return createEventAdapter();
 			}
 			@Override
+			public Adapter caseEnumerationType(EnumerationType object) {
+				return createEnumerationTypeAdapter();
+			}
+			@Override
+			public Adapter casePrimitiveType(PrimitiveType object) {
+				return createPrimitiveTypeAdapter();
+			}
+			@Override
+			public Adapter caseComplexType(ComplexType object) {
+				return createComplexTypeAdapter();
+			}
+			@Override
+			public Adapter caseEnumerator(Enumerator object) {
+				return createEnumeratorAdapter();
+			}
+			@Override
+			public Adapter caseTypeConstraint(TypeConstraint object) {
+				return createTypeConstraintAdapter();
+			}
+			@Override
 			public Adapter caseNamedElement(NamedElement object) {
 				return createNamedElementAdapter();
 			}
@@ -232,30 +252,86 @@ public class TypesAdapterFactory extends AdapterFactoryImpl {
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.Library <em>Library</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.Event <em>Event</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.yakindu.base.types.Library
+	 * @see org.yakindu.base.types.Event
 	 * @generated
 	 */
-	public Adapter createLibraryAdapter() {
+	public Adapter createEventAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.Event <em>Event</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.EnumerationType <em>Enumeration Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.yakindu.base.types.Event
+	 * @see org.yakindu.base.types.EnumerationType
 	 * @generated
 	 */
-	public Adapter createEventAdapter() {
+	public Adapter createEnumerationTypeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.PrimitiveType <em>Primitive Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.types.PrimitiveType
+	 * @generated
+	 */
+	public Adapter createPrimitiveTypeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.ComplexType <em>Complex Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.types.ComplexType
+	 * @generated
+	 */
+	public Adapter createComplexTypeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.Enumerator <em>Enumerator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.types.Enumerator
+	 * @generated
+	 */
+	public Adapter createEnumeratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.yakindu.base.types.TypeConstraint <em>Type Constraint</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.yakindu.base.types.TypeConstraint
+	 * @generated
+	 */
+	public Adapter createTypeConstraintAdapter() {
 		return null;
 	}
 

+ 110 - 13
plugins/org.yakindu.base.types/src-gen/org/yakindu/base/types/util/TypesSwitch.java

@@ -10,11 +10,15 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
 import org.yakindu.base.base.NamedElement;
+import org.yakindu.base.types.*;
+import org.yakindu.base.types.DataType;
+import org.yakindu.base.types.EnumerationType;
+import org.yakindu.base.types.Enumerator;
 import org.yakindu.base.types.Event;
 import org.yakindu.base.types.Feature;
-import org.yakindu.base.types.Library;
 import org.yakindu.base.types.Operation;
 import org.yakindu.base.types.Parameter;
+import org.yakindu.base.types.PrimitiveType;
 import org.yakindu.base.types.Property;
 import org.yakindu.base.types.Type;
 import org.yakindu.base.types.TypedElement;
@@ -77,12 +81,6 @@ public class TypesSwitch<T> extends Switch<T> {
 	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
-			case TypesPackage.LIBRARY: {
-				Library library = (Library)theEObject;
-				T result = caseLibrary(library);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case TypesPackage.TYPE: {
 				Type type = (Type)theEObject;
 				T result = caseType(type);
@@ -139,6 +137,45 @@ public class TypesSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case TypesPackage.ENUMERATION_TYPE: {
+				EnumerationType enumerationType = (EnumerationType)theEObject;
+				T result = caseEnumerationType(enumerationType);
+				if (result == null) result = casePrimitiveType(enumerationType);
+				if (result == null) result = caseType(enumerationType);
+				if (result == null) result = caseNamedElement(enumerationType);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TypesPackage.PRIMITIVE_TYPE: {
+				PrimitiveType primitiveType = (PrimitiveType)theEObject;
+				T result = casePrimitiveType(primitiveType);
+				if (result == null) result = caseType(primitiveType);
+				if (result == null) result = caseNamedElement(primitiveType);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TypesPackage.COMPLEX_TYPE: {
+				ComplexType complexType = (ComplexType)theEObject;
+				T result = caseComplexType(complexType);
+				if (result == null) result = caseType(complexType);
+				if (result == null) result = caseNamedElement(complexType);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TypesPackage.ENUMERATOR: {
+				Enumerator enumerator = (Enumerator)theEObject;
+				T result = caseEnumerator(enumerator);
+				if (result == null) result = caseNamedElement(enumerator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TypesPackage.TYPE_CONSTRAINT: {
+				TypeConstraint typeConstraint = (TypeConstraint)theEObject;
+				T result = caseTypeConstraint(typeConstraint);
+				if (result == null) result = caseNamedElement(typeConstraint);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -249,32 +286,92 @@ public class TypesSwitch<T> extends Switch<T> {
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Library</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Event</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Library</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Event</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseLibrary(Library object) {
+	public T caseEvent(Event object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Event</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Enumeration Type</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Event</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Enumeration Type</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseEvent(Event object) {
+	public T caseEnumerationType(EnumerationType object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Primitive Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Primitive Type</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePrimitiveType(PrimitiveType object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Complex Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Complex Type</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseComplexType(ComplexType object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Enumerator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Enumerator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseEnumerator(Enumerator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Type Constraint</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Type Constraint</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTypeConstraint(TypeConstraint object) {
 		return null;
 	}
 

+ 89 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/AbstractTypeSystem.java

@@ -0,0 +1,89 @@
+package org.yakindu.base.types;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Abstract base implementation of an {@link ITypeSystem}. Delivers only utility
+ * methods that are helpful to create a {@link ITypeSystem} implementation, and
+ * does not implement any of the {@link ITypeSystem} methods itself.
+ * 
+ * @author Alexander Nyßen (alexander.nyssen@itemis.de) - Initial contribution
+ *         and API
+ * 
+ */
+public abstract class AbstractTypeSystem implements ITypeSystem {
+
+	/**
+	 * Computes the {@link PrimitiveType} that within the base type hierarchy of
+	 * the two given {@link PrimitiveType}s is their closest ancestor. This may
+	 * also be one of the two given {@link PrimitiveType}s in case they are
+	 * equal or one is the ancestor of the other.
+	 * 
+	 * @param firstType
+	 *            The first {@link PrimitiveType} to evaluate
+	 * @param secondType
+	 *            The second {@link PrimitiveType} to evaluate
+	 * @return The first type if it is equal or an ancestor of the second one,
+	 *         otherwise the nearest common ancestor if it exists or
+	 *         <code>null</code> null otherwise.
+	 */
+	protected Type computeCommonType(PrimitiveType firstType,
+			PrimitiveType secondType) {
+		if (isEqualOrAncestor(firstType, secondType)) {
+			return secondType;
+		} else {
+			// compute common ancestor, if exists
+			PrimitiveType baseType = secondType;
+			while (baseType != null) {
+				if (isEqualOrAncestor(baseType, firstType)) {
+					return baseType;
+				}
+				baseType = baseType.getBaseType();
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * Checks whether the first given type is equal to or an ancestor of the
+	 * second type within its base type hierarchy.
+	 * 
+	 * @param first
+	 *            The first {@link PrimitiveType} to evaluate
+	 * @param second
+	 *            The second {@link PrimitiveType} to evaluate
+	 * @return <code>true</code> if the first type is equal to or an ancestor of
+	 *         the second type, <code>false</code> otherwise.
+	 */
+	private boolean isEqualOrAncestor(PrimitiveType firstType,
+			PrimitiveType secondType) {
+		PrimitiveType baseType = secondType;
+		// iterate the base type hierarchy of the second type and see if the
+		// first type can be found within
+		while (baseType != null) {
+			if (EcoreUtil.equals(firstType, baseType)) {
+				return true;
+			}
+			baseType = secondType.getBaseType();
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the top-most type within the base type hierarchy of the given
+	 * {@link PrimitiveType}.
+	 * 
+	 * @param primitiveType
+	 *            The {@link PrimitiveType} whose base type is to be retrieved
+	 * @return The top-most base type for the given {@link PrimitiveType}, or
+	 *         the type itself if no base type is specified
+	 */
+	protected PrimitiveType getBaseType(PrimitiveType primitiveType) {
+		PrimitiveType baseType = primitiveType;
+		while (baseType.getBaseType() != null) {
+			baseType = baseType.getBaseType();
+		}
+		return baseType;
+	}
+
+}

+ 365 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/ITypeSystem.java

@@ -0,0 +1,365 @@
+/**
+ * Copyright (c) 2013 itemis AG 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:
+ * 	itemis AG - initial API and implementation
+ * 
+ */
+package org.yakindu.base.types;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Generic type system representation, which is responsible of listing the
+ * available types ({@link #getTypes()}) and inferring types for certain
+ * operations (or feature calls - not yet supported).
+ * 
+ * @author Alexander Nyßen - Initial contribution and API
+ */
+public interface ITypeSystem {
+
+	/**
+	 * Representation of a (type) inference result, which is consists of an
+	 * {@link InferredType} and a list of {@link InferenceIssue}.
+	 * <p>
+	 * Note that the {@link InferredType} may be null. In such a case the list
+	 * of issues should document, why a type could not be inferred. The list of
+	 * issues may also be non-empty, even if a type could be inferred. As an
+	 * example consider the case where a base type could be inferred (e.g.
+	 * integer), while issues indicate that value range constraints (modeled via
+	 * {@link TypeConstraint}s) are violated.
+	 * 
+	 */
+	public class InferenceResult {
+		private InferredType inferredType;
+		private Collection<InferenceIssue> inferenceIssues;
+
+		/**
+		 * Constructs an {@link InferenceResult} from a concrete {@link Type}.
+		 * The {@link InferenceResult} returned as result will contain an
+		 * {@link InferredType} that contains the given {@link Type} and no
+		 * {@link TypeConstraint}s and an empty list of {@link InferenceIssue}s.
+		 * 
+		 * @param type
+		 *            The {@link Type} to construct the {@link InferenceResult}
+		 *            for.
+		 */
+		public InferenceResult(Type type) {
+			this(new InferredType(type));
+		}
+
+		public InferenceResult(InferredType inferredType) {
+			this(inferredType, Collections.<InferenceIssue> emptyList());
+		}
+
+		public InferenceResult(InferredType inferredType,
+				InferenceIssue inferenceIssue) {
+			this(inferredType, Collections.singletonList(inferenceIssue));
+		}
+
+		public InferenceResult(InferredType inferredType,
+				Collection<InferenceIssue> inferenceIssues) {
+			this.inferredType = inferredType;
+			this.inferenceIssues = inferenceIssues;
+		}
+
+		public InferredType getType() {
+			return inferredType;
+		}
+
+		public Collection<InferenceIssue> getIssues() {
+			return inferenceIssues;
+		}
+	}
+
+	/**
+	 * Representation of an inference problem, consisting of a message and a
+	 * severity.
+	 */
+	public class InferenceIssue {
+		
+		private String message;
+		private int severity;
+
+		/**
+		 * Constructs a new {@link InferenceIssue} with the given message and
+		 * severity.
+		 * 
+		 * @param message
+		 *            The message depicting the cause of the inference issue.
+		 *            May not be <code>null</null>.
+		 * @param severity
+		 *            The severity of this {@link InferenceIssue}. May be one of
+		 *            {@link IStatus#OK}, {@link IStatus#WARNING}, or
+		 *            {@link IStatus#ERROR}.
+		 */
+		public InferenceIssue(String message, int severity) {
+			if (message == null) {
+				throw new NullPointerException("Message may not be null.");
+			}
+			if (severity != IStatus.OK && severity != IStatus.WARNING
+					&& severity != IStatus.ERROR) {
+				throw new IllegalArgumentException(
+						"Unsupported severity. Has to be one of IStatus#OK, IStatus#WARNING, or IStatus#ERROR");
+			}
+			this.severity = severity;
+			this.message = message;
+		}
+
+		/**
+		 * Returns the message that indicates the cause of this
+		 * {@link InferenceIssue}.
+		 * 
+		 * @return A {@link String} depicting the message. Will never return
+		 *         <code>null</code>
+		 */
+		public String getMessage() {
+			return message;
+		}
+
+		/**
+		 * Returns the severity of this {@link InferenceIssue}. Will be one of
+		 * the {@link IStatus#OK}, {@link IStatus#WARNING}, or
+		 * {@link IStatus#ERROR}.
+		 * 
+		 * @return {@link IStatus#OK}, {@link IStatus#WARNING}, or
+		 *         {@link IStatus#ERROR}
+		 */
+		public int getSeverity() {
+			return severity;
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			return obj instanceof InferenceIssue
+					&& ((InferenceIssue) obj).message.equals(message)
+					&& severity == ((InferenceIssue) obj).severity;
+		}
+
+		@Override
+		public int hashCode() {
+			return message.hashCode() + severity;
+		};
+	}
+
+	/**
+	 * Representation of an inferred type, which is formed by a {@link Type} and
+	 * a set of {@link TypeConstraint}s.
+	 * <p>
+	 * Note that the {@link Type} included in an {@link InferredType} does not
+	 * necessarily have to be a concrete type that is provided via
+	 * {@link ITypeSystem#getTypes()}, and should thus never be used by clients
+	 * directly. In fact, the it may be an (abstract) type that is used by an
+	 * {@link ITypeSystem} for purposes of type inference only. As an example
+	 * consider a type system that offers a set of different integer types,
+	 * which have different value ranges (modeled by {@link TypeConstraint}s)
+	 * but no common base type. In such a case, the {@link ITypeSystem} may
+	 * synthesize an abstract integer base type and use it during type inference
+	 * (together with {@link TypeConstraint}s that narrow the range of supported
+	 * values). In the end, {@link ITypeSystem#getTypes(InferredType))} may then
+	 * use the synthesized integer base type (and the computed constraints) to
+	 * decide which of its concrete integer types may be used and return them to
+	 * the client.
+	 * 
+	 */
+	public class InferredType {
+
+		private Type type;
+		private Collection<? extends TypeConstraint> constraints;
+
+		public InferredType(Type type) {
+			this(type, Collections.<TypeConstraint> emptyList());
+		}
+
+		public InferredType(Type type, Collection<TypeConstraint> constraints) {
+			if (type == null) {
+				throw new NullPointerException("Type may not be null.");
+			}
+			if (constraints == null) {
+				throw new NullPointerException(
+						"Constraints may be empty but not null.");
+			}
+			this.type = type;
+			this.constraints = constraints;
+		}
+
+		public Type getType() {
+			return type;
+		}
+
+		public Collection<? extends TypeConstraint> getConstraints() {
+			return constraints;
+		}
+
+		@Override
+		public String toString() {
+			return type.getName(); // TODO handle constraints...
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if (!(obj instanceof InferredType)) {
+				return false;
+			}
+			// check types
+			InferredType other = (InferredType) obj;
+			if (!EcoreUtil.equals(type, other.type)) {
+				return false;
+			}
+			// check constraints
+			for (TypeConstraint t1 : constraints) {
+				boolean foundEqual = false;
+				for (TypeConstraint t2 : other.constraints) {
+					if (EcoreUtil.equals(t1, t2)) {
+						foundEqual = true;
+					}
+				}
+				if (!foundEqual) {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		@Override
+		public int hashCode() {
+			return type.hashCode();
+		}
+	}
+
+	public interface ITypeSystemOperator {
+		public String getSymbol();
+	}
+
+	/**
+	 * Returns a list of all types known in this type system.
+	 * 
+	 * @return The list of all types known in the type system
+	 */
+	public List<Type> getTypes();
+
+	// /**
+	// * Infer a type for a given literal. The literal may represent a primitive
+	// * value (primitive type literal) or an instance specification (complex
+	// * type literal).
+	// *
+	// * @param literal
+	// * The literal for which to infer a type
+	// * @return An {@link InferenceResult} containing the {@link InferredType}
+	// * for the literal (or <code>null</code> in case no type could be
+	// * inferred) and potential {@link InferenceIssue}s that occurred
+	// * during the type inference. The result may also contain both, an
+	// * inferred type and issues.
+	// */
+	// public InferenceResult inferType(Object literal);
+
+	/**
+	 * Responsible of inferring a type for a given concrete type (provided via
+	 * {@link ITypeSystem#getTypes()}. In most cases the {@link ITypeSystem}
+	 * will simply return an {@link InferenceResult} that wraps the type into an
+	 * {@link InferredType} (with the {@link TypeConstraint}s provided by the
+	 * given {@link Type} and an empty set of {@link InferenceIssue}s.
+	 * 
+	 * @param type
+	 *            The {@link Type} to infer.
+	 * @return An {@link InferenceResult} containing the {@link InferredType}
+	 *         (or <code>null</code> in case no type could be inferred) and
+	 *         potential {@link InferenceIssue}s that occurred during the type
+	 *         inference. The result may also contain both, an inferred type and
+	 *         issues.
+	 */
+	public InferenceResult inferType(Type type);
+
+	/**
+	 * Responsible of inferring the type for a given unary expression (e.g. a
+	 * complement), where the type of the operand is already inferred.
+	 * 
+	 * @param operandType
+	 *            The inferred type of the operand of the unary expression
+	 * @param unaryOperator
+	 *            The unary operator by which the expression is identified
+	 * @return An {@link InferenceResult} containing the {@link InferredType} of
+	 *         the expression (or <code>null</code> in case no type could be
+	 *         inferred) and potential {@link InferenceIssue}s that occurred
+	 *         during the type inference. The result may also contain both, an
+	 *         inferred type and issues.
+	 */
+	public InferenceResult inferType(InferredType operandType,
+			ITypeSystemOperator unaryOperator);
+
+	/**
+	 * Responsible of inferring the type for a given binary expression (e.g. an
+	 * assignment), where the types of the two operands are already inferred.
+	 * 
+	 * @param firstOperandType
+	 *            The inferred type of the first operand of the binary
+	 *            expression
+	 * @param secondOperandType
+	 *            The inferred type of the second operand of the binary
+	 *            expression
+	 * @param binaryOperator
+	 *            The binary operator by which the expression is identified
+	 * @return An {@link InferenceResult} containing the {@link InferredType} of
+	 *         the expression (or <code>null</code> in case no type could be
+	 *         inferred) and potential {@link InferenceIssue}s that occurred
+	 *         during the type inference. The result may also contain both, an
+	 *         inferred type and issues.
+	 */
+	public InferenceResult inferType(InferredType firstOperandType,
+			InferredType secondOperandType, ITypeSystemOperator binaryOperator);
+
+	/**
+	 * Responsible of inferring the type for a given ternary expression (e.g. a
+	 * conditional expression), where the types of the three operands are
+	 * already inferred.
+	 * 
+	 * @param firstOperandType
+	 *            The inferred type of the first operand of the ternary
+	 *            expression, e.g. the condition part the inferred type of the
+	 *            condition expression
+	 * @param secondOperandType
+	 *            The inferred type of the second operand of a ternary
+	 *            expression, e.g. in case of a conditional expression, the
+	 *            inferred type of the <code>true</code> case
+	 * @param thirdOperandType
+	 *            The inferred type of the third operator of a ternary
+	 *            expression, e.g. in case of a conditional expression, the
+	 *            inferred type of the <code>false</code> case
+	 * @param ternaryOperator
+	 *            The ternary operator by which the ternary expression is
+	 *            identified, e.g. '?' for conditionals.
+	 * @return An {@link InferenceResult} containing the {@link InferredType} of
+	 *         the expression (or <code>null</code> in case no type could be
+	 *         inferred) and potential {@link InferenceIssue}s that occurred
+	 *         during the inference. The result may also contain both, an
+	 *         inferred type and issues, if for instance the condition part of a
+	 *         conditional expression is not of type boolean but the true and
+	 *         false cases provide valid type information that can be used to
+	 *         calculate the type of the expression.
+	 */
+	public InferenceResult inferType(InferredType firstOperandType,
+			InferredType secondOperandType, InferredType thirdOperandType,
+			ITypeSystemOperator ternaryOperator);
+
+	/**
+	 * Returns the list of all concrete types, provided by the type system, that
+	 * match the given inferred type, i.e. are compatible to its listed type and
+	 * fulfill the given type constraints.
+	 * 
+	 * @param inferredType
+	 *            The inferred type to evaluate
+	 * @return The subset of all types returned via {@link #getTypes()} that is
+	 *         compatible to the given inferred type.
+	 */
+	public List<Type> getTypes(InferredType inferredType);
+
+}

+ 0 - 58
plugins/org.yakindu.base.types/src/org/yakindu/base/types/ITypeSystemAccess.java

@@ -1,58 +0,0 @@
-/**
- * Copyright (c) 2012 itemis AG 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:
- * 	itemis AG - initial API and implementation
- * 
- */
-package org.yakindu.base.types;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * @author andreas muelder - Initial contribution and API
- * 
- */
-@ImplementedBy(org.yakindu.base.types.impl.BaseTypeSystemAccessImpl.class)
-public interface ITypeSystemAccess {
-
-	/** true, if this type represents a boolean */
-	boolean isBoolean(Type type);
-
-	/** true, if this type represents an integer */
-	boolean isInteger(Type type);
-
-	/** true, if this type represents a real */
-	boolean isReal(Type type);
-
-	/** true, if this type represents a string */
-	boolean isString(Type type);
-
-	/** true, if this type represents void */
-	boolean isVoid(Type type);
-
-	/**
-	 * Returns the target language specific type name
-	 * 
-	 * @param type
-	 * @return
-	 */
-	String getTargetLanguageTypeName(Type type);
-
-	boolean isAssignable(Type varType, Type valType);
-
-	Type combine(Type typeOne, Type typeTwo);
-
-	public Type getString();
-
-	public Type getReal();
-
-	public Type getInteger();
-
-	public Type getBoolean();
-
-}

+ 0 - 49
plugins/org.yakindu.base.types/src/org/yakindu/base/types/LibrariesExtensions.java

@@ -1,49 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IContributor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.common.util.URI;
-import org.osgi.framework.Bundle;
-
-/**
- * 
- * @author Alexander Ny§en
- * 
- */
-public class LibrariesExtensions {
-
-	private static final String EXTENSION_POINT_ID = "org.yakindu.base.types.libraries";
-	private static final String ATTRIBUTE_LOCATION = "location";
-	
-	public static Iterable<LibraryDescriptor> getRegisteredTypeLibraries() {
-		List<LibraryDescriptor> descriptors = new ArrayList<LibraryDescriptor>();
-		IConfigurationElement[] registeredConfigElements = getRegisteredConfigElements();
-		for (IConfigurationElement configElement : registeredConfigElements) {
-			IContributor contributor = configElement.getContributor();
-			Bundle bundle = Platform.getBundle(contributor.getName());
-			URI location = URI.createPlatformPluginURI(bundle.getSymbolicName() + "/" + configElement
-					.getAttribute(ATTRIBUTE_LOCATION), true);
-			descriptors.add(new LibraryDescriptor(location, bundle));
-		}
-		return descriptors;
-	}
-
-	public static IConfigurationElement[] getRegisteredConfigElements() {
-		return Platform.getExtensionRegistry().getConfigurationElementsFor(
-				EXTENSION_POINT_ID);
-	}
-}

+ 0 - 40
plugins/org.yakindu.base.types/src/org/yakindu/base/types/LibraryDescriptor.java

@@ -1,40 +0,0 @@
-/**
- * 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:
- *     Alexander Nyssen (itemis AG) - initial API and implementation
- */
-package org.yakindu.base.types;
-
-import java.net.URL;
-
-import org.eclipse.emf.common.util.URI;
-import org.osgi.framework.Bundle;
-
-public class LibraryDescriptor {
-
-	private final URI location;
-	private final Bundle bundle;
-
-	public LibraryDescriptor(URI location, Bundle bundle) {
-		this.location = location;
-		this.bundle = bundle;
-	}
-
-	public URI getLocation() {
-		return location;
-	}
-
-	public URL getLocationAsURL() {
-		return bundle.getResource(location.toPlatformString(true));
-	}
-
-	public Bundle getBundle() {
-		return bundle;
-	}
-
-}

+ 19 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/TypeSystemUtils.xtend

@@ -0,0 +1,19 @@
+package org.yakindu.base.types
+
+import java.util.Collection
+import org.yakindu.base.types.EnumerationType
+
+class TypeSystemUtils {
+	
+	def Collection<EnumerationType> getEnumerationTypes(ITypeSystem ts){
+		return ts.types.filter(typeof (EnumerationType)).toList
+	}
+	
+	def Collection<PrimitiveType> getPrimitiveTypes(ITypeSystem ts){
+		return ts.types.filter(typeof (PrimitiveType)).toList
+	}
+	
+	def Collection<ComplexType> getComplexTypes(ITypeSystem ts){
+		return ts.types.filter(typeof (ComplexType)).toList
+	}
+}

+ 0 - 152
plugins/org.yakindu.base.types/src/org/yakindu/base/types/impl/BaseTypeSystemAccessImpl.java

@@ -1,152 +0,0 @@
-/**
- * Copyright (c) 2012 itemis AG 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:
- * 	itemis AG - initial API and implementation
- * 
- */
-package org.yakindu.base.types.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.yakindu.base.types.ITypeSystemAccess;
-import org.yakindu.base.types.Type;
-import org.yakindu.base.types.TypesFactory;
-
-/**
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class BaseTypeSystemAccessImpl implements ITypeSystemAccess {
-
-	@Override
-	public boolean isBoolean(Type type) {
-		return type != null
-				&& (type.getName().equalsIgnoreCase("boolean") || type
-						.getName().equalsIgnoreCase("bool"));
-	}
-
-	@Override
-	public boolean isInteger(Type type) {
-		return type != null
-				&& (type.getName().equalsIgnoreCase("integer") || type
-						.getName().equalsIgnoreCase("int"));
-	}
-
-	@Override
-	public boolean isReal(Type type) {
-		return type != null && type.getName().equalsIgnoreCase("real");
-	}
-
-	@Override
-	public boolean isVoid(Type type) {
-		return type == null || type.getName().equalsIgnoreCase("void");
-	}
-
-	@Override
-	public boolean isString(Type type) {
-		return type != null && type.getName().equalsIgnoreCase("string");
-	}
-
-	public boolean isAssignable(Type varType, Type valType) {
-		if (varType == null && valType == null)
-			return true;
-		if (isVoid(varType) && valType == null)
-			return true;
-		Type combine = combine(varType, valType);
-		if (combine == null) {
-			return false;
-		}
-		if (varType.getName().equals(combine.getName())) {
-			return true;
-		}
-		if ((isInteger(varType)) && (isInteger(valType))) {
-			return true;
-		}
-		if ((isReal(varType)) && (isInteger(valType) || isReal(valType))) {
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public Type getBoolean() {
-		Type type = TypesFactory.eINSTANCE.createType();
-		type.setName("boolean");
-		return type;
-	}
-
-	@Override
-	public Type getInteger() {
-		Type type = TypesFactory.eINSTANCE.createType();
-		type.setName("integer");
-		return type;
-	}
-
-	@Override
-	public Type getReal() {
-		Type type = TypesFactory.eINSTANCE.createType();
-		type.setName("real");
-		return type;
-	}
-
-	@Override
-	public Type getString() {
-		Type type = TypesFactory.eINSTANCE.createType();
-		type.setName("string");
-		return type;
-	}
-
-	public Type combine(Type typeOne, Type typeTwo) {
-		if (typeOne == null || typeTwo == null) {
-			return null;
-		}
-		if (typeOne.equals(typeTwo)
-				|| typeOne.getName().equals(typeTwo.getName())) {
-			return typeOne;
-		}
-		if (isInteger(typeOne) && isReal(typeTwo)) {
-			return typeTwo;
-		}
-		if (isReal(typeOne) && isInteger(typeTwo)) {
-			return typeOne;
-		}
-		// TODO
-		// List<Type> typesOne = allSuperTypes(typeOne);
-		// List<Type> typesTwo = allSuperTypes(typeTwo);
-		// List<Type> superType = typesOne.findFirst(t | typesTwo.contains(t));
-		// if (superType != null) {
-		// return superType;
-		// }
-
-		return null;
-	}
-
-	public List<Type> allSuperTypes(Type type) {
-		List<Type> types = new ArrayList<Type>();
-		types.add(type);
-		List<Type> newSuperTypes = new ArrayList<Type>();
-		newSuperTypes.addAll(type.getSuperTypes());
-		while (!newSuperTypes.isEmpty()) {
-			List<Type> oldSuperTypes = newSuperTypes;
-			newSuperTypes = new ArrayList<Type>();
-			for (Type superType : oldSuperTypes) {
-				if (!types.contains(superType)) {
-					types.add(superType);
-					newSuperTypes.addAll(superType.getSuperTypes());
-				}
-			}
-		}
-		return types;
-	}
-
-	@Override
-	public String getTargetLanguageTypeName(Type type) {
-		return type.getName();
-	}
-}