diff --git a/pom.xml b/pom.xml
index 91159e2..33da4d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.24
+ 1.2.25
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/css/style.css b/resources/css/style.css
index b34d286..95381b0 100644
--- a/resources/css/style.css
+++ b/resources/css/style.css
@@ -319,4 +319,10 @@ polyline{
svg.disconnected rect{
fill: red;
+}
+
+textarea.json {
+ width: 90%;
+ height: 33%;
+ margin-left: 5%;
}
\ No newline at end of file
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index c4e4ab5..357bb51 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -824,6 +824,6 @@ public class Plan extends BaseClass{
* @param contact
*/
public void warn(Contact contact) {
- stream(t("Warning: {}",t("Ghost train @ {}",contact)));
+ //stream(t("Warning: {}",t("Ghost train @ {}",contact)));
}
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index 2973aa7..777df7b 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -2,6 +2,7 @@ package de.srsoftware.web4rail.actions;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
@@ -13,8 +14,14 @@ import de.keawe.tools.translations.Translation;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Application;
import de.srsoftware.web4rail.BaseClass;
+import de.srsoftware.web4rail.Window;
+import de.srsoftware.web4rail.tags.Button;
+import de.srsoftware.web4rail.tags.Fieldset;
+import de.srsoftware.web4rail.tags.Form;
+import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
+import de.srsoftware.web4rail.tags.TextArea;
/**
* Base Class for all other actions
@@ -25,12 +32,39 @@ public abstract class Action extends BaseClass {
private static final HashMap actions = new HashMap();
public static final Logger LOG = LoggerFactory.getLogger(Action.class);
private static final String PREFIX = Action.class.getPackageName();
+ private static final String JSON = "json";
public Action(BaseClass parent) {
actions.put(id(), this);
parent(parent);
}
+ public static List> classes() {
+ return List.of(
+ BrakeStart.class,
+ BrakeStop.class,
+ BrakeCancel.class,
+ ConditionalAction.class,
+ DelayedAction.class,
+ DetermineTrainInBlock.class,
+ FinishRoute.class,
+ PreserveRoute.class,
+ SendCommand.class,
+ SetContextTrain.class,
+ SetDisplayText.class,
+ SetPower.class,
+ SetRelay.class,
+ SetSignal.class,
+ SetSpeed.class,
+ SetTurnout.class,
+ ShowText.class,
+ StopAllTrains.class,
+ StartStopAuto.class,
+ TriggerContact.class,
+ TurnTrain.class
+ );
+ }
+
public BaseClass context() {
BaseClass context = this;
while (context instanceof Action && isSet(context.parent())) context = context.parent();
@@ -61,33 +95,28 @@ public abstract class Action extends BaseClass {
return new JSONObject().put(TYPE, getClass().getSimpleName());
}
- public static List> classes() {
- return List.of(
- BrakeStart.class,
- BrakeStop.class,
- BrakeCancel.class,
- ConditionalAction.class,
- DelayedAction.class,
- DetermineTrainInBlock.class,
- FinishRoute.class,
- PreserveRoute.class,
- SendCommand.class,
- SetContextTrain.class,
- SetDisplayText.class,
- SetPower.class,
- SetRelay.class,
- SetSignal.class,
- SetSpeed.class,
- SetTurnout.class,
- ShowText.class,
- StopAllTrains.class,
- StartStopAuto.class,
- TriggerContact.class,
- TurnTrain.class
- );
+ protected Object jsonImportExport(HashMap params) {
+ if (params.containsKey(JSON)) {
+ String jString = params.get(JSON);
+ JSONObject json = new JSONObject(jString);
+ if (this instanceof ActionList) {
+ ((ActionList)this).clear();
+ }
+ load(json);
+ return context().properties();
+ }
+ Window win = new Window("json-import-export-"+id(), t("JSON code of {}",this));
+ Form form = new Form("json-form-"+id());
+ new Input(REALM, REALM_ACTIONS).hideIn(form);
+ new Input(ID, id()).hideIn(form);
+ new Input(ACTION, ACTION_SAVE).hideIn(form);
+ new TextArea(JSON).clazz("json").content(json().toString(4)).addTo(form).addTo(win);
+ new Button(t("update"),form).addTo(form);
+ return win;
}
-
+
public Action load(JSONObject json) {
+ super.load(json);
return this;
}
@@ -101,10 +130,12 @@ public abstract class Action extends BaseClass {
return false;
}
-/* @Override
- public Window properties() { // goes up to first ancestor, which is not an Action
- return parent().properties();
- }*/
+ @Override
+ protected Window properties(List