Browse Source

implemented removing cars from train

lookup-tables
Stephan Richter 5 years ago
parent
commit
f738df1e5c
  1. 2
      pom.xml
  2. 30
      src/main/java/de/srsoftware/web4rail/moving/Car.java
  3. 6
      src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
  4. 28
      src/main/java/de/srsoftware/web4rail/moving/Train.java

2
pom.xml

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId> <groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId> <artifactId>web4rail</artifactId>
<version>0.9.12</version> <version>0.9.13</version>
<name>Web4Rail</name> <name>Web4Rail</name>
<packaging>jar</packaging> <packaging>jar</packaging>
<description>Java Model Railway Control</description> <description>Java Model Railway Control</description>

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

@ -5,7 +5,6 @@ import java.io.BufferedWriter;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -30,7 +29,7 @@ import de.srsoftware.web4rail.tags.Label;
public class Car implements Constants { public class Car implements Constants {
protected static final Logger LOG = LoggerFactory.getLogger(Car.class); protected static final Logger LOG = LoggerFactory.getLogger(Car.class);
static HashMap<String,Car> cars = new HashMap<String, Car>(); static HashMap<Integer,Car> cars = new HashMap<Integer, Car>();
public static final String NAME = "name"; public static final String NAME = "name";
private static final String LENGTH = "length"; private static final String LENGTH = "length";
@ -38,7 +37,7 @@ public class Car implements Constants {
private static final String TAGS = "tags"; private static final String TAGS = "tags";
protected HashSet<String> tags = new HashSet<String>(); protected HashSet<String> tags = new HashSet<String>();
private String id; private int id;
private String name; private String name;
public int length; public int length;
private String stockId = ""; private String stockId = "";
@ -49,13 +48,13 @@ public class Car implements Constants {
this(name,null); this(name,null);
} }
public Car(String name, String id) { public Car(String name, Integer id) {
this.name = name; this.name = name;
if (id == null) { if (id == null) {
try { // make sure multiple consecutive creations get different ids try { // make sure multiple consecutive creations get different ids
Thread.sleep(1); Thread.sleep(1);
} catch (InterruptedException e) {} } catch (InterruptedException e) {}
id = ""+new Date().getTime(); id = Application.createId();
} }
this.id = id; this.id = id;
cars.put(id, this); cars.put(id, this);
@ -103,18 +102,12 @@ public class Car implements Constants {
return null; return null;
} }
public static Car get(String nameOrId) { public static Car get(Object id) {
Car car = cars.get(nameOrId); // try to get by id return cars.get(Integer.parseInt(""+id)); // 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 String id() { public int id() {
return id; return id;
} }
@ -147,7 +140,7 @@ public class Car implements Constants {
while (line != null) { while (line != null) {
JSONObject json = new JSONObject(line); JSONObject json = new JSONObject(line);
String name = json.getString(Car.NAME); 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 car = json.has(Locomotive.LOCOMOTIVE) ? new Locomotive(name, id) : new Car(name,id);
car.load(json).plan(plan); car.load(json).plan(plan);
@ -157,7 +150,7 @@ public class Car implements Constants {
} }
protected Car load(JSONObject json) { 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(LENGTH)) length = json.getInt(LENGTH);
if (json.has(STOCK_ID)) stockId = json.getString(STOCK_ID); if (json.has(STOCK_ID)) stockId = json.getString(STOCK_ID);
if (json.has(TAGS)) json.getJSONArray(TAGS).forEach(elem -> { tags.add(elem.toString()); }); 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 { public static void saveAll(String filename) throws IOException {
BufferedWriter file = new BufferedWriter(new FileWriter(filename)); BufferedWriter file = new BufferedWriter(new FileWriter(filename));
for (Entry<String, Car> entry: cars.entrySet()) { for (Entry<Integer, Car> entry: cars.entrySet()) file.write(entry.getValue().json()+"\n");
Car c = entry.getValue();
file.write(c.json()+"\n");
}
file.close(); file.close();
} }

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

@ -36,7 +36,7 @@ public class Locomotive extends Car implements Constants,Device{
super(name); super(name);
} }
public Locomotive(String name, String id) { public Locomotive(String name, Integer id) {
super(name,id); super(name,id);
} }
@ -120,8 +120,8 @@ public class Locomotive extends Car implements Constants,Device{
return setSpeed(speed + steps); return setSpeed(speed + steps);
} }
public static Locomotive get(String nameOrId) { public static Locomotive get(Object id) {
Car car = Car.get(nameOrId); Car car = Car.get(id);
if (car instanceof Locomotive) return (Locomotive) car; if (car instanceof Locomotive) return (Locomotive) car;
return null; return null;
} }

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

@ -131,6 +131,8 @@ public class Train implements Comparable<Train>,Constants {
return train.addCar(params); return train.addCar(params);
case ACTION_AUTO: case ACTION_AUTO:
return train.automatic(); return train.automatic();
case ACTION_DROP:
return train.dropCar(params);
case ACTION_PROPS: case ACTION_PROPS:
return train.props(); return train.props();
case ACTION_QUIT: case ACTION_QUIT:
@ -147,6 +149,14 @@ public class Train implements Comparable<Train>,Constants {
return t("Unknown action: {}",params.get(ACTION)); return t("Unknown action: {}",params.get(ACTION));
} }
private Object dropCar(HashMap<String, String> 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<String, String> params) { private Object addCar(HashMap<String, String> params) {
LOG.debug("addCar({})",params); LOG.debug("addCar({})",params);
if (!params.containsKey(CAR_ID)) return t("No car id passed to Train.addCar!"); if (!params.containsKey(CAR_ID)) return t("No car id passed to Train.addCar!");
@ -186,7 +196,13 @@ public class Train implements Comparable<Train>,Constants {
Tag locoProp = new Tag("li").content(t("Cars:")); Tag locoProp = new Tag("li").content(t("Cars:"));
Tag locoList = new Tag("ul").clazz("carlist"); 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<String, Object> 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:")+"&nbsp;"); Tag addCarForm = new Form().content(t("add car:")+"&nbsp;");
new Input(REALM, REALM_TRAIN).hideIn(addCarForm); new Input(REALM, REALM_TRAIN).hideIn(addCarForm);
@ -230,10 +246,10 @@ public class Train implements Comparable<Train>,Constants {
if (direction != null) json.put(DIRECTION, direction); if (direction != null) json.put(DIRECTION, direction);
json.put(PUSH_PULL, pushPull); json.put(PUSH_PULL, pushPull);
if (name != null)json.put(NAME, name); if (name != null)json.put(NAME, name);
Vector<String> locoIds = new Vector<String>(); Vector<Integer> locoIds = new Vector<Integer>();
for (Locomotive loco : locos) locoIds.add(loco.id()); for (Locomotive loco : locos) locoIds.add(loco.id());
json.put(LOCOS, locoIds); json.put(LOCOS, locoIds);
Vector<String> carIds = new Vector<String>(); Vector<Integer> carIds = new Vector<Integer>();
for (Car car : cars) carIds.add(car.id()); for (Car car : cars) carIds.add(car.id());
json.put(CARS,carIds); json.put(CARS,carIds);
if (!tags.isEmpty()) json.put(TAGS, tags); if (!tags.isEmpty()) json.put(TAGS, tags);
@ -277,6 +293,7 @@ public class Train implements Comparable<Train>,Constants {
for (Object id : json.getJSONArray(CARS)) add(Car.get((String)id)); for (Object id : json.getJSONArray(CARS)) add(Car.get((String)id));
for (Object id : json.getJSONArray(LOCOS)) add((Locomotive) 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(TAGS)) json.getJSONArray(TAGS).forEach(elem -> { tags.add(elem.toString()); });
if (json.has(DIRECTION)) direction = Direction.valueOf(json.getString(DIRECTION));
return this; return this;
} }
@ -285,9 +302,12 @@ public class Train implements Comparable<Train>,Constants {
Tag locoList = new Tag("ul").clazz("locolist"); Tag locoList = new Tag("ul").clazz("locolist");
for (Locomotive loco : this.locos) { for (Locomotive loco : this.locos) {
Tag li = loco.link("li"); Tag li = new Tag("li");
loco.link("span").addTo(li);
Map<String, Object> props = Map.of(REALM,REALM_LOCO,ID,loco.id(),ACTION,ACTION_TURN); Map<String, Object> props = Map.of(REALM,REALM_LOCO,ID,loco.id(),ACTION,ACTION_TURN);
new Button(t("turn within train"),props).addTo(li).addTo(locoList); new Button(t("turn within train"),props).addTo(li).addTo(locoList);
Map<String, Object> 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:")+"&nbsp;"); Tag addLocoForm = new Form().content(t("add locomotive:")+"&nbsp;");

Loading…
Cancel
Save