diff --git a/pom.xml b/pom.xml index 8098245..b84a3da 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.2.28 + 1.2.29 Web4Rail jar Java Model Railway Control diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index 87e9311..b12d436 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -49,7 +49,7 @@ click here to setup contact : Hier klicken, um Kontakt auszuwählen click here to setup relay : Hier klicken, um Relais einzurichten click here to setup turnout : Hier klicken, um Weiche einzurichten Click on a name to edit the entry. : Klicke auf einen Namen, um einen Eintrag zu bearbeiten. -Command to send to control unit\: : Kommando, welches zur Zentrale gesendet werden soll: +Command to send : Kommando, welches gesendet werden soll ConditionalAction : bedingte Aktion Conditions : Bedingungen Condition type\: : Bedingungs-Typ: @@ -134,6 +134,7 @@ On : An One of : eine von One way : Richtung Online Documentation : Online-Dokumentation +Operating System : Betriebssystem or : oder OrCondition : Oder-Bedingung other train properties : andere Zug-Eigenschaften @@ -155,6 +156,7 @@ Right port\: : Port für rechts Routes using this tile : Fahrstraßen, die diesen Abschnitt verwenden Route will only be available, if all conditions are fulfilled. : Route ist nur verfügbar, wenn alle Bedingungen erfüllt sind. Save : speichern +SavePlan : Plan speichern Select block : Block auswählen Select contact\: : Kotakt auswählen: Select display : Anzeige auswählen @@ -163,7 +165,8 @@ Select relay\: : Relais auswählen: Select train : Zug auswählen Select turnout : Weiche wählen SendCommand : Kommando senden -Send command "{}" to control unit : Kommando „{}“ an Zentrale senden +Send command "{}" to {} : Kommando „{}“ an {} senden +Send command to : Kommando senden an Set {} as context : {} als Kontext setzen SetContextTrain : Zug für Folgeaktionen festlegen SetDisplayText : Anzeige-Text setzen @@ -184,6 +187,8 @@ Simulating movement of {}... : Simuliere Fahrt von {}... Slower (10 {}) : 10 {} langsamer SOUTH : Süden Speed unit : Geschwindigkeits-Einheit +SRCP : SRCP-Dienst +SRCP daemon : SRCP-Dienst Start actions : Start-Aktionen Stock ID : Inventarnummer Stop settings : Halte-Einstellungen @@ -199,6 +204,7 @@ Straight port\: : Port für gerade STRAIGHT : gerade Switch power off : Strom ausschalten Switch power on : Strom anschalten +SYSTEM : Betriebssystem Tag : Markierung Tags : Markierungen Text to display on clients\: : Text, welcher auf den Clients angezeigt werden soll: diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index 7eea4ff..84b36a1 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -639,6 +639,10 @@ public class Plan extends BaseClass{ super.removeChild(child); } + public void save() throws IOException { + plan.stream(plan.saveTo("default")); + } + /** * 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/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java index 3c57f49..981b102 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Action.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java @@ -49,6 +49,7 @@ public abstract class Action extends BaseClass { DetermineTrainInBlock.class, FinishRoute.class, PreserveRoute.class, + SavePlan.class, SendCommand.class, SetContextTrain.class, SetDisplayText.class, diff --git a/src/main/java/de/srsoftware/web4rail/actions/SavePlan.java b/src/main/java/de/srsoftware/web4rail/actions/SavePlan.java new file mode 100644 index 0000000..c865ce0 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/actions/SavePlan.java @@ -0,0 +1,22 @@ +package de.srsoftware.web4rail.actions; + +import java.io.IOException; + +import de.srsoftware.web4rail.BaseClass; + +public class SavePlan extends Action{ + + public SavePlan(BaseClass parent) { + super(parent); + } + + @Override + public boolean fire(Context context) { + try { + plan.save(); + } catch (IOException e) { + return false; + } + return true; + } +} diff --git a/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java b/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java index 260b927..9944db7 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java @@ -1,68 +1,96 @@ package de.srsoftware.web4rail.actions; +import java.io.IOException; import java.util.HashMap; import java.util.List; import org.json.JSONObject; +import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Command; import de.srsoftware.web4rail.Window; import de.srsoftware.web4rail.tags.Fieldset; import de.srsoftware.web4rail.tags.Input; +import de.srsoftware.web4rail.tags.Radio; public class SendCommand extends Action{ + enum Target{ + SYSTEM, SRCP + } + public SendCommand(BaseClass parent) { super(parent); } public static final String COMMAND = "command"; + private static final String TARGET = "target"; private String command = "SET 1 POWER OFF"; + private Target target = Target.SRCP; @Override public boolean fire(Context context) { - plan.queue(new Command(command) { + switch (target) { + case SRCP: + plan.queue(new Command(command) { - @Override - public void onResponse(Reply reply) { - super.onResponse(reply); - plan.stream(reply.message()); - } - }); + @Override + public void onResponse(Reply reply) { + super.onResponse(reply); + plan.stream(reply.message()); + } + }); - return true; + return true; + case SYSTEM: + try { + Runtime.getRuntime().exec(command); + return true; + } catch (IOException e) { + return false; + } + } + return false; } @Override public JSONObject json() { JSONObject json = super.json(); json.put(COMMAND, command); + json.put(TARGET, target.toString()); return json; } @Override public Action load(JSONObject json) { super.load(json); - command = json.getString(COMMAND); + if (json.has(COMMAND)) command = json.getString(COMMAND); + if (json.has(TARGET)) target = Target.valueOf(json.getString(TARGET)); return this; } @Override protected Window properties(List
preForm, FormInput formInputs, List
postForm) { - formInputs.add(t("Command to send to control unit"),new Input(COMMAND, command)); + formInputs.add(t("Command to send"),new Input(COMMAND, command)); + Tag div = new Tag("div"); + new Radio(TARGET, Target.SYSTEM, t("Operating System"), target == Target.SYSTEM).addTo(div); + new Radio(TARGET, Target.SRCP, t("SRCP daemon"), target == Target.SRCP).addTo(div); + formInputs.add(t("Send command to"),div); return super.properties(preForm, formInputs, postForm); } @Override public String toString() { - return t("Send command \"{}\" to control unit",command); + return t("Send command \"{}\" to {}",command,t(target.toString())); } @Override protected Object update(HashMap params) { LOG.debug("update: {}",params); command = params.get(COMMAND); + String t = params.get(TARGET); + if (isSet(t)) target = Target.valueOf(t); return properties(); } }