Bug 581584 - Fix the UMLTimedExecutionEngine

Fix the UMLTimedExecutionEngine to used the TimedExecutionLoop and the
TimedExecutionFactory;
UMLTimedExecutionEngine now is debuggeable execution engine.

Change-Id: I88ae81ce0885371027382d481855dfdcbaa799f3
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time.scheduling/src/org/eclipse/papyrus/moka/engine/uml/time/scheduling/control/TimedExecutionLoop.java b/plugins/org.eclipse.papyrus.moka.engine.uml.time.scheduling/src/org/eclipse/papyrus/moka/engine/uml/time/scheduling/control/TimedExecutionLoop.java
index bf9062a..367940c 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time.scheduling/src/org/eclipse/papyrus/moka/engine/uml/time/scheduling/control/TimedExecutionLoop.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time.scheduling/src/org/eclipse/papyrus/moka/engine/uml/time/scheduling/control/TimedExecutionLoop.java
@@ -19,6 +19,7 @@
 import org.eclipse.papyrus.moka.kernel.scheduling.control.ExecutionLoop;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.IScheduler;
 import org.eclipse.papyrus.moka.kernel.scheduling.execution.ITaskExecution;
+import org.eclipse.papyrus.moka.kernel.scheduling.execution.ITaskExecutionCondition;
 
 public class TimedExecutionLoop extends ExecutionLoop {
 
@@ -52,6 +53,18 @@
 			timeScheduler.step();
 		}
 	}
+	
+	@Override
+	public void terminate() {
+		super.terminate();
+		timeScheduler.setFinished(true);
+	}
+	
+	@Override
+	public void terminate(ITaskExecutionCondition condition) {
+		super.terminate(condition);
+		timeScheduler.setFinished(true);
+	}
 
 	/**
 	 * If the model is in a state that enables the execution to move forward
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF b/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
index 6e54e0b..37996ef 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
@@ -12,33 +12,35 @@
  org.eclipse.papyrus.moka.kernel.animation;bundle-version="[4.0.0,5.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.papyrus.moka.engine.uml.time; uses:="org.osgi.framework,
- org.eclipse.core.runtime,
- org.eclipse.papyrus.moka.fuml.statemachines,
- org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
- org.eclipse.papyrus.moka.engine.uml.time.actions; uses:="org.eclipse.papyrus.moka.timedfuml.semantics,
- org.eclipse.papyrus.moka.discreteevent.actions,
- org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
- org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
- org.eclipse.papyrus.moka.engine.uml.time.semantics;uses:="org.eclipse.uml2.uml,
- org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.BasicActions,
- org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions",
- org.eclipse.papyrus.moka.engine.uml.time.semantics.Actions.CompleteActions;uses:="org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.CompleteActions,
- org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications",
- org.eclipse.papyrus.moka.engine.uml.time.semantics.CommonBehaviors; uses:="org.eclipse.uml2.uml,
- org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications,
- org.eclipse.papyrus.moka.timedfuml.interfaces.semantics.CommonBehaviors,
- org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
- org.eclipse.papyrus.moka.fuml.statemachines.Semantics.CommonBehavior",
- org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci; uses:="org.eclipse.papyrus.moka.fuml.statemachines.Semantics.Loci,
- org.eclipse.uml2.uml,
- org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
- org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
- org.eclipse.papyrus.moka.engine.uml.time.semantics.StateMachines; uses:="org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines,
- org.eclipse.uml2.uml,
- org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StateMachines,
- org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel",
- org.eclipse.papyrus.moka.engine.uml.time.semantics.StructuredClassifiers;uses:="org.eclipse.uml2.uml,
- org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StructuredClassifiers"
+Export-Package: org.eclipse.papyrus.moka.engine.uml.time;
+  uses:="org.osgi.framework,
+   org.eclipse.core.runtime,
+   org.eclipse.papyrus.moka.fuml.statemachines,
+   org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
+ org.eclipse.papyrus.moka.engine.uml.time.actions;
+  uses:="org.eclipse.papyrus.moka.timedfuml.semantics,
+   org.eclipse.papyrus.moka.discreteevent.actions,
+   org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
+   org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
+ org.eclipse.papyrus.moka.engine.uml.time.activities,
+ org.eclipse.papyrus.moka.engine.uml.time.semantics;uses:="org.eclipse.uml2.uml,org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.BasicActions,org.eclipse.papyrus.moka.composites.Semantics.impl.CompositeStructures.InvocationActions",
+ org.eclipse.papyrus.moka.engine.uml.time.semantics.Actions.CompleteActions;uses:="org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.CompleteActions,org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications",
+ org.eclipse.papyrus.moka.engine.uml.time.semantics.CommonBehaviors;
+  uses:="org.eclipse.uml2.uml,
+   org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications,
+   org.eclipse.papyrus.moka.timedfuml.interfaces.semantics.CommonBehaviors,
+   org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
+   org.eclipse.papyrus.moka.fuml.statemachines.Semantics.CommonBehavior",
+ org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci;
+  uses:="org.eclipse.papyrus.moka.fuml.statemachines.Semantics.Loci,
+   org.eclipse.uml2.uml,
+   org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel,
+   org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1",
+ org.eclipse.papyrus.moka.engine.uml.time.semantics.StateMachines;
+  uses:="org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines,
+   org.eclipse.uml2.uml,
+   org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StateMachines,
+   org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel",
+ org.eclipse.papyrus.moka.engine.uml.time.semantics.StructuredClassifiers;uses:="org.eclipse.uml2.uml,org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StructuredClassifiers"
 Bundle-Vendor: Eclipse Modeling Project
 Automatic-Module-Name: org.eclipse.papyrus.moka.engine.uml.time
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
index 5d825f2..e828fde 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
@@ -17,16 +17,23 @@
 
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.papyrus.moka.engine.uml.UMLExecutionEngine;
+import org.eclipse.papyrus.moka.engine.uml.debug.UMLDebugExecutionEngine;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.control.TimedExecutionLoop;
 import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.DEScheduler;
 import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.actions.DisplayCurrentTimeAction;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci.TimedExecutionFactory;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci.TimedLocus;
 import org.eclipse.papyrus.moka.fuml.commonbehavior.IParameterValue;
+import org.eclipse.papyrus.moka.fuml.loci.ILocus;
 import org.eclipse.papyrus.moka.fuml.tasks.IUMLRootTaskExecution;
 import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineException;
+import org.eclipse.papyrus.moka.kernel.scheduling.control.ExecutionController;
+import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionController;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.Scheduler;
+import org.eclipse.papyrus.moka.pscs.loci.CS_Executor;
 import org.eclipse.uml2.uml.Element;
 
-public class UMLTimedExecutionEngine extends UMLExecutionEngine {
+public class UMLTimedExecutionEngine extends UMLDebugExecutionEngine {
 
 	protected double getStopTime() {
 		// Scheduler stop time
@@ -49,7 +56,25 @@
 		// This method can be overridden to perform post-run finalization that can be
 		// needed for a given customization.
 	}
+	
+	/**
+	 * Create and parameterize the locus
+	 */
+	@Override
+	public ILocus createLocus() {
+		ILocus locus = new TimedLocus();
+		locus.setExecutor(new CS_Executor());
+		locus.setFactory(new TimedExecutionFactory());
+		return locus;
+	}
 
+
+	public IExecutionController createController() {
+		IExecutionController controller = new ExecutionController();
+		controller.setExecutionLoop(new TimedExecutionLoop());
+		return controller;
+	}
+	
 	@Override
 	public void start(SubMonitor monitor) throws ExecutionEngineException {
 		EObject executionSource = configuration.getExecutionSource();