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) {