Skip to content
Snippets Groups Projects
Commit 62db013f authored by Christian Wulf's avatar Christian Wulf
Browse files

Merge branch 'calledSuperOnSignal' into 'master'

Forced super calls

fixes #51

See merge request !60
parents 240a6d84 d12c6d81
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
/**
......
package teetime.framework;
public class SuperNotCalledException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1328934037128066070L;
SuperNotCalledException(final String string) {
super(string);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment