diff --git a/pom.xml b/pom.xml index cadcf4f..e19af7c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.7.11 + 0.7.12 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/ControlUnit.java b/src/main/java/de/srsoftware/web4rail/ControlUnit.java index 486220b..e530f5b 100644 --- a/src/main/java/de/srsoftware/web4rail/ControlUnit.java +++ b/src/main/java/de/srsoftware/web4rail/ControlUnit.java @@ -122,7 +122,7 @@ public class ControlUnit extends Thread implements Constants{ restart(); return t("Control unit (re)started."); case ACTION_EMERGENCY: - power = true; + return emergency(); case ACTION_POWER: return togglePower(); case ACTION_PROPS: @@ -134,6 +134,11 @@ public class ControlUnit extends Thread implements Constants{ return t("Unknown action: {}",params.get(ACTION)); } + public Object emergency() { + power = true; + return togglePower(); + } + public Object properties() { Window win = new Window("cu-props", t("Properties of the control unit")); Form form = new Form(); diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java index a0ead83..e2d3cd7 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Action.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java @@ -29,7 +29,7 @@ public abstract class Action implements Constants { public Route route = null; public Train train = null; - public Context(Contact c) { + public Context(Contact c) { contact = c; route = contact.route(); if (route == null) return; @@ -56,7 +56,7 @@ public abstract class Action implements Constants { protected Tag link(int actionId, String context) { Map props = Map.of(REALM,REALM_ACTIONS,ID,actionId+"/"+id,ACTION,ACTION_PROPS,CONTEXT,context); String action = "request("+(new JSONObject(props).toString().replace("\"", "'"))+")"; - return new Tag("span").content(toString()).attr("onclick", action); + return new Tag("span").content(toString()+NBSP).attr("onclick", action); } public static Action load(JSONObject json) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException { diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java index ea11ea3..67fb066 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java @@ -56,11 +56,14 @@ public class ActionList extends Vector implements Constants{ new Input(CONTEXT,context).hideIn(typeForm); Select select = new Select(TYPE); List> classes = List.of( + ConditionalAction.class, SpeedReduction.class, SetSignalsToStop.class, FinishRoute.class, TurnTrain.class, - ConditionalAction.class); + StopAuto.class, + PowerOff.class + ); for (Class clazz : classes) select.addOption(clazz.getSimpleName()); select.addTo(new Label("Action type:")).addTo(typeForm); return new Button(t("Create action"),"return submitForm('"+formId+"');").addTo(typeForm).addTo(win); @@ -87,7 +90,13 @@ public class ActionList extends Vector implements Constants{ break; case "TurnTrain": add(new TurnTrain()); - break; + break; + case "StopAuto": + add(new StopAuto()); + break; + case "PowerOff": + add(new PowerOff()); + break; default: actionTypeForm(win,context); new Tag("span").content(t("Unknown action type: {}",type)).addTo(win); @@ -117,6 +126,10 @@ public class ActionList extends Vector implements Constants{ } props.put(ACTION, ACTION_DROP); new Button("-",props).addTo(act); + if (action instanceof ConditionalAction) { + ConditionalAction ca = (ConditionalAction) action; + ca.children().addTo(act, context); + } act.addTo(ul); first = false; } diff --git a/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java b/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java index 520ac46..f154f6b 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java @@ -19,9 +19,15 @@ public class ConditionalAction extends Action { private Vector conditions = new Vector(); private ActionList actions = new ActionList(); - + + private Tag actionsForm(HashMap params) { + Fieldset fieldset = new Fieldset(t("Actions")); + actions.addTo(fieldset, params.get(CONTEXT)); + return fieldset; + } + private Tag conditionForm(HashMap params) { - Fieldset fieldset = new Fieldset("Conditions"); + Fieldset fieldset = new Fieldset(t("Conditions")); if (!conditions.isEmpty()) { Tag list = new Tag("ul"); @@ -63,6 +69,7 @@ public class ConditionalAction extends Action { public Window properties(HashMap params) { Window win = super.properties(params); conditionForm(params).addTo(win); + actionsForm(params).addTo(win); return win; } @@ -92,4 +99,8 @@ public class ConditionalAction extends Action { } return super.update(params); } + + public ActionList children() { + return actions; + } } diff --git a/src/main/java/de/srsoftware/web4rail/actions/PowerOff.java b/src/main/java/de/srsoftware/web4rail/actions/PowerOff.java new file mode 100644 index 0000000..8a67273 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/actions/PowerOff.java @@ -0,0 +1,10 @@ +package de.srsoftware.web4rail.actions; + +public class PowerOff extends Action{ + + @Override + public boolean fire(Context context) { + context.contact.plan().controlUnit().emergency(); + return false; + } +} diff --git a/src/main/java/de/srsoftware/web4rail/actions/StopAuto.java b/src/main/java/de/srsoftware/web4rail/actions/StopAuto.java new file mode 100644 index 0000000..b9eab04 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/actions/StopAuto.java @@ -0,0 +1,16 @@ +package de.srsoftware.web4rail.actions; + +import java.io.IOException; + +public class StopAuto extends Action { + + @Override + public boolean fire(Context context) throws IOException { + if (context.train != null) { + context.train.quitAutopilot(); + return true; + } + return false; + } + +} diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java index 502d4bb..3079b4e 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java @@ -17,8 +17,7 @@ public class TrainSelect extends Condition { @Override public boolean fulfilledBy(Context context) { - // TODO Auto-generated method stub - return false; + return context.train == train; } @Override diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 3d20b29..299fa52 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -367,7 +367,7 @@ public class Train implements Constants { return window; } - private Object quitAutopilot() { + public Object quitAutopilot() { if (autopilot != null) { autopilot.stop = true; autopilot = null;