diff --git a/pom.xml b/pom.xml
index 22b5f7c..c844a15 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.2.15
+ 1.2.16
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java
index 21078cb..a3eba5b 100644
--- a/src/main/java/de/srsoftware/web4rail/BaseClass.java
+++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java
@@ -387,6 +387,7 @@ public abstract class BaseClass implements Constants{
}
public BaseClass remove() {
+ LOG.debug("Called remove on {} ({})",id(),this);
if (isSet(parent)) parent.removeChild(this);
return registry.remove(id());
}
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 8d1b766..4b8cc20 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -249,18 +249,23 @@ public class Plan extends BaseClass{
* @return a string giving information how many routes have been found
*/
private String analyze() {
- Vector routes = new Vector();
+ List oldRoutes = BaseClass.listElements(Route.class);
+ Vector newRoutes = new Vector();
for (Block block : BaseClass.listElements(Block.class)) {
if (block.name.equals("Huhu")) {
System.err.println("Here we go!");
}
for (Connector con : block.startPoints()) {
- routes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
+ newRoutes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
}
}
for (Tile tile : BaseClass.listElements(Tile.class)) tile.routes().clear();
- for (Route route : routes) registerRoute(route.complete());
- return t("Found {} routes.",routes.size());
+ for (Route route : newRoutes) registerRoute(route.complete());
+ for (Route oldRoute : oldRoutes) {
+ oldRoute.id = new Id("test"); // new routes may have the same ids and shall not be deleted in the next step!
+ oldRoute.remove();
+ }
+ return t("Found {} routes.",newRoutes.size());
}
/**
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 3eb9146..e672a31 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -286,8 +286,12 @@ public class Route extends BaseClass implements Comparable{
public void addPropertiesFrom(Route existingRoute) {
LOG.debug("addPropertiesFrom({})",existingRoute);
disabled = existingRoute.disabled;
-
- conditions.addAll(existingRoute.conditions);
+
+ for (Condition condition : existingRoute.conditions) { // bestehende Bedingungen der neuen zuweisen
+ condition.parent(this);
+ conditions.add(condition);
+ }
+ conditions.forEach(condition -> existingRoute.conditions.removeChild(condition));
for (Entry entry : triggeredActions.entrySet()) {
String trigger = entry.getKey();
@@ -469,7 +473,7 @@ public class Route extends BaseClass implements Comparable{
}
public Id id() {
- if (id == null) id = new Id(""+(generateName().hashCode()));
+ if (isNull(id)) id = new Id(""+(generateName().hashCode()));
return id;
}
@@ -748,7 +752,7 @@ public class Route extends BaseClass implements Comparable{
}
@Override
- public BaseClass remove() {
+ public BaseClass remove() {
super.remove();
if (isSet(train)) train.removeChild(this);
path.forEach(tile -> tile.removeChild(this));
diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
index 80f1d4f..4eadea9 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
@@ -74,11 +74,12 @@ public class ActionList extends Action implements Iterable{
}
if (exists) {
LOG.debug("action not added.");
- } else {
+ } else { // bestehemde Aktion der neuen Liste zuweisen
this.add(otherAction);
LOG.debug("action added.");
}
}
+ actions.forEach(action -> other.removeChild(action)); // zugewiesene Aktionen von alter Liste löschen
}
public boolean drop(Action action) {
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
index 72c8fe2..05513c3 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
@@ -132,7 +132,7 @@ public class ConditionList extends Condition implements Iterable{
}
@Override
- protected void removeChild(BaseClass child) {
+ public void removeChild(BaseClass child) {
conditions.remove(child);
}
diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
index c42b0b9..3e6b8b9 100644
--- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
+++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java
@@ -389,7 +389,7 @@ public abstract class Tile extends BaseClass implements Comparable{
@Override
public void removeChild(BaseClass child) {
routes.remove(child);
- shadows.remove(child);
+ if (child instanceof Shadow) shadows.remove(child);
if (child == train) train = null;
if (child == route) route = null;
plan.place(this);