diff --git a/pom.xml b/pom.xml index 1b63f15..16340ba 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.9.12 + 0.9.13 Web4Rail jar Java Model Railway Control diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java index 3fa584a..5bf7e75 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Car.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java @@ -5,7 +5,6 @@ import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; @@ -30,7 +29,7 @@ import de.srsoftware.web4rail.tags.Label; public class Car implements Constants { protected static final Logger LOG = LoggerFactory.getLogger(Car.class); - static HashMap cars = new HashMap(); + static HashMap cars = new HashMap(); public static final String NAME = "name"; private static final String LENGTH = "length"; @@ -38,7 +37,7 @@ public class Car implements Constants { private static final String TAGS = "tags"; protected HashSet tags = new HashSet(); - private String id; + private int id; private String name; public int length; private String stockId = ""; @@ -49,13 +48,13 @@ public class Car implements Constants { this(name,null); } - public Car(String name, String id) { + public Car(String name, Integer id) { this.name = name; if (id == null) { try { // make sure multiple consecutive creations get different ids Thread.sleep(1); } catch (InterruptedException e) {} - id = ""+new Date().getTime(); + id = Application.createId(); } this.id = id; cars.put(id, this); @@ -103,18 +102,12 @@ public class Car implements Constants { return null; } - public static Car get(String nameOrId) { - Car car = cars.get(nameOrId); // try to get by id - if (car == null) { // try to get by name - for (Car c : cars.values()) { - if (c.name.equals(nameOrId)) car = c; - } - } - return car; + public static Car get(Object id) { + return cars.get(Integer.parseInt(""+id)); // try to get by id } - public String id() { + public int id() { return id; } @@ -147,7 +140,7 @@ public class Car implements Constants { while (line != null) { JSONObject json = new JSONObject(line); String name = json.getString(Car.NAME); - String id = json.getString(ID); + int id = json.getInt(ID); Car car = json.has(Locomotive.LOCOMOTIVE) ? new Locomotive(name, id) : new Car(name,id); car.load(json).plan(plan); @@ -157,7 +150,7 @@ public class Car implements Constants { } protected Car load(JSONObject json) { - if (json.has(ID)) id = json.getString(ID); + if (json.has(ID)) id = json.getInt(ID); if (json.has(LENGTH)) length = json.getInt(LENGTH); if (json.has(STOCK_ID)) stockId = json.getString(STOCK_ID); if (json.has(TAGS)) json.getJSONArray(TAGS).forEach(elem -> { tags.add(elem.toString()); }); @@ -211,10 +204,7 @@ public class Car implements Constants { public static void saveAll(String filename) throws IOException { BufferedWriter file = new BufferedWriter(new FileWriter(filename)); - for (Entry entry: cars.entrySet()) { - Car c = entry.getValue(); - file.write(c.json()+"\n"); - } + for (Entry entry: cars.entrySet()) file.write(entry.getValue().json()+"\n"); file.close(); } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java index 030af5e..04d4d66 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java @@ -36,7 +36,7 @@ public class Locomotive extends Car implements Constants,Device{ super(name); } - public Locomotive(String name, String id) { + public Locomotive(String name, Integer id) { super(name,id); } @@ -120,8 +120,8 @@ public class Locomotive extends Car implements Constants,Device{ return setSpeed(speed + steps); } - public static Locomotive get(String nameOrId) { - Car car = Car.get(nameOrId); + public static Locomotive get(Object id) { + Car car = Car.get(id); if (car instanceof Locomotive) return (Locomotive) car; return null; } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index ad69052..272d971 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -131,6 +131,8 @@ public class Train implements Comparable,Constants { return train.addCar(params); case ACTION_AUTO: return train.automatic(); + case ACTION_DROP: + return train.dropCar(params); case ACTION_PROPS: return train.props(); case ACTION_QUIT: @@ -147,6 +149,14 @@ public class Train implements Comparable,Constants { return t("Unknown action: {}",params.get(ACTION)); } + private Object dropCar(HashMap params) { + String carId = params.get(CAR_ID); + if (carId != null) cars.remove(Car.get(carId)); + String locoId = params.get(LOCO_ID); + if (locoId != null) locos.remove(Car.get(locoId)); + return props(); + } + private Object addCar(HashMap params) { LOG.debug("addCar({})",params); if (!params.containsKey(CAR_ID)) return t("No car id passed to Train.addCar!"); @@ -186,7 +196,13 @@ public class Train implements Comparable,Constants { Tag locoProp = new Tag("li").content(t("Cars:")); Tag locoList = new Tag("ul").clazz("carlist"); - for (Car car : this.cars) car.link("li").addTo(locoList); + for (Car car : this.cars) { + Tag li = new Tag("li"); + car.link("span").addTo(li).content(NBSP); + Map params = Map.of(REALM,REALM_TRAIN,ID,id,ACTION,ACTION_DROP,CAR_ID,car.id()); + new Button("delete",params).addTo(li); + li.addTo(locoList); + } Tag addCarForm = new Form().content(t("add car:")+" "); new Input(REALM, REALM_TRAIN).hideIn(addCarForm); @@ -230,10 +246,10 @@ public class Train implements Comparable,Constants { if (direction != null) json.put(DIRECTION, direction); json.put(PUSH_PULL, pushPull); if (name != null)json.put(NAME, name); - Vector locoIds = new Vector(); + Vector locoIds = new Vector(); for (Locomotive loco : locos) locoIds.add(loco.id()); json.put(LOCOS, locoIds); - Vector carIds = new Vector(); + Vector carIds = new Vector(); for (Car car : cars) carIds.add(car.id()); json.put(CARS,carIds); if (!tags.isEmpty()) json.put(TAGS, tags); @@ -277,6 +293,7 @@ public class Train implements Comparable,Constants { for (Object id : json.getJSONArray(CARS)) add(Car.get((String)id)); for (Object id : json.getJSONArray(LOCOS)) add((Locomotive) Car.get((String)id)); if (json.has(TAGS)) json.getJSONArray(TAGS).forEach(elem -> { tags.add(elem.toString()); }); + if (json.has(DIRECTION)) direction = Direction.valueOf(json.getString(DIRECTION)); return this; } @@ -285,9 +302,12 @@ public class Train implements Comparable,Constants { Tag locoList = new Tag("ul").clazz("locolist"); for (Locomotive loco : this.locos) { - Tag li = loco.link("li"); + Tag li = new Tag("li"); + loco.link("span").addTo(li); Map props = Map.of(REALM,REALM_LOCO,ID,loco.id(),ACTION,ACTION_TURN); new Button(t("turn within train"),props).addTo(li).addTo(locoList); + Map params = Map.of(REALM,REALM_TRAIN,ID,id,ACTION,ACTION_DROP,LOCO_ID,loco.id()); + new Button("delete",params).addTo(li); } Tag addLocoForm = new Form().content(t("add locomotive:")+" ");