From f0d3ad094fe48e7ecaaa7cc608eaea33e8c12622 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 29 Jun 2021 12:54:18 +0200 Subject: [PATCH] bugfix: implemented delayed loading of contact data in TriggerdContact --- pom.xml | 2 +- .../de/srsoftware/web4rail/actions/TriggerContact.java | 10 +++++++++- src/main/java/de/srsoftware/web4rail/moving/Train.java | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index e0d5456..74618a4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.5.10 + 1.5.11 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java index 339da91..f093bc8 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java +++ b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java @@ -6,6 +6,7 @@ import java.util.Map; import org.json.JSONObject; import de.srsoftware.web4rail.BaseClass; +import de.srsoftware.web4rail.LoadCallback; import de.srsoftware.web4rail.Params; import de.srsoftware.web4rail.tags.Fieldset; import de.srsoftware.web4rail.tags.Window; @@ -42,7 +43,14 @@ public class TriggerContact extends Action { public Action load(JSONObject json) { super.load(json); Id contactId = Id.from(json,CONTACT); - if (isSet(contactId)) contact = Contact.get(contactId); + if (isSet(contactId)) new LoadCallback() { + + @Override + public void afterLoad() { + contact = Contact.get(contactId); + } + }; + return this; } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index abe392f..0e907e4 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -1171,7 +1171,9 @@ public class Train extends BaseClass implements Comparable { } else { // behind train if (Route.freeBehindTrain) { LOG.debug("{} is behind train and will be freed in the next step",tile); - trace.add(tile); // old trace will be cleared afterwards + if (tile != route.endBlock()) { // if train is shorter than contact after endblock, the endblock would be cleared… + trace.add(tile); // old trace will be cleared afterwards + } } else { LOG.debug("{} is behind train and will be reset to \"locked\" state",tile); tile.lockFor(context,true);