Browse Source

working on lookup tables

lookup-tables
Stephan Richter 4 years ago
parent
commit
5890e7966e
  1. 2
      pom.xml
  2. 20
      resources/translations/Application.de.translation
  3. 158
      src/main/java/de/srsoftware/web4rail/LookupTable.java
  4. 11
      src/main/java/de/srsoftware/web4rail/Plan.java

2
pom.xml

@ -4,7 +4,7 @@ @@ -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>

20
resources/translations/Application.de.translation

@ -13,14 +13,16 @@ Actions in case conditions are <em>not</em> fulfilled : Aktionen, wenn Bedingung @@ -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 @@ -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 @@ -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
&nbsp;cars : &nbsp;Fahrzeugen teilen
Clear destinations : Ziele löschen
Clear destinations of train : Ziele des Zugs löschen
@ -128,6 +132,7 @@ decouple : Abkuppeln @@ -128,6 +132,7 @@ decouple : Abkuppeln
decoupler : decoupler
Decoupler : Entkuppler
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 @@ -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 @@ -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 @@ -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 @@ -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

158
src/main/java/de/srsoftware/web4rail/LookupTable.java

@ -1,8 +1,23 @@ @@ -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{ @@ -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));
}
@ -40,17 +76,129 @@ public class LookupTable extends BaseClass{ @@ -40,17 +76,129 @@ public class LookupTable extends BaseClass{
return form.addTo(win);
}
private static Object create(String name, String cols, String rows2) {
// TODO Auto-generated method stub
return null;
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;
}
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();
}
}

11
src/main/java/de/srsoftware/web4rail/Plan.java

@ -543,7 +543,8 @@ public class Plan extends BaseClass{ @@ -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{ @@ -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;
}

Loading…
Cancel
Save