Bug 568832 - [MOKA, Designer] Tracepoint view enhancements

- Make Tracepoint service more robust
- Add missing initializer to plugin.xml
- Add trace option support for ports and transitions

Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/plugin.xml b/plugins/org.eclipse.papyrus.moka.tracepoint.service/plugin.xml
index e8f5e08..18d705d 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/plugin.xml
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/plugin.xml
@@ -44,4 +44,10 @@
 			name="Tracepoint preferences">
 		</page>
 	</extension>
+	<extension point="org.eclipse.core.runtime.preferences">
+		<initializer
+			class="org.eclipse.papyrus.moka.tracepoint.service.preferences.TPPreferenceInitializer">
+		</initializer>
+	</extension>
+
 </plugin>
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/Messages.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/Messages.java
index f2effd5..a2f2768 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/Messages.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/Messages.java
@@ -13,21 +13,19 @@
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.papyrus.moka.tracepoint.service.messages"; //$NON-NLS-1$
 
+	public static String TPPreferencePage_TraceOptions;
+	public static String TPPreferencePage_TRACE_IMPL;
+
 	public static String TraceActionSelection_ClassOptions;
 	public static String TraceActionSelection_ImplementationOptions;
 	public static String TraceActionSelection_NoPluginsProvideTraceExt;
 	public static String TraceActionSelection_NotAvail;
 	public static String TraceActionSelection_OperationOptions;
+	public static String TraceActionSelection_PortOptions;
 	public static String TraceActionSelection_SelectTraceAction;
 	public static String TraceActionSelection_StateOptions;
+	public static String TraceActionSelection_TransitionOptions;
 
-	public static String TPPreferencePage_ClassOptions;
-	public static String TPPreferencePage_OperationOptions;
-	public static String TPPreferencePage_StateOptions;
-	public static String TPPreferencePage_TMforOperations;
-	public static String TPPreferencePage_TMforPorts;
-	public static String TPPreferencePage_TMforStateMachines;
-	public static String TPPreferencePage_TraceOptions;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceActions.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceActions.java
index 8b2c679..adf8e4c 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceActions.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceActions.java
@@ -78,6 +78,11 @@
 		Transition // nothing (?) (triggers are known? - no, could be one out of many triggers)
 	};
 
+	public enum TATransition {
+		OnlyTrigger,
+		TriggerValues,
+	};
+
 	/**
 	 * Not used for the moment
 	 */
@@ -100,6 +105,7 @@
 		Class,
 		Port,
 		State,
+		Transition,
 		Operation
 	};
 
@@ -146,6 +152,9 @@
 		else if (feature == TraceFeature.Operation) {
 			return "O:"; //$NON-NLS-1$
 		}
+		else if (feature == TraceFeature.Transition) {
+			return "T:"; //$NON-NLS-1$
+		}
 		return null;
 	}
 
@@ -164,9 +173,15 @@
 					store.getInt(TPPreferenceConstants.P_TRACE_OPTION_STATE),
 					store.getInt(TPPreferenceConstants.P_TRACE_OPTION_OP));
 		}
+		else if (feature == TraceFeature.Port) {
+			return store.getString(TPPreferenceConstants.P_TRACE_OPTION_PORT);
+		}
 		else if (feature == TraceFeature.State) {
 			return store.getString(TPPreferenceConstants.P_TRACE_OPTION_STATE);
 		}
+		else if (feature == TraceFeature.Transition) {
+			return store.getString(TPPreferenceConstants.P_TRACE_OPTION_TRANSITION);
+		}
 		else if (feature == TraceFeature.Operation) {
 			return store.getString(TPPreferenceConstants.P_TRACE_OPTION_OP);
 		}
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceMechanism.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceMechanism.java
index 2607f70..b0a45a5 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceMechanism.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/TraceMechanism.java
@@ -15,6 +15,8 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.tracepoint.service;
 
+import java.util.List;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionRegistry;
@@ -34,7 +36,7 @@
 
 	public static final String ITRACE_MECHANISM_ID = Activator.PLUGIN_ID + ".traceMechanism"; //$NON-NLS-1$
 
