From 1e2edabcb12ae6219389ad633121d6c39c8f68af Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 10 Dec 2020 23:38:30 +0100 Subject: [PATCH] setting turnouts for route now handeled by the setup actions --- pom.xml | 2 +- .../translations/Application.de.translation | 1 + .../java/de/srsoftware/web4rail/Plan.java | 4 +-- .../java/de/srsoftware/web4rail/Route.java | 20 ++++--------- .../srsoftware/web4rail/actions/SetRelay.java | 7 ++--- .../web4rail/actions/SetTurnout.java | 18 +++++++++++- .../de/srsoftware/web4rail/moving/Train.java | 5 +--- .../de/srsoftware/web4rail/tiles/Contact.java | 18 +++--------- .../de/srsoftware/web4rail/tiles/Relay.java | 29 +++++++++++-------- .../de/srsoftware/web4rail/tiles/Turnout.java | 2 +- 10 files changed, 52 insertions(+), 54 deletions(-) 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