Skip to content

Commit

Permalink
Small adjustments after today's meeting.
Browse files Browse the repository at this point in the history
  • Loading branch information
bures committed Oct 30, 2013
1 parent da4d275 commit 8b4574e
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@
import java.util.Timer;
import java.util.TimerTask;


import cz.cuni.mff.d3s.deeco.executor.Executor;
import cz.cuni.mff.d3s.deeco.knowledge.TriggerListener;
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.NotificationsForScheduler;

public class LocalTimeScheduler implements Scheduler{
Map<Task, TaskInfo> tasks;
Expand Down Expand Up @@ -102,9 +101,9 @@ public synchronized void removeTask(Task task) {

private void startTask(final Task task) {
TaskInfo ti = tasks.get(task);
task.setSchedulingNotificationTarget(new NotificationsForScheduler() { // FIXME: TB: It is an overkill to instantiate this for each task since the task now passes itself as a parameter.
task.setTriggerListener(new TriggerListener() {
@Override
public void triggered(Task task) {
public void triggered(Trigger trigger) {
taskTriggerFired(task);
}
});
Expand Down
9 changes: 5 additions & 4 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package cz.cuni.mff.d3s.deeco.task;

import cz.cuni.mff.d3s.deeco.model.runtime.api.InstanceEnsemblingController;
import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;

public class EnsembleTask extends Task {

InstanceEnsemblingController ensemblingController;

public EnsembleTask(InstanceEnsemblingController ensemblingController) {
super(ensemblingController.getEnsemble().getSchedule());
public EnsembleTask(InstanceEnsemblingController ensemblingController, Scheduler scheduler) {
super(ensemblingController.getEnsemble().getSchedule(), scheduler);

this.ensemblingController = ensemblingController;
}
Expand All @@ -16,7 +17,7 @@ public EnsembleTask(InstanceEnsemblingController ensemblingController) {
* @see cz.cuni.mff.d3s.deeco.task.Task#registerTriggers()
*/
@Override
public void registerTriggers() {
protected void registerTriggers() {
// TODO Auto-generated method stub

}
Expand All @@ -25,7 +26,7 @@ public void registerTriggers() {
* @see cz.cuni.mff.d3s.deeco.task.Task#unregisterTriggers()
*/
@Override
public void unregisterTriggers() {
protected void unregisterTriggers() {
// TODO Auto-generated method stub

}
Expand Down

This file was deleted.

9 changes: 5 additions & 4 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cz.cuni.mff.d3s.deeco.task;

import cz.cuni.mff.d3s.deeco.model.runtime.api.InstanceProcess;
import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;

/**
* @author Tomas Bures <bures@d3s.mff.cuni.cz>
Expand All @@ -10,8 +11,8 @@ public class ProcessTask extends Task {

InstanceProcess process;

public ProcessTask(InstanceProcess process) {
super(process.getProcess().getSchedule());
public ProcessTask(InstanceProcess process, Scheduler scheduler) {
super(process.getProcess().getSchedule(), scheduler);
}

/* (non-Javadoc)
Expand All @@ -27,7 +28,7 @@ public void invoke() {
* @see cz.cuni.mff.d3s.deeco.task.Task#registerTriggers()
*/
@Override
public void registerTriggers() {
protected void registerTriggers() {
// TODO Auto-generated method stub

}
Expand All @@ -36,7 +37,7 @@ public void registerTriggers() {
* @see cz.cuni.mff.d3s.deeco.task.Task#unregisterTriggers()
*/
@Override
public void unregisterTriggers() {
protected void unregisterTriggers() {
// TODO Auto-generated method stub
}
}
39 changes: 23 additions & 16 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cz.cuni.mff.d3s.deeco.task;

import cz.cuni.mff.d3s.deeco.knowledge.TriggerListener;
import cz.cuni.mff.d3s.deeco.model.runtime.api.SchedulingSpecification;
import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;

/**
*
Expand All @@ -9,30 +11,35 @@
*
*/
public abstract class Task {
protected SchedulingSpecification schedulingSpecification;
protected TriggerListener listener;
protected Scheduler scheduler;

SchedulingSpecification schedulingSpecification;
NotificationsForScheduler listener;

public Task(SchedulingSpecification schedulingSpecification) {
public Task(SchedulingSpecification schedulingSpecification, Scheduler scheduler) {
this.schedulingSpecification = schedulingSpecification;
this.scheduler = scheduler;
}

public abstract void invoke();

public abstract void registerTriggers();
public abstract void unregisterTriggers();
protected abstract void registerTriggers();
protected abstract void unregisterTriggers();

public void setTriggerListener(TriggerListener listener) {
assert(listener != null);

if (this.listener != null) {
unsetTriggerListener();
}

this.listener = listener;
registerTriggers();
}

public void setSchedulingNotificationTarget(NotificationsForScheduler listener) {
if (this.listener != null && listener == null) {
public void unsetTriggerListener() {
if (this.listener != null) {
unregisterTriggers();
this.listener = null;

} else if (this.listener == null && listener != null) {
this.listener = listener;
registerTriggers();

} else {
this.listener = listener;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.mockito.MockitoAnnotations;

import cz.cuni.mff.d3s.deeco.model.runtime.api.InstanceEnsemblingController;
import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;

/**
* @author Tomas Bures <bures@d3s.mff.cuni.cz>
Expand All @@ -18,14 +19,16 @@ public class EnsembleTaskTest {

@Mock
private InstanceEnsemblingController instanceEnsemblingController;
@Mock
private Scheduler scheduler;

private Task ensembleTask;


@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.ensembleTask = new EnsembleTask(instanceEnsemblingController);
this.ensembleTask = new EnsembleTask(instanceEnsemblingController, scheduler);
}

@Test
Expand Down
16 changes: 9 additions & 7 deletions jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import cz.cuni.mff.d3s.deeco.model.runtime.RuntimeModelTest;
import cz.cuni.mff.d3s.deeco.model.runtime.SampleRuntimeModel;
import cz.cuni.mff.d3s.deeco.model.runtime.api.KnowledgePath;
import cz.cuni.mff.d3s.deeco.scheduler.Scheduler;

/**
* @author Tomas Bures <bures@d3s.mff.cuni.cz>
Expand All @@ -45,9 +46,11 @@ public class ProcessTaskTest {
@Mock
private KnowledgeManager knowledgeManager;
@Mock
private NotificationsForScheduler schedulingNotificationTarget;
private TriggerListener triggerListener;
@Captor
private ArgumentCaptor<TriggerListener> taskTriggerListenerCaptor;
@Mock
private Scheduler scheduler;

private Task task;

Expand Down Expand Up @@ -90,7 +93,7 @@ public ValueSet answer(InvocationOnMock invocation) {

model.setKnowledgeManager(knowledgeManager);

this.task = new ProcessTask(model.instanceProcess);
this.task = new ProcessTask(model.instanceProcess, scheduler);
}

@Test
Expand All @@ -109,25 +112,24 @@ public void testTriggerIsDeliveredOnlyWhenListenerIsRegistered() {

// GIVEN a ProcessTask initialized with an InstanceProcess
// WHEN a listener (i.e. scheduler) is registered at the task
task.setSchedulingNotificationTarget(schedulingNotificationTarget);
task.setTriggerListener(triggerListener);
// THEN the task registers a trigger listener on the knowledge manager
verify(knowledgeManager).register(eq(model.trigger), any(TriggerListener.class));

// WHEN a trigger comes from the knowledge manager
taskTriggerListenerCaptor.getValue().triggered(model.trigger);
// THEN the task calls the registered listener (i.e. the scheduler)
inOrder.verify(schedulingNotificationTarget).triggered(task);
inOrder.verify(triggerListener).triggered(model.trigger);

// WHEN the listener (i.e. the scheduler) is unregistered
task.setSchedulingNotificationTarget(null);
task.unsetTriggerListener();
// THEN the trigger is unregistered at the knowledge manager
inOrder.verify(knowledgeManager).unregister(model.trigger, taskTriggerListenerCaptor.getValue());

// WHEN another trigger (possibly spurious) comes from the knowledge manager
taskTriggerListenerCaptor.getValue().triggered(model.trigger);
// THEN nothing is called on the unregistered listener (i.e. scheduler)

verifyNoMoreInteractions(schedulingNotificationTarget);
verifyNoMoreInteractions(triggerListener);
}

@Test
Expand Down

0 comments on commit 8b4574e

Please sign in to comment.