-	public static EList<ITraceMechanism> getTraceMechanisms()
+	public static List<ITraceMechanism> getTraceMechanisms()
 	{
 		EList<ITraceMechanism> mechanisms = new BasicEList<ITraceMechanism>();
 		IExtensionRegistry reg = Platform.getExtensionRegistry();
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/dialogs/TraceActionSelection.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/dialogs/TraceActionSelection.java
index ffd80cc..6e1f049 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/dialogs/TraceActionSelection.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/dialogs/TraceActionSelection.java
@@ -17,6 +17,7 @@
 package org.eclipse.papyrus.moka.tracepoint.service.dialogs;
 
 import java.util.Arrays;
+import java.util.List;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.emf.common.util.BasicEList;
@@ -35,12 +36,13 @@
 import org.eclipse.papyrus.moka.tracepoint.service.ITraceMechanism;
 import org.eclipse.papyrus.moka.tracepoint.service.Messages;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions;
-import org.eclipse.papyrus.moka.tracepoint.service.TraceMechanism;
-import org.eclipse.papyrus.moka.tracepoint.service.TracepointConstants;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAClass;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAOperation;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAState;
+import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TATransition;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TraceFeature;
+import org.eclipse.papyrus.moka.tracepoint.service.TraceMechanism;
+import org.eclipse.papyrus.moka.tracepoint.service.TracepointConstants;
 import org.eclipse.papyrus.moka.tracepoint.service.preferences.BinaryEncodedMChoiceFieldEditor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
@@ -58,7 +60,9 @@
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.InstanceSpecification;
 import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.Port;
 import org.eclipse.uml2.uml.State;
+import org.eclipse.uml2.uml.Transition;
 
 public class TraceActionSelection extends SelectionStatusDialog {
 
@@ -72,8 +76,12 @@
 
 	BinaryEncodedMChoiceFieldEditor operationOptions;
 
+	BinaryEncodedMChoiceFieldEditor portOptions;
+
 	BinaryEncodedMChoiceFieldEditor stateOptions;
 
+	BinaryEncodedMChoiceFieldEditor transitionOptions;
+
 	/**
 	 * The model element that has a trace marker
 	 */
@@ -107,9 +115,15 @@
 		else if (m_me instanceof State) {
 			traceActionValue = stateOptions.getResult();
 		}
+		else if (m_me instanceof Transition) {
+			traceActionValue = transitionOptions.getResult();
+		}
 		else if (m_me instanceof Operation) {
 			traceActionValue = operationOptions.getResult();
 		}
+		else if (m_me instanceof Port) {
+			traceActionValue = portOptions.getResult();
+		}
 		String traceMechanism = ""; //$NON-NLS-1$
 		for (Object tableElement : fTraceImplementations.getCheckedElements()) {
 			traceMechanism = (String) tableElement;
@@ -157,7 +171,7 @@
 			// programming language. Therefore, they are not part of this plugin shipped with Papyrus, but use an
 			// extension mechanism.
 
-			EList<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
+			List<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
 			if (mechanisms.size() == 0) {
 				items = new String[] { Messages.TraceActionSelection_NoPluginsProvideTraceExt };
 			}
@@ -188,6 +202,7 @@
 		String[][] taClassOptions = TraceActions.getStringFields(TAClass.values());
 		String[][] taStateOptions = TraceActions.getStringFields(TAState.values());
 		String[][] taOperationOptions = TraceActions.getStringFields(TAOperation.values());
+		String[][] taTransitionOptions = TraceActions.getStringFields(TATransition.values());
 		String actionString = m_marker.getAttribute(TracepointConstants.traceAction, ""); //$NON-NLS-1$
 		String mechanismID = m_marker.getAttribute(TracepointConstants.traceMechanism, ""); //$NON-NLS-1$
 
@@ -207,6 +222,15 @@
 			operationOptions = new BinaryEncodedMChoiceFieldEditor(Messages.TraceActionSelection_OperationOptions, 3, taOperationOptions, contents, true);
 			operationOptions.setupViaString(actionString);
 		}
+		else if (m_me instanceof Port) {
+			// same options as for operation - only the operation name or the parameters as well
+			portOptions = new BinaryEncodedMChoiceFieldEditor(Messages.TraceActionSelection_PortOptions, 3, taOperationOptions, contents, true);
+			portOptions.setupViaString(actionString);
+		}
+		else if (m_me instanceof Transition) {
+			transitionOptions = new BinaryEncodedMChoiceFieldEditor(Messages.TraceActionSelection_TransitionOptions, 3, taTransitionOptions, contents, true);
+			transitionOptions.setupViaString(actionString);
+		}
 
 		Group implementationGroup = new Group(parent, SWT.NONE);
 		implementationGroup.setText(Messages.TraceActionSelection_ImplementationOptions);
@@ -243,7 +267,7 @@
 				if (selection instanceof IStructuredSelection) {
 					Object first = ((IStructuredSelection) selection).getFirstElement();
 					if (first instanceof String) {
-						EList<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
+						List<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
 						boolean noDesc = true;
 						for (ITraceMechanism mechanism : mechanisms) {
 							String description = mechanism.getTraceMechanismDescription(m_me, (String) first);
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/messages.properties b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/messages.properties
index 94ce997..b5e0fde 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/messages.properties
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/messages.properties
@@ -1,15 +1,12 @@
-TPPreferencePage_ClassOptions=Class options
-TPPreferencePage_OperationOptions=Operations options
-TPPreferencePage_StateOptions=State options
-TPPreferencePage_TMforOperations=Trace Mechanism for operations (+construction/destruction)
-TPPreferencePage_TMforPorts=Trace Mechanism for ports
-TPPreferencePage_TMforStateMachines=Trace Mechanism for state machines
 TPPreferencePage_TraceOptions=Trace options
+TPPreferencePage_TRACE_IMPL=Trace implementation
 
 TraceActionSelection_ClassOptions=Class options
 TraceActionSelection_ImplementationOptions=Implementation options
 TraceActionSelection_NoPluginsProvideTraceExt=no plugins provide trace extension mechanism
 TraceActionSelection_NotAvail=<not available>
-TraceActionSelection_OperationOptions=Operation options
 TraceActionSelection_SelectTraceAction=Select trace action for this element
-TraceActionSelection_StateOptions=State options
\ No newline at end of file
+TraceActionSelection_OperationOptions=Operation options
+TraceActionSelection_PortOptions=Port options
+TraceActionSelection_StateOptions=State options
+TraceActionSelection_TransitionOptions=Transition options
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/BinaryEncodedMChoiceFieldEditor.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/BinaryEncodedMChoiceFieldEditor.java
index d274b04..975a50a 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/BinaryEncodedMChoiceFieldEditor.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/BinaryEncodedMChoiceFieldEditor.java
@@ -117,7 +117,7 @@
 	@Override
 	protected boolean isSelected(String fieldName, String valueToSet) {
 		try {
-			int value = new Integer(valueToSet);
+			int value = Integer.parseInt(valueToSet);
 			int index = 0;
 			for (String setting[] : labelsAndValues) {
 				// [0] = name, [1] = value [2] = checked
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceConstants.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceConstants.java
index 50a3f4d..8b87626 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceConstants.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceConstants.java
@@ -23,30 +23,29 @@
 	/**
 	 * The trace mechanism that should be used by default
 	 */
-	public static final String P_TRACE_IMPLEMENTATION_PORT = "papyrus.trace.implementation.port"; //$NON-NLS-1$
+	public static final String P_TRACE_IMPLEMENTATION = "papyrus.trace.implementation"; //$NON-NLS-1$
 
 	/**
-	 * The trace mechanism that should be used by default
-	 */
-	public static final String P_TRACE_IMPLEMENTATION_OP = "papyrus.trace.implementation.op"; //$NON-NLS-1$
-
-	/**
-	 * The trace mechanism that should be used by default
-	 */
-	public static final String P_TRACE_IMPLEMENTATION_SM = "papyrus.trace.implementation.sm"; //$NON-NLS-1$
-
-
-	/**
-	 * Options for trace implementation via state machines
+	 * Options for class trace options
 	 */
 	public static final String P_TRACE_OPTION_CLASS = "papyrus.trace.option.class"; //$NON-NLS-1$
 
 	/**
-	 * Options for trace implementation for operations
+	 * Options for state trace options
 	 */
 	public static final String P_TRACE_OPTION_STATE = "papyrus.trace.option.state"; //$NON-NLS-1$
 
 	/**
+	 * Options for state trace options
+	 */
+	public static final String P_TRACE_OPTION_PORT = "papyrus.trace.option.port"; //$NON-NLS-1$
+
+	/**
+	 * Options for trnasition trace options
+	 */
+	public static final String P_TRACE_OPTION_TRANSITION = "papyrus.trace.option.transition"; //$NON-NLS-1$
+
+	/**
 	 * Options for trace implementation via state machines
 	 */
 	public static final String P_TRACE_OPTION_OP = "papyrus.trace.option.op"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceInitializer.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceInitializer.java
index 6748452..3435367 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceInitializer.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferenceInitializer.java
@@ -15,6 +15,8 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.tracepoint.service.preferences;
 
+import java.util.List;
+
 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -35,7 +37,7 @@
 	@Override
 	public void initializeDefaultPreferences() {
 		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
-		EList<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
+		List<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
 		String mechanismID = ""; //$NON-NLS-1$
 		if (mechanisms.size() > 0) {
 			ITraceMechanism mechanism = mechanisms.get(0);
@@ -45,12 +47,12 @@
 				mechanismID = mechanismIDs.get(0);
 			}
 		}
-		store.setDefault(TPPreferenceConstants.P_TRACE_IMPLEMENTATION_PORT, mechanismID);
-		store.setDefault(TPPreferenceConstants.P_TRACE_IMPLEMENTATION_OP, mechanismID);
-		store.setDefault(TPPreferenceConstants.P_TRACE_IMPLEMENTATION_SM, mechanismID);
+		store.setDefault(TPPreferenceConstants.P_TRACE_IMPLEMENTATION, mechanismID);
 
 		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_CLASS, 3);
-		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_STATE, 0);
+		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_STATE, 1);
 		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_OP, 0);
+		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_PORT, 0);
+		store.setDefault(TPPreferenceConstants.P_TRACE_OPTION_TRANSITION, 0);
 	}
 }
diff --git a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferencePage.java b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferencePage.java
index ced9c9e..64ce98d 100644
--- a/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferencePage.java
+++ b/plugins/org.eclipse.papyrus.moka.tracepoint.service/src/org/eclipse/papyrus/moka/tracepoint/service/preferences/TPPreferencePage.java
@@ -15,6 +15,8 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.tracepoint.service.preferences;
 
+import java.util.List;
+
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.jface.preference.ComboFieldEditor;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
@@ -23,10 +25,11 @@
 import org.eclipse.papyrus.moka.tracepoint.service.ITraceMechanism;
 import org.eclipse.papyrus.moka.tracepoint.service.Messages;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions;
-import org.eclipse.papyrus.moka.tracepoint.service.TraceMechanism;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAClass;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAOperation;
 import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TAState;
+import org.eclipse.papyrus.moka.tracepoint.service.TraceActions.TATransition;
+import org.eclipse.papyrus.moka.tracepoint.service.TraceMechanism;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
@@ -54,21 +57,23 @@
 	 */
 	@Override
 	public void createFieldEditors() {
-		EList<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
+		List<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
 		int elements = 0;
 		for (ITraceMechanism mechanism : mechanisms) {
-			// TODO: function need to support null object
 			EList<String> mechanismIDs = mechanism.getTraceMechanismIDs(null);
 			elements += mechanismIDs.size();
 		}
 		String[][] mechList = new String[elements][2];
 		elements = 0;
 		for (ITraceMechanism mechanism : mechanisms) {
-			// TODO: function need to support null object
 			EList<String> mechanismIDs = mechanism.getTraceMechanismIDs(null);
 			for (String id : mechanismIDs) {
+				String description = mechanism.getTraceMechanismDescription(null, id);
+				if (description == null) {
+					description = Messages.TraceActionSelection_NotAvail;
+				}
 				mechList[elements][1] = id;
-				mechList[elements][0] = mechanism.getTraceMechanismDescription(null, id);
+				mechList[elements][0] = description;
 				elements++;
 			}
 		}
@@ -76,27 +81,30 @@
 		String[][] taClassOptions = TraceActions.getStringFields(TAClass.values());
 		String[][] taStateOptions = TraceActions.getStringFields(TAState.values());
 		String[][] taOperationOptions = TraceActions.getStringFields(TAOperation.values());
+		String[][] taPortOptions = TraceActions.getStringFields(TAOperation.values());
+		String[][] taTransitionOptions = TraceActions.getStringFields(TATransition.values());
 
-		addField(new BinaryEncodedMChoiceFieldEditor(TPPreferenceConstants.P_TRACE_OPTION_CLASS, Messages.TPPreferencePage_ClassOptions, 3, taClassOptions, getFieldEditorParent(), true));
+		String tst = getPreferenceStore().getString(TPPreferenceConstants.P_TRACE_OPTION_CLASS);
+		
+		addField(new BinaryEncodedMChoiceFieldEditor(TPPreferenceConstants.P_TRACE_OPTION_CLASS, Messages.TraceActionSelection_ClassOptions, 3, taClassOptions, getFieldEditorParent(), true));
 
-		addField(new BinaryEncodedMChoiceFieldEditor(TPPreferenceConstants.P_TRACE_OPTION_STATE, Messages.TPPreferencePage_StateOptions, 3, taStateOptions, getFieldEditorParent(), true));
+		addField(new BinaryEncodedMChoiceFieldEditor(TPPreferenceConstants.P_TRACE_OPTION_STATE, Messages.TraceActionSelection_StateOptions, 3, taStateOptions, getFieldEditorParent(), true));
 
 		addField(new RadioGroupFieldEditor(
 				TPPreferenceConstants.P_TRACE_OPTION_OP,
-				Messages.TPPreferencePage_OperationOptions, 3, taOperationOptions, getFieldEditorParent(), true));
+				Messages.TraceActionSelection_OperationOptions, 3, taOperationOptions, getFieldEditorParent(), true));
+
+		addField(new RadioGroupFieldEditor(
+				TPPreferenceConstants.P_TRACE_OPTION_PORT,
+				Messages.TraceActionSelection_PortOptions, 3, taPortOptions, getFieldEditorParent(), true));
+
+		addField(new RadioGroupFieldEditor(
+				TPPreferenceConstants.P_TRACE_OPTION_TRANSITION,
+				Messages.TraceActionSelection_TransitionOptions, 3, taTransitionOptions, getFieldEditorParent(), true));
 
 		addField(new ComboFieldEditor(
-				TPPreferenceConstants.P_TRACE_IMPLEMENTATION_PORT,
-				Messages.TPPreferencePage_TMforPorts, mechList, getFieldEditorParent()));
-
-		addField(new ComboFieldEditor(
-				TPPreferenceConstants.P_TRACE_IMPLEMENTATION_OP,
-				Messages.TPPreferencePage_TMforOperations, mechList, getFieldEditorParent()));
-
-		addField(new ComboFieldEditor(
-				TPPreferenceConstants.P_TRACE_IMPLEMENTATION_SM,
-				Messages.TPPreferencePage_TMforStateMachines, mechList, getFieldEditorParent()));
-
+				TPPreferenceConstants.P_TRACE_IMPLEMENTATION,
+				Messages.TPPreferencePage_TRACE_IMPL, mechList, getFieldEditorParent()));
 	}
 
 	/*
diff --git a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/breakpoint/commands/AbstractTraceAndDebugCommand.java b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/breakpoint/commands/AbstractTraceAndDebugCommand.java
index 9892bfc..10270a6 100644
--- a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/breakpoint/commands/AbstractTraceAndDebugCommand.java
+++ b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/breakpoint/commands/AbstractTraceAndDebugCommand.java
@@ -22,7 +22,6 @@
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
@@ -130,8 +129,7 @@
 						id = store.getDefaultString(TPPreferenceConstants.P_TRACE_IMPLEMENTATION_SM);
 					}
 					if (id != null) {
-						EList<ITraceMechanism> mechanisms = TraceMechanism.getTraceMechanisms();
-						for (ITraceMechanism mechanism : mechanisms) {
+						for (ITraceMechanism mechanism : TraceMechanism.getTraceMechanisms()) {
 							for (String providedID : mechanism.getTraceMechanismIDs(selectedElement)) {
 								if (id.equals(providedID)) {
 									mechanism.applyTraceMechanism(selectedElement, id, 0);