[Fix] Fixed re-executing ERRORed Action

This commit is contained in:
Robert von Burg 2017-06-09 16:11:22 +02:00
parent b8b0806e12
commit 3e2e21da6d
5 changed files with 34 additions and 6 deletions

View File

@ -135,21 +135,21 @@ public enum State {
* @return true if {@link #inExecutionPhase()} but not executed and not already in warning
*/
public boolean canSetToWarning() {
return inExecutionPhase() && this != State.EXECUTED && this != State.WARNING;
return inExecutionPhase() && this != State.EXECUTED;
}
/**
* @return true if {@link #inExecutionPhase()} but not executed and not already stopped
*/
public boolean canSetToStopped() {
return inExecutionPhase() && this != State.EXECUTED && this != State.STOPPED;
return inExecutionPhase() && this != State.EXECUTED;
}
/**
* @return true if {@link #inExecutionPhase()} but not executed and not already in error
*/
public boolean canSetToError() {
return inExecutionPhase() && this != State.EXECUTED && this != State.ERROR;
return inExecutionPhase() && this != State.EXECUTED;
}
/**

View File

@ -87,8 +87,11 @@ public abstract class ExecutionCommand extends Command implements TimeOrderingVi
continue;
// in series we can never have two Actions in execution, so if we found the action in execution, we stop
if (element instanceof Action && state == State.EXECUTION)
if (element instanceof Action //
&& (state == State.EXECUTION //
|| state == State.WARNING)) {
break;
}
boolean canExecute = isExecutable(element);
if (canExecute) {
@ -118,9 +121,19 @@ public abstract class ExecutionCommand extends Command implements TimeOrderingVi
}
protected boolean isExecutable(IActivityElement element) {
if (element.getState().compareTo(State.EXECUTED) >= 0)
State state = element.getState();
if (state.compareTo(State.EXECUTED) >= 0)
return false;
return element instanceof Activity || element.getState().compareTo(State.EXECUTION) < 0;
if (element instanceof Activity)
return true;
// not yet in execution
if (state.compareTo(State.EXECUTION) < 0)
return true;
// in stopped or error
return state == State.STOPPED || state == State.ERROR;
}
@Override

View File

@ -38,6 +38,11 @@ public class SetActionToErrorCommand extends ExecutionCommand {
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
if (this.action.getState() == State.ERROR) {
logger.warn("Action " + this.action.getLocator() + " is already in ERROR! Not changing.");
return;
}
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toError(this.action);

View File

@ -38,6 +38,11 @@ public class SetActionToStoppedCommand extends ExecutionCommand {
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
if (this.action.getState() == State.STOPPED) {
logger.warn("Action " + this.action.getLocator() + " is already in STOPPED! Not changing.");
return;
}
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toStopped(this.action);

View File

@ -38,6 +38,11 @@ public class SetActionToWarningCommand extends ExecutionCommand {
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
if (this.action.getState() == State.WARNING) {
logger.warn("Action " + this.action.getLocator() + " is already in WARNING! Not changing.");
return;
}
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toWarning(this.action);