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;
+ }
}