Browse Source

updating tiles and conditions

lookup-tables
Stephan Richter 4 years ago
parent
commit
85a1222851
  1. 2
      pom.xml
  2. 3
      resources/translations/Application.de.translation
  3. 12
      src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java
  4. 26
      src/main/java/de/srsoftware/web4rail/conditions/Condition.java
  5. 11
      src/main/java/de/srsoftware/web4rail/conditions/OrCondition.java
  6. 10
      src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java
  7. 10
      src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java
  8. 12
      src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
  9. 160
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  10. 34
      src/main/java/de/srsoftware/web4rail/tiles/Relay.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.2.1</version>
<version>1.2.2</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

3
resources/translations/Application.de.translation

@ -56,6 +56,7 @@ Current location\: : Aktueller Ort: @@ -56,6 +56,7 @@ Current location\: : Aktueller Ort:
Current location : Aufenthaltsort
Current location\: {} : Aufenthaltsort: {}
Current velocity\: {} {} : Aktuelle Geschwindigkeit: {} {}
Decoder address : Decoder-Adresse
Delay : Verzögerung
DelayedAction : verzögerte Aktion
delete : entfernen
@ -174,6 +175,7 @@ SOUTH : Süden @@ -174,6 +175,7 @@ SOUTH : Süden
Speed unit : Geschwindigkeits-Einheit
Start actions : Start-Aktionen
Stock ID : Inventarnummer
Stop settings : Halte-Einstellungen
Started {} : {} gestartet
State : Status
StopAllTrains : Alle Züge stoppen
@ -222,6 +224,7 @@ Unknown action\: {} : Unbekannte Aktion: {} @@ -222,6 +224,7 @@ Unknown action\: {} : Unbekannte Aktion: {}
unset : ungesetzt
Wait {} ms, then\: : {} ms warten, dann:
{} waiting {} secs... : {} wartet {} Sekunden...
Wait times : Wartezeiten
Was not able to assign {} to {}! : Konnte {} nicht an {} zuweisen!
Was not able to lock {} : Konnte {} nicht reservieren
Was not able to set all signals! : Konnte nicht alle Signale stellen!

12
src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java

