[New] Update the order state of activity by Type and Id reference

This commit is contained in:
Robert von Burg 2017-05-14 15:33:23 +02:00
parent 76fb797102
commit 24b7f1d2bc
7 changed files with 88 additions and 10 deletions

View File

@ -90,17 +90,45 @@ public enum State {
}
/**
* @return true if the state is {@link #CLOSED}
* @return true if the state is {@link #CREATED}
*/
public boolean isClosed() {
return this == CLOSED;
public boolean isCreated() {
return this == State.CREATED;
}
/**
* @return true if the state is {@link #PLANNING}
*/
public boolean isInPlanning() {
return this == State.PLANNING;
}
/**
* @return true if the state is {@link #PLANNED}
*/
public boolean isInPlanned() {
return this == State.PLANNED;
}
/**
* @return true if the state is {@link #EXECUTION}
*/
public boolean isInExecution() {
return this == State.EXECUTION;
}
/**
* @return true if the state is {@link #EXECUTED}
*/
public boolean isExecuted() {
return this == EXECUTED;
}
/**
* @return true if the state is {@link #CLOSED}
*/
public boolean isExecuted() {
return this == EXECUTED;
public boolean isClosed() {
return this == CLOSED;
}
/**

View File

@ -1,6 +1,7 @@
package li.strolch.execution.command;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.model.State;
import li.strolch.model.activity.Activity;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.utils.dbc.DBC;
@ -24,8 +25,13 @@ public class ExecuteActivityCommand extends ExecutionCommand {
@Override
public void doCommand() {
tx().lock(this.activity.getRootElement());
Activity rootElement = this.activity.getRootElement();
tx().lock(rootElement);
State currentState = rootElement.getState();
this.activity.accept(this);
updateOrderState(rootElement, currentState, rootElement.getState());
}
@Override

View File

@ -7,9 +7,11 @@ import java.util.Map.Entry;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.command.UpdateActivityCommand;
import li.strolch.command.UpdateOrderCommand;
import li.strolch.exception.StrolchException;
import li.strolch.execution.policy.ConfirmationPolicy;
import li.strolch.execution.policy.ExecutionPolicy;
import li.strolch.model.Order;
import li.strolch.model.Resource;
import li.strolch.model.State;
import li.strolch.model.activity.Action;
@ -41,6 +43,24 @@ public abstract class ExecutionCommand extends Command implements TimeOrderingVi
return resource;
}
protected void updateOrderState(Activity rootElement, State currentState, State newState) {
if (currentState == newState)
return;
String type = rootElement.getType();
String id = rootElement.getId();
Order order = tx().getOrderBy(type, id);
if (order == null)
return;
order.setState(rootElement.getState());
UpdateOrderCommand cmd = new UpdateOrderCommand(getContainer(), tx());
cmd.setOrder(order);
cmd.doCommand();
}
protected ExecutionPolicy getExecutionPolicy(Action action) {
Resource resource = getResource(tx(), action);
PolicyDef executionPolicyDef = resource.getPolicyDefs().getPolicyDef(ExecutionPolicy.class.getSimpleName());

View File

@ -6,6 +6,7 @@ import li.strolch.agent.api.ComponentContainer;
import li.strolch.exception.StrolchException;
import li.strolch.model.State;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.utils.dbc.DBC;
@ -34,10 +35,15 @@ public class SetActionToErrorCommand extends ExecutionCommand {
@Override
public void doCommand() {
tx().lock(this.action.getRootElement());
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toError(this.action);
getConfirmationPolicy(this.action).toError(this.action);
updateOrderState(rootElement, currentState, rootElement.getState());
}
@Override

View File

@ -6,6 +6,7 @@ import li.strolch.agent.api.ComponentContainer;
import li.strolch.exception.StrolchException;
import li.strolch.model.State;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.utils.dbc.DBC;
@ -34,10 +35,15 @@ public class SetActionToExecutedCommand extends ExecutionCommand {
@Override
public void doCommand() {
tx().lock(this.action.getRootElement());
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toExecuted(this.action);
getConfirmationPolicy(this.action).toExecuted(this.action);
updateOrderState(rootElement, currentState, rootElement.getState());
}
@Override

View File

@ -6,6 +6,7 @@ import li.strolch.agent.api.ComponentContainer;
import li.strolch.exception.StrolchException;
import li.strolch.model.State;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.utils.dbc.DBC;
@ -34,10 +35,15 @@ public class SetActionToStoppedCommand extends ExecutionCommand {
@Override
public void doCommand() {
tx().lock(this.action.getRootElement());
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toStopped(this.action);
getConfirmationPolicy(this.action).toStopped(this.action);
updateOrderState(rootElement, currentState, rootElement.getState());
}
@Override

View File

@ -6,6 +6,7 @@ import li.strolch.agent.api.ComponentContainer;
import li.strolch.exception.StrolchException;
import li.strolch.model.State;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.utils.dbc.DBC;
@ -34,10 +35,15 @@ public class SetActionToWarningCommand extends ExecutionCommand {
@Override
public void doCommand() {
tx().lock(this.action.getRootElement());
Activity rootElement = this.action.getRootElement();
tx().lock(rootElement);
State currentState = rootElement.getState();
getExecutionPolicy(this.action).toWarning(this.action);
getConfirmationPolicy(this.action).toWarning(this.action);
updateOrderState(rootElement, currentState, rootElement.getState());
}
@Override