diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/CompDefEditorConfigurationContribution.java b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/CompDefEditorConfigurationContribution.java
index 7e1f625..038a4a3 100644
--- a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/CompDefEditorConfigurationContribution.java
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/CompDefEditorConfigurationContribution.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2010 CEA LIST.
+ * Copyright (c) 2020 CEA LIST.
  *
  *
  * All rights reserved. This program and the accompanying materials
@@ -13,6 +13,7 @@
  *  CEA LIST - Initial API and implementation
  *
  *****************************************************************************/
+
 package org.eclipse.papyrus.robotics.xtext.compdef.ui.contribution;
 
 import java.util.ArrayList;
@@ -31,7 +32,6 @@
 import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
 import org.eclipse.papyrus.designer.languages.common.base.ElementUtils;
 import org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors.configuration.ICustomDirectEditorConfiguration;
-import org.eclipse.papyrus.robotics.bpc.profile.bpc.Entity;
 import org.eclipse.papyrus.robotics.core.utils.ParameterUtils;
 import org.eclipse.papyrus.robotics.profile.robotics.components.Activity;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ActivityInstance;
@@ -58,8 +58,6 @@
 import org.eclipse.uml2.uml.StructuredClassifier;
 import org.eclipse.uml2.uml.Type;
 import org.eclipse.uml2.uml.UMLPackage;
-import org.eclipse.uml2.uml.ValueSpecification;
-import org.eclipse.uml2.uml.util.UMLUtil;
 
 import com.google.inject.Injector;
 
@@ -153,60 +151,7 @@
 		return SWT.MULTI | SWT.WRAP;
 	}
 
