diff --git a/pom.xml b/pom.xml
index 6251c89..34ee0af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.22
+ 1.2.23
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 2c3ecfd..d35ca68 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -44,6 +44,7 @@ Click here to add conditions : Hier klicken, um Bedingungen hinzuzufügen
Click here to select train! : Hier klicken, um Zug auszuwählen!
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:
ConditionalAction : bedingte Aktion
@@ -156,6 +157,7 @@ Select display : Anzeige auswählen
Select from plan : Auf Plan auswählen
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
Set {} as context : {} als Kontext setzen
@@ -170,6 +172,7 @@ Set speed to {} {} : Geschwindigkeit auf {} {} setzen
Set {} to {} : {} auf {} setzen
SetPower : Strom schalten
Set speed to : Geschwindigkeit setzen
+SetTurnout : Weiche stellen
Setup actions : Vorbereitung-Aktionen
ShowText : Text anzeigen
Signals : Signale
diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java
index 4210cbc..c654a3d 100644
--- a/src/main/java/de/srsoftware/web4rail/BaseClass.java
+++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java
@@ -247,20 +247,6 @@ public abstract class BaseClass implements Constants{
public Button button(String text) {
return button(text,null);
}
-
- public String realm() {
- if (this instanceof Tile) return REALM_PLAN;
- if (this instanceof Contact) return REALM_CONTACT;
-
- if (this instanceof Car) return REALM_CAR;
- if (this instanceof Locomotive) return REALM_LOCO;
-
- if (this instanceof Action) return REALM_ACTIONS;
- if (this instanceof Condition) return REALM_CONDITION;
- if (this instanceof Route) return REALM_ROUTE;
- if (this instanceof Train) return REALM_TRAIN;
- return REALM_PLAN;
- }
public Form form(String id,List> elements) {
Form form = new Form(id);
@@ -280,14 +266,8 @@ public abstract class BaseClass implements Constants{
}
@SuppressWarnings("unchecked")
- public static T get(Id id) {
- BaseClass element = registry.get(id);
- if (isNull(element)) return null;
- try {
- return (T) element;
- } catch (ClassCastException e) {
- return null;
- }
+ public static T get(Id id) {
+ return (T) registry.get(id);
}
public Id id() {
@@ -394,6 +374,20 @@ public abstract class BaseClass implements Constants{
return win;
}
+ public String realm() {
+ if (this instanceof Tile) return REALM_PLAN;
+ if (this instanceof Contact) return REALM_CONTACT;
+
+ if (this instanceof Car) return REALM_CAR;
+ if (this instanceof Locomotive) return REALM_LOCO;
+
+ if (this instanceof Action) return REALM_ACTIONS;
+ if (this instanceof Condition) return REALM_CONDITION;
+ if (this instanceof Route) return REALM_ROUTE;
+ if (this instanceof Train) return REALM_TRAIN;
+ return REALM_PLAN;
+ }
+
private String title() {
return toString();
}
diff --git a/src/main/java/de/srsoftware/web4rail/Constants.java b/src/main/java/de/srsoftware/web4rail/Constants.java
index ef474f7..aaf714d 100644
--- a/src/main/java/de/srsoftware/web4rail/Constants.java
+++ b/src/main/java/de/srsoftware/web4rail/Constants.java
@@ -61,6 +61,7 @@ public interface Constants {
public static final String PARENT = "parent";
public static final String PORT = "port";
public static final String RELAY = "relay";
+ public static final String TURNOUT = "turnout";
public static final String TYPE = "type";
public static final Charset UTF8 = StandardCharsets.UTF_8;
}
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index c004f74..c942196 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -702,7 +702,7 @@ public class Route extends BaseClass implements Comparable{
for (Tile tile : path) {
if (ignoredPath.contains(tile)) continue;
try {
- tile.setRoute(this);
+ alreadyLocked.add(tile.setRoute(this));
} catch (IllegalStateException e) {
success = false;
break;
@@ -839,16 +839,13 @@ public class Route extends BaseClass implements Comparable{
public boolean setTurnouts() {
Turnout turnout = null;
- for (Entry entry : turnouts.entrySet()) try {
+ for (Entry entry : turnouts.entrySet()) {
turnout = entry.getKey();
Turnout.State targetVal = entry.getValue();
if (!turnout.state(targetVal).succeeded()) return false;
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
- } catch (IOException e) {
- LOG.warn("Was not able to switch turnout {}!",turnout,e);
- return false;
}
return true;
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index ce58d21..f4b080d 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -78,6 +78,7 @@ public abstract class Action extends BaseClass {
SetRelay.class,
SetSignal.class,
SetSpeed.class,
+ SetTurnout.class,
ShowText.class,
StopAllTrains.class,
StopAuto.class,
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
index 070b0cf..f36945d 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
@@ -42,7 +42,7 @@ public class SetRelay extends Action {
super.load(json);
String relayId = json.getString(RELAY);
if (isSet(relayId)) {
- relay = Relay.get(new Id(relayId));
+ relay = BaseClass.get(new Id(relayId));
state = json.getBoolean(Relay.STATE);
}
return this;
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java b/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
new file mode 100644
index 0000000..1898e4f
--- /dev/null
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
@@ -0,0 +1,90 @@
+package de.srsoftware.web4rail.actions;
+
+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.Window;
+import de.srsoftware.web4rail.tags.Fieldset;
+import de.srsoftware.web4rail.tags.Select;
+import de.srsoftware.web4rail.tiles.Turnout;
+import de.srsoftware.web4rail.tiles.Turnout.State;
+
+public class SetTurnout extends Action {
+
+ public SetTurnout(BaseClass parent) {
+ super(parent);
+ }
+
+ private Turnout turnout = null;
+ private Turnout.State state = State.STRAIGHT;
+
+ @Override
+ public boolean fire(Context context) {
+ if (isNull(turnout)) return false;
+ return turnout.state(state).succeeded();
+ }
+
+ @Override
+ public JSONObject json() {
+ JSONObject json = super.json();
+ if (isSet(turnout)) {
+ json.put(TURNOUT, turnout.id());
+ json.put(Turnout.STATE, state);
+ }
+ return json;
+ }
+
+ @Override
+ public Action load(JSONObject json) {
+ super.load(json);
+ String turnoutId = json.getString(TURNOUT);
+ if (isSet(turnoutId)) {
+ turnout = BaseClass.get(new Id(turnoutId));
+ state = Turnout.State.valueOf(json.getString(Turnout.STATE));
+ }
+ return this;
+ }
+
+ @Override
+ protected Window properties(List