implemented action-based startup of routes

This commit is contained in:
Stephan Richter
2020-11-13 14:41:17 +01:00
parent f2ee754064
commit bb983c9736
14 changed files with 234 additions and 81 deletions

View File

@@ -123,18 +123,18 @@ public abstract class Action extends BaseClass {
public static List<Class<? extends Action>> list() {
return List.of(
SendCommand.class,
ConditionalAction.class,
SetSpeed.class,
SetSignalsToStop.class,
DelayedAction.class,
FinishRoute.class,
TriggerContact.class,
TurnTrain.class,
StopAllTrains.class,
StopAuto.class,
SendCommand.class,
SetPower.class,
SetRelay.class,
DelayedAction.class
SetSignal.class,
SetSpeed.class,
StopAllTrains.class,
StopAuto.class,
TriggerContact.class,
TurnTrain.class
);
}

View File

@@ -144,7 +144,7 @@ public class ActionList extends Vector<Action> implements Constants{
}
public boolean fire(Context context) {
LOG.debug(t("Firing {}"),this);
if (!isEmpty()) LOG.debug(t("Firing {}"),this);
boolean success = true;
for (Action action : this) {
try {

View File

@@ -0,0 +1,103 @@
package de.srsoftware.web4rail.actions;
import java.io.IOException;
import java.util.HashMap;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.Tile;
public class SetSignal extends Action {
private static final String SIGNAL = "signal";
private Signal signal = null;
private String state = Signal.STOP;
@Override
public boolean fire(Context context) throws IOException {
if (isNull(signal)) return false;
return signal.state(state);
}
@Override
public JSONObject json() {
JSONObject json = super.json();
if (isSet(signal)) {
json.put(SIGNAL, signal.id());
json.put(Signal.STATE, state);
}
return json;
}
@Override
public Action load(JSONObject json) {
super.load(json);
Tile tile = plan.get(json.getString(SIGNAL), false);
if (tile instanceof Signal) signal = (Signal) tile;
state = json.getString(Signal.STATE);
return this;
}
@Override
public Window properties(HashMap<String, String> params) {
Window win = super.properties(params);
Form form = new Form("action-prop-form-"+id);
new Input(REALM,REALM_ACTIONS).hideIn(form);
new Input(ID,params.get(ID)).hideIn(form);
new Input(ACTION,ACTION_UPDATE).hideIn(form);
new Input(CONTEXT,params.get(CONTEXT)).hideIn(form);
Select select = new Select(SIGNAL);
for (Signal signal : plan.signals()) {
Tag option = select.addOption(signal.id(),signal.title());
if (signal == this.signal) option.attr("selected", "selected");
}
select.addTo(new Label(t("Select signal:")+NBSP)).addTo(form);
Select state = new Select(Signal.STATE);
for (String st:Signal.knownStates) {
Tag option = state.addOption(st);
if (st.equals(this.state)) option.attr("selected", "selected");
}
state.addTo(new Label(t("Select state:")+NBSP)).addTo(form);
new Button(t("Apply"),form).addTo(form).addTo(win);
return win;
}
public SetSignal set(Signal sig) {
signal = sig;
return this;
}
public SetSignal to(String state) {
this.state = state;
return this;
}
public String toString() {
if (isNull(signal)) return "["+t("click here to setup signal")+"]";
return t("Set {} to {}",signal,state);
};
@Override
protected Object update(HashMap<String, String> params) {
LOG.debug("update: {}",params);
Tile tile = plan.get(params.get(SIGNAL), false);
if (tile instanceof Signal) signal = (Signal) tile;
String st = params.get(Signal.STATE);
if (isSet(st)) state = st;
return properties(params);
}
}

View File

@@ -1,12 +0,0 @@
package de.srsoftware.web4rail.actions;
import de.srsoftware.web4rail.tiles.Signal;
public class SetSignalsToStop extends Action {
@Override
public boolean fire(Context context) {
context.route.setSignals(Signal.STOP);
return true;
}
}

View File

@@ -54,10 +54,10 @@ public class SetSpeed extends Action{
@Override
public String toString() {
return t("Reduce speed to {} km/h",maxSpeed);
return t("Set speed to {} km/h",maxSpeed);
}
public SetSpeed speed(int kmh) {
public SetSpeed to(int kmh) {
maxSpeed = kmh;
return this;
}