implemented Locomotive and Train management

This commit is contained in:
Stephan Richter
2020-09-22 10:27:13 +02:00
parent 064c4ff594
commit 29888379c6
14 changed files with 254 additions and 42 deletions

View File

@@ -11,6 +11,8 @@ import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Checkbox;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
public abstract class Block extends StretchableTile{
private static final String NAME = "name";
@@ -58,11 +60,18 @@ public abstract class Block extends StretchableTile{
public Tag propForm() {
Tag form = super.propForm();
Tag label = new Tag("label").content(t("name:"));
new Tag("input").attr("type", "text").attr(NAME,"name").attr("value", name).addTo(label);
label.addTo(form);
new Input(NAME, name).addTo(new Label(t("name:")+" ")).addTo(new Tag("p")).addTo(form);
new Checkbox(ALLOW_TURN,t("Turn allowed"),turnAllowed).addTo(new Tag("p")).addTo(form);
new Checkbox(ALLOW_TURN,t("Turn allowed"),turnAllowed).addTo(form);
Tag select = new Tag("select").attr("name", TRAIN);
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
for (Train train : Train.list()) {
Tag opt = new Tag("option").attr("value", ""+train.id);
if (this.train == train) opt.attr("selected", "selected");
opt.content(train.toString()).addTo(select);
}
select.addTo(new Label(t("Trains:")+" ")).addTo(new Tag("p")).addTo(form);
return form;
}
@@ -95,15 +104,21 @@ public abstract class Block extends StretchableTile{
return getClass().getSimpleName()+"("+name+") @ ("+x+","+y+")";
}
public void train(Train train) throws IOException {
if (train != null) train.block(this);
super.train(train);
public void train(Train newTrain) throws IOException {
if (train == newTrain) return;
if (train != null) train.block(null); // vorherigen Zug rauswerfen
if (newTrain != null) newTrain.block(this);
super.train(newTrain);
}
@Override
public Tile update(HashMap<String, String> params) {
public Tile update(HashMap<String, String> params) throws IOException {
super.update(params);
if (params.containsKey(NAME)) name=params.get(NAME);
if (params.containsKey(TRAIN)) {
long trainId = Long.parseLong(params.get(TRAIN));
train(trainId == 0 ? null : Train.get(trainId));
}
turnAllowed = params.containsKey(ALLOW_TURN) && params.get(ALLOW_TURN).equals("on");
return this;
}

View File

@@ -39,7 +39,7 @@ public abstract class StretchableTile extends Tile {
Tag label = new Tag("label").content(t("length:"));
new Tag("input").attr("type", "number").attr("name","length").attr("value", length).addTo(label);
label.addTo(form);
label.addTo(new Tag("p")).addTo(form);
return form;
}
@@ -57,7 +57,7 @@ public abstract class StretchableTile extends Tile {
}
@Override
public Tile update(HashMap<String, String> params) {
public Tile update(HashMap<String, String> params) throws IOException {
super.update(params);
for (Entry<String, String> entry : params.entrySet()) {
switch (entry.getKey()) {

View File

@@ -29,7 +29,9 @@ import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Radio;
public abstract class Tile {
@@ -177,16 +179,15 @@ public abstract class Tile {
public Tag propForm() {
Form form = new Form();
new Tag("input").attr("type", "hidden").attr("name","action").attr("value", "update").addTo(form);
new Tag("input").attr("type", "hidden").attr("name",ID).attr("value", id()).addTo(form);
new Input("action", "update").hideIn(form);
new Input(ID,id()).hideIn(form);
List<Direction> pd = possibleDirections();
if (!pd.isEmpty()) {
new Tag("h4").content(t("One way:")).addTo(form);
new Radio("oneway","none",t("No"),oneWay == null).addTo(form);
for (Direction d:pd) {
Radio radio = new Radio("oneway",d.toString(),t(d.toString()),d == oneWay);
radio.addTo(form);
new Radio("oneway",d.toString(),t(d.toString()),d == oneWay).addTo(form);
}
}
return form;
@@ -196,7 +197,7 @@ public abstract class Tile {
Window window = new Window("tile-properties",t("Properties of {} @ ({},{})",getClass().getSimpleName(),x,y));
Tag form = propForm();
if (form!=null && form.children().size()>3) {
new Tag("button").attr("type", "submit").content(t("save")).addTo(form);
new Button(t("save")).addTo(form);
form.addTo(window);
} else {
window.content(t("This tile ({}) has no properties",getClass().getSimpleName()));
@@ -335,7 +336,7 @@ public abstract class Tile {
plan.place(this);
}
public Tile update(HashMap<String, String> params) {
public Tile update(HashMap<String, String> params) throws IOException {
LOG.debug("{}.update({})",getClass().getSimpleName(),params);
String oneWayDir = params.get("oneway");
if (oneWayDir != null) {