From 8207286dbf67dc043b2874d32f920ac99e6a6409 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Wed, 30 Oct 2013 21:54:45 +0100 Subject: [PATCH] Process task development Some updates to the architecture based on our meeting today. --- .../architecture-26.10.2013.emx | 80 +++++++++++++++---- .../cuni/mff/d3s/deeco/task/EnsembleTask.java | 18 +++++ .../cuni/mff/d3s/deeco/task/ProcessTask.java | 21 +++++ .../src/cz/cuni/mff/d3s/deeco/task/Task.java | 15 +++- .../deeco/model/runtime/RuntimeModelTest.java | 2 +- .../mff/d3s/deeco/task/ProcessTaskTest.java | 24 +++--- 6 files changed, 133 insertions(+), 27 deletions(-) diff --git a/jdeeco-architecture/architecture-26.10.2013.emx b/jdeeco-architecture/architecture-26.10.2013.emx index d5839895a..e089a2474 100644 --- a/jdeeco-architecture/architecture-26.10.2013.emx +++ b/jdeeco-architecture/architecture-26.10.2013.emx @@ -2,7 +2,7 @@ ?> ?> - + @@ -210,7 +210,7 @@ - + @@ -273,7 +273,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -325,6 +325,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2897,9 +2936,12 @@ - + + + + @@ -3049,10 +3091,7 @@ - - - - + @@ -4105,8 +4144,8 @@ - - + + @@ -4163,8 +4202,8 @@ - - + + @@ -4204,6 +4243,15 @@ + + + + + + + + + @@ -4224,9 +4272,9 @@ - + - + diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java index 9ffb5d971..45c861c68 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/EnsembleTask.java @@ -12,6 +12,24 @@ public EnsembleTask(InstanceEnsemblingController ensemblingController) { this.ensemblingController = ensemblingController; } + /* (non-Javadoc) + * @see cz.cuni.mff.d3s.deeco.task.Task#registerTriggers() + */ + @Override + public void registerTriggers() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see cz.cuni.mff.d3s.deeco.task.Task#unregisterTriggers() + */ + @Override + public void unregisterTriggers() { + // TODO Auto-generated method stub + + } + /* (non-Javadoc) * @see cz.cuni.mff.d3s.deeco.task.Task#invoke() */ diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java index 30703175a..8502d13d6 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/ProcessTask.java @@ -2,6 +2,10 @@ import cz.cuni.mff.d3s.deeco.model.runtime.api.InstanceProcess; +/** + * @author Tomas Bures + * + */ public class ProcessTask extends Task { InstanceProcess process; @@ -18,4 +22,21 @@ public void invoke() { // TODO Auto-generated method stub } + + /* (non-Javadoc) + * @see cz.cuni.mff.d3s.deeco.task.Task#registerTriggers() + */ + @Override + public void registerTriggers() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see cz.cuni.mff.d3s.deeco.task.Task#unregisterTriggers() + */ + @Override + public void unregisterTriggers() { + // TODO Auto-generated method stub + } } diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java index 638fe49ee..565fdd33e 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java @@ -19,8 +19,21 @@ public Task(SchedulingSpecification schedulingSpecification) { public abstract void invoke(); + public abstract void registerTriggers(); + public abstract void unregisterTriggers(); + public void setSchedulingNotificationTarget(NotificationsForScheduler listener) { - this.listener = listener; + if (this.listener != null && listener == null) { + unregisterTriggers(); + this.listener = null; + + } else if (this.listener == null && listener != null) { + this.listener = listener; + registerTriggers(); + + } else { + this.listener = listener; + } } public long getSchedulingPeriod() { diff --git a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/RuntimeModelTest.java b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/RuntimeModelTest.java index 79e2205dc..62d2c9800 100644 --- a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/RuntimeModelTest.java +++ b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/model/runtime/RuntimeModelTest.java @@ -57,7 +57,7 @@ private KnowledgePath createSamplePathInstance() { } @Test - public void testEqualsWorkWithKnowledgePath() { + public void testEqualsWorksWithKnowledgePath() { // WHEN two instance of KnowledgePath designate the same path KnowledgePath p1 = createSamplePathInstance(); diff --git a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java index e9641db27..43aef657a 100644 --- a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java +++ b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/task/ProcessTaskTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; @@ -103,25 +104,30 @@ public void testSchedulingPeriod() { @Test @Ignore - public void testTrigger() { + public void testTriggerIsDeliveredOnlyWhenListenerIsRegistered() { InOrder inOrder = inOrder(knowledgeManager); // GIVEN a ProcessTask initialized with an InstanceProcess - // WHEN a trigger listener is registered + // WHEN a listener (i.e. scheduler) is registered at the task task.setSchedulingNotificationTarget(schedulingNotificationTarget); - // AND a trigger comes from the knowledge manager + // 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 + // THEN the task calls the registered listener (i.e. the scheduler) inOrder.verify(schedulingNotificationTarget).triggered(task); - // WHEN the listener is unregistered + // WHEN the listener (i.e. the scheduler) is unregistered task.setSchedulingNotificationTarget(null); - // THEN the trigger is unregistered with the knowledge manager + // 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); - - // TODO: TB@JK: Could you please check whether the above is correct? } @Test