diff --git a/pom.xml b/pom.xml
index 7376a3d..8fda7bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.10.13
+ 0.10.14
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 81c1f2d..8cce482 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -94,6 +94,7 @@ Setup actions : Aktivierungs-Aktionen
Signals : Signale
SOUTH : Süden
Started {} : {} gestartet
+StopAllTrains : Alle Züge stoppen
StopAuto : Automatikmodus abschalten
Straight port\: : Port für gerade
STRAIGHT : gerade
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index af89397..c2df283 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -670,7 +670,7 @@ public class Plan extends BaseClass{
public void sensor(int addr, boolean active) {
Contact contact = Contact.get(addr);
- LOG.debug("contact: {}",isSet(contact) ? contact : addr);
+ LOG.debug("contact: {}",isSet(contact) ? addr+" / "+contact : addr);
if (contact != null) {
contact.activate(active);
} else {
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 1da4152..9715ca2 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -361,11 +361,13 @@ public class Route extends BaseClass{
Tile lastTile = path.lastElement();
if (lastTile instanceof Contact) {
lastTile.set(null);
- train.removeFromTrace(lastTile);
+ if (isSet(train)) train.removeFromTrace(lastTile);
+ }
+ if (isSet(train)) {
+ train.set(endBlock);
+ train.heading(endDirection.inverse());
+ if (train.route == this) train.route = null;
}
- train.set(endBlock);
- train.heading(endDirection.inverse());
- if (train.route == this) train.route = null;
train = null;
triggeredContacts.clear();
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index 7af4e71..667650f 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -111,6 +111,7 @@ public abstract class Action extends BaseClass {
FinishRoute.class,
TriggerContact.class,
TurnTrain.class,
+ StopAllTrains.class,
StopAuto.class,
SetPower.class,
SetRelay.class,
diff --git a/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java b/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java
index f1bca48..1ce2fd5 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java
@@ -9,7 +9,7 @@ public class FinishRoute extends Action {
@Override
public boolean fire(Context context) throws IOException {
Route route = context.route;
- if (route != null) route.finish();
+ if (isSet(route)) route.finish();
return true;
}
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/StopAllTrains.java b/src/main/java/de/srsoftware/web4rail/actions/StopAllTrains.java
new file mode 100644
index 0000000..b73d181
--- /dev/null
+++ b/src/main/java/de/srsoftware/web4rail/actions/StopAllTrains.java
@@ -0,0 +1,14 @@
+package de.srsoftware.web4rail.actions;
+
+import java.io.IOException;
+
+import de.srsoftware.web4rail.moving.Train;
+
+public class StopAllTrains extends Action {
+
+ @Override
+ public boolean fire(Context context) throws IOException {
+ Train.list().forEach(train -> train.stopNow());
+ return true;
+ }
+}
diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java
index e33fb4f..470bfe0 100644
--- a/src/main/java/de/srsoftware/web4rail/moving/Train.java
+++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java
@@ -44,9 +44,7 @@ public class Train extends BaseClass implements Comparable {
private static final Logger LOG = LoggerFactory.getLogger(Train.class);
private static final String CAR_ID = "carId";
- public static final String HEAD = "train_head";
public static final String LOCO_ID = "locoId";
- public static final String TAIL = "train_tile";
private static final String TRACE = "trace";
private static final HashMap trains = new HashMap<>();
@@ -179,7 +177,7 @@ public class Train extends BaseClass implements Comparable {
}
}
if (!rt.isFreeFor(this)) { // keine belegten Routen wählen
- LOG.debug("{} is not free!",rt);
+// LOG.debug("{} is not free!",rt);
continue;
}
if (!rt.allowed(context)) continue;
@@ -533,7 +531,7 @@ public class Train extends BaseClass implements Comparable {
public static Select selector(Train preselected,Collection exclude) {
if (isNull(exclude)) exclude = new Vector();
- Select select = new Select(Train.HEAD);
+ Select select = new Select(Train.class.getSimpleName());
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
for (Train train : Train.list()) {
if (exclude.contains(train)) continue;
@@ -594,7 +592,7 @@ public class Train extends BaseClass implements Comparable {
return t("Started {}",this);
}
- private Object stopNow() {
+ public Object stopNow() {
quitAutopilot();
setSpeed(0);
if (isSet(route)) route.reset();
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
index 8453632..8e23dec 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java
@@ -90,8 +90,8 @@ public abstract class Block extends StretchableTile{
@Override
public Tile update(HashMap params) throws IOException {
if (params.containsKey(NAME)) name=params.get(NAME);
- if (params.containsKey(Train.HEAD)) {
- int trainId = Integer.parseInt(params.get(Train.HEAD));
+ if (params.containsKey(Train.class.getSimpleName())) {
+ int trainId = Integer.parseInt(params.get(Train.class.getSimpleName()));
if (trainId == 0) {
if (isSet(train)) train.dropTrace();
train = null;