Display the triggering event occurrence.

It is possible to navigate within the variables (i.e., time, operation
parameters, signal attributes) available at an event occurrence. The
approach support both AcceptEventAction and Transition.

This patch also introduces significant changes within the implementation
of the presentation model for Moka debugging tool.

Change-Id: I10f0afdbe645a7ae314fe4bfaee68465ccb39902
Signed-off-by: jeremie.tatibouet <jeremie.tatibouet@cea.fr>
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath b/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
index ebce748..fa0b965 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
@@ -4,5 +4,10 @@
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

 	<classpathentry kind="src" path="src/"/>

 	<classpathentry kind="src" path="generated/"/>

+	<classpathentry kind="src" path="/org.eclipse.papyrus.moka.fuml">

+		<attributes>

+			<attribute name="org.eclipse.ajdt.aspectpath" value="org.eclipse.ajdt.aspectpath"/>

+		</attributes>

+	</classpathentry>

 	<classpathentry kind="output" path="target/classes"/>

 </classpath>

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
index b7db3c0..21c8c25 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
@@ -11,7 +11,8 @@
  org.eclipse.equinox.registry;bundle-version="[3.7.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.papyrus.moka.fuml.Semantics,
+Export-Package: org.eclipse.papyrus.moka.fuml.Profiling,
+ org.eclipse.papyrus.moka.fuml.Semantics,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.BasicActions,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.IntermediateActions,
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java
new file mode 100644
index 0000000..2862319
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java
@@ -0,0 +1,21 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.fuml.Profiling;

+

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public interface ITriggeredVisitor {

+	

+	public IEventOccurrence getTriggeringEventOccurrence();

+	

+}

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
index adc9184..e5c09c0 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
@@ -26,7 +26,7 @@
 		if(monitor!=null && monitor.isCanceled()){

 			throw new OperationCanceledException();

 		}

-		this.fireNodeVisited(activation);

+		this.fireNodeVisited(new TransitionActivationWrapper(activation, eventOccurrence));

 	}

 	

 	// Define a point cut for each class that implements the enterTarget operation

@@ -42,6 +42,6 @@
 		if(monitor!=null && monitor.isCanceled()){

 			throw new OperationCanceledException();

 		}

-		this.fireNodeLeft(activation);

+		this.fireNodeLeft(new TransitionActivationWrapper(activation, eventOccurrence));

 	}

 }

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java
new file mode 100644
index 0000000..baaadeb
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java
@@ -0,0 +1,219 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StateMachines;

+

+import java.util.List;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;

+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;

+import org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications.TriggeredVisitorWrapper;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.IRegionActivation;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ITransitionActivation;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.IVertexActivation;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.TransitionMetadata;

+import org.eclipse.uml2.uml.Behavior;

+import org.eclipse.uml2.uml.NamedElement;

+

+public class TransitionActivationWrapper extends TriggeredVisitorWrapper implements ITransitionActivation {

+

+	// The original activation for the transition

+	protected ITransitionActivation transitionActivation;

+

+	public TransitionActivationWrapper(ITransitionActivation activation, IEventOccurrence eventOccurrence) {

+		super(eventOccurrence);

+		this.transitionActivation = activation;

+	}

+

+	@Override

+	public void setStatus(TransitionMetadata status) {

+		this.transitionActivation.setStatus(status);

+	}

+

+	@Override

+	public TransitionMetadata getStatus() {

+		return this.transitionActivation.getStatus();

+	}

+

+	@Override

+	public void setAnalyticalStatus(TransitionMetadata status) {

+		this.transitionActivation.setAnalyticalStatus(status);

+	}

+

+	@Override

+	public TransitionMetadata getAnalyticalStatus() {

+		return this.transitionActivation.getAnalyticalStatus();

+	}

+

+	@Override

+	public boolean isReached(boolean staticCheck) {

+		return this.transitionActivation.isReached(staticCheck);

+	}

+

+	@Override

+	public boolean isTraversed(boolean staticCheck) {

+		return this.transitionActivation.isTraversed(staticCheck);

+	}

+

+	@Override

+	public boolean isTriggered() {

+		return this.transitionActivation.isTriggered();

+	}

+

+	@Override

+	public boolean isGuarded() {

+		return this.transitionActivation.isTriggered();

+	}

+

+	@Override

+	public IVertexActivation getSourceActivation() {

+		return this.transitionActivation.getSourceActivation();

+	}

+

+	@Override

+	public void setSourceActivation(IVertexActivation vertexSourceActivation) {

+		this.transitionActivation.setSourceActivation(vertexSourceActivation);

+	}

+

+	@Override

+	public IVertexActivation getTargetActivation() {

+		return this.transitionActivation.getTargetActivation();

+	}

+

+	@Override

+	public void setTargetActivation(IVertexActivation vertexTargetActivation) {

+		this.transitionActivation.setTargetActivation(vertexTargetActivation);

+	}

+

+	@Override

+	public boolean evaluateGuard(IEventOccurrence eventOccurrence) {

+		return this.transitionActivation.evaluateGuard(eventOccurrence);

+	}

+

+	@Override

+	public boolean hasTrigger(IEventOccurrence eventOccurrence) {

+		return this.transitionActivation.hasTrigger(eventOccurrence);

+	}

+

+	@Override

+	public boolean canFireOn(IEventOccurrence eventOccurrence) {

+		return this.transitionActivation.canFireOn(eventOccurrence);

+	}

+

+	@Override

+	public boolean canPropagateExecution(IEventOccurrence eventOccurrence) {

+		return this.transitionActivation.canPropagateExecution(eventOccurrence);

+	}

+

+	@Override

+	public void tryExecuteEffect(IEventOccurrence eventOccurrence) {

+		this.transitionActivation.tryExecuteEffect(eventOccurrence);

+	}

+

+	@Override

+	public void fire(IEventOccurrence eventOccurrence) {

+		this.transitionActivation.fire(eventOccurrence);

+	}

+

+	@Override

+	public IRegionActivation getLeastCommonAncestor() {

+		return this.transitionActivation.getLeastCommonAncestor();

+	}

+

+	@Override

+	public void exitSource(IEventOccurrence eventOccurrence) {

+		this.transitionActivation.exitSource(eventOccurrence);

+	}

+

+	@Override

+	public void enterTarget(IEventOccurrence eventOccurrence) {

+		this.transitionActivation.enterTarget(eventOccurrence);

+	}

+

+	@Override

+	public void setNode(NamedElement node) {

+		this.transitionActivation.setNode(node);

+	}

+

+	@Override

+	public NamedElement getNode() {

+		return this.transitionActivation.getNode();

+	}

+

+	@Override

+	public void setParent(ISemanticVisitor parent) {

+		this.transitionActivation.setParent(parent);

+	}

+

+	@Override

+	public ISemanticVisitor getParent() {

+		return this.transitionActivation.getParent();

+	}

+

+	@Override

+	public List<ISemanticVisitor> getContextChain() {

+		return this.transitionActivation.getContextChain();

+	}

+

+	@Override

+	public IExecution getStateMachineExecution() {

+		return this.transitionActivation.getStateMachineExecution();

+	}

+

+	@Override

+	public ILocus getExecutionLocus() {

+		return this.transitionActivation.getExecutionLocus();

+	}

+

+	@Override

+	public IObject_ getExecutionContext() {

+		return this.transitionActivation.getExecutionContext();

+	}

+

+	@Override

+	public boolean isVisitorFor(NamedElement node) {

+		return this.transitionActivation.isVisitorFor(node);

+	}

+

+	@Override

+	public void activate() {

+		this.transitionActivation.activate();

+	}

+

+	@Override

+	public void activateTransitions() {

+		this.transitionActivation.activateTransitions();

+	}

+

+	@Override

+	public IExecution getExecutionFor(Behavior behavior, IEventOccurrence eventOccurrence) {

+		return this.transitionActivation.getExecutionFor(behavior, eventOccurrence);

+	}

+

+	@Override

+	public void _endIsolation() {

+		this.transitionActivation._endIsolation();

+	}

+

+	@Override

+	public void _beginIsolation() {

+		this.transitionActivation._beginIsolation();

+	}

+	

+	@Override

+	public String toString() {

+		return this.transitionActivation.toString();

+	}

+

+}

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
index 8e35807..3638a72 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
@@ -21,7 +21,7 @@
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Loci.LociL3.CS_Executor;

 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;

 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.DefaultCreateObjectActionStrategy;

-import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.RestrictiveGetAssociationStrategy;

+import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.DefaultGetAssociationStrategy;

 import org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications.FIFOGetNextEventStrategy;

 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Loci.LociL1.FirstChoiceStrategy;

 import org.eclipse.papyrus.moka.fuml.statemachines.Semantics.Loci.SM_ExecutionFactory;

@@ -45,7 +45,7 @@
 		locus.getFactory().setStrategy(new CS_NameBased_StructuralFeatureOfInterfaceAccessStrategy());

 		locus.getFactory().setStrategy(new CS_DefaultRequestPropagationStrategy());

 		locus.getFactory().setStrategy(new CS_DefaultConstructStrategy());

-		locus.getFactory().setStrategy(new RestrictiveGetAssociationStrategy());

+		locus.getFactory().setStrategy(new DefaultGetAssociationStrategy());

 		locus.getFactory().setStrategy(new DefaultCreateObjectActionStrategy());

 	}

 	

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
index ebdb40e..0f7addb 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
@@ -25,6 +25,7 @@
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.BasicActions,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.CompleteActions,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Activities.IntermediateActivities,
+ org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Loci,
  org.eclipse.papyrus.moka.fuml.registry,
  org.eclipse.papyrus.moka.fuml.registry.service.framework
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
index 2191fca..7aabf1c 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
@@ -26,6 +26,6 @@
 		call(* IAcceptEventActionActivation.accept(IEventOccurrence));

 	

 	before(IAcceptEventActionActivation activation, IEventOccurrence eventOccurrence): accept(activation, eventOccurrence){

-		this.leave(activation);

+		this.leave(new AcceptEventActivationWrapper(activation, eventOccurrence));

 	}

 }
