diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeScheduler.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeScheduler.java index e5edbe6c7..6d08d65bf 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeScheduler.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeScheduler.java @@ -13,7 +13,9 @@ import cz.cuni.mff.d3s.deeco.executor.Executor; +import cz.cuni.mff.d3s.deeco.model.runtime.api.Trigger; import cz.cuni.mff.d3s.deeco.task.Task; +import cz.cuni.mff.d3s.deeco.task.TriggerListener; public class LocalTimeScheduler implements Scheduler{ Map tasks; @@ -100,10 +102,15 @@ public synchronized void removeTask(Task task) { private void startTask(final Task task) { TaskInfo ti = tasks.get(task); - // task.registerTriggers({ - // ...} - // ) - ti.timer. scheduleAtFixedRate(new TimerTask() { + task.registerTriggers(new TriggerListener() { + + @Override + public void triggered(Trigger trigger) { + taskTriggerFired(task); + } + }); + + ti.timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { @@ -120,6 +127,34 @@ private void stopTask(final Task task) { ti.state = States.STOPPED; } + /** + * Restarts the timer and executes the task. + * NOT thread safe!!!
+ * @throws NullPointerException when {@code task} is not in the {@link #tasks}. + * @param task + */ + protected void taskTriggerFired(final Task task) { + if( tasks.get(task).state == States.RUNNING ){ + // TODO : Implement error reporting + return; + } + + TaskInfo ti = tasks.get(task); + ti.timer.cancel(); + ti.timer = new Timer(); + + ti.timer.scheduleAtFixedRate(new TimerTask() { + + @Override + public void run() { + taskTimerFired(task); + } + }, 0, task.getSchedulingSpecification().getPeriod()); + + ti.state = States.RUNNING; + executor.execute(task); + } + protected void taskTimerFired(Task task) { if( tasks.get(task).state == States.RUNNING ){ // TODO : Implement error reporting diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/TriggerListener.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/TriggerListener.java index d421098be..a5788e4fb 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/TriggerListener.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/TriggerListener.java @@ -10,5 +10,5 @@ */ public interface TriggerListener { - public boolean triggered(Trigger trigger); + public void triggered(Trigger trigger); } diff --git a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeSchedulerTest.java b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeSchedulerTest.java index ae304cad7..4cfedd130 100644 --- a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeSchedulerTest.java +++ b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/scheduler/LocalTimeSchedulerTest.java @@ -16,8 +16,6 @@ public class LocalTimeSchedulerTest { public void setUp() throws Exception{ executor = mock(Executor.class); sched = new LocalTimeScheduler(executor); - - //dowhen(executor.execute).then(); }