Bug 510426: Dedicated / Modular animators for each execution engines

Change-Id: Ia80c45b6383d70e441cd36a2e36e7638d1398c73
Signed-off-by: jeremie.tatibouet <jeremie.tatibouet@cea.fr>
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/META-INF/MANIFEST.MF b/bundles/core/services/org.eclipse.papyrus.moka.animation/META-INF/MANIFEST.MF
index 49ad87d..ccc441e 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/META-INF/MANIFEST.MF
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/META-INF/MANIFEST.MF
@@ -33,6 +33,8 @@
 Export-Package: org.eclipse.papyrus.moka.animation,
  org.eclipse.papyrus.moka.animation.css;x-internal:=true,
  org.eclipse.papyrus.moka.animation.engine,
+ org.eclipse.papyrus.moka.animation.engine.animators,
+ org.eclipse.papyrus.moka.animation.engine.rendering,
  org.eclipse.papyrus.moka.animation.presentation.control;x-internal:=true,
  org.eclipse.papyrus.moka.animation.presentation.data;x-internal:=true,
  org.eclipse.papyrus.moka.animation.utils
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationService.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationService.java
index 140eef7..d3b095e 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationService.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationService.java
@@ -11,88 +11,86 @@
  *****************************************************************************/

 package org.eclipse.papyrus.moka.animation.engine;

 

+import java.util.ArrayList;

+import java.util.Iterator;

+import java.util.List;

 import java.util.Set;

 

 import org.eclipse.debug.core.ILaunch;

 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.gmf.runtime.notation.Diagram;

-import org.eclipse.papyrus.moka.fuml.Semantics.Actions.BasicActions.ICallActionActivation;

-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.animation.engine.animators.ActivityAnimator;

+import org.eclipse.papyrus.moka.animation.engine.animators.Animator;

+import org.eclipse.papyrus.moka.animation.engine.animators.StateMachineAnimator;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationEngine;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationKind;

+import org.eclipse.papyrus.moka.animation.engine.rendering.DiagramHandler;

+import org.eclipse.papyrus.moka.animation.engine.rendering.IAnimation;

 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.Loci.LociL1.ISemanticVisitor;

-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.service.AbstractMokaService;

 import org.eclipse.papyrus.moka.service.IMokaExecutionListener;

