From d12c6d81f3580b9f00a01151f5335755948280dd Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de> Date: Mon, 28 Sep 2015 13:05:51 +0200 Subject: [PATCH] not calling the super methods results in an exception --- .../java/teetime/framework/AbstractStage.java | 20 ++++++++++++++++++- .../framework/SuperNotCalledException.java | 14 +++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/main/java/teetime/framework/SuperNotCalledException.java diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java index bddcb551..4aacc6e1 100644 --- a/src/main/java/teetime/framework/AbstractStage.java +++ b/src/main/java/teetime/framework/AbstractStage.java @@ -31,6 +31,8 @@ import teetime.framework.exceptionHandling.AbstractExceptionListener.FurtherExec import teetime.framework.exceptionHandling.TerminateException; import teetime.framework.pipe.IPipe; import teetime.framework.signal.ISignal; +import teetime.framework.signal.StartingSignal; +import teetime.framework.signal.TerminatingSignal; import teetime.framework.validation.InvalidPortConnection; import teetime.util.framework.port.PortList; import teetime.util.framework.port.PortRemovedListener; @@ -180,6 +182,10 @@ public abstract class AbstractStage { private final PortList<InputPort<?>> inputPorts = new PortList<InputPort<?>>(); private final PortList<OutputPort<?>> outputPorts = new PortList<OutputPort<?>>(); + + private boolean calledOnTerminating = false; + private boolean calledOnStarting = false; + private volatile StageState currentState = StageState.CREATED; protected List<InputPort<?>> getInputPorts() { @@ -216,6 +222,16 @@ public abstract class AbstractStage { if (signal.mayBeTriggered(signalReceivedInputPorts, getInputPorts())) { try { signal.trigger(this); + if (signal instanceof StartingSignal) { + if (!calledOnStarting) { + throw new SuperNotCalledException("The super method onStarting was not called in " + this.getId()); + } + } + if (signal instanceof TerminatingSignal) { + if (!calledOnTerminating) { + throw new SuperNotCalledException("The super method onTerminating was not called in " + this.getId()); + } + } } catch (Exception e) { this.getOwningContext().abortConfigurationRun(); } @@ -248,7 +264,7 @@ public abstract class AbstractStage { return signalAlreadyReceived; } - private void changeState(final StageState newState) { + void changeState(final StageState newState) { currentState = newState; if (logger.isTraceEnabled()) { logger.trace(newState.toString()); @@ -270,11 +286,13 @@ public abstract class AbstractStage { @SuppressWarnings("PMD.SignatureDeclareThrowsException") public void onStarting() throws Exception { changeState(StageState.STARTED); + calledOnStarting = true; } @SuppressWarnings("PMD.SignatureDeclareThrowsException") public void onTerminating() throws Exception { changeState(StageState.TERMINATED); + calledOnTerminating = true; } /** diff --git a/src/main/java/teetime/framework/SuperNotCalledException.java b/src/main/java/teetime/framework/SuperNotCalledException.java new file mode 100644 index 00000000..f9b40ee0 --- /dev/null +++ b/src/main/java/teetime/framework/SuperNotCalledException.java @@ -0,0 +1,14 @@ +package teetime.framework; + +public class SuperNotCalledException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 1328934037128066070L; + + SuperNotCalledException(final String string) { + super(string); + } + +} -- GitLab