working on lookup tables
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>de.srsoftware</groupId>
|
||||
<artifactId>web4rail</artifactId>
|
||||
<version>1.5.18</version>
|
||||
<version>1.5.19</version>
|
||||
<name>Web4Rail</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>Java Model Railway Control</description>
|
||||
|
||||
@@ -13,14 +13,16 @@ Actions in case conditions are <em>not</em> fulfilled : Aktionen, wenn Bedingung
|
||||
Actions will only fire, if all conditions are fullfilled. : Aktionen werden nur ausgeführt, wenn alle Bedingungen erfüllt sind.
|
||||
Action type : Aktions-Typ
|
||||
ActivateRoute : Route aktivieren
|
||||
add : hinzufügen
|
||||
add command for {} : Kommando für {} hinzufügen
|
||||
Added {} : {} hinzugefügt
|
||||
Added {} routes. : {} Routen hinzugefügt.
|
||||
add action : Aktion hinzufügen
|
||||
Add action to action list : Aktion zur Liste hinzufügen
|
||||
add car : Waggon hinzufügen
|
||||
add : hinzufügen
|
||||
add column ({}) : Spalte ({}) hinzufügen
|
||||
Add column/row : Spalte/Zeile hinzufügen
|
||||
add command for {} : Kommando für {} hinzufügen
|
||||
Add condition : Bedingung hinzufügen
|
||||
Added {} : {} hinzugefügt
|
||||
Added {} routes. : {} Routen hinzugefügt.
|
||||
Add entry : Eintrag hinzufügen
|
||||
Add function : Funktion hinzufügen
|
||||
add locomotive : Lok hinzufügen
|
||||
@@ -30,6 +32,7 @@ add new car : neuen Waggon anlegen
|
||||
Add new custom field : neues benutzerdefiniertes Feld hinzufügen
|
||||
add new locomotive : neue Lok anlegen
|
||||
add new train : neuen Zug anlegen
|
||||
add row ({}) : Zeile ({}) hinzufügen
|
||||
AddRemoveDestination : Ziel hinzufügen/löschen
|
||||
AddRemoveTag : Markierung hinzufügen/entfernen
|
||||
Address : Adresse
|
||||
@@ -71,13 +74,14 @@ BrakeStop : Bremsvorgang abschließen
|
||||
Brake time¹, forward : Bremszeit¹, vorwärts
|
||||
Brake time¹, reverse : Bremszeit¹, rückwärts
|
||||
Brake time table : Bremszeit-Tabelle
|
||||
car : Fahrzeug
|
||||
Car : Fahrzeug
|
||||
CarInTrain : Fahrzeug im Zug
|
||||
Car manager : Waggon-Verwaltung
|
||||
Car of train : Fahrzeug des Zuges
|
||||
Car {} of train : Fahrzeug {} des Zuges
|
||||
CarOrientation : Wagen-Laufrichtung
|
||||
Cars : Waggons
|
||||
Cars : Fahrzeuge
|
||||
cars : Fahrzeugen teilen
|
||||
Clear destinations : Ziele löschen
|
||||
Clear destinations of train : Ziele des Zugs löschen
|
||||
@@ -127,7 +131,8 @@ Decoder function : Decoder-Funktion
|
||||
decouple : Abkuppeln
|
||||
decoupler : decoupler
|
||||
Decoupler : Entkuppler
|
||||
Default maintenance intervall : Standard-Wartungsintervall
|
||||
Default maintenance intervall : Standard-Wartungsintervall
|
||||
default value : Standard-Wert
|
||||
DelayedAction : verzögerte Aktion
|
||||
Delay must not be less than zero! : Verzögerung darf nicht kleiner als null sein!
|
||||
delete : entfernen
|
||||
@@ -210,6 +215,7 @@ Inverts the direction {} is heading to. : Kehrt die Richtung, in welche {} fähr
|
||||
JSON code of {} : JSON-Code von {}
|
||||
known cars : bekannte Waggons
|
||||
known locomotives : bekannte Lokomotiven
|
||||
known lookup tables: bekannte Wertetabellen:
|
||||
known trains : bekannte Züge
|
||||
Label for state {} : Beschriftung für Status {}
|
||||
Last blocks : Letzte Blöcke
|
||||
@@ -227,6 +233,7 @@ Locomotive manager : Lok-Verwaltung
|
||||
Locomotives : Lokomotiven
|
||||
Locomotives and cars : Lokomotiven und Waggons
|
||||
lookup tables : Wertetabellen
|
||||
LookupTable : Wertetabelle
|
||||
Loop : Wiederholung
|
||||
Lower speed limit : Minimale Geschwindigkeit
|
||||
Maintenance : Wartung
|
||||
@@ -416,12 +423,14 @@ Task type : Aufgabe
|
||||
Text to display on clients : Text, welcher auf den Clients angezeigt werden soll
|
||||
Text to show on display : Text, welcher in der Anzeige dargestellt werden soll
|
||||
test : testen
|
||||
This value is used, when no entry is set for a specific input pair. : Dieser Wert wird benutzt, wenn für ein Eingabe-Paar kein anderer WErt gesetzt ist.
|
||||
Tile(s) : Kachel(n)
|
||||
Tile(s) moved. : Kachel(n) verschoben.
|
||||
Timeout : maximale Wartezeit5
|
||||
Toggle : umschalten
|
||||
toggle {} : {} umschalten
|
||||
Toggle power : Stom umschalten
|
||||
train : Zug
|
||||
Train : Zug
|
||||
train contains {} : {} ist im Zug
|
||||
train does not contain {} : {} ist nicht im Zug
|
||||
@@ -473,6 +482,7 @@ Use negative number to count from end. : Nutze negative Nummern, um von Ende zu
|
||||
unset : ungesetzt
|
||||
update : aktualisieren
|
||||
value : Wert
|
||||
Values : Werte
|
||||
WaitForContact : Auf Kontakt warten
|
||||
Wait for {}, then : auf {} warten, dann
|
||||
Wait {} ms, then : {} ms warten, dann
|
||||
|
||||
@@ -1,8 +1,23 @@
|
||||
package de.srsoftware.web4rail;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.moving.Car;
|
||||
import de.srsoftware.web4rail.moving.Train;
|
||||
import de.srsoftware.web4rail.tags.Button;
|
||||
import de.srsoftware.web4rail.tags.Fieldset;
|
||||
import de.srsoftware.web4rail.tags.Form;
|
||||
import de.srsoftware.web4rail.tags.Input;
|
||||
import de.srsoftware.web4rail.tags.Label;
|
||||
import de.srsoftware.web4rail.tags.Select;
|
||||
import de.srsoftware.web4rail.tags.Table;
|
||||
import de.srsoftware.web4rail.tags.Window;
|
||||
|
||||
public class LookupTable extends BaseClass{
|
||||
@@ -10,14 +25,35 @@ public class LookupTable extends BaseClass{
|
||||
private static final String ADD_FORM = "add_lookup";
|
||||
private static final String COLUMNS = "columns";
|
||||
private static final String ROWS = "rows";
|
||||
private static final String DEFAULT_VALUE = "default";
|
||||
private static final String NEW_ROW = "new_row";
|
||||
private static final String NEW_COL = "new_col";
|
||||
private String colType;
|
||||
private String rowType;
|
||||
private String name;
|
||||
private int defaultValue = 0;
|
||||
|
||||
private HashSet<Object> cols = new HashSet<>();
|
||||
private HashSet<Object> rows = new HashSet<>();
|
||||
private HashMap<Object,HashMap<Object,Integer>> values = new HashMap<>();
|
||||
|
||||
public LookupTable(String name, String cols, String rows) {
|
||||
this.name = name;
|
||||
this.colType = cols;
|
||||
this.rowType = rows;
|
||||
}
|
||||
|
||||
public static Object action(Params params) {
|
||||
String action = params.getString(ACTION);
|
||||
if (isNull(action)) throw new NullPointerException(ACTION+" should not be null!");
|
||||
|
||||
LookupTable table = get(Id.from(params));
|
||||
switch (action) {
|
||||
case ACTION_ADD:
|
||||
return addForm(params);
|
||||
case ACTION_PROPS:
|
||||
return isSet(table) ? table.properties() : plan.properties();
|
||||
case ACTION_UPDATE:
|
||||
return isSet(table) ? table.update(params) : plan.properties();
|
||||
}
|
||||
return plan.properties(t("Unknown action: {}",action));
|
||||
}
|
||||
@@ -39,18 +75,130 @@ public class LookupTable extends BaseClass{
|
||||
new Input(ACTION, ACTION_ADD).hideIn(form);
|
||||
return form.addTo(win);
|
||||
}
|
||||
|
||||
private static Object create(String name, String cols, String rows) {
|
||||
return new LookupTable(name, cols, rows).register().properties();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject json() {
|
||||
JSONObject json = super.json();
|
||||
json.put(COLUMNS, colType);
|
||||
json.put(DEFAULT_VALUE, defaultValue);
|
||||
json.put(NAME, name);
|
||||
json.put(ROWS, rowType);
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JSONArray jsonList() {
|
||||
JSONArray list = new JSONArray();
|
||||
listElements(LookupTable.class).forEach(table -> list.put(table.json()));
|
||||
return list;
|
||||
}
|
||||
|
||||
private static Object create(String name, String cols, String rows2) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
|
||||
public String name() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm, String... errorMessages) {
|
||||
formInputs.add(t(NAME),new Input(NAME,name));
|
||||
formInputs.add(t("default value"),new Input(DEFAULT_VALUE, defaultValue).numeric().title(t("This value is used, when no entry is set for a specific input pair.")));
|
||||
|
||||
postForm.add(table());
|
||||
|
||||
return super.properties(preForm, formInputs, postForm, errorMessages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String realm() {
|
||||
return REALM_LOOKUP;
|
||||
}
|
||||
|
||||
private static Select selector(String name) {
|
||||
Select selector = new Select(name);
|
||||
selector.addOption(REALM_LOCO, t("Locomotives"));
|
||||
selector.addOption(REALM_CAR, t("Cars"));
|
||||
selector.addOption(REALM_TRAIN, t("Trains"));
|
||||
selector.addOption(REALM_TRAIN+"_length", t("TrainLength"));
|
||||
return selector;
|
||||
}
|
||||
|
||||
private Fieldset table() {
|
||||
|
||||
Fieldset fieldset = new Fieldset(t("Values"));
|
||||
|
||||
rowAdder().addTo(fieldset);
|
||||
|
||||
Table table = new Table();
|
||||
Vector<Object> head = new Vector<Object>();
|
||||
head.add("");
|
||||
head.addAll(cols);
|
||||
table.addHead(head.toArray());
|
||||
for (Object row : rows) {
|
||||
Vector<Object> entries = new Vector<>();
|
||||
entries.add(row);
|
||||
|
||||
HashMap<Object, Integer> items = values.get(row);
|
||||
for (Object col : cols) {
|
||||
Integer item = isSet(items) ? items.get(col) : defaultValue;
|
||||
entries.add(item);
|
||||
}
|
||||
table.addRow(entries.toArray());
|
||||
}
|
||||
|
||||
return table.addTo(fieldset);
|
||||
}
|
||||
|
||||
private Tag rowAdder() {
|
||||
Fieldset fieldset = new Fieldset("Add column/row");
|
||||
Form form = new Form("add_row_form");
|
||||
new Input(REALM,REALM_LOOKUP).hideIn(form);
|
||||
new Input(ID,id()).hideIn(form);
|
||||
new Input(ACTION,ACTION_UPDATE).hideIn(form);
|
||||
Tag select = null;
|
||||
switch (colType) {
|
||||
case REALM_CAR:
|
||||
select = Car.selector(null, null).attr(NAME, NEW_COL);
|
||||
break;
|
||||
case REALM_TRAIN:
|
||||
select = Train.selector(null, null).attr(NAME, NEW_COL);
|
||||
break;
|
||||
}
|
||||
if (isSet(select)) select.addTo(new Label(t("add column ({})",t(colType))+':'+NBSP)).addTo(form);
|
||||
|
||||
select = null;
|
||||
switch (rowType) {
|
||||
case REALM_CAR:
|
||||
select = Car.selector(null, null).attr(NAME, NEW_ROW);
|
||||
break;
|
||||
case REALM_TRAIN:
|
||||
select = Train.selector(null, null).attr(NAME, NEW_ROW);
|
||||
break;
|
||||
}
|
||||
if (isSet(select)) select.addTo(new Label(t("add row ({})",t(rowType))+':'+NBSP)).addTo(form);
|
||||
return new Button(t("add"), form).addTo(form).addTo(fieldset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return t("{} \"{}\"",getClass().getSimpleName(),name);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object update(Params params) {
|
||||
if (params.containsKey(NAME)) name = params.getString(NAME);
|
||||
if (params.containsKey(DEFAULT_VALUE)) defaultValue = params.getInt(DEFAULT_VALUE);
|
||||
if (params.containsKey(NEW_COL)) {
|
||||
Object o = BaseClass.get(Id.from(params, NEW_COL));
|
||||
if (isSet(o) && !cols.contains(o)) cols.add(o);
|
||||
}
|
||||
if (params.containsKey(NEW_ROW)) {
|
||||
Object o = BaseClass.get(Id.from(params, NEW_ROW));
|
||||
if (isSet(o) && !rows.contains(o)) rows.add(o);
|
||||
}
|
||||
|
||||
super.update(params);
|
||||
return properties();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -543,7 +543,8 @@ public class Plan extends BaseClass{
|
||||
.put(LENGTH_UNIT, lengthUnit)
|
||||
.put(SPEED_UNIT, speedUnit)
|
||||
.put(Turnout.DELAY, Turnout.delay)
|
||||
.put(TILE, jTiles);
|
||||
.put(TILE, jTiles)
|
||||
.put(REALM_LOOKUP, LookupTable.jsonList());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -613,6 +614,14 @@ public class Plan extends BaseClass{
|
||||
Fieldset fieldset = new Fieldset(t("lookup tables"));
|
||||
Button button = button(t("add"),Map.of(REALM,REALM_LOOKUP,ACTION,ACTION_ADD));
|
||||
button.addTo(fieldset);
|
||||
List<LookupTable> tables = BaseClass.listElements(LookupTable.class);
|
||||
|
||||
if (!tables.isEmpty()) {
|
||||
new Tag("div").content("known lookup tables:").addTo(fieldset);
|
||||
Tag list = new Tag("ul");
|
||||
for (LookupTable table : tables) table.button(table.name()).addTo(list);
|
||||
list.addTo(fieldset);
|
||||
}
|
||||
return fieldset;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user