Browse Source

overhauled Car.manager and Locomotive.manager to show max speeds

correctly, implemented saving of reverse speeds
lookup-tables
Stephan Richter 5 years ago
parent
commit
5cdc8c3212
  1. 32
      src/main/java/de/srsoftware/web4rail/moving/Car.java
  2. 8
      src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
  3. 18
      src/main/java/de/srsoftware/web4rail/moving/Train.java

32
src/main/java/de/srsoftware/web4rail/moving/Car.java

@ -9,8 +9,8 @@ import java.util.HashMap; @@ -9,8 +9,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeSet;
import java.util.stream.Collectors;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -31,7 +31,6 @@ import de.srsoftware.web4rail.tags.Table; @@ -31,7 +31,6 @@ import de.srsoftware.web4rail.tags.Table;
public class Car extends BaseClass implements Comparable<Car>{
protected static final Logger LOG = LoggerFactory.getLogger(Car.class);
static HashMap<Id,Car> cars = new HashMap<Id, Car>();
public static final String NAME = "name";
public static boolean FORWARD = true;
@ -57,14 +56,13 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -57,14 +56,13 @@ public class Car extends BaseClass implements Comparable<Car>{
public Car(String name, Id id) {
this.name = name;
if (isNull(id)) id = new Id();
this.id = id;
cars.put(id, this);
register();
}
public static Object action(HashMap<String, String> params,Plan plan) throws IOException {
String id = params.get(ID);
Car car = id == null ? null : Car.get(id);
Car car = id == null ? null : Car.get(new Id(id));
switch (params.get(ACTION)) {
case ACTION_ADD:
@ -105,15 +103,12 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -105,15 +103,12 @@ public class Car extends BaseClass implements Comparable<Car>{
return (stockId+":"+name).compareTo(o.stockId+":"+o.name);
}
public static Car get(Object id) {
return isNull(id) ? null : cars.get(new Id(""+id)); // try to get by id
}
public JSONObject json() {
JSONObject json = super.json();
json.put(NAME, name);
json.put(LENGTH, length);
if (maxSpeedForward != 0) json.put(MAX_SPEED, maxSpeedForward);
if (maxSpeedReverse != 0) json.put(MAX_SPEED_REVERSE, maxSpeedReverse);
json.put(STOCK_ID, stockId);
if (!tags.isEmpty()) json.put(TAGS, tags);
return json;
@ -133,7 +128,6 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -133,7 +128,6 @@ public class Car extends BaseClass implements Comparable<Car>{
}
public static void loadAll(String filename, Plan plan) throws IOException {
cars.clear();
BufferedReader file = new BufferedReader(new FileReader(filename, UTF8));
String line = file.readLine();
while (line != null) {
@ -167,7 +161,7 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -167,7 +161,7 @@ public class Car extends BaseClass implements Comparable<Car>{
new Tag("p").content(t("Click on a name to edit the entry.")).addTo(win);
Table table = new Table().addHead(t("Stock ID"),t("Name"),t("Max. Speed",speedUnit),t("Length"),t("Train"),t("Tags"),t("Actions"));
cars.values()
List<Car> cars = BaseClass.listElements(Car.class)
.stream()
.filter(car -> !(car instanceof Locomotive))
.sorted((c1,c2)->{
@ -177,16 +171,20 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -177,16 +171,20 @@ public class Car extends BaseClass implements Comparable<Car>{
return c1.stockId.compareTo(c2.stockId);
}
})
.forEach(car -> table.addRow(
}).collect(Collectors.toList());
for (Car car : cars) {
String maxSpeed = (car.maxSpeedForward == 0 ? "–":""+car.maxSpeedForward)+NBSP;
if (car.maxSpeedReverse != car.maxSpeedForward) maxSpeed += "("+car.maxSpeedReverse+")"+NBSP;
table.addRow(
car.stockId,
car.link(),
car.maxSpeedForward == 0 ? "–":(car.maxSpeedForward+NBSP+speedUnit),
maxSpeed+speedUnit,
car.length+NBSP+lengthUnit,
isSet(car.train) ? car.train.link("span", car.train) : "",
String.join(", ", car.tags()),
car.cloneButton()
));
car.cloneButton());
}
table.addTo(win);
Form form = new Form("add-car-form");
@ -240,7 +238,7 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -240,7 +238,7 @@ public class Car extends BaseClass implements Comparable<Car>{
public static void saveAll(String filename) throws IOException {
BufferedWriter file = new BufferedWriter(new FileWriter(filename));
for (Entry<Id, Car> entry: cars.entrySet()) file.write(entry.getValue().json()+"\n");
for (Car car : BaseClass.listElements(Car.class)) file.write(car.json()+"\n");
file.close();
}

8
src/main/java/de/srsoftware/web4rail/moving/Locomotive.java

@ -45,7 +45,7 @@ public class Locomotive extends Car implements Constants,Device{ @@ -45,7 +45,7 @@ public class Locomotive extends Car implements Constants,Device{
public static Object action(HashMap<String, String> params, Plan plan) throws IOException {
String id = params.get(ID);
Locomotive loco = id == null ? null : Locomotive.get(id);
Locomotive loco = id == null ? null : BaseClass.get(new Id(id));
switch (params.get(ACTION)) {
case ACTION_ADD:
new Locomotive(params.get(Locomotive.NAME)).parent(plan).register();
@ -163,12 +163,6 @@ public class Locomotive extends Car implements Constants,Device{ @@ -163,12 +163,6 @@ public class Locomotive extends Car implements Constants,Device{
return properties();
}
public static Locomotive get(Object id) {
Car car = Car.get(id);
if (car instanceof Locomotive) return (Locomotive) car;
return null;
}
private void init() {
if (init) return;
String proto = null;

18
src/main/java/de/srsoftware/web4rail/moving/Train.java

@ -178,8 +178,9 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -178,8 +178,9 @@ public class Train extends BaseClass implements Comparable<Train> {
private Object addCar(HashMap<String, String> params) {
LOG.debug("addCar({})",params);
if (!params.containsKey(CAR_ID)) return t("No car id passed to Train.addCar!");
Car car = Car.get(params.get(CAR_ID));
String carId = params.get(CAR_ID);
if (isNull(carId)) return t("No car id passed to Train.addCar!");
Car car = BaseClass.get(new Id(carId));
if (isNull(car)) return t("No car with id \"{}\" known!",params.get(CAR_ID));
add(car);
return properties();
@ -266,7 +267,9 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -266,7 +267,9 @@ public class Train extends BaseClass implements Comparable<Train> {
}
private static Object create(HashMap<String, String> params, Plan plan) {
Locomotive loco = (Locomotive) Locomotive.get(params.get(Train.LOCO_ID));
String locoId = params.get(Train.LOCO_ID);
if (isNull(locoId)) return t("Need loco id to create new train!");
Locomotive loco = BaseClass.get(new Id(locoId));
if (isNull(loco)) return t("unknown locomotive: {}",params.get(ID));
Train train = new Train(loco);
train.parent(plan);
@ -307,8 +310,9 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -307,8 +310,9 @@ public class Train extends BaseClass implements Comparable<Train> {
}
private Object dropCar(HashMap<String, String> params) {
Car car = Car.get(params.get(CAR_ID));
String carId = params.get(CAR_ID);
if (isNull(carId)) return t("Cannot drop car without car id!");
Car car = BaseClass.get(new Id(carId));
if (isSet(car)) {
cars.remove(car);
car.train(null);
@ -402,9 +406,9 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -402,9 +406,9 @@ public class Train extends BaseClass implements Comparable<Train> {
if (json.has(TRACE)) json.getJSONArray(TRACE).forEach(elem -> { trace.add(plan.get(new Id(elem.toString()), false).set(this)); });
if (json.has(BLOCK)) currentBlock = (Block) plan.get(new Id(json.getString(BLOCK)), false).set(this); // do not move this up! during set, other fields will be referenced!
if (json.has(LOCOS)) { // for downward compatibility
for (Object id : json.getJSONArray(LOCOS)) add((Locomotive) Car.get(id));
for (Object id : json.getJSONArray(LOCOS)) add(BaseClass.get(new Id(""+id)));
}
for (Object id : json.getJSONArray(CARS)) add(Car.get(id));
for (Object id : json.getJSONArray(CARS)) add(BaseClass.get(new Id(""+id)));
super.load(json);
return this;
}

Loading…
Cancel
Save