-	String getProvided(Port port) {
-		EList<Interface> provideds = port.getProvideds();
-		if (provideds.size() > 0) {
-			Interface provided = provideds.get(0);
-			if (provided != null && provided.getName() != null) {
-				return "provides " + provided.getQualifiedName();
-			}
-		}
-		return "";
-	}
-
-	String getRequired(Port port) {
-		EList<Interface> requireds = port.getRequireds();
-		if (requireds.size() > 0) {
-			Interface required = requireds.get(0);
-			if (required != null && required.getName() != null) {
-				// add space, if provided is non null
-				String space = getProvided(port).length() > 0 ? " " : "";
-				return space + "requires " + required.getQualifiedName();
-			}
-		}
-		return "";
-	}
-
-	public String getDefaultValue(Property attribute) {
-		ValueSpecification value = attribute.getDefaultValue();
-		if (value != null) {
-			String strVal = value.stringValue();
-			if (strVal != null) {
-				// quote all non numeric values.
-				if (!(strVal.charAt(0) >= '0' && strVal.charAt(0) <= '9')) {
-					strVal = "\"" + strVal + "\"";
-				}
-				return " = " + strVal;
-			}
-		}
-		return "";
-	}
-
-	public String getType(Property attribute) {
-		if (attribute.getType() != null) {
-			return ": " + attribute.getType().getQualifiedName();
-		}
-		return "";
-	}
-
-
-	public String getComment(Property parameter) {
-		Entity entity = UMLUtil.getStereotypeApplication(parameter, Entity.class);
-		if (entity != null) {
-			return "	// " + entity.getDescription();
-		}
-		else return "";
-	}
+	
 
 	/*
 	 * (non-Javadoc)
@@ -221,32 +166,7 @@
 			if (invalidStr != null) {
 				return invalidStr;
 			}
-			String textToEdit = String.format("component %s\n", clazz.getName());
-			textToEdit += "{\n";
-			// Triggers
-			for (Port port : clazz.getOwnedPorts()) {
-				textToEdit += String.format("\tport %s %s%s\n", port.getName(),
-						getProvided(port), getRequired(port));
-			}
-			for (Property attribute : clazz.getOwnedAttributes()) {
-				Type type = attribute.getType();
-				if (type != null && StereotypeUtil.isApplied(type, Activity.class)) {
-					textToEdit += String.format("\tactivity %s%s\n", type.getName(),
-							getDefaultValue(attribute));
-				}
-			}
-			StructuredClassifier paramClass = ParameterUtils.getParameterClass(clazz);
-			if (paramClass != null) {
-				for (Property parameter : paramClass.getAttributes()) {
-					// Type type = attribute.getType();
-					// if (StereotypeUtil.isApplied(type, ParameterEntry.class)) {
-					textToEdit += String.format("\tparameter %s%s%s%s\n", parameter.getName(),
-							getType(parameter), getDefaultValue(parameter), getComment(parameter));
-				}
-			}
-
-			textToEdit += "}\n";
-			return textToEdit;
+			return UnparseCompDef.getCompDefText(clazz).toString();
 		}
 
 		return "not a component";
diff --git a/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/UnparseCompDef.xtend b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/UnparseCompDef.xtend
new file mode 100644
index 0000000..6366c52
--- /dev/null
+++ b/plugins/customization/textedit/org.eclipse.papyrus.robotics.xtext.compdef.ui/src/org/eclipse/papyrus/robotics/xtext/compdef/ui/contribution/UnparseCompDef.xtend
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+ 
+ package org.eclipse.papyrus.robotics.xtext.compdef.ui.contribution
+
+import org.eclipse.uml2.uml.Class
+import org.eclipse.uml2.uml.Port
+import org.eclipse.uml2.uml.Property
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil
+import org.eclipse.papyrus.robotics.profile.robotics.components.Activity
+import org.eclipse.papyrus.robotics.core.utils.ParameterUtils
+import org.eclipse.papyrus.robotics.bpc.profile.bpc.Entity
+import org.eclipse.uml2.uml.util.UMLUtil
+
+class UnparseCompDef {
+	
+	def static getCompDefText(Class clazz) '''
+		component «clazz.name» {
+			«FOR port : clazz.ownedPorts»
+				port «port.name» «port.provided»«port.required»
+			«ENDFOR»
+			«FOR attribute : clazz.ownedAttributes»
+				«val  type = attribute.type»
+				«IF type !== null && StereotypeUtil.isApplied(type, Activity)»
+					activity «type.name»«attribute.defaultValue»
+				«ENDIF»
+			«ENDFOR»
+			«val paramClass = ParameterUtils.getParameterClass(clazz)»
+			«IF paramClass !== null»
+				«FOR parameter : paramClass.attributes»
+					parameter «parameter.name»«parameter.typeStr»«parameter.defaultValueStr»«parameter.getComment»
+				«ENDFOR»
+			«ENDIF»
+		}
+	'''
+	
+	def static String getProvided(Port port) {
+		val provideds = port.getProvideds()
+		if (provideds.size() > 0) {
+			val provided = provideds.get(0)
+			if (provided !== null && provided.getName() !== null) {
+				return '''provides «provided.qualifiedName»'''
+			}
+		}
+		return ""
+	}
+
+	def static String getRequired(Port port) {
+		val requireds = port.getRequireds()
+		if (requireds.size() > 0) {
+			val required = requireds.get(0)
+			if (required !== null && required.getName() !== null) {
+				// add space, if provided is non empty
+				return '''«IF port.provided.length > 0» «ENDIF»requires «required.qualifiedName»'''
+			}
+		}
+		return ""
+	}
+
+	def static getDefaultValueStr(Property attribute) {
+		val value = attribute.getDefaultValue()
+		if (value !== null) {
+			var strVal = value.stringValue()
+			if (strVal !== null) {
+				// quote all non numeric values.
+				if (!(strVal.charAt(0) >= '0' && strVal.charAt(0) <= '9')) {
+					strVal = "\"" + strVal + "\""
+				}
+				return " = " + strVal
+			}
+		}
+		return ""
+	}
+
+	def static getTypeStr(Property attribute) {
+		if (attribute.type !== null) {
+			return ": " + attribute.type.qualifiedName
+		}
+		return ""
+	}
+
+
+	def static getComment(Property parameter) {
+		val entity = UMLUtil.getStereotypeApplication(parameter, Entity)
+		if (entity !== null && entity.getDescription !== null) {
+			return "	// " + entity.getDescription()
+		}
+		else return ""
+	}
+		
+}
\ No newline at end of file
