diff --git a/pom.xml b/pom.xml index fc2ca75..dac6610 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.10.5 + 0.10.6 Web4Rail jar Java Model Railway Control diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index 21d510f..bd465c9 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -20,6 +20,8 @@ Condition type\: : Bedingungs-Typ: Control unit : Zentrale Current location\: : Aktueller Ort: Actions and contacts : Aktionen und Kontakte +click here to setup contact : Hier klicken, um Kontakt auszuwählen +click here to setup relay : Hier klicken, um Relay einzurichten Create action : Aktion erzeugen DelayedAction : verzögerte Aktion delete : entfernen @@ -71,9 +73,12 @@ Routes using this tile\: : Fahrstraßen, die diesen Abschnitt verwenden: Route will only be available to trains fulfilling all conditions. : Route ist nur für Züge verfügbar, die alle Bedingungen erfüllen. save : speichern Save plan : Plan speichern +Select contact\: : Kotakt auswählen: +Select relay\: : Relais auswählen: SetRelay : Relais schalten SetSignalsToStop : Signale auf Halt stellen SetSpeed : Geschwindigkeit ändern +Set speed to : Geschwindigkeit setzen Setup actions : Aktivierungs-Aktionen Signals : Signale SOUTH : Süden @@ -95,6 +100,7 @@ Trains\: : Züge: TrainHasTag : Zug mit Tag TrainLength : Zuglänge TrainSelect : Zug-Auswahl +TriggerContact : Kontakt auslösen Turn allowed : Wenden erlaubt Turnouts : Weichen TurnTrain : Fahrtrichtung umkehren diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java index 302cc18..7eb61b6 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Action.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java @@ -3,7 +3,6 @@ package de.srsoftware.web4rail.actions; import java.io.IOException; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; @@ -102,6 +101,7 @@ public abstract class Action extends BaseClass { SetSpeed.class, SetSignalsToStop.class, FinishRoute.class, + TriggerContact.class, TurnTrain.class, StopAuto.class, PowerOff.class, diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java index 4eff2ab..ffaf302 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java @@ -32,7 +32,7 @@ public class SetRelay extends Action { @Override public JSONObject json() { JSONObject json = super.json(); - if (relay != null) { + if (isSet(relay)) { json.put(RELAY, relay.id()); json.put(Relay.STATE, state); } @@ -43,7 +43,7 @@ public class SetRelay extends Action { public Action load(JSONObject json) { super.load(json); String relayId = json.getString(RELAY); - if (relayId != null) { + if (isSet(relayId)) { relay = Relay.get(relayId); state = json.getBoolean(Relay.STATE); } @@ -67,8 +67,8 @@ public class SetRelay extends Action { select.addTo(new Label(t("Select relay:")+NBSP)).addTo(form); Select state = new Select(Relay.STATE); - state.addOption(true,relay == null?Relay.DEFAULT_LABEL_A:relay.stateLabelA); - state.addOption(false,relay == null?Relay.DEFAULT_LABEL_B:relay.stateLabelB); + state.addOption(true,isNull(relay)?Relay.DEFAULT_LABEL_A:relay.stateLabelA); + state.addOption(false,isNull(relay)?Relay.DEFAULT_LABEL_B:relay.stateLabelB); state.addTo(new Label(t("Select state:")+NBSP)).addTo(form); @@ -77,7 +77,7 @@ public class SetRelay extends Action { } public String toString() { - if (relay == null) return t("[click here to setup relay]"); + if (isNull(relay)) return "["+t("click here to setup relay")+"]"; return t("Set "+relay+" to "+(state?relay.stateLabelA:relay.stateLabelB)); }; @@ -87,7 +87,7 @@ public class SetRelay extends Action { String relayId = params.get(RELAY); relay = Relay.get(relayId); String st = params.get(Relay.STATE); - if (st != null) state = st.equals("true"); + if (isSet(st)) state = st.equals("true"); return properties(params); } } diff --git a/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java new file mode 100644 index 0000000..da53f3d --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java @@ -0,0 +1,72 @@ +package de.srsoftware.web4rail.actions; + +import java.io.IOException; +import java.util.HashMap; + +import org.json.JSONObject; + +import de.srsoftware.web4rail.Window; +import de.srsoftware.web4rail.tags.Button; +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.tiles.Contact; + +public class TriggerContact extends Action { + + private Contact contact = null; + + @Override + public boolean fire(Context context) throws IOException { + if (isSet(contact)) { + System.err.println("triggering "+contact); + contact.trigger(200); + } + return false; + } + + @Override + public JSONObject json() { + JSONObject json = super.json(); + if (isSet(contact)) json.put(CONTACT, contact.id()); + return json; + } + + @Override + public Action load(JSONObject json) { + super.load(json); + String contactId = json.getString(CONTACT); + if (isSet(contactId)) contact = Contact.get(contactId); + return this; + } + + @Override + public Window properties(HashMap params) { + Window win = super.properties(params); + Form form = new Form("action-prop-form-"+id); + new Input(REALM,REALM_ACTIONS).hideIn(form); + new Input(ID,params.get(ID)).hideIn(form); + new Input(ACTION,ACTION_UPDATE).hideIn(form); + new Input(CONTEXT,params.get(CONTEXT)).hideIn(form); + + Select select = Contact.selector(contact); + select.addTo(new Label(t("Select contact:")+NBSP)).addTo(form); + + new Button(t("Apply"),form).addTo(form).addTo(win); + return win; + } + + public String toString() { + return isSet(contact) ? t("Trigger {}",contact) : "["+t("click here to setup contact")+"]"; + }; + + @Override + protected Object update(HashMap params) { + LOG.debug("update: {}",params); + String contactId = params.get(CONTACT); + if (isSet(contactId)) contact = Contact.get(contactId); + return properties(params); + } + +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java index 260d948..c4ec0be 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java @@ -1,8 +1,11 @@ package de.srsoftware.web4rail.tiles; import java.io.IOException; +import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; import org.json.JSONObject; @@ -11,6 +14,7 @@ import de.srsoftware.web4rail.tags.Button; import de.srsoftware.web4rail.tags.Form; import de.srsoftware.web4rail.tags.Input; import de.srsoftware.web4rail.tags.Label; +import de.srsoftware.web4rail.tags.Select; public abstract class Contact extends Tile{ @@ -65,6 +69,10 @@ public abstract class Contact extends Tile{ return contactsByAddr.get(addr); } + public static Contact get(String contactId) { + return contactsById.get(contactId); + } + @Override public JSONObject json() { JSONObject json = super.json(); @@ -72,6 +80,11 @@ public abstract class Contact extends Tile{ return json; } + public static Collection list() { + return contactsById.values(); + } + + @Override protected Tile load(JSONObject json) throws IOException { super.load(json); @@ -134,5 +147,15 @@ public abstract class Contact extends Tile{ return super.update(params); } - + public static Select selector(Contact preselect) { + TreeMap sortedSet = new TreeMap(); // Map from Name to Contact + for (Contact contact : contactsById.values()) sortedSet.put(contact.toString(), contact); + Select select = new Select(CONTACT); + for (Entry entry : sortedSet.entrySet()) { + Contact contact = entry.getValue(); + Tag option = select.addOption(contact.id(),contact); + if (contact == preselect) option.attr("selected", "selected"); + } + return select; + } }