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