From b89f89f2981b0a59a2fc6bf051769f4130496148 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sun, 1 Nov 2020 20:22:31 +0100 Subject: [PATCH] implemented methods to add cars to train. --- pom.xml | 2 +- .../translations/Application.de.translation | 3 ++ .../de/srsoftware/web4rail/Application.java | 2 +- .../java/de/srsoftware/web4rail/Plan.java | 1 + .../de/srsoftware/web4rail/moving/Car.java | 46 ++++++++++++++++--- .../web4rail/moving/Locomotive.java | 4 +- .../de/srsoftware/web4rail/moving/Train.java | 28 ++++++++++- 7 files changed, 74 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index ffe0812..1b63f15 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 0.9.11 + 0.9.12 Web4Rail jar Java Model Railway Control diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index e2ad8e1..8f772e7 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -16,9 +16,11 @@ Destination\: {} from {} : Ziel: {} von {} Emergency : Notfall FinishRoute : Route abschließen FreeStartBlock : Start-Block freigeben +Help : Hilfe inverted : invertiert length\: : Länge: Maximum train length\: : maximale Zug-Länge +Move tiles : Kacheln verschieben name\: : Name: Origin and destination : Start und Ziel Origin\: {} to {} : Start: {} nach {} @@ -44,6 +46,7 @@ train does not have tag "{}" : Zug hat keine Markierung „{}“ train has tag "{}" : Zug hat Markierung „{}“ train is longer than {} : Zug ist länger als {} train is shorter than {} : Zug ist kürzer als {} +Trains : Züge Trains\: : Züge: TrainHasTag : Zug mit Tag TrainLength : Zuglänge diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java index 0b4caf9..5e72cc3 100644 --- a/src/main/java/de/srsoftware/web4rail/Application.java +++ b/src/main/java/de/srsoftware/web4rail/Application.java @@ -112,7 +112,7 @@ public class Application implements Constants{ case REALM_ACTIONS: return ActionList.process(params,plan); case REALM_CAR: - return Car.action(params); + return Car.action(params,plan); case REALM_CONTACT: return Contact.process(params); case REALM_CONDITION: diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index b487233..2c1f599 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -794,6 +794,7 @@ public class Plan implements Constants{ Tag tiles = new Tag("div").clazz("list").content(""); new Div(ACTION_PROPS).clazz(REALM_TRAIN).content(t("Manage trains")).addTo(tiles); new Div(ACTION_PROPS).clazz(REALM_LOCO).content(t("Manage locos")).addTo(tiles); + new Div(ACTION_PROPS).clazz(REALM_CAR).content(t("Manage cars")).addTo(tiles); return tiles.addTo(tileMenu); } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java index 06e1843..3fa584a 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Car.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; import java.util.TreeSet; +import java.util.Vector; import org.json.JSONObject; import org.slf4j.Logger; @@ -60,19 +61,44 @@ public class Car implements Constants { cars.put(id, this); } - public static Object action(HashMap params) throws IOException { - Car car = Car.get(params.get(Car.ID)); - if (car == null) return t("No car with id {} found!",params.get(Car.ID)); + public static Object action(HashMap params,Plan plan) throws IOException { + String id = params.get(ID); + Car car = id == null ? null : Car.get(id); + switch (params.get(ACTION)) { + case ACTION_ADD: + return new Car(params.get(Car.NAME)).plan(plan); + case ACTION_PROPS: - return car.properties(); + return car == null ? Car.manager() : car.properties(); case ACTION_UPDATE: return car.update(params); } - if (car instanceof Locomotive) return Locomotive.action(params); + if (car instanceof Locomotive) return Locomotive.action(params,plan); return t("Unknown action: {}",params.get(ACTION)); } + public static Object manager() { + Window win = new Window("car-manager", t("Car manager")); + new Tag("h4").content(t("known cars")).addTo(win); + Tag list = new Tag("ul"); + for (Car car : cars.values()) { + if (!(car instanceof Locomotive)) { + car.link("li").addTo(list); + } + } + list.addTo(win); + + Form form = new Form(); + new Input(ACTION, ACTION_ADD).hideIn(form); + new Input(REALM,REALM_CAR).hideIn(form); + Fieldset fieldset = new Fieldset(t("add new car")); + new Input(Locomotive.NAME, t("new car")).addTo(new Label(t("Name:")+" ")).addTo(fieldset); + new Button(t("Apply")).addTo(fieldset); + fieldset.addTo(form).addTo(win); + return win; + } + protected Tag cockpit() { return null; } @@ -106,6 +132,14 @@ public class Car implements Constants { return new Tag(tagClass).clazz("link").attr("onclick","car("+id+",'"+ACTION_PROPS+"')").content(name()); } + static Vector list() { + Vector cars = new Vector(); + for (Car car : Car.cars.values()) { + if (!(car instanceof Locomotive)) cars.add(car); + } + return cars; + } + public static void loadAll(String filename, Plan plan) throws IOException { cars.clear(); BufferedReader file = new BufferedReader(new FileReader(filename)); @@ -194,7 +228,7 @@ public class Car implements Constants { @Override public String toString() { - return getClass().getSimpleName()+"("+name()+")"; + return name; } public void train(Train train) { diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java index 3d35fce..030af5e 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java @@ -177,8 +177,8 @@ public class Locomotive extends Car implements Constants,Device{ return json; } - static Vector list() { - Vector locos = new Vector(); + static Vector list() { + Vector locos = new Vector(); for (Car car : Car.cars.values()) { if (car instanceof Locomotive) locos.add((Locomotive) car); } diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index ec4f20a..ad69052 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -182,6 +182,28 @@ public class Train implements Comparable,Constants { this.block = block; } + private Tag carList() { + 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); + + Tag addCarForm = new Form().content(t("add car:")+" "); + new Input(REALM, REALM_TRAIN).hideIn(addCarForm); + new Input(ACTION, ACTION_ADD).hideIn(addCarForm); + new Input(ID,id).hideIn(addCarForm); + Select select = new Select(CAR_ID); + for (Car car : Car.list()) { + if (!this.cars.contains(car)) select.addOption(car.id(), car); + } + if (!select.children().isEmpty()) { + select.addTo(addCarForm); + new Button(t("add")).addTo(addCarForm); + addCarForm.addTo(new Tag("li")).addTo(locoList); + } + return locoList.addTo(locoProp); + } + private static Object create(HashMap params, Plan plan) { Locomotive loco = (Locomotive) Locomotive.get(params.get(Train.LOCO_ID)); if (loco == null) return t("unknown locomotive: {}",params.get(ID)); @@ -273,7 +295,7 @@ public class Train implements Comparable,Constants { new Input(ACTION, ACTION_ADD).hideIn(addLocoForm); new Input(ID,id).hideIn(addLocoForm); Select select = new Select(CAR_ID); - for (Locomotive loco : Locomotive.list()) { + for (Car loco : Locomotive.list()) { if (!this.locos.contains(loco)) select.addOption(loco.id(), loco); } if (!select.children().isEmpty()) { @@ -300,7 +322,7 @@ public class Train implements Comparable,Constants { new Input(Train.NAME, t("new train")).addTo(new Label(t("Name:")+" ")).addTo(fieldset); Select select = new Select(LOCO_ID); - for (Locomotive loco : Locomotive.list()) select.addOption(loco.id(),loco.name()); + for (Car loco : Locomotive.list()) select.addOption(loco.id(),loco.name()); select.addTo(new Label(t("Locomotive:")+" ")).addTo(fieldset); new Button(t("Apply")).addTo(fieldset); @@ -354,6 +376,8 @@ public class Train implements Comparable,Constants { Tag propList = new Tag("ul").clazz("proplist"); locoList().addTo(propList); + carList().addTo(propList); + new Tag("li").content(t("length: {}",length())).addTo(propList); if (block != null) { new Tag("li").content(t("Current location: {}",block)).addTo(propList);