diff --git a/pom.xml b/pom.xml index eb1ae21..3f82a6c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.2.7 + 1.2.8 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index 4059c7d..91ddcdc 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -240,6 +240,7 @@ public class Plan extends BaseClass{ } //if (configJson != null) tile.configure(new JSONObject(configJson)); set(x, y, tile); + tile.parent(this); return t("Added {}",tile.getClass().getSimpleName()); } @@ -647,7 +648,7 @@ public class Plan extends BaseClass{ newRoute.path().stream().filter(Tile::isSet).forEach(tile -> tile.add(newRoute)); Route existingRoute = BaseClass.get(newRoute.id()); if (isSet(existingRoute)) newRoute.addPropertiesFrom(existingRoute); - newRoute.register(); + newRoute.parent(this).register(); return newRoute; } @@ -655,6 +656,7 @@ public class Plan extends BaseClass{ protected void removeChild(BaseClass child) { if (child instanceof Tile) { Tile tile = (Tile) child; + stream("remove "+tile.id()); for (int i=1; i{ postForm.add(brakeTimes()); return super.properties(preForm, formInputs, postForm); } + + @Override + public BaseClass remove() { + super.remove(); + if (isSet(train)) train.removeChild(this); + path.forEach(tile -> tile.removeChild(this)); + conditions.remove(); + for (String key : new Vector(triggers.keySet())){ + ActionList actionList = triggers.remove(key); + if (isSet(actionList)) actionList.remove(); + }; + setupActions.remove(); + startActions.remove(); + return this; + } @Override - protected void removeChild(BaseClass child) { + public void removeChild(BaseClass child) { conditions.remove(child); contacts.remove(child); if (child == endBlock) endBlock = null; diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java index 1151838..4ff7131 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java @@ -193,6 +193,13 @@ public class ActionList extends Action implements Iterable{ return super.properties(preForm, formInputs, postForm); } + @Override + public BaseClass remove() { + super.remove(); + while (!actions.isEmpty()) actions.lastElement().remove(); + return this; + } + @Override public void removeChild(BaseClass child) { actions.remove(child); diff --git a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java index be186df..67a0968 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java @@ -90,6 +90,13 @@ public class ConditionList extends Condition implements Iterable{ return form; } + @Override + public BaseClass remove() { + super.remove(); + while (!conditions.isEmpty()) conditions.lastElement().remove(); + return this; + } + public boolean remove(Object condition) { return conditions.remove(condition); } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java index 98d24a6..8a020a4 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Car.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java @@ -45,7 +45,6 @@ public class Car extends BaseClass implements Comparable{ public int length; protected String stockId = ""; private Train train; - protected Plan plan; protected int maxSpeed = 0; public Car(String name) { @@ -66,8 +65,8 @@ public class Car extends BaseClass implements Comparable{ switch (params.get(ACTION)) { case ACTION_ADD: if (isSet(car)) { - car.clone().plan(plan); - } else new Car(params.get(Car.NAME)).plan(plan); + car.clone(); + } else new Car(params.get(Car.NAME)).parent(plan); return Car.manager(); case ACTION_PROPS: return car == null ? Car.manager() : car.properties(); @@ -85,6 +84,7 @@ public class Car extends BaseClass implements Comparable{ clone.length = length; clone.tags = new HashSet(tags); clone.notes = notes; + clone.parent(parent()); return clone; } @@ -136,7 +136,7 @@ public class Car extends BaseClass implements Comparable{ String name = json.getString(Car.NAME); Id id = Id.from(json); Car car = json.has(Locomotive.LOCOMOTIVE) ? new Locomotive(name, id) : new Car(name,id); - car.load(json).plan(plan); + car.load(json).parent(plan); line = file.readLine(); } @@ -189,15 +189,6 @@ public class Car extends BaseClass implements Comparable{ return name; } - public Plan plan() { - return plan; - } - - public Car plan(Plan plan) { - this.plan = plan; - return this; - } - @Override protected Window properties(List
preForm, FormInput formInputs, List
postForm) { formInputs.add(t("Name"),new Input(NAME,name)); diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java index afd0b24..b94da01 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java @@ -49,7 +49,7 @@ public class Locomotive extends Car implements Constants,Device{ Locomotive loco = id == null ? null : Locomotive.get(id); switch (params.get(ACTION)) { case ACTION_ADD: - new Locomotive(params.get(Locomotive.NAME)).plan(plan); + new Locomotive(params.get(Locomotive.NAME)).parent(plan); return Locomotive.manager(); case ACTION_FASTER10: return loco.faster(10); diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 93cfe66..536ac28 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -78,6 +78,11 @@ public class Train extends BaseClass implements Comparable { private Block currentBlock,destination = null; LinkedList trace = new LinkedList(); + public int speed = 0; + private Autopilot autopilot = null; + private Route nextRoute; + + private class Autopilot extends Thread{ boolean stop = false; int waitTime = 100; @@ -102,13 +107,6 @@ public class Train extends BaseClass implements Comparable { } } } - - public int speed = 0; - private Autopilot autopilot = null; - - private Plan plan; - - private Route nextRoute; public Train(Locomotive loco) { this(loco,null); @@ -257,7 +255,8 @@ public class Train extends BaseClass implements Comparable { private static Object create(HashMap params, Plan plan) { Locomotive loco = (Locomotive) Locomotive.get(params.get(Train.LOCO_ID)); if (isNull(loco)) return t("unknown locomotive: {}",params.get(ID)); - Train train = new Train(loco).plan(plan); + Train train = new Train(loco); + train.parent(plan); if (params.containsKey(NAME)) train.name(params.get(NAME)); return train; } @@ -379,7 +378,7 @@ public class Train extends BaseClass implements Comparable { JSONObject json = new JSONObject(line); Train train = new Train(null,Id.from(json)); - train.plan(plan).load(json); + train.load(json).parent(plan); line = file.readLine(); } @@ -497,12 +496,7 @@ public class Train extends BaseClass implements Comparable { this.name = newName; return this; } - - private Train plan(Plan plan) { - this.plan = plan; - return this; - } - + @Override protected Window properties(List
preForm, FormInput formInputs, List
postForm) { Fieldset otherTrainProsps = new Fieldset(t("other train properties")); @@ -570,6 +564,7 @@ public class Train extends BaseClass implements Comparable { @Override public void removeChild(BaseClass child) { if (child == route) route = null; + if (child == nextRoute) nextRoute = null; if (child == currentBlock) currentBlock = null; if (child == destination) destination = null; cars.remove(child); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 453eb2e..cebc260 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -234,11 +234,6 @@ public abstract class Block extends StretchableTile implements Comparable return this; } - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - public static Select selector(Block preselected,Collection exclude) { if (isNull(exclude)) exclude = new Vector(); Select select = new Select(Block.class.getSimpleName()); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java index 0323c87..5a08bc0 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java @@ -102,7 +102,7 @@ public abstract class Bridge extends Tile { } @Override - protected void removeChild(BaseClass child) { + public void removeChild(BaseClass child) { if (child == counterpart) counterpart = null; plan.place(this); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java index ac3fa7a..5634aed 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java @@ -167,7 +167,7 @@ public class Contact extends Tile{ } @Override - protected void removeChild(BaseClass child) { + public void removeChild(BaseClass child) { if (child == actions) actions = null; } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Cross.java b/src/main/java/de/srsoftware/web4rail/tiles/Cross.java index f4d26f8..b679cca 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Cross.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Cross.java @@ -2,15 +2,9 @@ package de.srsoftware.web4rail.tiles; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; public abstract class Cross extends Tile { public abstract Map offsetConnections(Direction from); - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/CrossPlus.java b/src/main/java/de/srsoftware/web4rail/tiles/CrossPlus.java index 66a90c1..47fc307 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/CrossPlus.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/CrossPlus.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -32,9 +31,4 @@ public class CrossPlus extends Tile{ public List possibleDirections() { return List.of(Direction.EAST,Direction.WEST,Direction.NORTH,Direction.SOUTH); } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/DiagES.java b/src/main/java/de/srsoftware/web4rail/tiles/DiagES.java index 9d561d1..49b86f7 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/DiagES.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/DiagES.java @@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles; import java.util.HashMap; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -22,9 +21,4 @@ public class DiagES extends Tile{ return new HashMap<>(); } } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java b/src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java index afb27b0..c1524bf 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/DiagNE.java @@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles; import java.util.HashMap; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -22,9 +21,4 @@ public class DiagNE extends Tile{ return new HashMap<>(); } } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java b/src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java index d0ffbea..82291ea 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/DiagSW.java @@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles; import java.util.HashMap; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -21,9 +20,4 @@ public class DiagSW extends Tile{ return new HashMap<>(); } } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java b/src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java index 9a5e61f..0ac848a 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java @@ -3,7 +3,6 @@ package de.srsoftware.web4rail.tiles; import java.util.HashMap; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -23,10 +22,4 @@ public class DiagWN extends Tile{ return new HashMap<>(); } } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/EndE.java b/src/main/java/de/srsoftware/web4rail/tiles/EndE.java index 1a992c2..12fdeb0 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/EndE.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/EndE.java @@ -1,10 +1,3 @@ package de.srsoftware.web4rail.tiles; -import de.srsoftware.web4rail.BaseClass; - -public class EndE extends Tile{ - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } -} +public class EndE extends Tile{} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/EndN.java b/src/main/java/de/srsoftware/web4rail/tiles/EndN.java index b37d44b..99e06ed 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/EndN.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/EndN.java @@ -1,11 +1,3 @@ package de.srsoftware.web4rail.tiles; -import de.srsoftware.web4rail.BaseClass; - -public class EndN extends Tile{ - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - -} +public class EndN extends Tile{} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/EndS.java b/src/main/java/de/srsoftware/web4rail/tiles/EndS.java index ac9cdba..8934f0e 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/EndS.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/EndS.java @@ -1,10 +1,3 @@ package de.srsoftware.web4rail.tiles; -import de.srsoftware.web4rail.BaseClass; - -public class EndS extends Tile{ - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } -} +public class EndS extends Tile{} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/EndW.java b/src/main/java/de/srsoftware/web4rail/tiles/EndW.java index d0db868..d294165 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/EndW.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/EndW.java @@ -1,10 +1,3 @@ package de.srsoftware.web4rail.tiles; -import de.srsoftware.web4rail.BaseClass; - -public class EndW extends Tile{ - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } -} +public class EndW extends Tile{} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Eraser.java b/src/main/java/de/srsoftware/web4rail/tiles/Eraser.java index 0c3694a..40aefac 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Eraser.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Eraser.java @@ -1,10 +1,3 @@ package de.srsoftware.web4rail.tiles; -import de.srsoftware.web4rail.BaseClass; - -public class Eraser extends Tile { - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } -} +public class Eraser extends Tile {} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java index 7577e1a..d13179c 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java @@ -159,12 +159,7 @@ public class Relay extends Tile implements Device{ return 'P'; } } - - @Override - protected void removeChild(BaseClass child) { - // TODO Auto-generated method stub - } - + public Relay setLabel(boolean state, String tx) { if (state) { stateLabelA = tx; diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java index 72feba3..9ebcbd3 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Shadow.java @@ -30,7 +30,7 @@ public class Shadow extends Tile{ } @Override - protected void removeChild(BaseClass child) { + public void removeChild(BaseClass child) { if (child == overlay) { overlay = null; remove(); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java index 3e5c45f..0fa7365 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -7,7 +7,6 @@ import java.util.TreeSet; import java.util.Vector; import de.srsoftware.tools.Tag; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Plan.Direction; public abstract class Signal extends Tile implements Comparable{ @@ -38,11 +37,6 @@ public abstract class Signal extends Tile implements Comparable{ } public abstract boolean isAffectedFrom(Direction dir); - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } public boolean state(String state) { this.state = state; diff --git a/src/main/java/de/srsoftware/web4rail/tiles/StraightH.java b/src/main/java/de/srsoftware/web4rail/tiles/StraightH.java index 1c84204..e2b6b24 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/StraightH.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/StraightH.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -29,11 +28,6 @@ public class StraightH extends StretchableTile{ return List.of(Direction.EAST,Direction.WEST); } - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - @Override protected String stretchType() { return t("Width"); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/StraightV.java b/src/main/java/de/srsoftware/web4rail/tiles/StraightV.java index 5324717..52c09d4 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/StraightV.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/StraightV.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.tiles.Turnout.State; @@ -34,11 +33,6 @@ public class StraightV extends StretchableTile{ return List.of(Direction.NORTH,Direction.SOUTH); } - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - @Override protected String stretchType() { return t("Height"); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java b/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java index c3e4580..3d16fe4 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java @@ -44,11 +44,6 @@ public class TextDisplay extends StretchableTile { formInputs.add(t("Text"),new Input(TEXT, text)); return super.properties(preForm, formInputs, postForm); } - - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } public static Select selector(TextDisplay preselected,Collection exclude) { if (isNull(exclude)) exclude = new Vector(); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 34e622d..5d9428d 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -61,7 +61,7 @@ public abstract class Tile extends BaseClass{ protected Train train = null; public Integer x = null; public Integer y = null; - + public void add(Route route) { this.routes.add(route); } @@ -108,7 +108,7 @@ public abstract class Tile extends BaseClass{ private static void inflate(String clazz, JSONObject json, Plan plan) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException, IOException { clazz = Tile.class.getName().replace(".Tile", "."+clazz); Tile tile = (Tile) Tile.class.getClassLoader().loadClass(clazz).getDeclaredConstructor().newInstance(); - tile.load(json); + tile.load(json).parent(plan); plan.set(tile.x, tile.y, tile); } @@ -251,12 +251,6 @@ public abstract class Tile extends BaseClass{ return super.properties(preForm, formInputs, postForm); } - @Override - public BaseClass remove() { - plan.stream("remove "+id()); - return super.remove(); - } - private static String replace(String line, Entry replacement) { String key = replacement.getKey(); Object val = replacement.getValue(); @@ -379,6 +373,27 @@ public abstract class Tile extends BaseClass{ return train; } + @Override + public BaseClass remove() { + super.remove(); + routes.forEach(route -> { + route.remove(); + }); + shadows.forEach(shadow -> { + shadow.remove(); + }); + return this; + } + + @Override + public void removeChild(BaseClass child) { + routes.remove(child); + shadows.remove(child); + if (child == train) train = null; + if (child == route) route = null; + plan.place(this); + } + public void unlock() { route = null; train = null; diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java index 97cc517..2576dea 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java @@ -9,7 +9,6 @@ import java.util.concurrent.TimeoutException; import org.json.JSONObject; import de.srsoftware.tools.Tag; -import de.srsoftware.web4rail.BaseClass; import de.srsoftware.web4rail.Command; import de.srsoftware.web4rail.Command.Reply; import de.srsoftware.web4rail.Device; @@ -140,11 +139,6 @@ public abstract class Turnout extends Tile implements Device{ } } - @Override - protected void removeChild(BaseClass child) { - // this class has no child elements - } - public State state() { return state; }