-import org.eclipse.papyrus.moka.utils.constants.MokaConstants;

 

 public class AnimationService extends AbstractMokaService implements IAnimation, IMokaExecutionListener {

 

 	// The handler responsible for markers application

+	// TODO: the animation engine shall be contributed through an extension point.

 	protected AnimationEngine engine;

 

+	// List of child animators that can be used to perform animation

+	// when a node is visited of left by the execution engine.

+	protected List<Animator> animators;

+	

 	public AnimationService() {

 		this.engine = new AnimationEngine();

+		// TODO: Registration of animators shall be done using an extension point.

+		this.animators = new ArrayList<Animator>();

+		this.animators.add(new ActivityAnimator(engine));

+		this.animators.add(new StateMachineAnimator(engine));

 	}

 

 	public void init(ILaunch launcher, EObject modelElement) {

+		// Initialize elements of the animation service

 		this.engine.init(modelElement);

 	}

 

+	public Animator getAnimator(ISemanticVisitor nodeVisitor){

+		// Find the animator capable of performing animation on the model element

+		// referenced by the visitor.

+		// TODO: in case of conflicting animators the selection should be done

+		// using a priority mechanism.

+		Animator animator = null;

+		Iterator<Animator> animatorsIterator = this.animators.iterator();

+		while(animator == null && animatorsIterator.hasNext()){

+			Animator current = animatorsIterator.next();

+			if(current.accept(nodeVisitor)){

+				animator = current;

+			}

+		}

+		return animator;

+	}

+	

 	@Override

 	public void nodeVisited(ISemanticVisitor nodeVisitor) {

-		if (nodeVisitor instanceof IActivityNodeActivation) {

-			IActivityNodeActivation activation = (IActivityNodeActivation) nodeVisitor;

-			if (activation.getNode() != null) {

-				if (activation instanceof IAcceptEventActionActivation | activation instanceof ICallActionActivation) {

-					this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.ANIMATED);

-				} else {

-					this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.ANIMATED, AnimationKind.VISITED, MokaConstants.MOKA_ANIMATION_DELAY);

-				}

-			}

-		} else if (nodeVisitor instanceof IActivityEdgeInstance) {

-			IActivityEdgeInstance edgeInstance = (IActivityEdgeInstance) nodeVisitor;

-			if (edgeInstance.getEdge() != null) {

-				this.engine.startRendering(edgeInstance.getEdge(), edgeInstance.getGroup().getActivityExecution().getContext(), AnimationKind.ANIMATED);

-			}

-		} else if(nodeVisitor instanceof ITransitionActivation){

-			ITransitionActivation transitionActivation = (ITransitionActivation) nodeVisitor;

-			if(transitionActivation.getNode() != null){

-				this.renderAs(transitionActivation.getNode(), transitionActivation.getExecutionContext(), AnimationKind.ANIMATED);

-			}

-		} else if(nodeVisitor instanceof IVertexActivation){

-			IVertexActivation vertexActivation = (IVertexActivation) nodeVisitor;

-			if(vertexActivation.getNode() != null){

-				this.renderAs(vertexActivation.getNode(), vertexActivation.getExecutionContext(), AnimationKind.ANIMATED);

-			}

+		// Find a registered animator to perform animation when a node gets executed by the execution engine.

+		// If one is found (i.e., it accepts to perform animation on the node interpreted by the visitor)

+		// then the realization of the animation is delegated to this latter. If no animator could be

+		// found then no animation is performed.

+		Animator animator = this.getAnimator(nodeVisitor);

+		if(animator != null){

+			animator.nodeVisited(nodeVisitor);

 		}

 	}

 

 	@Override

 	public void nodeLeft(ISemanticVisitor nodeVisitor) {

-		if (nodeVisitor instanceof IActivityNodeActivation) {

-			IActivityNodeActivation activation = (IActivityNodeActivation) nodeVisitor;

-			if (activation.getNode() != null && (activation instanceof IAcceptEventActionActivation | activation instanceof ICallActionActivation)) {

-				this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.VISITED);

-			}

-		} else if (nodeVisitor instanceof IActivityEdgeInstance) {

-			IActivityEdgeInstance edgeInstance = (IActivityEdgeInstance) nodeVisitor;

-			if (edgeInstance.getEdge() != null) {

-				this.renderAs(edgeInstance.getEdge(), edgeInstance.getGroup().getActivityExecution().getContext(), AnimationKind.VISITED);

-			}

-		}else if(nodeVisitor instanceof ITransitionActivation){

-			ITransitionActivation transitionActivation = (ITransitionActivation) nodeVisitor;

-			if(transitionActivation.getNode() != null){

-				this.renderAs(transitionActivation.getNode(), transitionActivation.getExecutionContext(), AnimationKind.VISITED);

-			}

-		} else if(nodeVisitor instanceof IVertexActivation){

-			IVertexActivation vertexActivation = (IVertexActivation) nodeVisitor;

-			if(vertexActivation.getNode() != null){

-				this.renderAs(vertexActivation.getNode(), vertexActivation.getExecutionContext(), AnimationKind.VISITED);

-			}

+		// Find a registered animator to perform animation when a node gets exited by the execution engine.

+		// If one is found, then the realization of the animation is delegated to this latter. If no

+		// animator could be found then no animation is performed

+		Animator animator = this.getAnimator(nodeVisitor);

+		if(animator != null){

+			animator.nodeLeft(nodeVisitor);

 		}

 	}

 

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/ActivityAnimator.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/ActivityAnimator.java
new file mode 100644
index 0000000..52e8e88
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/ActivityAnimator.java
@@ -0,0 +1,89 @@
+/*****************************************************************************

+ * 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.animation.engine.animators;

+

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationEngine;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationKind;

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

+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.Loci.LociL1.ISemanticVisitor;

+import org.eclipse.papyrus.moka.utils.constants.MokaConstants;

+

+public class ActivityAnimator extends Animator{

+	

+	public ActivityAnimator(AnimationEngine engine) {

+		super(engine);

+	}

+

+	@Override

+	public void nodeVisited(ISemanticVisitor nodeVisitor) {

+		// When a node is visited by the execution engine, the following animation logic applies:

+		// 1] If the visitor is for an activity node then if its an accept event action or a call action then the

+		// representation of this node gets the ANIMATED style applied. If it is any other kind of activity

+		// node activation it also gets the ANIMATED style but for a given period of time. After this period

+		// of time the VISITED style gets automatically applied.

+		// 2] If the visitor is for an object flow or a control flow then it gets the ANIMTED style applied.

+		if (nodeVisitor instanceof IActivityNodeActivation) {

+			IActivityNodeActivation activation = (IActivityNodeActivation) nodeVisitor;

+			if (activation.getNode() != null) {

+				if (activation instanceof IAcceptEventActionActivation | activation instanceof ICallActionActivation) {

+					this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.ANIMATED);

+				} else {

+					this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.ANIMATED, AnimationKind.VISITED, MokaConstants.MOKA_ANIMATION_DELAY);

+				}

+			}

+		} else{

+			if (nodeVisitor instanceof IActivityEdgeInstance){

+				IActivityEdgeInstance edgeInstance = (IActivityEdgeInstance) nodeVisitor;

+				if (edgeInstance.getEdge() != null) {

+					this.engine.startRendering(edgeInstance.getEdge(), edgeInstance.getGroup().getActivityExecution().getContext(), AnimationKind.ANIMATED);

+				}

+			}

+		}

+	}

+

+	@Override

+	public void nodeLeft(ISemanticVisitor nodeVisitor) {

+		// When a node is left by the execution engine (i.e., the execution of this node is done), the following

+		// animation logic applies.

+		// 1] If the visitor is for a node that is either an accept event action or a call action then the VISITED

+		// style gets applied. For any other node the style remain unchanged.

+		// 2] If the visitor is for an object flow or a control flow then the VISITED style gets applied.

+		if (nodeVisitor instanceof IActivityNodeActivation) {

+			IActivityNodeActivation activation = (IActivityNodeActivation) nodeVisitor;

+			if (activation.getNode() != null && (activation instanceof IAcceptEventActionActivation | activation instanceof ICallActionActivation)) {

+				this.renderAs(activation.getNode(), activation.getExecutionContext(), AnimationKind.VISITED);

+			}

+		} else {

+			if (nodeVisitor instanceof IActivityEdgeInstance) {

+				IActivityEdgeInstance edgeInstance = (IActivityEdgeInstance) nodeVisitor;

+				if (edgeInstance.getEdge() != null) {

+					this.renderAs(edgeInstance.getEdge(), edgeInstance.getGroup().getActivityExecution().getContext(), AnimationKind.VISITED);

+				}

+			}

+		}

+	}

+

+	@Override

+	public boolean accept(ISemanticVisitor visitor) {

+		// If the visitor are either for activity nodes or activity edges then they can be accepted

+		// by this animator to perform animation.

+		if(visitor instanceof IActivityNodeActivation 

+				|| visitor instanceof IActivityEdgeInstance){

+			return true;

+		}

+		return false;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/Animator.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/Animator.java
new file mode 100644
index 0000000..3bafdc3
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/Animator.java
@@ -0,0 +1,67 @@
+/*****************************************************************************

+ * 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.animation.engine.animators;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationEngine;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationKind;

+import org.eclipse.papyrus.moka.animation.engine.rendering.IAnimation;

+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.Loci.LociL1.ISemanticVisitor;

+import org.eclipse.papyrus.moka.service.IMokaExecutionListener;

+

+public abstract class Animator implements IMokaExecutionListener, IAnimation{

+

+	protected AnimationEngine engine;

+	

+	public Animator(AnimationEngine engine){

+		this.engine = engine;

+	}

+	

+	public abstract boolean accept(ISemanticVisitor visitor);

+	

+	@Override

+	public void valueCreated(IValue value) {

+		// Do nothing

+	}

+

+	@Override

+	public void valueDestroyed(IValue value) {

+		// Do nothing

+	}

+	

+	@Override

+	public void renderAs(EObject modelElement, IObject_ object, AnimationKind targetStyle) {

+		// Apply the style  to model element if the context is allowed to perform animation.

+		this.engine.removeRenderingRules(modelElement);

+		this.engine.startRendering(modelElement, object, targetStyle);

+	}

+

+	@Override

+	public void renderAs(EObject modelElement, IObject_ object, AnimationKind sourceStyle, AnimationKind targetStyle, int duration) {

+		// Apply the source style to model element during the specified duration. As soon as this period of time as elapsed then

+		// the target style is applied to the model element.

+		this.engine.removeRenderingRules(modelElement);

+		this.engine.startRendering(modelElement, object, sourceStyle);

+		if(duration >= 25){	

+			try {

+				Thread.sleep(duration);

+			} catch (InterruptedException e) {

+				e.printStackTrace();

+			}

+		}

+		this.engine.stopRendering(modelElement, object, sourceStyle);

+		this.engine.startRendering(modelElement, object, targetStyle);

+	}

+	

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/StateMachineAnimator.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/StateMachineAnimator.java
new file mode 100644
index 0000000..6cd775c
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/animators/StateMachineAnimator.java
@@ -0,0 +1,77 @@
+/*****************************************************************************

+ * 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.animation.engine.animators;

+

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationEngine;

+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationKind;

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

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

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

+

+public class StateMachineAnimator extends Animator{

+

+	public StateMachineAnimator(AnimationEngine engine) {

+		super(engine);

+	}

+

+	@Override

+	public void nodeVisited(ISemanticVisitor nodeVisitor) {

+		// When the visitor is for a visited state machine model element the following animation logic applies.

+		// 1] If the visitor is for a transition then the ANIMATED style gets applied

+		// 2] If the visitor is for a vertex then the ANIMATED style gets applied

+		if(nodeVisitor instanceof ITransitionActivation){

+			ITransitionActivation transitionActivation = (ITransitionActivation) nodeVisitor;

+			if(transitionActivation.getNode() != null){

+				this.renderAs(transitionActivation.getNode(), transitionActivation.getExecutionContext(), AnimationKind.ANIMATED);

+			}

+		} else {

+			if(nodeVisitor instanceof IVertexActivation){

+				IVertexActivation vertexActivation = (IVertexActivation) nodeVisitor;

+				if(vertexActivation.getNode() != null){

+					this.renderAs(vertexActivation.getNode(), vertexActivation.getExecutionContext(), AnimationKind.ANIMATED);

+				}

+			}

+		}

+	}

+

+	@Override

+	public void nodeLeft(ISemanticVisitor nodeVisitor) {

+		// When the visitor is for a left state machine model element the following animation logic applies.

+		// 1] If the visitor is for a transition then the VISITED style gets applied

+		// 2] If the visitor is for a vertex then the VISITED style gets applied

+		if(nodeVisitor instanceof ITransitionActivation){

+			ITransitionActivation transitionActivation = (ITransitionActivation) nodeVisitor;

+			if(transitionActivation.getNode() != null){

+				this.renderAs(transitionActivation.getNode(), transitionActivation.getExecutionContext(), AnimationKind.VISITED);

+			}

+		} else {

+			if(nodeVisitor instanceof IVertexActivation) {

+				IVertexActivation vertexActivation = (IVertexActivation) nodeVisitor;

+				if(vertexActivation.getNode() != null){

+					this.renderAs(vertexActivation.getNode(), vertexActivation.getExecutionContext(), AnimationKind.VISITED);

+				}

+			}

+		}

+	}

+

+	@Override

+	public boolean accept(ISemanticVisitor visitor) {

+		// If the visitor is either for a transition or a vertex then it can be accepted

+		// by this animator to perform animation.

+		if(visitor instanceof ITransitionActivation

+				|| visitor instanceof IVertexActivation){

+			return true;

+		}

+		return false;

+	}

+

+}

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationEngine.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationEngine.java
similarity index 99%
rename from bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationEngine.java
rename to bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationEngine.java
index c939812..97f8d24 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationEngine.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationEngine.java
@@ -11,7 +11,7 @@
  *  CEA LIST - Initial API and implementation
  *
  *****************************************************************************/
