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 extends Action> 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;