@ -1,11 +1,12 @@ @@ -1,11 +1,12 @@
package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
import java.util.List;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tiles.Block;
public class BlockFree extends Condition {
@ -30,10 +31,9 @@ public class BlockFree extends Condition { @@ -30,10 +31,9 @@ public class BlockFree extends Condition {
}
@Override
public Tag propForm(HashMap<String, String> params) {
Tag form = super.propForm(params);
Block.selector(block, null).addTo(new Label(t("Select block:")+NBSP)).addTo(form);
return form;
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Select block"), Block.selector(block, null));
return super.properties(preForm, formInputs, postForm);
}
@Override

26
src/main/java/de/srsoftware/web4rail/conditions/Condition.java

@ -18,10 +18,8 @@ import de.srsoftware.web4rail.Plan; @@ -18,10 +18,8 @@ import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.ConditionalAction;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Checkbox;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
@ -54,7 +52,7 @@ public abstract class Condition extends BaseClass { @@ -54,7 +52,7 @@ public abstract class Condition extends BaseClass {
switch (action) {
case ACTION_PROPS:
return condition.properties(params);
return condition.properties();
case ACTION_UPDATE:
condition.update(params);
return plan.showContext(params);
@ -158,22 +156,10 @@ public abstract class Condition extends BaseClass { @@ -158,22 +156,10 @@ public abstract class Condition extends BaseClass {
return this;
}
public Tag propForm(HashMap<String, String> params) {
Form form = new Form("condition-props-"+id);
new Input(REALM,REALM_CONDITION).hideIn(form);
new Input(ACTION,ACTION_UPDATE).hideIn(form);
new Input(ID,id).hideIn(form);
String context = params.get(CONTEXT);
if (isSet(context)) new Input(CONTEXT,context).hideIn(form);
return form;
}
protected Window properties(HashMap<String, String> params) {
Window win = new Window("condition-props", t("Properties of {}",getClass().getSimpleName()));
Tag form = propForm(params);
new Checkbox(INVERTED, t("inverted"), inverted).addTo(form);
new Button(t("Apply"),"return submitForm('condition-props-"+id+"');").addTo(form).addTo(win);
return win;
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("inverted"),new Checkbox(INVERTED, t("inverted"), inverted));
return super.properties(preForm, formInputs, postForm);
}
public static Tag selector() {

11
src/main/java/de/srsoftware/web4rail/conditions/OrCondition.java

@ -1,11 +1,12 @@ @@ -1,11 +1,12 @@
package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import org.json.JSONObject;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
public class OrCondition extends Condition{
@ -33,11 +34,9 @@ public class OrCondition extends Condition{ @@ -33,11 +34,9 @@ public class OrCondition extends Condition{
}
@Override
protected Window properties(HashMap<String, String> params) {
Window win = super.properties(params);
win.children().insertElementAt(conditions.tag(REALM_CONDITION+":"+id()),2);
return win;
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
// add conditions
return super.properties(preForm, formInputs, postForm);
}
@Override

10
src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java

@ -1,12 +1,13 @@ @@ -1,12 +1,13 @@
package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
import java.util.List;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
public class TrainHasTag extends Condition {
@ -31,8 +32,9 @@ public class TrainHasTag extends Condition { @@ -31,8 +32,9 @@ public class TrainHasTag extends Condition {
}
@Override
public Tag propForm(HashMap<String, String> params) {
return new Input(TAG, tag == null ? "" : tag).addTo(new Label(t("Tag:")+NBSP)).addTo(super.propForm(params));
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Tag"),new Input(TAG, tag == null ? "" : tag));
return super.properties(preForm, formInputs, postForm);
}
@Override

10
src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java

@ -1,13 +1,14 @@ @@ -1,13 +1,14 @@
package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
import java.util.List;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
public class TrainLength extends Condition {
@ -32,8 +33,9 @@ public class TrainLength extends Condition { @@ -32,8 +33,9 @@ public class TrainLength extends Condition {
}
@Override
public Tag propForm(HashMap<String, String> params) {
return new Input(MAX_LENGTH, maxLength).numeric().addTo(new Label(t("Maximum train length:")+NBSP)).addTo(super.propForm(params));
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Maximum train length"),new Input(MAX_LENGTH, maxLength).numeric());
return super.properties(preForm, formInputs, postForm);
}
@Override
@ -48,7 +50,7 @@ public class TrainLength extends Condition { @@ -48,7 +50,7 @@ public class TrainLength extends Condition {
if (ml < 1) throw new NumberFormatException(t("length must be larger than zero!"));
maxLength = ml;
} catch (NumberFormatException nfe) {
Window win = properties(params);
Window win = properties();
win.children().insertElementAt(new Tag("div").content(nfe.getMessage()),1);
return win;
}

12
src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java

@ -1,12 +1,13 @@ @@ -1,12 +1,13 @@
package de.srsoftware.web4rail.conditions;
import java.util.HashMap;
import java.util.List;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Fieldset;
public class TrainSelect extends Condition {
@ -30,10 +31,9 @@ public class TrainSelect extends Condition { @@ -30,10 +31,9 @@ public class TrainSelect extends Condition {
}
@Override
public Tag propForm(HashMap<String, String> params) {
Tag form = super.propForm(params);
Train.selector(train, null).addTo(new Label(t("Select train:")+NBSP)).addTo(form);
return form;
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Select train"),Train.selector(train, null));
return super.properties(preForm, formInputs, postForm);
}
@Override

160
src/main/java/de/srsoftware/web4rail/tiles/Block.java

@ -19,9 +19,9 @@ import de.srsoftware.web4rail.Window; @@ -19,9 +19,9 @@ import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Checkbox;
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;
/**
@ -212,87 +212,13 @@ public abstract class Block extends StretchableTile implements Comparable<Block> @@ -212,87 +212,13 @@ public abstract class Block extends StretchableTile implements Comparable<Block>
return super.load(json);
}
public Form propForm(String id) {
Form form = new Form("test");
new Tag("h4").content(t("Block properties")).addTo(form);
new Input(NAME, name).addTo(new Label(t("name:")+NBSP)).addTo(new Tag("p")).addTo(form);
new Checkbox(ALLOW_TURN,t("Turn allowed"),turnAllowed).addTo(new Tag("p")).addTo(form);
Select select = Train.selector(train, null);
select.addTo(new Label(t("Train:")+NBSP)).addTo(new Tag("p")).addTo(form);
return form;
}
public Window propMenu() {
Window win = new Window("test", "Replace Block.propmenu by Block.properties!");
Form form = new Form("train-wait-form");
new Tag("h4").content(t("Stop settings")).addTo(win);
new Input(REALM,REALM_PLAN).hideIn(form);
new Input(ID,id()).hideIn(form);
new Input(ACTION,ACTION_TIMES).hideIn(form);
new Tag("div").content(t("Minimum and maximum times (in Miliseconds) trains with the respective tag have to wait in this block.")).addTo(form);
Direction dA = directionA();
Direction dB = directionB();
Tag table = new Tag("table");
Tag row = new Tag("tr");
new Tag("td").content(t("Direction")).addTo(row);
new Tag("th").content(t("{}bound",dA)).attr("colspan", 2).addTo(row);
new Tag("th").content(t("{}bound",dB)).attr("colspan", 2).addTo(row);
new Tag("td").content("").addTo(row).addTo(table);
row = new Tag("tr");
new Tag("th").content(t("Tag")).addTo(row);
new Tag("th").content(t("min")).addTo(row);
new Tag("th").content(t("max")).addTo(row);
new Tag("th").content(t("min")).addTo(row);
new Tag("th").content(t("max")).addTo(row);
new Tag("th").content(t("Actions")).addTo(row).addTo(table);
int count = 0;
for (WaitTime wt : waitTimes) {
count++;
row = new Tag("tr");
new Tag("td").content(wt.tag).addTo(row);
new Input("min."+wt.tag+"."+dA,wt.get(dA).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+wt.tag+"."+dA,wt.get(dA).max).numeric().addTo(new Tag("td")).addTo(row);
new Input("min."+wt.tag+"."+dB,wt.get(dB).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+wt.tag+"."+dB,wt.get(dB).max).numeric().addTo(new Tag("td")).addTo(row);
Tag actions = new Tag("td");
Map<String, String> props = Map.of(REALM,REALM_PLAN,ID,id().toString(),ACTION,ACTION_TIMES);
switch (count) {
case 1:
actions.content(""); break;
case 2:
new Button("-",merged(props,Map.of(ACTION_DROP,wt.tag))).addTo(actions);
break;
default:
new Button("↑",merged(props,Map.of(RAISE,wt.tag))).addTo(actions);
new Button("-",merged(props,Map.of(ACTION_DROP,wt.tag))).addTo(actions);
}
actions.addTo(row).addTo(table);
}
WaitTime defaultWT = getWaitTime(NO_TAG);
row = new Tag("tr");
new Input(NEW_TAG,"").attr("placeholder", t("new tag")).addTo(new Tag("td")).addTo(row);
new Input("min."+NEW_TAG+"."+dA,defaultWT.get(dA).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+NEW_TAG+"."+dA,defaultWT.get(dA).max).numeric().addTo(new Tag("td")).addTo(row);
new Input("min."+NEW_TAG+"."+dB,defaultWT.get(dB).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+NEW_TAG+"."+dB,defaultWT.get(dB).max).numeric().addTo(new Tag("td")).addTo(row).addTo(table);
table.addTo(form);
new Button(t("Apply"),form).addTo(form).addTo(win);
return win;
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Name"),new Input(NAME, name));
formInputs.add("",new Checkbox(ALLOW_TURN,t("Turn allowed"),turnAllowed));
formInputs.add(t("Train"),Train.selector(train, null));
postForm.add(waitTimeForm());
return super.properties(preForm, formInputs, postForm);
}
public Tile raise(String tag) {
@ -399,4 +325,74 @@ public abstract class Block extends StretchableTile implements Comparable<Block> @@ -399,4 +325,74 @@ public abstract class Block extends StretchableTile implements Comparable<Block>
return this;
}
public Fieldset waitTimeForm() {
Fieldset win = new Fieldset("Wait times");
Form form = new Form("train-wait-form");
new Tag("h4").content(t("Stop settings")).addTo(win);
new Input(REALM,REALM_PLAN).hideIn(form);
new Input(ID,id()).hideIn(form);
new Input(ACTION,ACTION_TIMES).hideIn(form);
new Tag("div").content(t("Minimum and maximum times (in Miliseconds) trains with the respective tag have to wait in this block.")).addTo(form);
Direction dA = directionA();
Direction dB = directionB();
Tag table = new Tag("table");
Tag row = new Tag("tr");
new Tag("td").content(t("Direction")).addTo(row);
new Tag("th").content(t("{}bound",dA)).attr("colspan", 2).addTo(row);
new Tag("th").content(t("{}bound",dB)).attr("colspan", 2).addTo(row);
new Tag("td").content("").addTo(row).addTo(table);
row = new Tag("tr");
new Tag("th").content(t("Tag")).addTo(row);
new Tag("th").content(t("min")).addTo(row);
new Tag("th").content(t("max")).addTo(row);
new Tag("th").content(t("min")).addTo(row);
new Tag("th").content(t("max")).addTo(row);
new Tag("th").content(t("Actions")).addTo(row).addTo(table);
int count = 0;
for (WaitTime wt : waitTimes) {
count++;
row = new Tag("tr");
new Tag("td").content(wt.tag).addTo(row);
new Input("min."+wt.tag+"."+dA,wt.get(dA).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+wt.tag+"."+dA,wt.get(dA).max).numeric().addTo(new Tag("td")).addTo(row);
new Input("min."+wt.tag+"."+dB,wt.get(dB).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+wt.tag+"."+dB,wt.get(dB).max).numeric().addTo(new Tag("td")).addTo(row);
Tag actions = new Tag("td");
Map<String, String> props = Map.of(REALM,REALM_PLAN,ID,id().toString(),ACTION,ACTION_TIMES);
switch (count) {
case 1:
actions.content(""); break;
case 2:
new Button("-",merged(props,Map.of(ACTION_DROP,wt.tag))).addTo(actions);
break;
default:
new Button("↑",merged(props,Map.of(RAISE,wt.tag))).addTo(actions);
new Button("-",merged(props,Map.of(ACTION_DROP,wt.tag))).addTo(actions);
}
actions.addTo(row).addTo(table);
}
WaitTime defaultWT = getWaitTime(NO_TAG);
row = new Tag("tr");
new Input(NEW_TAG,"").attr("placeholder", t("new tag")).addTo(new Tag("td")).addTo(row);
new Input("min."+NEW_TAG+"."+dA,defaultWT.get(dA).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+NEW_TAG+"."+dA,defaultWT.get(dA).max).numeric().addTo(new Tag("td")).addTo(row);
new Input("min."+NEW_TAG+"."+dB,defaultWT.get(dB).min).numeric().addTo(new Tag("td")).addTo(row);
new Input("max."+NEW_TAG+"."+dB,defaultWT.get(dB).max).numeric().addTo(new Tag("td")).addTo(row).addTo(table);
table.addTo(form);
new Button(t("Apply"),form).addTo(form).addTo(win);
return win;
}
}

34
src/main/java/de/srsoftware/web4rail/tiles/Relay.java

@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles; @@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeoutException;
@ -13,10 +14,9 @@ import de.srsoftware.web4rail.Command; @@ -13,10 +14,9 @@ import de.srsoftware.web4rail.Command;
import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device;
import de.srsoftware.web4rail.Protocol;
import de.srsoftware.web4rail.Window;
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.Radio;
public class Relay extends Tile implements Device{
@ -127,24 +127,20 @@ public class Relay extends Tile implements Device{ @@ -127,24 +127,20 @@ public class Relay extends Tile implements Device{
return this;
}
public Form propForm(String id) {
Form form = new Form(id);
Fieldset fieldset = new Fieldset(t("Decoder settings"));
Label protocol = new Label(t("Protocol:"));
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Name"),new Input(NAME,name));
Tag div = new Tag("div");
for (Protocol proto : Protocol.values()) {
new Radio(PROTOCOL, proto.toString(), t(proto.toString()), proto == this.protocol).addTo(protocol);
}
protocol.addTo(fieldset);
new Input(ADDRESS, address).numeric().addTo(new Label(t("Address"))).addTo(fieldset).addTo(form);
fieldset = new Fieldset(t("Ports and Labels"));
new Input(PORT_A, portA).numeric().addTo(new Label(t("Port for state A"))).addTo(fieldset);
new Input(LABEL_A, stateLabelA).addTo(new Label(t("Label for state A"))).addTo(fieldset);
new Input(PORT_B, portB).numeric().addTo(new Label(t("Port for state B"))).addTo(fieldset);
new Input(LABEL_B, stateLabelB).addTo(new Label(t("Label for state B"))).addTo(fieldset);
fieldset.addTo(form);
fieldset = new Fieldset(t("Name"));
new Input(NAME,name).addTo(new Label(t("Name"))).addTo(fieldset).addTo(form);
return form;
new Radio(PROTOCOL, proto.toString(), t(proto.toString()), proto == this.protocol).addTo(div);
}
formInputs.add(t("Decoder address"),div);
formInputs.add(t("Address"),new Input(ADDRESS, address).numeric());
formInputs.add(t("Port for state A"),new Input(PORT_A, portA).numeric());
formInputs.add(t("Label for state A"),new Input(LABEL_A, stateLabelA));
formInputs.add(t("Port for state B"),new Input(PORT_B, portB).numeric());
formInputs.add(t("Label for state B"),new Input(LABEL_B, stateLabelB));
return super.properties(preForm, formInputs, postForm);
}
private char proto() {

Loading…
Cancel
Save