diff --git a/pom.xml b/pom.xml
index c1b9e29..5bb06e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.7.14
+ 0.8.1
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index d809c49..bf07d6f 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -1,11 +1,9 @@
package de.srsoftware.web4rail;
-import java.io.BufferedReader;
import java.io.BufferedWriter;
-import java.io.FileReader;
+import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -15,8 +13,8 @@ import java.util.Map.Entry;
import java.util.Vector;
import org.json.JSONArray;
-import org.json.JSONException;
import org.json.JSONObject;
+import org.json.JSONTokener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,6 +69,7 @@ public class Route implements Constants{
private static final String TRIGGER = "trigger";
private static final String ACTIONS = "actions";
private static final String ACTION_LISTS = "action_lists";
+ private static final String ROUTES = "routes";
/**
* process commands from the client
@@ -355,7 +354,6 @@ public class Route implements Constants{
if (json.has(SIGNALS)) {
for (Object signalId : json.getJSONArray(SIGNALS)) addSignal((Signal) plan.get((String) signalId, false));
}
- if (json.has(ACTIONS)) loadActions(json.getJSONArray(ACTIONS));
if (json.has(ACTION_LISTS)) loadActions(json.getJSONArray(ACTION_LISTS));
return plan.registerRoute(this);
}
@@ -364,30 +362,21 @@ public class Route implements Constants{
for (int i=0; i routes, String filename) throws IOException {
BufferedWriter file = new BufferedWriter(new FileWriter(filename));
- file.write("[\n");
+ file.write("{\""+ROUTES+"\":[\n");
int count = 0;
for (Route route : routes) {
file.write(route.json());
if (++count < routes.size()) file.write(",");
file.write("\n");
}
- file.write("]");
+ file.write("]}");
file.close();
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index aea56e0..b3ded0d 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -1,7 +1,6 @@
package de.srsoftware.web4rail.actions;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
@@ -57,17 +56,21 @@ public abstract class Action implements Constants {
return new Tag("span").content(toString()+NBSP).attr("onclick", action);
}
- public static Action load(JSONObject json) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException {
+ public static Action load(JSONObject json) {
String clazz = json.getString(TYPE);
switch (clazz) {
case "ActivateRoute":
return new ActivateRoute();
+ case "ConditionalAction":
+ return ConditionalAction.load(json);
case "FinishRoute":
return new FinishRoute();
+ case "PowerOff":
+ return new PowerOff();
case "SetSignalsToStop":
return new SetSignalsToStop();
- case "SpeedReduction":
- return new SetSpeed(json.getInt(SetSpeed.MAX_SPEED));
+ case "SetSpeed":
+ return SetSpeed.load(json);
case "TurnTrain":
return new TurnTrain();
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
index f32083b..7436e8e 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
@@ -7,6 +7,7 @@ import java.util.Map;
import java.util.Vector;
import org.json.JSONArray;
+import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -176,6 +177,17 @@ public class ActionList extends Vector implements Constants{
for (Action action : this) result.put(action.json());
return result;
}
+
+ public static ActionList load(JSONArray list) {
+ ActionList actionList = new ActionList();
+ for (Object o : list) {
+ if (o instanceof JSONObject) {
+ Action action = Action.load((JSONObject) o);
+ if (action != null) actionList.add(action);
+ }
+ }
+ return actionList;
+ }
public boolean moveUp(int actionId) {
for (int i=1; i params) {
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
index 433227d..b6be90b 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
@@ -37,6 +37,11 @@ public class SetSpeed extends Action{
return json;
}
+ public static SetSpeed load(JSONObject json) {
+ int s = json.getInt(MAX_SPEED);
+ return new SetSpeed(s);
+ }
+
@Override
public Window properties(HashMap params) {
Window win = super.properties(params);
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
index a1410cd..f6c67b7 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
@@ -52,6 +52,15 @@ public abstract class Condition implements Constants {
return new JSONObject().put(TYPE, getClass().getSimpleName());
}
+ public static Condition load(JSONObject json) {
+ String type = json.getString(TYPE);
+ switch (type) {
+ case "TrainSelect":
+ return TrainSelect.load(json);
+ }
+ return null;
+ }
+
public Tag link(String tagClass,String context) {
String json = new JSONObject(Map.of(REALM,REALM_CONDITION,ID,id,ACTION,ACTION_PROPS,CONTEXT,context)).toString().replace("\"", "'");
return new Tag(tagClass).clazz("link").attr("onclick","request("+json+")").content(toString());
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
index 654921c..df552fc 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
@@ -27,6 +27,11 @@ public class TrainSelect extends Condition {
return super.json().put(REALM_TRAIN, train.id);
}
+ public static TrainSelect load(JSONObject json) {
+ int trainId = json.getInt(REALM_TRAIN);
+ return new TrainSelect().train(Train.get(trainId));
+ }
+
@Override
protected Window properties(HashMap params) {
Window win = new Window("condition-props", t("Properties of {}",getClass().getSimpleName()));
@@ -46,6 +51,12 @@ public class TrainSelect extends Condition {
if (train == null) return super.toString();
return t("Train = {}",train);
}
+
+ private TrainSelect train(Train train) {
+ this.train = train;
+ return this;
+ }
+
@Override
protected Object update(HashMap params) {