\ No newline at end of file
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java
new file mode 100644
index 0000000..5d4881e
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java
@@ -0,0 +1,286 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.CompleteActions;

+

+import java.util.List;

+

+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.BasicActions.IPinActivation;

+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;

+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionEventAccepter;

+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;

+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityExecution;

+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;

+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivationGroup;

+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IBooleanValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.ILink;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;

+import org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications.TriggeredVisitorWrapper;

+import org.eclipse.uml2.uml.ActivityNode;

+import org.eclipse.uml2.uml.InputPin;

+import org.eclipse.uml2.uml.OutputPin;

+import org.eclipse.uml2.uml.Pin;

+

+public class AcceptEventActivationWrapper extends TriggeredVisitorWrapper implements IAcceptEventActionActivation{

+

+	protected IAcceptEventActionActivation acceptEventActivation;

+	

+	public AcceptEventActivationWrapper(IAcceptEventActionActivation acceptEventActivation, IEventOccurrence eventOccurrence) {

+		super(eventOccurrence);

+		this.acceptEventActivation = acceptEventActivation;

+	}

+

+	@Override

+	public void doAction() {

+		this.acceptEventActivation.doAction();

+	}

+

+	@Override

+	public void sendOffers() {

+		this.acceptEventActivation.sendOffers();

+	}

+

+	@Override

+	public void addPinActivation(IPinActivation pinActivation) {

+		this.acceptEventActivation.addPinActivation(pinActivation);

+	}

+

+	@Override

+	public IPinActivation getPinActivation(Pin pin) {

+		return this.acceptEventActivation.getPinActivation(pin);

+	}

+

+	@Override

+	public void putToken(OutputPin pin, IValue value) {

+		this.acceptEventActivation.putToken(pin, value);

+	}

+

+	@Override

+	public void putTokens(OutputPin pin, List<IValue> values) {

+		this.acceptEventActivation.putTokens(pin, values);

+	}

+

+	@Override

+	public List<IValue> getTokens(InputPin pin) {

+		return this.acceptEventActivation.getTokens(pin);

+	}

+

+	@Override

+	public List<IValue> takeTokens(InputPin pin) {

+		return this.acceptEventActivation.takeTokens(pin);

+	}

+

+	@Override

+	public Boolean valueParticipatesInLink(IValue value, ILink link) {

+		return this.acceptEventActivation.valueParticipatesInLink(value, link);

+	}

+

+	@Override

+	public IBooleanValue makeBooleanValue(Boolean value) {

+		return this.acceptEventActivation.makeBooleanValue(value);

+	}

+

+	@Override

+	public void run() {

+		this.acceptEventActivation.run();

+	}

+

+	@Override

+	public void receiveOffer() {

+		this.acceptEventActivation.receiveOffer();

+	}

+

+	@Override

+	public List<IToken> takeOfferedTokens() {

+		return this.acceptEventActivation.takeOfferedTokens();

+	}

+

+	@Override

+	public void fire(List<IToken> incomingTokens) {

+		this.acceptEventActivation.fire(incomingTokens);		

+	}

+

+	@Override

+	public void sendOffers(List<IToken> tokens) {

+		this.acceptEventActivation.sendOffers(tokens);

+	}

+

+	@Override

+	public void terminate() {

+		this.acceptEventActivation.terminate();

+	}

+

+	@Override

+	public Boolean isReady() {

+		return this.acceptEventActivation.isReady();

+	}

+

+	@Override

+	public Boolean isRunning() {

+		return this.acceptEventActivation.isRunning();

+	}

+

+	@Override

+	public void addOutgoingEdge(IActivityEdgeInstance edge) {

+		this.acceptEventActivation.addOutgoingEdge(edge);

+	}

+

+	@Override

+	public void addIncomingEdge(IActivityEdgeInstance edge) {

+		this.acceptEventActivation.addIncomingEdge(edge);

+	}

+

+	@Override

+	public void createNodeActivations() {

+		this.acceptEventActivation.createNodeActivations();

+	}

+

+	@Override

+	public void createEdgeInstances() {

+		this.acceptEventActivation.createEdgeInstances();

+	}

+

+	@Override

+	public Boolean isSourceFor(IActivityEdgeInstance edgeInstance) {

+		return this.acceptEventActivation.isSourceFor(edgeInstance);

+	}

+

+	@Override

+	public IActivityExecution getActivityExecution() {

+		return this.acceptEventActivation.getActivityExecution();

+	}

+

+	@Override

+	public IObject_ getExecutionContext() {

+		return this.acceptEventActivation.getExecutionContext();

+	}

+

+	@Override

+	public ILocus getExecutionLocus() {

+		return this.acceptEventActivation.getExecutionLocus();

+	}

+

+	@Override

+	public IActivityNodeActivation getNodeActivation(ActivityNode node) {

+		return this.acceptEventActivation.getNodeActivation(node);

+	}

+

+	@Override

+	public void addToken(IToken token) {

+		this.acceptEventActivation.addToken(token);

+	}

+

+	@Override

+	public Integer removeToken(IToken token) {

+		return this.acceptEventActivation.removeToken(token);

+	}

+

+	@Override

+	public void addTokens(List<IToken> tokens) {

+		this.acceptEventActivation.addTokens(tokens);

+	}

+

+	@Override

+	public List<IToken> takeTokens() {

+		return this.acceptEventActivation.takeTokens();

+	}

+

+	@Override

+	public void clearTokens() {

+		this.acceptEventActivation.clearTokens();

+	}

+

+	@Override

+	public List<IToken> getTokens() {

+		return this.acceptEventActivation.getTokens();

+	}

+

+	@Override

+	public void initialize(ActivityNode node, IActivityNodeActivationGroup group) {

+		this.acceptEventActivation.initialize(node, group);

+	}

+

+	@Override

+	public void suspend() {

+		this.acceptEventActivation.suspend();

+	}

+

+	@Override

+	public void resume() {

+		this.acceptEventActivation.resume();

+	}

+

+	@Override

+	public void setNode(ActivityNode node) {

+		this.acceptEventActivation.setNode(node);

+	}

+

+	@Override

+	public ActivityNode getNode() {

+		return this.acceptEventActivation.getNode();

+	}

+

+	@Override

+	public void setGroup(IActivityNodeActivationGroup group) {

+		this.acceptEventActivation.setGroup(group);

+	}

+

+	@Override

+	public IActivityNodeActivationGroup getGroup() {

+		return this.acceptEventActivation.getGroup();

+	}

+

+	@Override

+	public List<IActivityEdgeInstance> getIncomingEdges() {

+		return this.acceptEventActivation.getIncomingEdges();

+	}

+

+	@Override

+	public List<IActivityEdgeInstance> getOutgoingEdges() {

+		return this.acceptEventActivation.getOutgoingEdges();

+	}

+

+	@Override

+	public void setRunning(Boolean status) {

+		this.acceptEventActivation.setRunning(status);

+	}

+

+	@Override

+	public void _endIsolation() {

+		this.acceptEventActivation._endIsolation();

+	}

+

+	@Override

+	public void _beginIsolation() {

+		this.acceptEventActivation._beginIsolation();

+	}

+

+	@Override

+	public void accept(IEventOccurrence eventOccurrence) {

+		this.acceptEventActivation.accept(eventOccurrence);

+	}

+

+	@Override

+	public Boolean match(IEventOccurrence eventOccurrence) {

+		return this.acceptEventActivation.match(eventOccurrence);

+	}

+

+	@Override

+	public IAcceptEventActionEventAccepter getEventAccepter() {

+		return this.acceptEventActivation.getEventAccepter();

+	}

+

+}

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java
new file mode 100644
index 0000000..3efca01
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java
@@ -0,0 +1,31 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications;

+

+import org.eclipse.papyrus.moka.fuml.Profiling.ITriggeredVisitor;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public abstract class TriggeredVisitorWrapper implements ITriggeredVisitor{

+	

+	protected IEventOccurrence eventOccurrence;

+	

+	public TriggeredVisitorWrapper(IEventOccurrence eventOccurrence) {

+		this.eventOccurrence = eventOccurrence;

+	}

+	

+	@Override

+	public IEventOccurrence getTriggeringEventOccurrence() {

+		return this.eventOccurrence;

+	}

+

+}

diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
index 9622e90..0f315d2 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
@@ -163,8 +163,6 @@
 
 	public void terminateAll() {
 		// Terminate all node activations in the group.
-		Debug.println("[terminateAll] Terminating activation group for "
-				+ (this.activityExecution != null ? "activity " + this.activityExecution.getTypes().get(0).getName() : this.containingNodeActivation != null ? "node " + this.containingNodeActivation.getNode().getName() : "expansion region") + ".");
 		List<IActivityNodeActivation> nodeActivations = this.nodeActivations;
 		for (int i = 0; i < nodeActivations.size(); i++) {
 			IActivityNodeActivation nodeActivation = nodeActivations.get(i);
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF b/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
index 0d00217..e1d2cc3 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
@@ -11,7 +11,9 @@
  org.eclipse.papyrus.moka.animation;bundle-version="2.0.100",
  org.eclipse.papyrus.moka.utils.ui;bundle-version="2.0.100",
  org.eclipse.debug.ui;bundle-version="[3.12.0,4.0.0)",
- org.eclipse.papyrus.moka.fuml.statemachines.interfaces;visibility:=reexport
+ org.eclipse.papyrus.moka.fuml.statemachines.interfaces;visibility:=reexport,
+ org.eclipse.papyrus.moka.timedfuml.interfaces,
+ org.eclipse.papyrus.moka.debug
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse Modeling Project
@@ -23,3 +25,4 @@
  org.eclipse.papyrus.moka.debug.model.data.mapping.variables;x-internal:=true,
  org.eclipse.papyrus.moka.debug.model.data.presentations,
  org.eclipse.papyrus.moka.debug.model.data.presentations.providers
+Import-Package: org.eclipse.papyrus.moka.debug.model.data.mapping.values
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png
new file mode 100644
index 0000000..f56aef7
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png
new file mode 100644
index 0000000..a175dd3
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif
new file mode 100644
index 0000000..7b1efa5
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png
new file mode 100644
index 0000000..a5459b6
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png
new file mode 100644
index 0000000..d8ac0b4
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
index 959727e..cf09f15 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
@@ -15,11 +15,16 @@
 

 import org.eclipse.jface.resource.ImageDescriptor;

 import org.eclipse.jface.resource.ImageRegistry;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_InteractionPointVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CallEventOccurrenceVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CompletionEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.EventPoolVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ExecutionContextVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.FeatureValueVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ItemVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SignalEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SuspensionPointVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TimeEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TokensVariableLabelProvider;

 import org.eclipse.ui.plugin.AbstractUIPlugin;

 import org.osgi.framework.BundleContext;

@@ -81,6 +86,11 @@
 		registry.put(FeatureValueVariableLabelProvider.PUBLIC_ICON, this.getDescriptor(FeatureValueVariableLabelProvider.PUBLIC_ICON));

 		registry.put(ItemVariableLabelProvider.ITEM_ICON, this.getDescriptor(ItemVariableLabelProvider.ITEM_ICON));

 		registry.put(TokensVariableLabelProvider.TOKEN_SET_ICON, this.getDescriptor(TokensVariableLabelProvider.TOKEN_SET_ICON));

+		registry.put(TimeEventOccurrenceVariableLabelProvider.TIME_EVENT_ICON, this.getDescriptor(TimeEventOccurrenceVariableLabelProvider.TIME_EVENT_ICON));

+		registry.put(SignalEventOccurrenceVariableLabelProvider.SIGNAL_EVENT_ICON, this.getDescriptor(SignalEventOccurrenceVariableLabelProvider.SIGNAL_EVENT_ICON));

+		registry.put(CallEventOccurrenceVariableLabelProvider.CALL_EVENT_ICON, this.getDescriptor(CallEventOccurrenceVariableLabelProvider.CALL_EVENT_ICON));

+		registry.put(CS_InteractionPointVariableLabelProvider.PORT_ICON, this.getDescriptor(CS_InteractionPointVariableLabelProvider.PORT_ICON));

+		registry.put(CompletionEventOccurrenceVariableLabelProvider.COMPLETION_EVENT_ICON, this.getDescriptor(CompletionEventOccurrenceVariableLabelProvider.COMPLETION_EVENT_ICON));

 	}

 

 	public ImageDescriptor getDescriptor(final String path) {

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
index 40f99f1..d541369 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
@@ -14,6 +14,7 @@
 import org.eclipse.debug.core.DebugException;

 import org.eclipse.debug.core.ILaunch;

 import org.eclipse.emf.ecore.EObject;

+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;

@@ -36,6 +37,12 @@
 

 	@Override

 	public void nodeVisited(ISemanticVisitor nodeVisitor) {

+		// If an activity or a state machine semantic visitor shall

+		// be suspended then the execution thread of the object executing

+		// the node is suspended.

+		// Note: An accept event action is never suspended when it fires.

+		// Instead it is suspended when an event is accepted by this action

+		// from the event pool.

 		if (!this.debugTarget.isDisconnected()) {

 			if (nodeVisitor instanceof IActivityNodeActivation

 					|| nodeVisitor instanceof IActivityEdgeInstance

@@ -44,14 +51,13 @@
 				if(nodeVisitor instanceof IStateMachineSemanticVisitor) {

 					object = ((IStateMachineSemanticVisitor)nodeVisitor).getExecutionContext();

 				}else {

-					if (nodeVisitor instanceof IActivityNodeActivation) {

-						if (((IActivityNodeActivation) nodeVisitor).getGroup() != null) {

+					if (nodeVisitor instanceof IActivityNodeActivation

+							&& !(nodeVisitor instanceof IAcceptEventActionActivation)

+							&& (((IActivityNodeActivation) nodeVisitor).getGroup() != null)) {

 							object = ((IActivityNodeActivation) nodeVisitor).getExecutionContext();

-						}

-					} else {

-						if (((IActivityEdgeInstance) nodeVisitor).getSource().getGroup() != null) {

+					} else if (nodeVisitor instanceof IActivityEdgeInstance

+							&& ((IActivityEdgeInstance) nodeVisitor).getSource().getGroup() != null) {

 							object = ((IActivityEdgeInstance) nodeVisitor).getSource().getExecutionContext();

-						}

 					}

 				}

 				if (object != null) {

@@ -66,7 +72,22 @@
 

 	@Override

 	public void nodeLeft(ISemanticVisitor nodeVisitor) {

-		// Do nothing

+		// If an accept event action is left this means it has accepted an event

+		// from the event pool. This accept event action is therefore suspended for

+		// debug which provides the designer to observe which event triggered the action.

+		if (!this.debugTarget.isDisconnected()) {

+			IObject_ object = null;

+			if(nodeVisitor instanceof IAcceptEventActionActivation

+					&& ((IAcceptEventActionActivation)nodeVisitor).getGroup() != null) {

+				object = ((IAcceptEventActionActivation)nodeVisitor).getExecutionContext();

+			}

+			if(object != null) {

+				this.debugTarget.update(object, nodeVisitor);

+				if (this.debugTarget.isSuspensionRequired(object, nodeVisitor)) {

+					this.debugTarget.suspend(object, nodeVisitor);

+				}

+			}

+		}

 	}

 

 	@Override

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
index c65d714..55c955d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
@@ -24,7 +24,7 @@
 

 	@Override

 	protected NamedElement getNode() {

-		return ((IActivityEdgeInstance)this.visitor).getEdge();

+		return ((IActivityEdgeInstance)this.adaptedObject).getEdge();

 	}

 

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
index 71ad293..9a823d4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
@@ -22,6 +22,6 @@
 	}

 	@Override

 	protected NamedElement getNode() {

-		return ((IActivityNodeActivation)this.visitor).getNode();

+		return ((IActivityNodeActivation)this.adaptedObject).getNode();

 	}

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
index c6afa17..d4af8c7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
@@ -1,5 +1,3 @@
-package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

-

 /*****************************************************************************

  * Copyright (c) 2016 CEA LIST.

  * 

@@ -11,6 +9,9 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

 import java.util.ArrayList;

 import java.util.List;

 

@@ -25,17 +26,17 @@
 import org.eclipse.uml2.uml.NamedElement;

 

 public abstract class ActivityVisitorValueAdapter extends VisitorValueAdapter {

-

+	

 	public ActivityVisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {

 		super(debugTarget, visitor);

 	}

-	

+

 	protected abstract NamedElement getNode();

 

 	@Override

 	public IVariable[] getVariables() throws DebugException {

 		if (this.variables.isEmpty()) {

-			this.variables.add(new TokensVariableAdapter(this.debugTarget, getTokens(this.visitor)));

+			this.variables.add(new TokensVariableAdapter(this.debugTarget, getTokens(this.adaptedObject)));

 		}

 		return this.variables.toArray(new IVariable[0]);

 	}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..030b93b
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java
@@ -0,0 +1,55 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.CS_InteractionPointVariableAdapter;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public class CS_EventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {

+

+	public CS_EventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+	}

+

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		if (this.variables.isEmpty()) {

+			ICS_InteractionPoint interactionPoint= ((ICS_EventOccurrence) this.adaptedObject).getInteractionPoint();

+			if(interactionPoint != null) {

+				this.variables.add(new CS_InteractionPointVariableAdapter(debugTarget, interactionPoint));

+			}

+			MokaValueAdapter<?> valueAdapter = MokaValueAdapterFactory.getInstance()

+					.instantiate(((ICS_EventOccurrence) this.adaptedObject).getWrappedEventOccurrence(), debugTarget);

+			IVariable[] delegatedVariables = valueAdapter.getVariables(); 

+			for(int i=0; i < delegatedVariables.length; i++) {

+				this.variables.add(delegatedVariables[i]);

+			}

+		}

+		return this.variables.toArray(new IVariable[0]);

+	}

+	

+	@Override

+	public String getValueString() throws DebugException {

+		// The string representation is the one specified by the value

+		// adapter of the wrapped event occurrence.

+		MokaValueAdapter<?> valueAdapter = MokaValueAdapterFactory.getInstance()

+				.instantiate(((ICS_EventOccurrence) this.adaptedObject).getWrappedEventOccurrence(), debugTarget);

+		return valueAdapter.getValueString();

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java
new file mode 100644
index 0000000..da6ed87
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java
@@ -0,0 +1,36 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+

+public class CS_InteractionPointValueAdapter extends MokaValueAdapter<ICS_InteractionPoint>{

+

+	public CS_InteractionPointValueAdapter(MokaDebugTarget debugTarget, ICS_InteractionPoint adaptedObject) {

+		super(debugTarget, adaptedObject);

+	}

+	

+	@Override

+	public String getValueString() throws DebugException {

+		// The string representation of an interaction point is given

+		// by the identifier of its referent (i.e., the object representing

+		// the port instance).

+		if(this.adaptedObject.getReferent() != null) {

+			return this.adaptedObject.getReferent().getIdentifier();

+		}

+		return "";

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..1fe187a
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java
@@ -0,0 +1,50 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import java.util.List;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ICallEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+import org.eclipse.uml2.uml.Operation;

+import org.eclipse.uml2.uml.Parameter;

+

+public class CallEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {

+

+	public CallEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+		this.representation = "Call Event";

+	}

+

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		if (this.variables.isEmpty() && !this.adaptedObject.getParameterValues().isEmpty()) {

+			Operation operation = ((ICallEventOccurrence) this.adaptedObject).getOperation();

+			if (operation != null) {

+				List<Parameter> operationParameters = operation.getOwnedParameters();

+				List<IParameterValue> parameterValues = this.adaptedObject.getParameterValues();

+				for (int i = 0; i < parameterValues.size(); i++) {

+					this.variables.add(new ParameterValueVariableAdapter(debugTarget, parameterValues.get(i),

+							operationParameters.get(i).getName()));

+				}

+			}

+		}

+		return this.variables.toArray(new IVariable[0]);

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..2e3ca09
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java
@@ -0,0 +1,25 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public class CompletionEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {

+

+	public CompletionEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+		this.representation = "Completion Event";

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
similarity index 61%
rename from bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java
rename to bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
index 1c4a143..16f682a 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
@@ -9,24 +9,32 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 

-public class NullValueAdapter extends MokaValueAdapter {

+public class DefaultValueAdapter extends MokaValueAdapter<Object> {

 

-	public NullValueAdapter(MokaDebugTarget debugTarget) {

-		super(debugTarget);

+	public DefaultValueAdapter(MokaDebugTarget debugTarget, Object adapted) {

+		super(debugTarget, adapted);

 	}

 

 	@Override

 	public String getReferenceTypeName() throws DebugException {

-		return "null (or not supported)";

+		// No value adapter could handle the object to be adapted.

+		// Hence the default value adapter is used.

+		return "<no reference type>";

 	}

 

 	@Override

 	public String getValueString() throws DebugException {

-		return "null (or not supported)";

+		// No value adapter could handle the object to be adapted.

+		// Hence the default value adapter is used.

+		if(this.adaptedObject != null) {

+			return this.toString();

+		}

+		return "<null or no representation>";

 	}

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
index 7dbe84b..f300bf3 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
@@ -9,28 +9,30 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

 

-public class EventOccurrenceValueAdapter extends MokaValueAdapter {

+public abstract class EventOccurrenceValueAdapter extends MokaValueAdapter<IEventOccurrence> {

 

-	protected IEventOccurrence eventOccurrence;

-

+	// Representation of the event occurrence

+	protected String representation;

+	

 	public EventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

-		super(debugTarget);

-		this.eventOccurrence = eventOccurrence;

-	}

-

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return "";

+		super(debugTarget, eventOccurrence);

 	}

 

 	@Override

 	public String getValueString() throws DebugException {

-		return this.eventOccurrence.toString();

+		// The string representation is the one specified in the representation

+		// attribute or the result of toString operation applied on the adapted

+		// object.

+		if(this.representation == null || this.representation.isEmpty()) {

+			return this.adaptedObject.toString();

+		}

+		return this.representation;

 	}

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
index 327741f..3f08093 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import java.util.ArrayList;

@@ -20,27 +21,48 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugElement;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 

-public abstract class MokaValueAdapter extends MokaDebugElement implements IValue {

+public abstract class MokaValueAdapter<T> extends MokaDebugElement implements IValue {

 

+	// The object that is adapted through this adapter

+	protected T adaptedObject;

+	

+	// The list of variables that can be accessed through the adapted object

 	protected List<IVariable> variables;

 

-	public MokaValueAdapter(MokaDebugTarget debugTarget) {

+	public MokaValueAdapter(MokaDebugTarget debugTarget, T adaptedObject) {

 		super(debugTarget);

+		this.adaptedObject = adaptedObject;

 		this.variables = new ArrayList<IVariable>();

 	}

 

 	@Override

+	public String getReferenceTypeName() throws DebugException {

+		// No value adapter could handle the object to be adapted.

+		// Hence the default value adapter is used.

+		return "<no reference type>";

+	}

+	

+	@Override

 	public boolean isAllocated() throws DebugException {

+		// An adapted object is always considered as being allocated

 		return true;

 	}

 

 	@Override

 	public boolean hasVariables() throws DebugException {

+		// A value adapter has variables if the array returned

+		// by the getVariable method is not empty

 		return this.getVariables().length > 0;

 	}

 

 	@Override

 	public IVariable[] getVariables() throws DebugException {

+		// Return the list of variables as an array

 		return this.variables.toArray(new IVariable[0]);

 	}

+	

+	public T getAdapted() {

+		// Return a reference on the adapted object

+		return this.adaptedObject;

+	}

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
index 6698867..074a7b1 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
@@ -11,7 +11,10 @@
  *****************************************************************************/

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IForkedToken;

@@ -19,10 +22,16 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IPrimitiveValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IStructuredValue;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ICallEventOccurrence;

 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalEventOccurrence;

 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ICompletionEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ITransitionActivation;

+import org.eclipse.papyrus.moka.timedfuml.interfaces.semantics.CommonBehaviors.ITimedEventOccurrence;

 

 public class MokaValueAdapterFactory {

 

@@ -38,11 +47,21 @@
 		return INSTANCE;

 	}

 

-	public MokaValueAdapter instantiate(Object value, MokaDebugTarget debugTarget) {

-		MokaValueAdapter adapter = null;

+	public MokaValueAdapter<?> instantiate(Object value, MokaDebugTarget debugTarget) {

+		MokaValueAdapter<?> adapter = null;

 		if (value != null) {

 			if (value instanceof IEventOccurrence) {

-				adapter = new EventOccurrenceValueAdapter(debugTarget, (IEventOccurrence) value);

+				if(value instanceof ICS_EventOccurrence) {

+					adapter = new CS_EventOccurrenceValueAdapter(debugTarget, (ICS_EventOccurrence) value);

+				} else if(value instanceof ITimedEventOccurrence) {

+					adapter = new TimeEventOccurrenceValueAdapter(debugTarget, (ITimedEventOccurrence) value);

+				} else if(value instanceof ISignalEventOccurrence) {

+					adapter = new SignalEventOccurrenceValueAdapter(debugTarget, (ISignalEventOccurrence) value);

+				} else if(value instanceof ICallEventOccurrence) {

+					adapter = new CallEventOccurrenceValueAdapter(debugTarget, (ICallEventOccurrence) value);

+				} else if(value instanceof ICompletionEventOccurrence) {

+					adapter = new CompletionEventOccurrenceValueAdapter(debugTarget, (ICompletionEventOccurrence) value);

+				}

 			} else if (value instanceof IToken) {

 				if (value instanceof IObjectToken) {

 					adapter = new ObjectTokenValueAdapter(debugTarget, (IObjectToken) value);

@@ -52,7 +71,13 @@
 					adapter = new TokenValueAdapter(debugTarget, (IToken) value);

 				}

 			} else if (value instanceof IValue) {

-				if (value instanceof IObject_) {

+				if (value instanceof IReference) {

+					if(value instanceof ICS_InteractionPoint) {

+						adapter = new CS_InteractionPointValueAdapter(debugTarget, (ICS_InteractionPoint )value);

+					}else {

+						adapter = new ReferenceValueAdapter(debugTarget, (IReference) value);

+					}

+				} else if (value instanceof IObject_) {

 					adapter = new ObjectValueAdapter(debugTarget, (IObject_) value);

 				} else if (value instanceof IStructuredValue) {

 					adapter = new StructuredValueAdapter(debugTarget, (IStructuredValue) value);

@@ -61,14 +86,20 @@
 				}

 			} else if (value instanceof ISemanticVisitor) {

 				if (value instanceof IActivityNodeActivation) {

-					adapter = new ActivityNodeActivationValueAdapter(debugTarget, (IActivityNodeActivation) value);

+					if(value instanceof IAcceptEventActionActivation) {

+						adapter = new TriggeredVisitorValueAdapter(debugTarget, (IAcceptEventActionActivation) value);

+					}else {

+						adapter = new ActivityNodeActivationValueAdapter(debugTarget, (IActivityNodeActivation) value);

+					}

 				}else if (value instanceof IActivityEdgeInstance){

 					adapter = new ActivityEdgeInstanceValueAdapter(debugTarget, (IActivityEdgeInstance)value);

+				} else if (value instanceof ITransitionActivation) {

+					adapter = new TriggeredVisitorValueAdapter(debugTarget, (ITransitionActivation)value);

 				}

 			}

 		}

 		if (adapter == null) {

-			adapter = new NullValueAdapter(debugTarget);

+			adapter = new DefaultValueAdapter(debugTarget, value);

 		}

 		return adapter;

 	}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
index ca4d877..3f116d7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import java.util.ArrayList;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
index bb4f278..4dfc888 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

@@ -27,13 +28,13 @@
 	@Override

 	public IVariable[] getVariables() throws DebugException {

 		if (this.variables.isEmpty()) {

-			this.variables.add(new ObjectTokenVariableValueAdapter(debugTarget, ((IObjectToken)this.token).getValue()));

+			this.variables.add(new ObjectTokenVariableValueAdapter(debugTarget, ((IObjectToken)this.adaptedObject).getValue()));

 		}

 		return this.variables.toArray(new IVariable[0]);

 	}

 	

 	@Override

 	public String getValueString() throws DebugException {

-		return "Object";

+		return "";

 	}

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
index 9bd392e..4f8e75d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

@@ -28,14 +29,14 @@
 

 	@Override

 	public String getValueString() throws DebugException {

-		return ((IObject_) this.value).getIdentifier();

+		return ((IObject_) this.adaptedObject).getIdentifier();

 	}

 

 	@Override

 	public IVariable[] getVariables() throws DebugException {

 		super.getVariables();

 		if (this.eventPoolVariable == null) {

-			IObjectActivation objectActivation = ((IObject_) this.value).getObjectActivation();

+			IObjectActivation objectActivation = ((IObject_) this.adaptedObject).getObjectActivation();

 			if (objectActivation != null) {

 				this.eventPoolVariable = new EventPoolVariableAdapter(this.debugTarget, objectActivation);

 				this.variables.add(0, this.eventPoolVariable);

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
index 3f6269f..f6414cc 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
@@ -9,29 +9,23 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IPrimitiveValue;

 

-public class PrimitiveValueAdapter extends MokaValueAdapter {

-

-	protected IPrimitiveValue value;

+public class PrimitiveValueAdapter extends MokaValueAdapter<IPrimitiveValue> {

 

 	public PrimitiveValueAdapter(MokaDebugTarget debugTarget, IPrimitiveValue value) {

-		super(debugTarget);

-		this.value = value;

-	}

-

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.value.getTypes().iterator().next().getName();

+		super(debugTarget, value);

 	}

 

 	@Override

 	public String getValueString() throws DebugException {

-		return this.value.toString();

+		// The string is the value represented by this primitive value.

+		return this.adaptedObject.toString();

 	}

 

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java
new file mode 100644
index 0000000..0ac2206
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java
@@ -0,0 +1,44 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;

+

+public class ReferenceValueAdapter extends MokaValueAdapter<IReference> {

+

+	public ReferenceValueAdapter(MokaDebugTarget debugTarget, IReference adaptedObject) {

+		super(debugTarget, adaptedObject);

+	}

+

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		// Create a value adapter for the referent object and return

+		// that variables that can be accessed through this latter.

+		MokaValueAdapter<?> adapter = MokaValueAdapterFactory.getInstance().instantiate(this.adaptedObject.getReferent(), this.debugTarget);

+		return adapter.getVariables();

+	}

+	

+	@Override

+	public String getValueString() throws DebugException {

+		// The representation of the value as string is given by the identifier

+		// of the referent object.

+		if(this.adaptedObject.getReferent() != null) {

+			return this.adaptedObject.getReferent().getIdentifier();

+		}

+		return "";

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..236216c
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java
@@ -0,0 +1,49 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import java.util.List;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalEventOccurrence;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;

+

+public class SignalEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {

+

+	public SignalEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+		this.representation = "Signal Event";

+	}

+

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		if (this.variables.isEmpty() && !this.adaptedObject.getParameterValues().isEmpty()) {

+			ISignalInstance signalInstance = ((ISignalEventOccurrence)this.adaptedObject).getSignalInstance();

+			if(signalInstance != null) {

+				List<IParameterValue> parameterValues = this.adaptedObject.getParameterValues();

+				List<IFeatureValue> featureValues = signalInstance.getMemberValues();

+				for(int i=0; i < parameterValues.size(); i++) {

+					this.variables.add(new ParameterValueVariableAdapter(debugTarget, parameterValues.get(i), featureValues.get(i).getFeature().getName()));

+				}

+			}

+		}

+		return this.variables.toArray(new IVariable[0]);

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
index 13a87f4..e488bc8 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import java.util.Iterator;

@@ -18,49 +19,33 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.FeatureValueVariableAdapter;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;

-import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IStructuredValue;

-import org.eclipse.uml2.uml.Classifier;

 

-public class StructuredValueAdapter extends MokaValueAdapter {

-

-	// Value that is adapted in the debug model context

-	protected IStructuredValue value;

+public class StructuredValueAdapter extends MokaValueAdapter<IStructuredValue> {

 

 	public StructuredValueAdapter(MokaDebugTarget debugTarget, IStructuredValue value) {

-		super(debugTarget);

-		this.value = value;

-	}

-

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		String type = "[";

-		Iterator<Classifier> typeIterator = this.value.getTypes().iterator();

-		while (typeIterator.hasNext()) {

-			Classifier classifier = typeIterator.next();

-			type += classifier.getName();

-			if (typeIterator.hasNext()) {

-				type += ", ";

-			}

-		}

-		type += "]";

-		return type;

+		super(debugTarget, value);

 	}

 

 	@Override

 	public String getValueString() throws DebugException {

-		if(this.value instanceof IReference){

-			return ((IReference)this.value).getReferent().getIdentifier();

+		// By default the representation of a structured value

+		// as string is given by the toString operation applied

+		// on an executable UML value

+		if(this.adaptedObject != null){

+			return this.adaptedObject.toString();

 		}

-		return value.toString();

+		return "";

 	}

 

 	@Override

 	public IVariable[] getVariables() throws DebugException {

+		// Variables available for a structured value are variable adapters

+		// built from features values owned by the structured value.

 		if (this.variables.isEmpty()) {

-			Iterator<IFeatureValue> featureValueIterator = this.value.getFeatureValues().iterator();

+			Iterator<IFeatureValue> featureValueIterator = this.adaptedObject.getFeatureValues().iterator();

 			while (featureValueIterator.hasNext()) {

-				this.variables.add(new FeatureValueVariableAdapter(this.debugTarget, value, featureValueIterator.next()));

+				this.variables.add(new FeatureValueVariableAdapter(this.debugTarget, this.adaptedObject, featureValueIterator.next()));

 			}

 		}

 		return this.variables.toArray(new IVariable[0]);

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..93af818
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java
@@ -0,0 +1,42 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public class TimeEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {

+

+	protected static final String TIME = "time";

+

+	public TimeEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+		this.representation = "Time Event";

+	}

+

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		// A time event occurrence always has a single variable.

+		// This variable contains the time at which the event occurrence

+		// is received by an object.

+		if (this.variables.isEmpty() && this.adaptedObject.getParameterValues().size() == 1) {

+			this.variables.add(new ParameterValueVariableAdapter(debugTarget,

+					this.adaptedObject.getParameterValues().iterator().next(), TIME));

+		}

+		return this.variables.toArray(new IVariable[0]);

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
index ac180c0..1ff28f4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
@@ -9,26 +9,17 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;

 

-public class TokenValueAdapter extends MokaValueAdapter {

-

-	protected IToken token;

-

-	private final String REFERENCE_TYPE_NAME = "";

+public class TokenValueAdapter extends MokaValueAdapter<IToken> {

 

 	public TokenValueAdapter(MokaDebugTarget debugTarget, IToken token) {

-		super(debugTarget);

-		this.token = token;

-	}

-

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.REFERENCE_TYPE_NAME;

+		super(debugTarget, token);

 	}

 

 	@Override

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java
new file mode 100644
index 0000000..f6c12ae
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java
@@ -0,0 +1,48 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IVariable;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;

+import org.eclipse.papyrus.moka.fuml.Profiling.ITriggeredVisitor;

+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;

+

+public class TriggeredVisitorValueAdapter extends VisitorValueAdapter{

+

+	public TriggeredVisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {

+		super(debugTarget, visitor);

+	}

+

+	@Override

+	public String getValueString() throws DebugException {

+		// Returns this value as a String.

+		// The string representation of this value is given by the toString

+		// operation implemented by a semantic visitor.

+		if(this.adaptedObject != null){

+			return this.adaptedObject.toString();

+		}

+		return "<empty>";

+	}

+	

+	@Override

+	public IVariable[] getVariables() throws DebugException {

+		if (this.variables.isEmpty()) {

+			this.variables.add(new EventOccurrenceVariableAdapter(debugTarget,

+					((ITriggeredVisitor) this.adaptedObject).getTriggeringEventOccurrence()));

+		}

+		return this.variables.toArray(new IVariable[0]);

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
index aad53d8..e79daf5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
@@ -14,13 +14,10 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;

 

-public abstract class VisitorValueAdapter extends MokaValueAdapter {

+public abstract class VisitorValueAdapter extends MokaValueAdapter<ISemanticVisitor> {

 

-	protected ISemanticVisitor visitor;

-	

 	public VisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {

-		super(debugTarget);

-		this.visitor = visitor;

+		super(debugTarget, visitor);

 	}

 	

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java
new file mode 100644
index 0000000..7b7dff0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java
@@ -0,0 +1,35 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+

+public class CS_InteractionPointVariableAdapter extends MokaVariableAdapter<ICS_InteractionPoint>{

+	

+	// Variable name

+	private final String NAME = "port";

+	

+	

+	public CS_InteractionPointVariableAdapter(MokaDebugTarget debugTarget, ICS_InteractionPoint interactionPoint) {

+		super(debugTarget, interactionPoint);

+	}

+

+	@Override

+	public String getName() throws DebugException {

+		// Return the variable name

+		return NAME;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java
new file mode 100644
index 0000000..4c931e0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java
@@ -0,0 +1,33 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

+

+public class EventOccurrenceVariableAdapter extends MokaVariableAdapter<IEventOccurrence>{

+

+	private final String NAME = "event";

+	

+	public EventOccurrenceVariableAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {

+		super(debugTarget, eventOccurrence);

+	}

+

+	@Override

+	public String getName() throws DebugException {

+		// Return the variable name

+		return NAME;

+	}

+	

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
index b3f86d7..9efb23b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import java.util.Iterator;

@@ -21,22 +22,23 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;

 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IObjectActivation;

 

-public class EventPoolVariableAdapter extends MokaVariableAdapter {

-

-	protected IObjectActivation objectActivation;

+public class EventPoolVariableAdapter extends MokaVariableAdapter<IObjectActivation> {

 

 	protected final String NAME = "events";

 

 	public EventPoolVariableAdapter(MokaDebugTarget debugTarget, IObjectActivation objectActivation) {

-		super(debugTarget);

-		this.objectActivation = objectActivation;

+		super(debugTarget, objectActivation);

 	}

 

 	@Override

 	public IValue getValue() throws DebugException {

+		// The variable corresponding to the event pool may have multiple values.

+		// This implies it is not sufficient to request a value adapter to the factory.

+		// Instead a list of value adapter is provided, each adapter corresponds to a

+		// event occurrence available in the pool.

 		if (this.value == null) {

 			this.value = new MokaValueList(this.debugTarget);

-			Iterator<IEventOccurrence> eventsIterator = this.objectActivation.getEvents().iterator();

+			Iterator<IEventOccurrence> eventsIterator = this.adaptedVariable.getEvents().iterator();

 			while (eventsIterator.hasNext()) {

 				((MokaValueList) this.value).add(MokaValueAdapterFactory.getInstance().instantiate(eventsIterator.next(), this.debugTarget));

 			}

@@ -46,48 +48,8 @@
 

 	@Override

 	public String getName() throws DebugException {

+		// Return the variable name

 		return this.NAME;

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.value.getReferenceTypeName();

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
index 4642562..a9b39fd 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
@@ -9,78 +9,27 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import org.eclipse.debug.core.DebugException;

-import org.eclipse.debug.core.model.IValue;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;

 

-public class ExecutionContextVariableAdapter extends MokaVariableAdapter {

+public class ExecutionContextVariableAdapter extends MokaVariableAdapter<IObject_> {

 

 	protected IObject_ context;

 

-	protected IValue value;

-

 	protected final String NAME = "context";

 

 	public ExecutionContextVariableAdapter(MokaDebugTarget debugTarget, IObject_ context) {

-		super(debugTarget);

-		this.context = context;

-	}

-

-	@Override

-	public IValue getValue() throws DebugException {

-		if (this.value == null) {

-			this.value = MokaValueAdapterFactory.getInstance().instantiate(context, this.debugTarget);

-		}

-		return this.value;

+		super(debugTarget, context);

 	}

 

 	@Override

 	public String getName() throws DebugException {

+		// Return the variable name

 		return this.NAME;

 	}

-

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.value.getReferenceTypeName();

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

+	

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
index e0b0630..23bd7c4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
@@ -9,15 +9,17 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import java.util.ArrayList;

-import java.util.Iterator;

 import java.util.List;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.DefaultValueAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IExtensionalValue;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;

 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.ILink;

@@ -31,56 +33,35 @@
 import org.eclipse.uml2.uml.StructuralFeature;

 import org.eclipse.uml2.uml.VisibilityKind;

 

-public class FeatureValueVariableAdapter extends MokaVariableAdapter {

+public class FeatureValueVariableAdapter extends MokaVariableAdapter<IFeatureValue> {

 

-	// Feature value that is adapted in the debug model context

-	protected IFeatureValue featureValue;

-

+	// The owner of the adapted variable

 	protected IStructuredValue featureValueOwner;

 

-	public FeatureValueVariableAdapter(MokaDebugTarget debugTarget, IStructuredValue owner, IFeatureValue featureValue) {

-		super(debugTarget);

-		this.featureValue = featureValue;

+	public FeatureValueVariableAdapter(MokaDebugTarget debugTarget, IStructuredValue owner,

+			IFeatureValue featureValue) {

+		super(debugTarget, featureValue);

 		this.featureValueOwner = owner;

-		this.value = null;

 	}

 

 	@Override

 	public org.eclipse.debug.core.model.IValue getValue() throws DebugException {

+		// Build the value adapter for the adapted feature value. This adapter can be single

+		// value adapter or a list of value adapter depending if the feature value has a single

+		// value or multiple values. If no value is found for the feature then the default value

+		// adapter is returned.

 		if (this.value == null) {

-			int upperBound = this.featureValue.getFeature().getUpper();

-			if (upperBound == 1) {

-				Association association = null;

-				if (this.featureValueOwner instanceof IExtensionalValue) {

-					StructuralFeature feature = this.featureValue.getFeature();

-					if (feature instanceof Property) {

-						association = ((Property) feature).getAssociation();

-					}

+			List<IValue> resultValues = this.getValues();

+			if(resultValues.size() == 1) {

+				this.value = MokaValueAdapterFactory.getInstance().instantiate(resultValues.iterator().next(), this.debugTarget);

+			} else if(resultValues.size() > 1) {

+				MokaValueList valueList = new MokaValueList(this.debugTarget);

+				for(IValue currentValue : resultValues) {

+					valueList.add(MokaValueAdapterFactory.getInstance().instantiate(currentValue, this.debugTarget));

 				}

-				IValue fumlValue = null;

-				if (association != null) {

-					List<ILink> links = this.getMatchingLinks(association,

-							this.featureValue.getFeature(),

-							this.featureValueOwner,

-							((IExtensionalValue) this.featureValueOwner).getLocus());

-					List<IValue> resultValues = new ArrayList<IValue>();

-					for (int i = 0; i < links.size(); i++) {

-						ILink link = links.get(i);

-						resultValues.add(link.getFeatureValue(this.featureValue.getFeature()).getValues().iterator().next());

-					}

-					Iterator<IValue> valuesIterator = resultValues.iterator();

-					if (valuesIterator.hasNext()) {

-						fumlValue = valuesIterator.next();

-					}

-				} else {

-					Iterator<IValue> valuesIterator = this.featureValue.getValues().iterator();

-					if (valuesIterator.hasNext()) {

-						fumlValue = valuesIterator.next();

-					}

-				}

-				this.value = MokaValueAdapterFactory.getInstance().instantiate(fumlValue, this.debugTarget);

+				this.value = valueList;

 			} else {

-

+				this.value = new DefaultValueAdapter(this.debugTarget, null);

 			}

 		}

 		return this.value;

@@ -88,81 +69,70 @@
 

 	@Override

 	public String getName() throws DebugException {

-		Feature feature = this.featureValue.getFeature();

+		// The name of the variable is the name of the feature. If no

+		// feature can be accessed then '<unamed feature>' is returned.

+		Feature feature = this.adaptedVariable.getFeature();

 		if (feature != null) {

 			return feature.getName();

 		}

-		return "";

+		return "<unamed feature>";

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		// TODO Auto-generated method stub

-		return null;

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(org.eclipse.debug.core.model.IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(org.eclipse.debug.core.model.IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	public boolean isFeaturePublic(){

-		if(this.featureValue != null){

-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PUBLIC_LITERAL;

+	public boolean isFeaturePublic() {

+		// Determine if the value adapter is for public feature

+		if (this.adaptedVariable != null) {

+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PUBLIC_LITERAL;

 		}

 		return false;

 	}

-	

-	public boolean isFeatureProtected(){

-		if(this.featureValue != null){

-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PROTECTED_LITERAL;

+

+	public boolean isFeatureProtected() {

+		// Determine if the value adapter is for protected feature

+		if (this.adaptedVariable != null) {

+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PROTECTED_LITERAL;

 		}

 		return false;

 	}

-	

-	public boolean isFeaturePrivate(){

-		if(this.featureValue != null){

-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PRIVATE_LITERAL;

+

+	public boolean isFeaturePrivate() {

+		// Determine if the value adapter is for private feature

+		if (this.adaptedVariable != null) {

+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PRIVATE_LITERAL;

 		}

 		return false;

 	}

-	

-	protected List<ILink> getMatchingLinks(Association association, StructuralFeature end, IValue oppositeValue, ILocus locus) {

+

+	protected List<IValue> getValues() {

+		// Return the values associated to the feature. These values shall

+		// be adapted in order to be accessed and displayed in the variables

+		// view associated to a debug perspective.

+		List<IValue> resultValues = null;

+		Association association = null;

+		StructuralFeature feature = this.adaptedVariable.getFeature();

+		if (this.featureValueOwner instanceof IExtensionalValue

+				&& feature instanceof Property) {

+			association = ((Property) feature).getAssociation();

+		}

+		if (association != null) {

+			List<ILink> links = this.getMatchingLinks(association, this.adaptedVariable.getFeature(),

+					this.featureValueOwner, ((IExtensionalValue) this.featureValueOwner).getLocus());

+			resultValues = new ArrayList<IValue>();

+			for (int i = 0; i < links.size(); i++) {

+				resultValues.addAll(links.get(i).getFeatureValue(this.adaptedVariable.getFeature()).getValues());

+			}

+		} else {

+			resultValues = this.adaptedVariable.getValues();

+		}

+		return resultValues;

+	}

+

+	protected List<ILink> getMatchingLinks(Association association, StructuralFeature end, IValue oppositeValue,

+			ILocus locus) {

 		return this.getMatchingLinksForEndValue(association, end, oppositeValue, null, locus);

 	}

 

-	private List<ILink> getMatchingLinksForEndValue(Association association, StructuralFeature end, IValue oppositeValue, IValue endValue, ILocus locus) {

+	private List<ILink> getMatchingLinksForEndValue(Association association, StructuralFeature end,

+			IValue oppositeValue, IValue endValue, ILocus locus) {

 		Property oppositeEnd = this.getOppositeEnd(association, end);

 		List<IExtensionalValue> extent = locus.getExtent(association);

 		List<ILink> links = new ArrayList<ILink>();

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
index dad58d8..b0d693a 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
@@ -9,71 +9,33 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import org.eclipse.debug.core.DebugException;

 import org.eclipse.debug.core.model.IValue;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

 

-public class ItemVariableAdapter extends MokaVariableAdapter {

+public class ItemVariableAdapter extends MokaVariableAdapter<IValue> {

 

+	// Index corresponding to the item

 	protected int index;

 

 	public ItemVariableAdapter(MokaDebugTarget debugTarget, int index, IValue value) {

-		super(debugTarget);

+		super(debugTarget, value);

 		this.index = index;

-		this.value = value;

 	}

 

 	@Override

 	public IValue getValue() throws DebugException {

-		return this.value;

+		// The adapted variable is the value associated to the item variable

+		return this.adaptedVariable;

 	}

 

 	@Override

 	public String getName() throws DebugException {

+		// Variable name is an of the form [X] where X is an integer

 		return "[" + index + "]";

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.value.getReferenceTypeName();

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
index fabbaec..6dc3a78 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
@@ -9,19 +9,87 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

+import org.eclipse.debug.core.DebugException;

 import org.eclipse.debug.core.model.IValue;

 import org.eclipse.debug.core.model.IVariable;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugElement;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

 

-public abstract class MokaVariableAdapter extends MokaDebugElement implements IVariable {

+public abstract class MokaVariableAdapter<V> extends MokaDebugElement implements IVariable {

 

 	// The value that is currently associated to this variable

 	protected IValue value;

 

-	public MokaVariableAdapter(MokaDebugTarget debugTarget) {

+	// The variable that is actually represented

+	protected V adaptedVariable;

+	

+	public MokaVariableAdapter(MokaDebugTarget debugTarget, V adaptedVariable) {

 		super(debugTarget);

+		this.adaptedVariable = adaptedVariable;

 	}

+	

+	@Override

+	public IValue getValue() throws DebugException {

+		// Getting the value corresponding to a variable may require more sophisticated

+		// computations however the common approach is to directly requests from

+		// the value adapter factory if an adapter already exist for the value

+		// associated to the variable.

+		if(this.value == null) {

+			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.adaptedVariable, this.debugTarget);

+		}

+		return this.value;

+	}

+	

+	@Override

+	public String getReferenceTypeName() throws DebugException {

+		// By default the reference type of the variable is

+		// considered to unknown.

+		return "<no reference type>";

+	}

+

+	@Override

+	public boolean hasValueChanged() throws DebugException {

+		// By default no change on the variable is allowed.

+		return false;

+	}

+

+	@Override

+	public void setValue(String expression) throws DebugException {

+		// By default it is not allowed to change a variable

+		// value through the evaluation of an expression

+	}

+

+	@Override

+	public void setValue(IValue value) throws DebugException {

+		// By default it is not allowed to substitute the

+		// variable value with another value

+	}

+

+	@Override

+	public boolean supportsValueModification() {

+		// By default no modification of the variable value

+		// is allowed

+		return false;

+	}

+

+	@Override

+	public boolean verifyValue(String expression) throws DebugException {

+		// By default its not allowed to change the variable value.

+		// Hence it is not required to be able to verify the specified

+		// change.

+		return false;

+	}

+

+	@Override

+	public boolean verifyValue(IValue value) throws DebugException {

+		// By default its not allowed to change the variable value.

+		// Hence it is not required to be able to verify the specified

+		// change.

+		return false;

+	}

+	

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
index adeebb6..7c260f0 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
@@ -9,78 +9,25 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import org.eclipse.debug.core.DebugException;

-import org.eclipse.debug.core.model.IValue;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;

 

-public class ObjectTokenVariableValueAdapter extends MokaVariableAdapter {

+public class ObjectTokenVariableValueAdapter extends MokaVariableAdapter<IValue> {

 

 	private final String NAME = "value";

 	

-	private final String REFERENCE_TYPE_NAME = "";

-	

-	protected org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue heldValue;

-	

-	public ObjectTokenVariableValueAdapter(MokaDebugTarget debugTarget, org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue heldValue) {

-		super(debugTarget);

-		this.heldValue = heldValue;

-	}

-

-	@Override

-	public IValue getValue() throws DebugException {

-		if(this.value == null){

-			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.heldValue, this.debugTarget);

-		}

-		return this.value;

+	public ObjectTokenVariableValueAdapter(MokaDebugTarget debugTarget, IValue heldValue) {

+		super(debugTarget, heldValue);

 	}

 

 	@Override

 	public String getName() throws DebugException {

+		// Return the variable name

 		return NAME;

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return REFERENCE_TYPE_NAME;

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java
new file mode 100644
index 0000000..40841dc
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java
@@ -0,0 +1,76 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.debug.core.model.IValue;

+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.DefaultValueAdapter;

+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;

+

+public class ParameterValueVariableAdapter extends MokaVariableAdapter<IParameterValue> {

+	

+	// User defined name

+	protected String parameterName;

+

+	public ParameterValueVariableAdapter(MokaDebugTarget debugTarget, IParameterValue parameterValue) {

+		super(debugTarget, parameterValue);

+	}

+	

+	public ParameterValueVariableAdapter(MokaDebugTarget debugTarget, IParameterValue parameterValue, String parameterName) {

+		this(debugTarget, parameterValue);

+		this.parameterName = parameterName;

+	}

+

+	@Override

+	public IValue getValue() throws DebugException {

+		// Return the value adapter required to display the value associated

+		// to the parameter

+		if (this.value == null) {

+			if (this.adaptedVariable.getValues().size() == 1) {

+				this.value = MokaValueAdapterFactory.getInstance()

+						.instantiate(this.adaptedVariable.getValues().iterator().next(), debugTarget);

+			} else if (this.adaptedVariable.getValues().size() > 1) {

+				MokaValueList valueList = new MokaValueList(debugTarget);

+				for (org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue currentValue : this.adaptedVariable

+						.getValues()) {

+					valueList.add( MokaValueAdapterFactory.getInstance()

+						.instantiate(currentValue ,debugTarget));

+				}

+				this.value = valueList;

+			} else {

+				this.value = new DefaultValueAdapter(debugTarget, null);

+			}

+		}

+		return this.value;

+	}

+

+	@Override

+	public String getName() throws DebugException {

+		// If the user defined parameter name is set then return it.

+		// If the user defined parameter name is not set the return

+		// the name of the parameter attached to the parameter value.

+		// If no name could be returned then the string '<empty>' is returned

+		if(this.parameterName != null && !this.parameterName.isEmpty()) {

+			return this.parameterName;

+		}else if(this.adaptedVariable.getParameter() != null

+				&& adaptedVariable.getParameter().getName() != null

+				&& !adaptedVariable.getParameter().getName().isEmpty()) {

+			return this.adaptedVariable.getParameter().getName();

+		}

+		return "<empty>";

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
index b9ebf54..b7448e5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
@@ -9,79 +9,25 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import org.eclipse.debug.core.DebugException;

-import org.eclipse.debug.core.model.IValue;

 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;

-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;

 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;

 

-public class SuspensionPointVariableAdapter extends MokaVariableAdapter {

-

-	protected ISemanticVisitor suspensionPoint;

+public class SuspensionPointVariableAdapter extends MokaVariableAdapter<ISemanticVisitor> {

 

 	private final String NAME = "breakpoint";

 

-	private final String REFERENCE_TYPE_NAME = "";

-

 	public SuspensionPointVariableAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {

-		super(debugTarget);

-		this.suspensionPoint = visitor;

-	}

-

-	@Override

-	public IValue getValue() throws DebugException {

-		if (this.value == null) {

-			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.suspensionPoint, this.debugTarget);

-		}

-		return this.value;

+		super(debugTarget, visitor);

 	}

 

 	@Override

 	public String getName() throws DebugException {

+		// Return the variable name

 		return this.NAME;

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.REFERENCE_TYPE_NAME;

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
index 5dca87d..63a0f7f 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;

 

 import java.util.Iterator;

@@ -21,24 +22,21 @@
 import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;

 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;

 

-public class TokensVariableAdapter extends MokaVariableAdapter {

-

-	protected List<IToken> heldTokens;

+public class TokensVariableAdapter extends MokaVariableAdapter<List<IToken>> {

 

 	private final String NAME = "tokens";

 

-	private final String REFERENCE_TYPE_NAME = "List<IToken>";

-

 	public TokensVariableAdapter(MokaDebugTarget debugTarget, List<IToken> tokens) {

-		super(debugTarget);

-		this.heldTokens = tokens;

+		super(debugTarget, tokens);

 	}

 

 	@Override

 	public IValue getValue() throws DebugException {

+		// The value adapter corresponding to a list of token consist in a list

+		// of adapter. Each adapter in the list is an adapter for a token.

 		if (this.value == null) {

 			MokaValueList tokensList = new MokaValueList(debugTarget);

-			Iterator<IToken> tokensIterator = this.heldTokens.iterator();

+			Iterator<IToken> tokensIterator = this.adaptedVariable.iterator();

 			while (tokensIterator.hasNext()) {

 				tokensList.add(MokaValueAdapterFactory.getInstance().instantiate(tokensIterator.next(), this.debugTarget));

 			}

@@ -49,48 +47,8 @@
 

 	@Override

 	public String getName() throws DebugException {

+		// Return the variable name

 		return this.NAME;

 	}

 

-	@Override

-	public String getReferenceTypeName() throws DebugException {

-		return this.REFERENCE_TYPE_NAME;

-	}

-

-	@Override

-	public boolean hasValueChanged() throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public void setValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public void setValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-

-	}

-

-	@Override

-	public boolean supportsValueModification() {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(String expression) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

-	@Override

-	public boolean verifyValue(IValue value) throws DebugException {

-		// TODO Auto-generated method stub

-		return false;

-	}

-

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
index edd17fb..2330c86 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
@@ -20,33 +20,30 @@
 

 	@Override

 	public void addListener(ILabelProviderListener listener) {

-		// TODO Auto-generated method stub

-		

+		// Do nothing

 	}

 

 	@Override

 	public void removeListener(ILabelProviderListener listener) {

-		// TODO Auto-generated method stub

-		

+		// Do nothing

 	}

 	

 	@Override

 	public boolean isLabelProperty(Object element, String property) {

-		// TODO Auto-generated method stub

+		// Do nothing

 		return false;

 	}

 	

 	@Override

 	public void dispose() {

-		// TODO Auto-generated method stub

-

+		// Do nothing

 	}

 	

 	@Override

 	public String getText(Object element) {

 		if(element != null){

 			try {

-				return ((MokaVariableAdapter)element).getName();

+				return ((MokaVariableAdapter<?>)element).getName();

 			} catch (DebugException e) {

 				e.printStackTrace();

 			}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
index fc2386a..368ae2d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
@@ -11,19 +11,35 @@
  *****************************************************************************/

 package org.eclipse.papyrus.moka.debug.model.data.presentations;

 

+import org.eclipse.debug.core.DebugException;

 import org.eclipse.jface.viewers.ILabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CS_EventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CallEventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CompletionEventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.SignalEventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.TimeEventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.CS_InteractionPointVariableAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventPoolVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ExecutionContextVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.FeatureValueVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ItemVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.MokaVariableAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.SuspensionPointVariableAdapter;

 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.TokensVariableAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_EventOccurrenceVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_InteractionPointVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CallEventOccurrenceVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CompletionEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.EventPoolVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ExecutionContextVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.FeatureValueVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ItemVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ParameterValueVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SignalEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SuspensionPointVariableLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TimeEventOccurrenceVariableLabelProvider;

 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TokensVariableLabelProvider;

 

 public class MokaDebugLabelProviderFactory {

@@ -41,9 +57,11 @@
 		return INSTANCE;

 	}

 

-	public ILabelProvider instantiate(MokaVariableAdapter variable) {

+	public ILabelProvider instantiate(MokaVariableAdapter<?> variable) {

 		ILabelProvider provider = null; 

-		if(variable instanceof ExecutionContextVariableAdapter){

+		if(variable instanceof CS_InteractionPointVariableAdapter) {

+			provider = new CS_InteractionPointVariableLabelProvider();

+		}else if(variable instanceof ExecutionContextVariableAdapter){

 			provider = new ExecutionContextVariableLabelProvider();

 		}else if(variable instanceof SuspensionPointVariableAdapter){

 			provider = new SuspensionPointVariableLabelProvider();

@@ -55,6 +73,24 @@
 			provider = new ItemVariableLabelProvider();

 		}else if(variable instanceof TokensVariableAdapter){

 			provider = new TokensVariableLabelProvider();

+		}else if(variable instanceof EventOccurrenceVariableAdapter) {

+			try {

+				if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CS_EventOccurrenceValueAdapter) {

+					provider = new CS_EventOccurrenceVariableLabelProvider();

+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof TimeEventOccurrenceValueAdapter) {

+					provider = new TimeEventOccurrenceVariableLabelProvider();

+				}else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof SignalEventOccurrenceValueAdapter) {

+					provider = new SignalEventOccurrenceVariableLabelProvider();

+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CallEventOccurrenceValueAdapter) {

+					provider = new CallEventOccurrenceVariableLabelProvider();

+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CompletionEventOccurrenceValueAdapter) {

+					provider = new CompletionEventOccurrenceVariableLabelProvider();

+				}

+			} catch (DebugException e) {

+				e.printStackTrace();

+			}

+		} else if (variable instanceof ParameterValueVariableAdapter) {

+			provider = new ParameterValueVariableLabelProvider();

 		}

 		return provider;

 	}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
index 826c05b..73aa10b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.presentations;

 

 import org.eclipse.debug.core.model.IValue;

@@ -24,19 +25,41 @@
 

 	public static final String ID = "org.eclipse.papyrus.moka.debug.mokaModelPresentation"; 

 	

-	public MokaDebugModelPresentation() {

+	@Override

+	public Image getImage(Object element) {

+		// Return the icon corresponding to the variable adapter

+		ILabelProvider provider = null;

+		if(element instanceof MokaVariableAdapter){

+			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter<?>)element);

+		}

+		if(provider != null){

+			return provider.getImage(element);

+		}

+		return null;

 	}

+

+	@Override

+	public String getText(Object element) {

+		// Return the text corresponding to the variable adapter

+		ILabelProvider provider = null;

+		if(element instanceof MokaVariableAdapter){

+			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter<?>)element);

+		}

+		if(provider != null){

+			return provider.getText(element);

+		}

+		return null;

+	}

+

 	

 	@Override

 	public void addListener(ILabelProviderListener listener) {

-		// TODO Auto-generated method stub

-		

+		// By default no listener can be added

 	}

 

 	@Override

 	public void dispose() {

-		// TODO Auto-generated method stub

-		

+		// By default no resource are disposed

 	}

 

 	@Override

@@ -48,7 +71,6 @@
 	@Override

 	public void removeListener(ILabelProviderListener listener) {

 		// TODO Auto-generated method stub

-		

 	}

 

 	@Override

@@ -66,37 +88,11 @@
 	@Override

 	public void setAttribute(String attribute, Object value) {

 		// TODO Auto-generated method stub

-		

-	}

-

-	@Override

-	public Image getImage(Object element) {

-		ILabelProvider provider = null;

-		if(element instanceof MokaVariableAdapter){

-			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter)element);

-		}

-		if(provider != null){

-			return provider.getImage(element);

-		}

-		return null;

-	}

-

-	@Override

-	public String getText(Object element) {

-		ILabelProvider provider = null;

-		if(element instanceof MokaVariableAdapter){

-			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter)element);

-		}

-		if(provider != null){

-			return provider.getText(element);

-		}

-		return null;

 	}

 

 	@Override

 	public void computeDetail(IValue value, IValueDetailListener listener) {

 		// TODO Auto-generated method stub

-		

 	}

 

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..1db80e0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,66 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.debug.core.DebugException;

+import org.eclipse.jface.viewers.ILabelProvider;

+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CS_EventOccurrenceValueAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProviderFactory;

+import org.eclipse.swt.graphics.Image;

+

+public class CS_EventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider {

+

+	protected ILabelProvider getDelegatedLabelProvider(Object element) {

+		ILabelProvider labelProvider = null;

+		if (element != null) {

+			try {

+				CS_EventOccurrenceValueAdapter valueAdapter = (CS_EventOccurrenceValueAdapter) ((EventOccurrenceVariableAdapter) element)

+						.getValue();

+				ICS_EventOccurrence eventOccurrence = (ICS_EventOccurrence) valueAdapter.getAdapted();

+				labelProvider = MokaDebugLabelProviderFactory.getInstance().instantiate(

+						new EventOccurrenceVariableAdapter(null, eventOccurrence.getWrappedEventOccurrence()));

+			} catch (DebugException e) {

+				// Silently catch the exception (the default icon will be used)

+			}

+		}

+		return labelProvider;

+	}

+

+	@Override

+	public String getText(Object element) {

+		String text = "";

+		if (element != null) {

+			ILabelProvider labelProvider = this.getDelegatedLabelProvider(element);

+			if (labelProvider != null) {

+				text = labelProvider.getText(element);

+			}

+		}

+		return text;

+	}

+

+	@Override

+	public Image getImage(Object element) {

+		Image icon = null;

+		if (element != null) {

+			ILabelProvider labelProvider = this.getDelegatedLabelProvider(element);

+			if (labelProvider != null) {

+				icon = labelProvider.getImage(element);

+			}

+		}

+		return icon;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java
new file mode 100644
index 0000000..1a9c7f6
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java
@@ -0,0 +1,32 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class CS_InteractionPointVariableLabelProvider extends MokaDebugLabelProvider{

+

+	// Icon to represent the interaction point

+	public final static String PORT_ICON = "resources/icons/interaction-point.gif";

+	

+	@Override

+	public Image getImage(Object element) {

+		if(element != null){

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(PORT_ICON);

+		}

+		return null;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..52676bd
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,39 @@
+/*****************************************************************************

+ * Copyright (c) 2016 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class CallEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{

+	

+	public final static String CALL_EVENT_ICON = "resources/icons/call.png"; 

+	

+	private final static String CALL_EVENT_TEXT = "Call Event";

+	

+	@Override

+	public String getText(Object element) {

+		return CALL_EVENT_TEXT;

+	}

+	

+	@Override

+	public Image getImage(Object element) {

+		if(element != null){

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(CALL_EVENT_ICON);

+		}

+		return null;

+	}

+

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..a4cface
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class CompletionEventOccurrenceVariableLabelProvider  extends MokaDebugLabelProvider{

+

+public final static String COMPLETION_EVENT_ICON = "resources/icons/completion.png"; 

+	

+	private final static String COMPLETION_EVENT_TEXT = "Completion Event";

+	

+	@Override

+	public String getText(Object element) {

+		return COMPLETION_EVENT_TEXT;

+	}

+	

+	@Override

+	public Image getImage(Object element) {

+		if(element != null){

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(COMPLETION_EVENT_ICON);

+		}

+		return null;

+	}

+	

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
index aa47e9f..0e69ee7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

 

 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
index ddcc114..5b95133 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

 

 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
index 3165a93..124d08b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

 

 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
index 488e296..ac53ea5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
@@ -1,5 +1,5 @@
 /*****************************************************************************

- * Copyright (c) 2016 CEA LIST.

+ * Copyright (c) 2017 CEA LIST.

  * 

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

@@ -9,6 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

  *****************************************************************************/

+

 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

 

 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java
new file mode 100644
index 0000000..dd8c619
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java
@@ -0,0 +1,29 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class ParameterValueVariableLabelProvider extends MokaDebugLabelProvider{

+

+	@Override

+	public Image getImage(Object element) {

+		if(element != null) {

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(FeatureValueVariableLabelProvider.PUBLIC_ICON);

+		}

+		return null;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..e7ca7b9
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class SignalEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{

+

+	public final static String SIGNAL_EVENT_ICON = "resources/icons/signal.png"; 

+	

+	private final static String SIGNAL_EVENT_TEXT = "Signal Event";

+	

+	@Override

+	public String getText(Object element) {

+		return SIGNAL_EVENT_TEXT;

+	}

+	

+	@Override

+	public Image getImage(Object element) {

+		if(element != null){

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(SIGNAL_EVENT_ICON);

+		}

+		return null;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..502df4a
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ * 

+ * 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:

+ *  CEA LIST Initial API and implementation

+ *****************************************************************************/

+

+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;

+

+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;

+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;

+import org.eclipse.swt.graphics.Image;

+

+public class TimeEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{

+

+	public final static String TIME_EVENT_ICON = "resources/icons/time.png"; 

+	

+	private final static String TIME_EVENT_TEXT = "Time Event";

+	

+	@Override

+	public String getText(Object element) {

+		return TIME_EVENT_TEXT;

+	}

+	

+	@Override

+	public Image getImage(Object element) {

+		if(element != null){

+			return MokaDebugPlugin.getDefault().getImageRegistry().get(TIME_EVENT_ICON);

+		}

+		return null;

+	}

+

+}