diff --git a/pom.xml b/pom.xml
index ed6d913..c1b9e29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.7.13
+ 0.7.14
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java
index a4836a5..6496e54 100644
--- a/src/main/java/de/srsoftware/web4rail/Application.java
+++ b/src/main/java/de/srsoftware/web4rail/Application.java
@@ -122,7 +122,7 @@ public class Application implements Constants{
case REALM_PLAN:
return plan.action(params);
case REALM_ROUTE:
- return plan.routeAction(params);
+ return Route.action(params,plan);
case REALM_TRAIN:
return Train.action(params,plan);
}
diff --git a/src/main/java/de/srsoftware/web4rail/Constants.java b/src/main/java/de/srsoftware/web4rail/Constants.java
index 9b36195..e7607c9 100644
--- a/src/main/java/de/srsoftware/web4rail/Constants.java
+++ b/src/main/java/de/srsoftware/web4rail/Constants.java
@@ -3,8 +3,6 @@ package de.srsoftware.web4rail;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import de.keawe.tools.translations.Translation;
-
/**
* this interface collects constants inherited to other classes of this application
*
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 4275fda..d5cfe82 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -606,19 +606,6 @@ public class Plan implements Constants{
return routes.get(routeId);
}
- Object routeAction(HashMap params) throws IOException {
- Route route = route(Integer.parseInt(params.get(ID)));
- if (route == null) return t("Unknown route: {}",params.get(ID));
- switch (params.get(ACTION)) {
- case ACTION_PROPS:
- return route.properties();
- case ACTION_UPDATE:
- route.update(params);
- return html();
- }
- return t("Unknown action: {}",params.get(ACTION));
- }
-
/**
* saves the plan to a set of files, along with its cars, tiles, trains, routes and control unit settings
* @param name
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index c64d9c5..5a2b668 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -29,7 +29,7 @@ import de.srsoftware.web4rail.actions.ActionList;
import de.srsoftware.web4rail.actions.ActivateRoute;
import de.srsoftware.web4rail.actions.FinishRoute;
import de.srsoftware.web4rail.actions.SetSignalsToStop;
-import de.srsoftware.web4rail.actions.SpeedReduction;
+import de.srsoftware.web4rail.actions.SetSpeed;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
@@ -41,6 +41,12 @@ import de.srsoftware.web4rail.tiles.Tile;
import de.srsoftware.web4rail.tiles.Turnout;
import de.srsoftware.web4rail.tiles.Turnout.State;
+/**
+ * A route is a vector of tiles that leads from one block to another.
+ *
+ * @author Stephan Richter, SRSoftware
+ *
+ */
public class Route implements Constants{
private static final Logger LOG = LoggerFactory.getLogger(Route.class);
static final String NAME = "name";
@@ -64,6 +70,26 @@ 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";
+
+ /**
+ * process commands from the client
+ * @param params
+ * @return
+ * @throws IOException
+ */
+ public static Object action(HashMap params,Plan plan) throws IOException {
+ Route route = plan.route(Integer.parseInt(params.get(ID)));
+ if (route == null) return t("Unknown route: {}",params.get(ID));
+ switch (params.get(ACTION)) {
+ case ACTION_PROPS:
+ return route.properties();
+ case ACTION_UPDATE:
+ route.update(params);
+ return plan.html();
+ }
+ return t("Unknown action: {}",params.get(ACTION));
+ }
/**
* Route wurde von Zug betreten
@@ -74,6 +100,12 @@ public class Route implements Constants{
for (Tile tile : path) tile.train(train);
}
+ /**
+ * adds a tile to the route
+ * @param tile
+ * @param direrction
+ * @return
+ */
public Tile add(Tile tile, Direction direrction) {
if (tile instanceof Shadow) tile = ((Shadow)tile).overlay();
if (tile instanceof Block) {
@@ -90,7 +122,12 @@ public class Route implements Constants{
return tile;
}
- public void addAction(String trigger, Action action) {
+ /**
+ * adds a action to the action list of the given trigger
+ * @param trigger
+ * @param action
+ */
+ public void add(String trigger, Action action) {
ActionList actions = triggers.get(trigger);
if (actions == null) {
actions = new ActionList();
@@ -180,15 +217,15 @@ public class Route implements Constants{
public void complete() {
if (contacts.size()>1) { // mindestens 2 Kontakte: erster Kontakt aktiviert Block, vorletzter Kontakt leitet Bremsung ein
- addAction(contacts.firstElement().trigger(),new ActivateRoute());
+ add(contacts.firstElement().trigger(),new ActivateRoute());
Contact nextToLastContact = contacts.get(contacts.size()-2);
- addAction(nextToLastContact.trigger(),new SpeedReduction(30));
- addAction(nextToLastContact.trigger(),new SetSignalsToStop());
+ add(nextToLastContact.trigger(),new SetSpeed(30));
+ add(nextToLastContact.trigger(),new SetSignalsToStop());
}
if (!contacts.isEmpty()) {
Contact lastContact = contacts.lastElement();
- addAction(lastContact.trigger(), new SpeedReduction(0));
- addAction(lastContact.trigger(), new FinishRoute());
+ add(lastContact.trigger(), new SetSpeed(0));
+ add(lastContact.trigger(), new FinishRoute());
}
}
@@ -248,6 +285,10 @@ public class Route implements Constants{
return id;
}
+ /**
+ * creates a json representation of this route
+ * @return
+ */
public String json() {
JSONObject json = new JSONObject();
@@ -273,17 +314,13 @@ public class Route implements Constants{
for (Entry entry : triggers.entrySet()) {
JSONObject trigger = new JSONObject();
trigger.put(TRIGGER, entry.getKey());
-
- JSONArray jActions = new JSONArray();
- for (Action action : entry.getValue()) {
- jActions.put(action.json());
- }
- trigger.put(ACTIONS, jActions);
+ ActionList actionList = entry.getValue();
+ trigger.put(ACTIONS, actionList.json());
jTriggers.put(trigger);
}
- if (!jTriggers.isEmpty()) json.put(ACTIONS, jTriggers);
+ if (!jTriggers.isEmpty()) json.put(ACTION_LISTS, jTriggers);
String name = name();
if (name != null) json.put(NAME, name);
@@ -319,6 +356,7 @@ public class Route implements Constants{
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);
}
@@ -326,12 +364,12 @@ public class Route implements Constants{
for (int i=0; i routes, String filename) throws IOException {
BufferedWriter file = new BufferedWriter(new FileWriter(filename));
- for (Route route : routes) file.write(route.json()+"\n");
+ file.write("[\n");
+ int count = 0;
+ for (Route route : routes) {
+ file.write(route.json());
+ if (++count < routes.size()) file.write(",");
+ file.write("\n");
+ }
+ 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 e2d3cd7..aea56e0 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -48,9 +48,7 @@ public abstract class Action implements Constants {
}
public JSONObject json() {
- JSONObject json = new JSONObject();
- json.put(TYPE, getClass().getSimpleName());
- return json;
+ return new JSONObject().put(TYPE, getClass().getSimpleName());
}
protected Tag link(int actionId, String context) {
@@ -69,7 +67,7 @@ public abstract class Action implements Constants {
case "SetSignalsToStop":
return new SetSignalsToStop();
case "SpeedReduction":
- return new SpeedReduction(json.getInt(SpeedReduction.MAX_SPEED));
+ return new SetSpeed(json.getInt(SetSpeed.MAX_SPEED));
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 67fb066..f32083b 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.Map;
import java.util.Vector;
+import org.json.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,7 +58,7 @@ public class ActionList extends Vector implements Constants{
Select select = new Select(TYPE);
List> classes = List.of(
ConditionalAction.class,
- SpeedReduction.class,
+ SetSpeed.class,
SetSignalsToStop.class,
FinishRoute.class,
TurnTrain.class,
@@ -85,8 +86,8 @@ public class ActionList extends Vector implements Constants{
case "SetSignalsToStop":
add(new SetSignalsToStop());
break;
- case "SpeedReduction":
- add(new SpeedReduction(0));
+ case "SetSpeed":
+ add(new SetSpeed(0));
break;
case "TurnTrain":
add(new TurnTrain());
@@ -170,6 +171,12 @@ public class ActionList extends Vector implements Constants{
return id;
}
+ public JSONArray json() {
+ JSONArray result = new JSONArray();
+ for (Action action : this) result.put(action.json());
+ return result;
+ }
+
public boolean moveUp(int actionId) {
for (int i=1; i conditions = new Vector();
private ActionList actions = new ActionList();
@@ -26,6 +31,10 @@ public class ConditionalAction extends Action {
return fieldset;
}
+ public ActionList children() {
+ return actions;
+ }
+
private Tag conditionForm(HashMap params) {
Fieldset fieldset = new Fieldset(t("Conditions"));
@@ -64,6 +73,16 @@ public class ConditionalAction extends Action {
}
return true;
}
+
+ @Override
+ public JSONObject json() {
+ JSONObject json = super.json();
+ JSONArray conditions = new JSONArray();
+ for (Condition condition : this.conditions) conditions.put(condition.json());
+ json.put(CONDITIONS, conditions);
+ json.put(ACTIONS, actions.json());
+ return json;
+ }
@Override
public Window properties(HashMap params) {
@@ -99,8 +118,4 @@ public class ConditionalAction extends Action {
}
return super.update(params);
}
-
- public ActionList children() {
- return actions;
- }
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
similarity index 96%
rename from src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java
rename to src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
index 8c2ba3c..500c828 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
@@ -11,12 +11,12 @@ import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
-public class SpeedReduction extends Action{
+public class SetSpeed extends Action{
public static final String MAX_SPEED = "max_speed";
private int maxSpeed = -1;
- public SpeedReduction(int kmh) {
+ public SetSpeed(int kmh) {
super();
maxSpeed = kmh;
}
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
index 87c022a..a1410cd 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
@@ -48,6 +48,10 @@ public abstract class Condition implements Constants {
return t("Unknown action: {}",action);
}
+ public JSONObject json() {
+ return new JSONObject().put(TYPE, getClass().getSimpleName());
+ }
+
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 3079b4e..8a018cf 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
@@ -2,6 +2,8 @@ package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
+import org.json.JSONObject;
+
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.Action.Context;
import de.srsoftware.web4rail.moving.Train;
@@ -20,6 +22,11 @@ public class TrainSelect extends Condition {
return context.train == train;
}
+ @Override
+ public JSONObject json() {
+ return super.json().put(REALM_TRAIN, train.id);
+ }
+
@Override
protected Window properties(HashMap params) {
Window win = new Window("condition-props", t("Properties of {}",getClass().getSimpleName()));