diff --git a/pom.xml b/pom.xml
index 2f86ad3..cbb403b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.40
+ 1.2.41
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 9f7187a..71d1c62 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -171,6 +171,7 @@ reverse : rückwärts
Reversed {}. : {} umgedreht.
RIGHT : rechts
Right port\: : Port für rechts
+Route properties : Routen-Eigenschaften
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
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 5c2c407..1bb2338 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -688,8 +688,8 @@ public class Plan extends BaseClass{
LOG.debug("unsibscribed {} from {}",contact,addr);
}
stream(learningContact.addr(addr).properties().toString());
- learningContact = null;
LOG.debug("learned: {} = {}",addr,learningContact);
+ learningContact = null;
return;
}
@@ -799,7 +799,7 @@ public class Plan extends BaseClass{
* @return
* @throws IOException
*/
- protected Object update(HashMap params) {
+ public Object update(HashMap params) {
super.update(params);
Tile tile = get(Id.from(params),true);
if (isSet(tile)) return tile.update(params);
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index d171039..887f8ae 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -29,6 +29,7 @@ import de.srsoftware.web4rail.actions.FinishRoute;
import de.srsoftware.web4rail.actions.PreserveRoute;
import de.srsoftware.web4rail.actions.SetSignal;
import de.srsoftware.web4rail.actions.SetSpeed;
+import de.srsoftware.web4rail.actions.SetTurnout;
import de.srsoftware.web4rail.conditions.Condition;
import de.srsoftware.web4rail.conditions.ConditionList;
import de.srsoftware.web4rail.moving.Train;
@@ -231,7 +232,6 @@ public class Route extends BaseClass {
conditions.add(condition);
}
conditions.forEach(condition -> existingRoute.conditions.removeChild(condition));
-
for (Entry entry : triggeredActions.entrySet()) {
String trigger = entry.getKey();
ActionList existingActionList = existingRoute.triggeredActions.get(trigger);
@@ -347,6 +347,11 @@ public class Route extends BaseClass {
add(lastContact.trigger(), new BrakeStop(this));
add(lastContact.trigger(), new FinishRoute(this));
}
+ for (Entry entry : turnouts.entrySet()) {
+ Turnout turnout = entry.getKey();
+ Turnout.State state = entry.getValue();
+ add(ROUTE_SETUP,new SetTurnout(this).setTurnout(turnout).setState(state));
+ }
for (Signal signal : signals) add(ROUTE_START,new SetSignal(this).set(signal).to(Signal.GO));
add(ROUTE_START,new SetSpeed(this).to(999));
return this;
@@ -827,19 +832,6 @@ public class Route extends BaseClass {
return true;
}
- public boolean setTurnouts() {
- Turnout turnout = null;
- 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) {}
- }
- return true;
- }
-
public String shortName() {
String[] parts = name().split("-");
return parts[0].trim()+"–"+parts[parts.length-1].trim();
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
index f943280..bdf5f8e 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
@@ -40,11 +40,8 @@ public class SetRelay extends Action {
@Override
public Action load(JSONObject json) {
super.load(json);
- String relayId = json.getString(RELAY);
- if (isSet(relayId)) {
- relay = BaseClass.get(new Id(relayId));
- state = json.getBoolean(Relay.STATE);
- }
+ if (json.has(RELAY)) relay = BaseClass.get(new Id(json.getString(RELAY)));
+ if (json.has(Relay.STATE)) 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
index 1898e4f..eb2b4db 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
@@ -25,7 +25,13 @@ public class SetTurnout extends Action {
@Override
public boolean fire(Context context) {
if (isNull(turnout)) return false;
- return turnout.state(state).succeeded();
+ if (!turnout.state(state).succeeded()) return false;
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return true;
}
@Override
@@ -73,6 +79,16 @@ public class SetTurnout extends Action {
super.removeChild(child);
}
+ public SetTurnout setState(State state) {
+ this.state = state;
+ return this;
+ }
+
+ public SetTurnout setTurnout(Turnout turnout) {
+ this.turnout = turnout;
+ return this;
+ }
+
public String toString() {
if (isNull(turnout)) return "["+t("click here to setup turnout")+"]";
return t("Set {} to {}",turnout,state);
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index a1c56fe..57482e0 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -573,7 +573,6 @@ public class Train extends BaseClass implements Comparable {
if (isNull(nextRoute)) return;
nextRoute.set(context);
boolean error = !nextRoute.lockIgnoring(route);
- error = error || !nextRoute.setTurnouts();
error = error || !nextRoute.fireSetupActions();
if (error) {
@@ -712,12 +711,10 @@ public class Train extends BaseClass implements Comparable {
nextRoute = null;
route.set(new Context(this).block(currentBlock).direction(direction));
} else {
- Context context = new Context(this).block(currentBlock).direction(direction);
+ Context context = new Context(this).block(currentBlock).direction(direction).train(this);
route = PathFinder.chooseRoute(context);
if (isNull(route)) return t("No free routes from {}",currentBlock);
if (!route.lock()) return t("Was not able to lock {}",route);
- if (!route.setTurnouts()) error = t("Was not able to set all turnouts!");
- context.train(this);
route.set(context);
if (isNull(error) && !route.fireSetupActions()) error = t("Was not able to fire all setup actions of route!");
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
index 6b51c80..605974e 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java
@@ -1,7 +1,6 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,7 +22,6 @@ import de.srsoftware.web4rail.tags.Select;
public class Contact extends Tile{
private static final String ADDRESS = "address";
- private static final HashMap contactsById = new HashMap();
private static final HashMap contactsByAddr = new HashMap();
private boolean state = false;
private String trigger = null;
@@ -113,10 +111,6 @@ public class Contact extends Tile{
return contactsByAddr.get(addr);
}
- public static Contact get(Id contactId) {
- return contactsById.get(contactId);
- }
-
@Override
public JSONObject json() {
JSONObject json = super.json();
@@ -125,11 +119,6 @@ public class Contact extends Tile{
return json;
}
- public static Collection list() {
- return contactsById.values();
- }
-
-
@Override
public Tile load(JSONObject json) {
if (json.has(ADDRESS)) addr(json.getInt(ADDRESS));
@@ -159,7 +148,6 @@ public class Contact extends Tile{
@Override
public Tile position(int x, int y) {
super.position(x, y);
- contactsById.put(id(), this);
return this;
}
@@ -171,12 +159,14 @@ public class Contact extends Tile{
switch (action) {
case ACTION_ANALYZE:
if (id == null) return t("Missing ID on call to {}.process()",Contact.class.getSimpleName());
- contact = contactsById.get(id);
+ contact = BaseClass.get(id);
if (contact == null) return t("No contact with id {} found!",id);
Tag propMenu = contact.properties();
propMenu.children().insertElementAt(new Tag("div").content(t("Trigger a feedback sensor to assign it with this contact!")), 1);
plan.learn(contact);
return propMenu;
+ case ACTION_UPDATE:
+ return plan.update(params);
}
return t("Unknown action: {}",action);
}
@@ -202,7 +192,7 @@ public class Contact extends Tile{
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);
+ for (Contact contact : BaseClass.listElements(Contact.class)) sortedSet.put(contact.toString(), contact);
Select select = new Select(CONTACT);
for (Entry entry : sortedSet.entrySet()) {
Contact contact = entry.getValue();
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java
index eff9165..a1a5037 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java
@@ -159,6 +159,18 @@ public class Relay extends Tile implements Device{
return 'P';
}
}
+
+ public static Select selector(Relay preselected, Collection exclude) {
+ if (isNull(exclude)) exclude = new Vector();
+ Select select = new Select(Relay.class.getSimpleName());
+ new Tag("option").attr("value","0").content(t("unset")).addTo(select);
+ for (Relay relay : BaseClass.listElements(Relay.class)) {
+ if (exclude.contains(relay)) continue;
+ Tag opt = select.addOption(relay.id(), relay);
+ if (relay == preselected) opt.attr("selected", "selected");
+ }
+ return select;
+ }
public Relay setLabel(boolean state, String tx) {
if (state) {
@@ -222,6 +234,11 @@ public class Relay extends Tile implements Device{
return name;
}
+ @Override
+ public String toString() {
+ return getClass().getSimpleName()+" ("+(isSet(name) && !name.isEmpty() ? name+")" : "")+" @("+x+", "+y+")";
+ }
+
@Override
public Tile update(HashMap params) {
if (params.containsKey(PROTOCOL)) protocol = Protocol.valueOf(params.get(PROTOCOL));
@@ -233,16 +250,4 @@ public class Relay extends Tile implements Device{
if (params.containsKey(NAME)) name = params.get(NAME);
return super.update(params);
}
-
- public static Select selector(Relay preselected, Collection exclude) {
- if (isNull(exclude)) exclude = new Vector();
- Select select = new Select(Relay.class.getSimpleName());
- new Tag("option").attr("value","0").content(t("unset")).addTo(select);
- for (Relay relay : BaseClass.listElements(Relay.class)) {
- if (exclude.contains(relay)) continue;
- Tag opt = select.addOption(relay.id(), relay);
- if (relay == preselected) opt.attr("selected", "selected");
- }
- return select;
- }
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
index f3706a0..13b5389 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
@@ -210,7 +210,7 @@ public abstract class Turnout extends Tile implements Device{
@Override
public String title() {
- return getClass().getSimpleName()+t("(Address: {}, Ports {} and {})",address,portA,portB);
+ return getClass().getSimpleName()+t("(Address: {}, Ports {} and {}) @ ({}, {})",address,portA,portB,x,y);
}
@Override