[471114] Use OCL codegen templates for Text
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
index f703623..651ec18 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
@@ -70,116 +70,6 @@
 	TextModelPackage eINSTANCE = org.eclipse.qvtd.text.impl.TextModelPackageImpl.init();
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.qvtd.text.impl.StringNodeImpl <em>String Node</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.qvtd.text.impl.StringNodeImpl
-	 * @see org.eclipse.qvtd.text.impl.TextModelPackageImpl#getStringNode()
-	 * @generated
-	 */
-	int STRING_NODE = 0;
-
-	/**
-	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__CHILDREN = 0;
-
-	/**
-	 * The feature id for the '<em><b>End Text</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__END_TEXT = 1;
-
-	/**
-	 * The feature id for the '<em><b>Indent</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__INDENT = 2;
-
-	/**
-	 * The feature id for the '<em><b>Non Breaking Space</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__NON_BREAKING_SPACE = 3;
-
-	/**
-	 * The feature id for the '<em><b>Parent</b></em>' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__PARENT = 4;
-
-	/**
-	 * The feature id for the '<em><b>Prefix</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__PREFIX = 5;
-
-	/**
-	 * The feature id for the '<em><b>Separator</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__SEPARATOR = 6;
-
-	/**
-	 * The feature id for the '<em><b>Suffix</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__SUFFIX = 7;
-
-	/**
-	 * The feature id for the '<em><b>Text</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__TEXT = 8;
-
-	/**
-	 * The number of structural features of the '<em>String Node</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE_FEATURE_COUNT = 9;
-
-	/**
-	 * The number of operations of the '<em>String Node</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE_OPERATION_COUNT = 0;
-
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.text.StringNode <em>String Node</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
index acac9ae..4934484 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
@@ -54,6 +54,24 @@
  */
 public class StringNodeImpl extends MinimalEObjectImpl.Container implements StringNode {
 	/**
+	 * The number of structural features of the '<em>String Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STRING_NODE_FEATURE_COUNT = 9;
+
+	/**
+	 * The number of operations of the '<em>String Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STRING_NODE_OPERATION_COUNT = 0;
+
+	/**
 	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -230,7 +248,7 @@
 	@Override
 	public EList<StringNode> getChildren() {
 		if (children == null) {
-			children = new EObjectContainmentWithInverseEList<StringNode>(StringNode.class, this, TextModelPackage.STRING_NODE__CHILDREN, TextModelPackage.STRING_NODE__PARENT);
+			children = new EObjectContainmentWithInverseEList<StringNode>(StringNode.class, this, 0, 4);
 		}
 		return children;
 	}
@@ -240,6 +258,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getEndText() {
 		return endText;
 	}
@@ -249,11 +268,12 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setEndText(String newEndText) {
 		String oldEndText = endText;
 		endText = newEndText;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__END_TEXT, oldEndText, endText));
+			eNotify(new ENotificationImpl(this, Notification.SET, 1, oldEndText, endText));
 	}
 
 	/**
@@ -276,7 +296,7 @@
 		String oldIndent = indent;
 		indent = newIndent;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__INDENT, oldIndent, indent));
+			eNotify(new ENotificationImpl(this, Notification.SET, 2, oldIndent, indent));
 	}
 
 	/**
@@ -284,6 +304,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public char getNonBreakingSpace() {
 		return nonBreakingSpace;
 	}
@@ -293,11 +314,12 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setNonBreakingSpace(char newNonBreakingSpace) {
 		char oldNonBreakingSpace = nonBreakingSpace;
 		nonBreakingSpace = newNonBreakingSpace;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__NON_BREAKING_SPACE, oldNonBreakingSpace, nonBreakingSpace));
+			eNotify(new ENotificationImpl(this, Notification.SET, 3, oldNonBreakingSpace, nonBreakingSpace));
 	}
 
 	/**
@@ -307,7 +329,7 @@
 	 */
 	@Override
 	public StringNode getParent() {
-		if (eContainerFeatureID() != TextModelPackage.STRING_NODE__PARENT) return null;
+		if (eContainerFeatureID() != (4)) return null;
 		return (StringNode)eInternalContainer();
 	}
 
@@ -317,7 +339,7 @@
 	 * @generated
 	 */
 	public NotificationChain basicSetParent(StringNode newParent, NotificationChain msgs) {
-		msgs = eBasicSetContainer((InternalEObject)newParent, TextModelPackage.STRING_NODE__PARENT, msgs);
+		msgs = eBasicSetContainer((InternalEObject)newParent, 4, msgs);
 		return msgs;
 	}
 
@@ -328,19 +350,19 @@
 	 */
 	@Override
 	public void setParent(StringNode newParent) {
-		if (newParent != eInternalContainer() || (eContainerFeatureID() != TextModelPackage.STRING_NODE__PARENT && newParent != null)) {
+		if (newParent != eInternalContainer() || (eContainerFeatureID() != (4) && newParent != null)) {
 			if (EcoreUtil.isAncestor(this, newParent))
 				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
 			NotificationChain msgs = null;
 			if (eInternalContainer() != null)
 				msgs = eBasicRemoveFromContainer(msgs);
 			if (newParent != null)
-				msgs = ((InternalEObject)newParent).eInverseAdd(this, TextModelPackage.STRING_NODE__CHILDREN, StringNode.class, msgs);
+				msgs = ((InternalEObject)newParent).eInverseAdd(this, 0, StringNode.class, msgs);
 			msgs = basicSetParent(newParent, msgs);
 			if (msgs != null) msgs.dispatch();
 		}
 		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__PARENT, newParent, newParent));
+			eNotify(new ENotificationImpl(this, Notification.SET, 4, newParent, newParent));
 	}
 
 	/**
@@ -363,7 +385,7 @@
 		String oldPrefix = prefix;
 		prefix = newPrefix;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__PREFIX, oldPrefix, prefix));
+			eNotify(new ENotificationImpl(this, Notification.SET, 5, oldPrefix, prefix));
 	}
 
 	/**
@@ -386,7 +408,7 @@
 		String oldSeparator = separator;
 		separator = newSeparator;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__SEPARATOR, oldSeparator, separator));
+			eNotify(new ENotificationImpl(this, Notification.SET, 6, oldSeparator, separator));
 	}
 
 	/**
@@ -409,7 +431,7 @@
 		String oldSuffix = suffix;
 		suffix = newSuffix;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__SUFFIX, oldSuffix, suffix));
+			eNotify(new ENotificationImpl(this, Notification.SET, 7, oldSuffix, suffix));
 	}
 
 	/**
@@ -432,7 +454,7 @@
 		String oldText = text;
 		text = newText;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__TEXT, oldText, text));
+			eNotify(new ENotificationImpl(this, Notification.SET, 8, oldText, text));
 	}
 
 	/**
@@ -444,9 +466,9 @@
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				if (eInternalContainer() != null)
 					msgs = eBasicRemoveFromContainer(msgs);
 				return basicSetParent((StringNode)otherEnd, msgs);
@@ -462,9 +484,9 @@
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return basicSetParent(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
@@ -478,8 +500,8 @@
 	@Override
 	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
 		switch (eContainerFeatureID()) {
-			case TextModelPackage.STRING_NODE__PARENT:
-				return eInternalContainer().eInverseRemove(this, TextModelPackage.STRING_NODE__CHILDREN, StringNode.class, msgs);
+			case 4:
+				return eInternalContainer().eInverseRemove(this, 0, StringNode.class, msgs);
 		}
 		return super.eBasicRemoveFromContainerFeature(msgs);
 	}
@@ -492,23 +514,23 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return getChildren();
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				return getEndText();
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				return getIndent();
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				return getNonBreakingSpace();
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return getParent();
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				return getPrefix();
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				return getSeparator();
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				return getSuffix();
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				return getText();
 		}
 		return super.eGet(featureID, resolve, coreType);
@@ -523,32 +545,32 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				getChildren().clear();
 				getChildren().addAll((Collection<? extends StringNode>)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				setEndText((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				setIndent((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				setNonBreakingSpace((Character)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				setParent((StringNode)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				setPrefix((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				setSeparator((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				setSuffix((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				setText((String)newValue);
 				return;
 		}
@@ -563,31 +585,31 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				getChildren().clear();
 				return;
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				setEndText(END_TEXT_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				setIndent(INDENT_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				setNonBreakingSpace(NON_BREAKING_SPACE_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				setParent((StringNode)null);
 				return;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				setPrefix(PREFIX_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				setSeparator(SEPARATOR_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				setSuffix(SUFFIX_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				setText(TEXT_EDEFAULT);
 				return;
 		}
@@ -602,23 +624,23 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return children != null && !children.isEmpty();
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				return END_TEXT_EDEFAULT == null ? endText != null : !END_TEXT_EDEFAULT.equals(endText);
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				return INDENT_EDEFAULT == null ? indent != null : !INDENT_EDEFAULT.equals(indent);
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				return nonBreakingSpace != NON_BREAKING_SPACE_EDEFAULT;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return getParent() != null;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				return PREFIX_EDEFAULT == null ? prefix != null : !PREFIX_EDEFAULT.equals(prefix);
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				return SEPARATOR_EDEFAULT == null ? separator != null : !SEPARATOR_EDEFAULT.equals(separator);
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				return SUFFIX_EDEFAULT == null ? suffix != null : !SUFFIX_EDEFAULT.equals(suffix);
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				return TEXT_EDEFAULT == null ? text != null : !TEXT_EDEFAULT.equals(text);
 		}
 		return super.eIsSet(featureID);
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
index ba417af..c7e2921 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
@@ -68,7 +68,7 @@
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
-			case TextModelPackage.STRING_NODE: return createStringNode();
+			case 0: return createStringNode();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -79,6 +79,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public StringNode createStringNode() {
 		StringNodeImpl stringNode = new StringNodeImpl();
 		return stringNode;
@@ -89,6 +90,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TextModelPackage getTextModelPackage() {
 		return (TextModelPackage)getEPackage();
 	}
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
index 80c2e05..1f69baa 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
@@ -105,6 +105,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getStringNode() {
 		return stringNodeEClass;
 	}
@@ -114,6 +115,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getStringNode_Children() {
 		return (EReference)stringNodeEClass.getEStructuralFeatures().get(0);
 	}
@@ -123,6 +125,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_EndText() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(1);
 	}
@@ -132,6 +135,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Indent() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(2);
 	}
@@ -141,6 +145,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_NonBreakingSpace() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(3);
 	}
@@ -150,6 +155,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getStringNode_Parent() {
 		return (EReference)stringNodeEClass.getEStructuralFeatures().get(4);
 	}
@@ -159,6 +165,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Prefix() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(5);
 	}
@@ -168,6 +175,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Separator() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(6);
 	}
@@ -177,6 +185,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Suffix() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(7);
 	}
@@ -186,6 +195,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Text() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(8);
 	}
@@ -195,6 +205,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TextModelFactory getTextModelFactory() {
 		return (TextModelFactory)getEFactoryInstance();
 	}
@@ -218,16 +229,16 @@
 		isCreated = true;
 
 		// Create classes and their features
-		stringNodeEClass = createEClass(STRING_NODE);
-		createEReference(stringNodeEClass, STRING_NODE__CHILDREN);
-		createEAttribute(stringNodeEClass, STRING_NODE__END_TEXT);
-		createEAttribute(stringNodeEClass, STRING_NODE__INDENT);
-		createEAttribute(stringNodeEClass, STRING_NODE__NON_BREAKING_SPACE);
-		createEReference(stringNodeEClass, STRING_NODE__PARENT);
-		createEAttribute(stringNodeEClass, STRING_NODE__PREFIX);
-		createEAttribute(stringNodeEClass, STRING_NODE__SEPARATOR);
-		createEAttribute(stringNodeEClass, STRING_NODE__SUFFIX);
-		createEAttribute(stringNodeEClass, STRING_NODE__TEXT);
+		stringNodeEClass = createEClass(0);
+		createEReference(stringNodeEClass, 0);
+		createEAttribute(stringNodeEClass, 1);
+		createEAttribute(stringNodeEClass, 2);
+		createEAttribute(stringNodeEClass, 3);
+		createEReference(stringNodeEClass, 4);
+		createEAttribute(stringNodeEClass, 5);
+		createEAttribute(stringNodeEClass, 6);
+		createEAttribute(stringNodeEClass, 7);
+		createEAttribute(stringNodeEClass, 8);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
index d8ef766..fa04855 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
@@ -79,7 +79,7 @@
 	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
-			case TextModelPackage.STRING_NODE: {
+			case 0: {
 				StringNode stringNode = (StringNode)theEObject;
 				T result = caseStringNode(stringNode);
 				if (result == null) result = defaultCase(theEObject);
diff --git a/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel b/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
index 7422bc4..7851fd5 100644
--- a/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
+++ b/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
@@ -2,9 +2,9 @@
 <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="&lt;copyright>&#xA;&#xA;Copyright (c) 2018 Willink Transformations and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v2.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v20.html&#xA;&#xA;Contributors:&#xA;  E.D.Willink - Initial API and implementation&#xA;&#xA;&lt;/copyright>"
     modelDirectory="/org.eclipse.qvtd.text/emf-gen" modelPluginID="org.eclipse.qvtd.text"
-    modelName="TextModel" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false"
-    operationReflection="true" importOrganizing="true">
+    templateDirectory="/org.eclipse.ocl.examples.codegen/templates" modelName="TextModel"
+    rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="8.0" copyrightFields="false" operationReflection="true" importOrganizing="true">
   <foreignModel>TextModel.ecore</foreignModel>
   <genPackages prefix="TextModel" basePackage="org.eclipse.qvtd" disposableProviderFactory="true"
       generateExampleClass="false" ecorePackage="TextModel.ecore#/">