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);