-package org.eclipse.papyrus.moka.animation.engine;
+package org.eclipse.papyrus.moka.animation.engine.rendering;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationKind.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationKind.java
similarity index 90%
rename from bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationKind.java
rename to bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationKind.java
index b6f9412..6394232 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/AnimationKind.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/AnimationKind.java
@@ -9,7 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

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

-package org.eclipse.papyrus.moka.animation.engine;

+package org.eclipse.papyrus.moka.animation.engine.rendering;

 

 public enum AnimationKind {

 	ANIMATED, SUSPENDED, VISITED, CREATION, DESTRUCTION

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/DiagramHandler.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/DiagramHandler.java
similarity index 99%
rename from bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/DiagramHandler.java
rename to bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/DiagramHandler.java
index 85ede3e..f332543 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/DiagramHandler.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/DiagramHandler.java
@@ -9,7 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

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

-package org.eclipse.papyrus.moka.animation.engine;

+package org.eclipse.papyrus.moka.animation.engine.rendering;

 

 import java.util.ArrayList;

 import java.util.HashMap;

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IAnimation.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IAnimation.java
similarity index 76%
rename from bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IAnimation.java
rename to bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IAnimation.java
index 489175f..d102c1b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IAnimation.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IAnimation.java
@@ -9,7 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

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

-package org.eclipse.papyrus.moka.animation.engine;

+package org.eclipse.papyrus.moka.animation.engine.rendering;

 

 import org.eclipse.emf.ecore.EObject;

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

@@ -19,8 +19,8 @@
 	// Render the specified model element using the specified style. Existing style

 	// are removed in order to ensure that the specified style is used. Moving from

 	// a style to another style just consists in two successive call to this operation

-	public void renderAs(EObject modelElement, IObject_ animator, AnimationKind targetStyle);

+	public void renderAs(EObject modelElement, IObject_ object, AnimationKind targetStyle);

 

-	public void renderAs(EObject modelElement, IObject_ animator, AnimationKind sourceStyle, AnimationKind targetStyle, int duration);

+	public void renderAs(EObject modelElement, IObject_ object, AnimationKind sourceStyle, AnimationKind targetStyle, int duration);

 

 }

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IRenderingEngine.java b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IRenderingEngine.java
similarity index 93%
rename from bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IRenderingEngine.java
rename to bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IRenderingEngine.java
index 44c304a..4b2cae3 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/IRenderingEngine.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.animation/src/org/eclipse/papyrus/moka/animation/engine/rendering/IRenderingEngine.java
@@ -9,7 +9,7 @@
  * Contributors:

  *  CEA LIST Initial API and implementation

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

-package org.eclipse.papyrus.moka.animation.engine;

+package org.eclipse.papyrus.moka.animation.engine.rendering;

 

 import org.eclipse.emf.ecore.EObject;

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

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugServiceHelper.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugServiceHelper.java
index c510c3d..fa69487 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugServiceHelper.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugServiceHelper.java
@@ -19,7 +19,7 @@
 import org.eclipse.debug.core.IBreakpointManager;

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

 import org.eclipse.emf.ecore.EObject;

-import org.eclipse.papyrus.moka.animation.engine.IAnimation;

+import org.eclipse.papyrus.moka.animation.engine.rendering.IAnimation;

 import org.eclipse.papyrus.moka.debug.breakpoint.MokaBreakpoint;

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

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

diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/MokaThread.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/MokaThread.java
index 1826b92..cf6266a 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/MokaThread.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/MokaThread.java
@@ -21,8 +21,8 @@
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.papyrus.moka.animation.engine.AnimationKind;
-import org.eclipse.papyrus.moka.animation.engine.IAnimation;
+import org.eclipse.papyrus.moka.animation.engine.rendering.AnimationKind;
+import org.eclipse.papyrus.moka.animation.engine.rendering.IAnimation;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.MokaStackFrame;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IObjectActivation;