Browse Source

improved error messages

lookup-tables
Stephan Richter 4 years ago
parent
commit
6bf7882f3b
  1. 2
      pom.xml
  2. 9
      resources/css/style.css
  3. 2
      resources/js/plan.js
  4. 1
      resources/translations/Application.de.translation
  5. 14
      src/main/java/de/srsoftware/web4rail/BaseClass.java
  6. 41
      src/main/java/de/srsoftware/web4rail/Route.java
  7. 4
      src/main/java/de/srsoftware/web4rail/actions/Action.java
  8. 4
      src/main/java/de/srsoftware/web4rail/actions/ActionList.java
  9. 4
      src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java
  10. 4
      src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java
  11. 4
      src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java
  12. 4
      src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java
  13. 4
      src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java
  14. 4
      src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java
  15. 4
      src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java
  16. 4
      src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java
  17. 4
      src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java
  18. 5
      src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java
  19. 4
      src/main/java/de/srsoftware/web4rail/actions/Loop.java
  20. 4
      src/main/java/de/srsoftware/web4rail/actions/SendCommand.java
  21. 4
      src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java
  22. 4
      src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java
  23. 4
      src/main/java/de/srsoftware/web4rail/actions/SetPower.java
  24. 4
      src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java
  25. 4
      src/main/java/de/srsoftware/web4rail/actions/SetSignal.java
  26. 4
      src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java
  27. 4
      src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
  28. 4
      src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java
  29. 4
      src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java
  30. 4
      src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java
  31. 4
      src/main/java/de/srsoftware/web4rail/actions/TextAction.java
  32. 4
      src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java
  33. 4
      src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java
  34. 4
      src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java
  35. 4
      src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java
  36. 4
      src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java
  37. 4
      src/main/java/de/srsoftware/web4rail/conditions/Condition.java
  38. 6
      src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
  39. 4
      src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java
  40. 4
      src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java
  41. 4
      src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java
  42. 4
      src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java
  43. 4
      src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java
  44. 4
      src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java
  45. 4
      src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java
  46. 4
      src/main/java/de/srsoftware/web4rail/moving/Car.java
  47. 6
      src/main/java/de/srsoftware/web4rail/moving/Locomotive.java
  48. 61
      src/main/java/de/srsoftware/web4rail/moving/Train.java
  49. 10
      src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java
  50. 28
      src/main/java/de/srsoftware/web4rail/threads/PathFinder.java
  51. 4
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  52. 4
      src/main/java/de/srsoftware/web4rail/tiles/Bridge.java
  53. 4
      src/main/java/de/srsoftware/web4rail/tiles/Contact.java
  54. 4
      src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java
  55. 4
      src/main/java/de/srsoftware/web4rail/tiles/Relay.java
  56. 4
      src/main/java/de/srsoftware/web4rail/tiles/Signal.java
  57. 4
      src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
  58. 4
      src/main/java/de/srsoftware/web4rail/tiles/Switch.java
  59. 4
      src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java
  60. 4
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  61. 4
      src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
  62. 4
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java
  63. 4
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.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.3.56</version>
<version>1.3.57</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

9
resources/css/style.css

@ -256,7 +256,14 @@ fieldset{ @@ -256,7 +256,14 @@ fieldset{
border-radius: 5px;
}
.error{
background: red;
background: orange;
margin: 30px 10px 5px;
padding: 0;
border-radius: 10px;
}
.error p{
padding: 5px;
}
h4,ul{

2
resources/js/plan.js

@ -37,7 +37,7 @@ function arrangeTabs(){ @@ -37,7 +37,7 @@ function arrangeTabs(){
var tabs = $('<div/>',{'class':'tabs'});
var winId = $('.window').attr('id')+"-";
tabs.insertAfter($('.swapbtn'));
tabs.insertAfter($('.error'));
var target = null;
var index = null;
$('.window > fieldset > legend').each(function(){

1
resources/translations/Application.de.translation

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
abort : abbrechen
Aborting route allocation... : Routen-Reservierung wird abgebrochen...
Accessory : Zubehör
Action : Aktion
Actions : Aktionen

14
src/main/java/de/srsoftware/web4rail/BaseClass.java

@ -423,13 +423,21 @@ public abstract class BaseClass implements Constants{ @@ -423,13 +423,21 @@ public abstract class BaseClass implements Constants{
return (T) this;
}
public Window properties() {
return properties(new ArrayList<>(), new FormInput(), new ArrayList<>());
public Window properties(String...error) {
return properties(new ArrayList<>(), new FormInput(), new ArrayList<>(),error);
}
protected Window properties(List<Fieldset> preForm,FormInput formInputs,List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm,FormInput formInputs,List<Fieldset> postForm, String...errorMessages) {
Window win = new Window(getClass().getSimpleName()+"-properties", t("Properties of {}",this.title()));
Tag errorDiv = new Tag("div").clazz("error").content("");
if (errorMessages != null && errorMessages.length > 0) {
for (String errorMessage : errorMessages) {
if (isSet(errorMessage)) new Tag("p").content(errorMessage).addTo(errorDiv);
}
}
errorDiv.addTo(win);
preForm.forEach(fieldset -> fieldset.addTo(win));

41
src/main/java/de/srsoftware/web4rail/Route.java

@ -88,7 +88,7 @@ public class Route extends BaseClass { @@ -88,7 +88,7 @@ public class Route extends BaseClass {
public Direction endDirection;
private Vector<Tile> path;
private Vector<Signal> signals;
private Train train;
//private Train train;
private HashMap<String,ActionList> triggeredActions = new HashMap<String, ActionList>();
private HashMap<Turnout,Turnout.State> turnouts;
private Block startBlock = null;
@ -214,7 +214,7 @@ public class Route extends BaseClass { @@ -214,7 +214,7 @@ public class Route extends BaseClass {
private Fieldset basicProperties() {
Fieldset fieldset = new Fieldset(t("Route properties"));
if (isSet(train)) train.link("span",t("Train")+": "+train).addTo(fieldset);
// if (isSet(train)) train.link("span",t("Train")+": "+train).addTo(fieldset);
Tag list = new Tag("ul");
startBlock.link("li",t("Origin: {} to {}",startBlock.name,startDirection)).addTo(list);
endBlock.link("li",t("Destination: {} from {}",endBlock.name,endDirection.inverse())).addTo(list);
@ -319,15 +319,16 @@ public class Route extends BaseClass { @@ -319,15 +319,16 @@ public class Route extends BaseClass {
* @param contact
* @param trainHead
*/
public void contact(Contact contact) {
public void contact(Context context) {
Contact contact = context.contact();
if (triggeredContacts.contains(contact)) return; // don't trigger contact a second time
triggeredContacts.add(contact);
LOG.debug("{} on {} activated {}.",train,this,contact);
LOG.debug("{} on {} activated {}.",context.train(),this,contact);
ActionList actions = triggeredActions.get(contact.trigger());
LOG.debug("Contact has id {} / trigger {} and is assigned with {}",contact.id(),contact.trigger(),isNull(actions)?t("nothing"):actions);
if (isNull(actions)) return;
Context context = new Context(this).train(train).contact(contact);
actions.fire(context,"Route.Contact("+contact.addr()+")");
//Context context = new Context(this).train(train).contact(contact);
actions.fire(context.route(this),"Route.Contact("+contact.addr()+")");
}
public Vector<Contact> contacts() {
@ -375,7 +376,7 @@ public class Route extends BaseClass { @@ -375,7 +376,7 @@ public class Route extends BaseClass {
return endBlock;
}
public void finish() {
public void finish(Train train) {
LOG.debug("{}.finish()",this);
train.endRoute();
free();
@ -386,6 +387,7 @@ public class Route extends BaseClass { @@ -386,6 +387,7 @@ public class Route extends BaseClass {
private void free() {
for (Tile tile : path) {
Train train = tile.train();
if (isSet(train) && train.onTrace(tile)) {
tile.setState(Status.OCCUPIED, train);
} else tile.free();
@ -687,7 +689,7 @@ public class Route extends BaseClass { @@ -687,7 +689,7 @@ public class Route extends BaseClass {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
preForm.add(conditions.list(t("Route will only be available, if all conditions are fulfilled.")));
preForm.add(contactsAndActions());
@ -703,7 +705,7 @@ public class Route extends BaseClass { @@ -703,7 +705,7 @@ public class Route extends BaseClass {
postForm.add(basicProperties());
if (!turnouts.isEmpty()) postForm.add(turnouts());
postForm.add(brakeTimes());
Window win = super.properties(preForm, formInputs, postForm);
Window win = super.properties(preForm, formInputs, postForm,errors);
previewScript().addTo(win);
return win;
}
@ -715,7 +717,7 @@ public class Route extends BaseClass { @@ -715,7 +717,7 @@ public class Route extends BaseClass {
@Override
public BaseClass remove() {
LOG.debug("Removing route ({}) {}",id(),this);
if (isSet(train)) train.removeChild(this);
// if (isSet(train)) train.removeChild(this);
for (Tile tile : path) {
tile.removeChild(this);
}
@ -734,7 +736,7 @@ public class Route extends BaseClass { @@ -734,7 +736,7 @@ public class Route extends BaseClass {
if (child == endBlock) endBlock = null;
path.remove(child);
signals.remove(child);
if (child == train) train = null;
// if (child == train) train = null;
for (ActionList list : triggeredActions.values()) {
list.removeChild(child);
}
@ -746,8 +748,9 @@ public class Route extends BaseClass { @@ -746,8 +748,9 @@ public class Route extends BaseClass {
public boolean reset() {
LOG.debug("{}.reset()",this);
setSignals(Signal.RED);
free();
train = null;
// train = null;
return true;
}
@ -794,15 +797,15 @@ public class Route extends BaseClass { @@ -794,15 +797,15 @@ public class Route extends BaseClass {
// if (state == State.STARTED) return true;
LOG.debug("{}.start()",this);
if (isNull(newTrain)) return false; // can't set route's train to null
if (isSet(train)) {
/* if (isSet(train)) {
if (newTrain != train) return false; // can't alter route's train
} else train = newTrain.setRoute(this); // set new train
} else train = */newTrain.setRoute(this); // set new train
ActionList startActions = triggeredActions.get(ROUTE_START);
if (isSet(startActions)) {
Context context = new Context(train).route(this);
if (!startActions.fire(context,this+".start("+train.name()+")")) return false; // start actions failed
Context context = new Context(newTrain).route(this);
if (!startActions.fire(context,this+".start("+newTrain.name()+")")) return false; // start actions failed
}
// state = State.STARTED;
triggeredContacts.clear();
@ -822,12 +825,12 @@ public class Route extends BaseClass { @@ -822,12 +825,12 @@ public class Route extends BaseClass {
@Override
public String toString() {
return getClass().getSimpleName()+"("+(isSet(train)?train+":":"")+name()+")";
return getClass().getSimpleName()+"("+name()+")";
}
public Train train() {
/* public Train train() {
return train;
}
}*/
private Fieldset turnouts() {
Fieldset win = new Fieldset(t("Turnouts"));

4
src/main/java/de/srsoftware/web4rail/actions/Action.java

@ -138,10 +138,10 @@ public abstract class Action extends BaseClass { @@ -138,10 +138,10 @@ public abstract class Action extends BaseClass {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Edit json"),button(t("export"), Map.of(ACTION, ACTION_SAVE)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public static Tag selector() {

4
src/main/java/de/srsoftware/web4rail/actions/ActionList.java

@ -252,11 +252,11 @@ public class ActionList extends Action implements Iterable<Action>{ @@ -252,11 +252,11 @@ public class ActionList extends Action implements Iterable<Action>{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Fieldset fieldset = new Fieldset(t("Actions"));
list().addTo(fieldset);
postForm.add(fieldset);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java

@ -86,14 +86,14 @@ public class AddRemoveDestination extends Action { @@ -86,14 +86,14 @@ public class AddRemoveDestination extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag span = new Tag("span");
button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Train.DESTINATION)).addTo(span);
button(t("Clear destinations"),Map.of(ACTION,ACTION_UPDATE,Train.DESTINATION,"0")).addTo(span);
formInputs.add(t("Destination")+": "+(isNull(destination) ? t("Clear destinations") : destination),span);
formInputs.add(t("Turn at destination"),new Checkbox(TURN, t("Turn"), turnAtDestination));
formInputs.add(t("Shunting"),new Checkbox(SHUNTING, t("Shunting"), shunting));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java

@ -51,13 +51,13 @@ public class AddRemoveTag extends Action{ @@ -51,13 +51,13 @@ public class AddRemoveTag extends Action{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Tag"),new Input(TAG, tag));
Tag div = new Tag("div");
new Radio(TYPE, ACTION_ADD, t("add"), !remove).addTo(div);
new Radio(TYPE, ACTION_DROP, t("delete"), remove).addTo(div);
formInputs.add(t("Action"),div);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java

@ -77,14 +77,14 @@ public class AlterDirection extends Action{ @@ -77,14 +77,14 @@ public class AlterDirection extends Action{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag radios = new Tag("div");
for (NEWDIR d : NEWDIR.values()) {
new Radio(NEW_DIRECTION, d, t("{}",d), newDir == d).addTo(radios);
}
formInputs.add(t("new direction"),radios);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@SuppressWarnings("incomplete-switch")

4
src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java

@ -70,9 +70,9 @@ public class ConditionalAction extends ActionList { @@ -70,9 +70,9 @@ public class ConditionalAction extends ActionList {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
preForm.add(conditions.list());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}

4
src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java

@ -56,10 +56,10 @@ public class CoupleTrain extends Action { @@ -56,10 +56,10 @@ public class CoupleTrain extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Couple"),new Checkbox(LAST, t("last parked train"), last));
formInputs.add(t("Swap order"),new Checkbox(SWAP, t("Swap order of trains"), swap));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java

@ -61,10 +61,10 @@ public class DelayedAction extends ActionList { @@ -61,10 +61,10 @@ public class DelayedAction extends ActionList {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Minimum delay"),new Input(MIN_DELAY,min_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms"));
formInputs.add(t("Maximum delay"),new Input(MAX_DELAY,max_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms"));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public DelayedAction setMaxDelay(int max_delay) {

4
src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java

@ -55,9 +55,9 @@ public class DetermineTrainInBlock extends Action { @@ -55,9 +55,9 @@ public class DetermineTrainInBlock extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Block")+": "+(isNull(block) ? t("unset") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,BLOCK)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java

@ -64,13 +64,13 @@ public class DisableEnableBlock extends Action { @@ -64,13 +64,13 @@ public class DisableEnableBlock extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Block")+": "+(isNull(block) ? t("block from context") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Block.class.getSimpleName())));
Tag radios = new Tag("p");
new Radio(STATE, "enable", t("enable"), !disable).addTo(radios);
new Radio(STATE, "disable", t("disable"), disable).addTo(radios);
formInputs.add(t("Action"),radios);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java

@ -57,10 +57,10 @@ public class EngageDecoupler extends Action { @@ -57,10 +57,10 @@ public class EngageDecoupler extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Decoupler")+": "+(isNull(decoupler) ? t("unset") : decoupler),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,DECOUPLER)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

5
src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java

@ -2,6 +2,7 @@ package de.srsoftware.web4rail.actions; @@ -2,6 +2,7 @@ package de.srsoftware.web4rail.actions;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.moving.Train;
public class FinishRoute extends Action {
@ -12,7 +13,9 @@ public class FinishRoute extends Action { @@ -12,7 +13,9 @@ public class FinishRoute extends Action {
@Override
public boolean fire(Context context,Object cause) {
Route route = context.route();
if (isSet(route)) route.finish();
Train train = context.train();
if (isNull(train)) return false;
if (isSet(route)) route.finish(train);
return true;
}
}

4
src/main/java/de/srsoftware/web4rail/actions/Loop.java

@ -73,9 +73,9 @@ public class Loop extends ActionList { @@ -73,9 +73,9 @@ public class Loop extends ActionList {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select object"),typeSelector());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public String toString() {

4
src/main/java/de/srsoftware/web4rail/actions/SendCommand.java

@ -71,13 +71,13 @@ public class SendCommand extends Action{ @@ -71,13 +71,13 @@ public class SendCommand extends Action{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Command to send"),new Input(COMMAND, command));
Tag div = new Tag("div");
new Radio(TARGET, Target.SYSTEM, t("Operating System"), target == Target.SYSTEM).addTo(div);
new Radio(TARGET, Target.SRCP, t("SRCP daemon"), target == Target.SRCP).addTo(div);
formInputs.add(t("Send command to"),div);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java

@ -52,9 +52,9 @@ public class SetContextTrain extends Action { @@ -52,9 +52,9 @@ public class SetContextTrain extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select train"),Train.selector(train, null));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java

@ -62,9 +62,9 @@ public class SetDisplayText extends TextAction{ @@ -62,9 +62,9 @@ public class SetDisplayText extends TextAction{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Display")+": "+(isNull(display) ? t("unset") : display),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,DISPLAY)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetPower.java

@ -58,14 +58,14 @@ public class SetPower extends Action{ @@ -58,14 +58,14 @@ public class SetPower extends Action{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag div = new Tag("div");
new Radio(STATE, POWERCHANGE.ON, t("On"), pc == POWERCHANGE.ON).addTo(div);
new Radio(STATE, POWERCHANGE.OFF, t("Off"), pc == POWERCHANGE.OFF).addTo(div);
new Radio(STATE, POWERCHANGE.TOGGLE, t("Toggle"), pc == POWERCHANGE.TOGGLE).addTo(div);
formInputs.add(t("Set state to"),div);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java

@ -79,7 +79,7 @@ public class SetRelayOrSwitch extends Action { @@ -79,7 +79,7 @@ public class SetRelayOrSwitch extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag span = new Tag("span");
if (isSet(relayOrSwitch)) span.content(relayOrSwitch+NBSP);
button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Relay.class.getSimpleName())).addTo(span);
@ -96,7 +96,7 @@ public class SetRelayOrSwitch extends Action { @@ -96,7 +96,7 @@ public class SetRelayOrSwitch extends Action {
}
formInputs.add(t("Select state"),state);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetSignal.java

@ -59,7 +59,7 @@ public class SetSignal extends Action { @@ -59,7 +59,7 @@ public class SetSignal extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Signal")+": "+(isNull(signal) ? t("unset") : signal),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,SIGNAL)));
Select state = new Select(Signal.STATE);
for (String st:Signal.knownStates) {
@ -68,7 +68,7 @@ public class SetSignal extends Action { @@ -68,7 +68,7 @@ public class SetSignal extends Action {
}
formInputs.add(t("Select state"),state);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java

@ -47,9 +47,9 @@ public class SetSpeed extends Action{ @@ -47,9 +47,9 @@ public class SetSpeed extends Action{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Set speed to"),new Input(MAX_SPEED, speed).numeric().addTo(new Tag("span")).content(NBSP+speedUnit));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public int getSpeed() {

4
src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java

@ -66,7 +66,7 @@ public class SetTurnout extends Action { @@ -66,7 +66,7 @@ public class SetTurnout extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Turnout")+": "+(isNull(turnout) ? t("unset") : turnout),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,TURNOUT)));
if (isSet(turnout)) {
@ -79,7 +79,7 @@ public class SetTurnout extends Action { @@ -79,7 +79,7 @@ public class SetTurnout extends Action {
formInputs.add(t("Select state"),select);
}
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java

@ -47,9 +47,9 @@ public class SplitTrain extends Action { @@ -47,9 +47,9 @@ public class SplitTrain extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Split behind"),new Input(POSITION, position).numeric().addTo(new Tag("span")).content(t("&nbsp;cars")));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java

@ -41,13 +41,13 @@ public class StartStopAuto extends Action { @@ -41,13 +41,13 @@ public class StartStopAuto extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag radios = new Tag("div");
new Radio(INVERTED, "on", t("Start autopilot"), inverted).addTo(radios);
new Radio(INVERTED, "off", t("Stop autopilot"), !inverted).addTo(radios);
formInputs.add(t("Action"), radios);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java

@ -61,7 +61,7 @@ public class SwitchFunction extends Action { @@ -61,7 +61,7 @@ public class SwitchFunction extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Select selector = new Select(FUNCTION);
for (int i=1; i<5;i++) {
@ -76,7 +76,7 @@ public class SwitchFunction extends Action { @@ -76,7 +76,7 @@ public class SwitchFunction extends Action {
new Radio(EFFECT, OFF, t("Off"), effect == OFF).addTo(radioGroup);
formInputs.add(t("Effect"),radioGroup);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/TextAction.java

@ -46,9 +46,9 @@ public abstract class TextAction extends Action { @@ -46,9 +46,9 @@ public abstract class TextAction extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Text"),new Input(TEXT, text));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java

@ -41,9 +41,9 @@ public class TriggerContact extends Action { @@ -41,9 +41,9 @@ public class TriggerContact extends Action {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select contact")+": "+(isNull(contact) ? t("unset") : contact),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,CONTACT)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java

@ -99,7 +99,7 @@ public class WaitForContact extends ActionList { @@ -99,7 +99,7 @@ public class WaitForContact extends ActionList {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Contact")+": "+(isNull(contact) ? t("unset") : contact),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,CONTACT)));
formInputs.add(t("Timeout"),new Input(TIMEOUT,timeout).numeric().addTo(new Tag("span")).content(NBSP+"ms"));
@ -108,7 +108,7 @@ public class WaitForContact extends ActionList { @@ -108,7 +108,7 @@ public class WaitForContact extends ActionList {
timeoutActions.list().addTo(fieldset);
postForm.add(fieldset);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -51,9 +51,9 @@ public class BlockFree extends Condition { @@ -51,9 +51,9 @@ public class BlockFree extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Block")+": "+(isNull(block) ? t("unset") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,BLOCK)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java

@ -38,10 +38,10 @@ public class CarInTrain extends Condition { @@ -38,10 +38,10 @@ public class CarInTrain extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select car"),Car.selector(car, null));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java

@ -59,7 +59,7 @@ public class CarOrientation extends Condition { @@ -59,7 +59,7 @@ public class CarOrientation extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select car"),Car.selector(isSet(car) ? car : t("Car of train"), null));
formInputs.add(t("If car of train: inspect car number"),new Input(POSITION, position).numeric().addTo(new Tag("span")).content(NBSP+"("+t("Use negative number to count from end.")+")"));
@ -67,7 +67,7 @@ public class CarOrientation extends Condition { @@ -67,7 +67,7 @@ public class CarOrientation extends Condition {
new Radio(ORIENTATION, "f", t("forward"), orientation).addTo(radioGroup);
new Radio(ORIENTATION, "r", t("revers"), !orientation).addTo(radioGroup);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -142,9 +142,9 @@ public abstract class Condition extends BaseClass { @@ -142,9 +142,9 @@ public abstract class Condition extends BaseClass {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
inversionOption(formInputs);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public static Select selector() {

6
src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java

@ -114,10 +114,10 @@ public class ConditionList extends Condition implements Iterable<Condition>{ @@ -114,10 +114,10 @@ public class ConditionList extends Condition implements Iterable<Condition>{
}
@Override
public Window properties() {
public Window properties(String...errors) {
BaseClass parent = parent();
if (isSet(parent)) return parent.properties();
return super.properties();
if (isSet(parent)) return parent.properties(errors);
return super.properties(errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java

@ -57,9 +57,9 @@ public class RouteEndBlock extends Condition{ @@ -57,9 +57,9 @@ public class RouteEndBlock extends Condition{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Block")+": "+(isNull(block) ? t("unset") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,BLOCK)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java

@ -61,10 +61,10 @@ public class SwitchIsOn extends Condition { @@ -61,10 +61,10 @@ public class SwitchIsOn extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select switch")+": "+(isNull(swtch) ? t("unset") : swtch),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,SWITCH)));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -46,9 +46,9 @@ public class TrainHasTag extends Condition { @@ -46,9 +46,9 @@ public class TrainHasTag extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Tag"),new Input(TAG, tag == null ? "" : tag));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -34,9 +34,9 @@ public class TrainLength extends Condition { @@ -34,9 +34,9 @@ public class TrainLength extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Maximum train length"),new Input(LENGTH, treshold).numeric().addTo(new Tag("span")).content(lengthUnit));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -34,9 +34,9 @@ public class TrainSelect extends Condition { @@ -34,9 +34,9 @@ public class TrainSelect extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Select train")+":",Train.selector(train, null));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java

@ -33,9 +33,9 @@ public class TrainSpeed extends Condition { @@ -33,9 +33,9 @@ public class TrainSpeed extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Train speed"),new Input(SPEED, treshold).numeric().addTo(new Tag("span")).content(speedUnit));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java

@ -48,10 +48,10 @@ public class TrainWasInBlock extends Condition { @@ -48,10 +48,10 @@ public class TrainWasInBlock extends Condition {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Block")+": "+(isNull(block) ? t("block from context") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,BLOCK)));
formInputs.add(t("Seek in last"), new Input(COUNT, count).numeric().addTo(new Tag("span")).content(NBSP+t("blocks of train")));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

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

@ -243,7 +243,7 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -243,7 +243,7 @@ public class Car extends BaseClass implements Comparable<Car>{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Name"),new Input(NAME,name));
formInputs.add(t("Stock ID"),new Input(STOCK_ID,stockId));
formInputs.add(t("Length"),new Input(LENGTH,length).attr("type", "number").addTo(new Tag("span")).content(NBSP+lengthUnit));
@ -255,7 +255,7 @@ public class Car extends BaseClass implements Comparable<Car>{ @@ -255,7 +255,7 @@ public class Car extends BaseClass implements Comparable<Car>{
if (train != null) formInputs.add(t("Train"), train.link());
formInputs.add(t("Current orientation"),new Tag("span").content(orientation ? t("forward") : t("reverse")));
return super.properties(preForm,formInputs,postForm);
return super.properties(preForm,formInputs,postForm,errors);
}
@Override

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

@ -142,7 +142,7 @@ public class Locomotive extends Car implements Constants,Device{ @@ -142,7 +142,7 @@ public class Locomotive extends Car implements Constants,Device{
par.addTo(fieldset);
Tag direction = new Tag("p");
if ((isSet(train) && (train.speed > 0 || isSet(train.route()))) || (isSet(loco) && loco.speed > 0)) {
if ((isSet(train) && train.isStoppable()) || (isSet(loco) && loco.speed > 0)) {
params.put(ACTION, ACTION_STOP);
new Button(t("Stop"),params).clazz(ACTION_STOP).addTo(direction);
}
@ -338,7 +338,7 @@ public class Locomotive extends Car implements Constants,Device{ @@ -338,7 +338,7 @@ public class Locomotive extends Car implements Constants,Device{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
preForm.add(cockpit(this));
Tag div = new Tag("div");
for (Protocol proto : Protocol.values()) {
@ -347,7 +347,7 @@ public class Locomotive extends Car implements Constants,Device{ @@ -347,7 +347,7 @@ public class Locomotive extends Car implements Constants,Device{
formInputs.add(t("Protocol"),div);
formInputs.add(t("Address"),new Input(ADDRESS, address).numeric());
postForm.add(programming());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
private void queue() {

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

@ -48,15 +48,6 @@ import de.srsoftware.web4rail.tiles.Tile.Status; @@ -48,15 +48,6 @@ import de.srsoftware.web4rail.tiles.Tile.Status;
* @author Stephan Richter, SRSoftware 2020-2021 *
*/
public class Train extends BaseClass implements Comparable<Train> {
public interface Listener {
enum Signal {
STOP
}
public void on(Signal signal);
}
private static final Logger LOG = LoggerFactory.getLogger(Train.class);
private static final String CAR_ID = "carId";
@ -101,10 +92,10 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -101,10 +92,10 @@ public class Train extends BaseClass implements Comparable<Train> {
private static final String SHUNTING = "shunting";
private boolean shunting = false;
private HashSet<Listener> listeners = new HashSet<Train.Listener>();
private BrakeProcessor brakeProcessor;
private PathFinder pathFinder;
public static Object action(HashMap<String, String> params, Plan plan) throws IOException {
String action = params.get(ACTION);
if (isNull(action)) return t("No action passed to Train.action!");
@ -150,8 +141,8 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -150,8 +141,8 @@ public class Train extends BaseClass implements Comparable<Train> {
case ACTION_SLOWER10:
return train.slower(10);
case ACTION_START:
train.start();
return train.properties();
String error = train.start();
return train.properties(error);
case ACTION_STOP:
return train.stopNow();
case ACTION_TIMES:
@ -186,10 +177,6 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -186,10 +177,6 @@ public class Train extends BaseClass implements Comparable<Train> {
return properties();
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public boolean automatic() {
return false;
}
@ -323,7 +310,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -323,7 +310,7 @@ public class Train extends BaseClass implements Comparable<Train> {
public void contact(Contact contact) {
if (isSet(route)) {
Route lastRoute = route; // route field might be set to null during route.contact(...)!
route.contact(contact);
route.contact(new Context(contact).train(this));
traceFrom(contact,lastRoute);
}
}
@ -625,7 +612,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -625,7 +612,7 @@ public class Train extends BaseClass implements Comparable<Train> {
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag propList = new Tag("ul").clazz("proplist");
if (isSet(currentBlock)) currentBlock.button(currentBlock.toString()).addTo(new Tag("li").content(t("Current location")+COL)).addTo(propList);
@ -675,7 +662,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -675,7 +662,7 @@ public class Train extends BaseClass implements Comparable<Train> {
postForm.add(blockHistory());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public Object quitAutopilot() {
@ -878,34 +865,37 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -878,34 +865,37 @@ public class Train extends BaseClass implements Comparable<Train> {
}
public void start() {
new PathFinder(this,currentBlock,direction) {
public String start() {
if (isSet(pathFinder)) return t("Pathfinder already active for {}!",this);
pathFinder = new PathFinder(this,currentBlock,direction) {
@Override
public void aborted() {
LOG.debug("Aborted");
plan.stream(t("Aborting route allocation..."));
LOG.debug("{} aborted",this);
}
@Override
public void found(Route newRoute) {
// TODO Auto-generated method stub
LOG.debug("Found route {} for {}",newRoute,Train.this);
LOG.debug("Found route {} for {}",newRoute,Train.this);
}
@Override
public void locked(Route newRoute) {
// TODO Auto-generated method stub
LOG.debug("Locked route {} for {}",newRoute,Train.this);
}
@Override
public void prepared(Route newRoute) {
LOG.debug("Prepared route {} for {}",newRoute,Train.this);
newRoute.start(Train.this);
route = newRoute;
pathFinder = null;
route.start(Train.this);
}
}.start();
return null;
}
public static void startAll() {
@ -930,9 +920,12 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -930,9 +920,12 @@ public class Train extends BaseClass implements Comparable<Train> {
brakeProcessor = new BrakeProcessor(this).start();
}
public Object stopNow() {
public Window stopNow() {
setSpeed(0);
listeners.forEach(listener -> listener.on(Listener.Signal.STOP)); // abort PathFinder
if (isSet(pathFinder)) {
pathFinder.abort();
pathFinder = null;
}
if (isSet(route)) {
route.reset();
route = null;
@ -986,8 +979,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -986,8 +979,7 @@ public class Train extends BaseClass implements Comparable<Train> {
newTrace.add(tile);
remainingLength -= tile.length();
} else if (Route.freeBehindTrain) {
// TODO
tile.free();
} else break;
}
}
@ -1031,4 +1023,11 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -1031,4 +1023,11 @@ public class Train extends BaseClass implements Comparable<Train> {
public boolean usesAutopilot() {
return false; // TODO
}
public boolean isStoppable() {
if (speed > 0) return true;
if (isSet(pathFinder)) return true;
if (isSet(route)) return true;
return false;
}
}

10
src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java

@ -39,10 +39,12 @@ public class BrakeProcessor extends BaseClass implements Runnable { @@ -39,10 +39,12 @@ public class BrakeProcessor extends BaseClass implements Runnable {
int step = brakeTime;
for (int i = 0; i < 15; i++) {
long calculatedDistance = calculate(brakeTime, startSpeed);
step /= 2;
if (step < 1) step = 1;
if (measuredDistance > calculatedDistance) brakeTime += step;
if (measuredDistance < calculatedDistance) brakeTime -= step;
if (measuredDistance > calculatedDistance) brakeTime += brakeTime/2;
if (measuredDistance < calculatedDistance) {
step /= 2;
if (step < 1) step = 1;
brakeTime -= step;
}
LOG.debug("new brake time: {}, calculated distance: {}", brakeTime, calculatedDistance);
}
route.brakeTime(train.brakeId(), brakeTime);

28
src/main/java/de/srsoftware/web4rail/threads/PathFinder.java

@ -18,7 +18,7 @@ import de.srsoftware.web4rail.tiles.Block; @@ -18,7 +18,7 @@ import de.srsoftware.web4rail.tiles.Block;
/**
* @author Stephan Richter, SRSoftware 2020-2021
*/
public abstract class PathFinder extends BaseClass implements Runnable, Train.Listener{
public abstract class PathFinder extends BaseClass implements Runnable{
public static final Logger LOG = LoggerFactory.getLogger(PathFinder.class);
// private Context context;
private boolean aborted = false;
@ -150,14 +150,21 @@ public abstract class PathFinder extends BaseClass implements Runnable, Train.Li @@ -150,14 +150,21 @@ public abstract class PathFinder extends BaseClass implements Runnable, Train.Li
public void run() {
while (true) {
if (aborted) return;
Route route = chooseRoute();
Route route = chooseRoute();
if (isSet(route)) {
found(route);
if (aborted) return;
found(route);
if (route.allocateFor(train)) {
if (aborted) {
route.reset();
return;
}
locked(route);
if (aborted) return;
if (route.prepareFor(train)) {
if (aborted) {
route.reset();
return;
}
prepared(route);
return;
}
@ -172,19 +179,10 @@ public abstract class PathFinder extends BaseClass implements Runnable, Train.Li @@ -172,19 +179,10 @@ public abstract class PathFinder extends BaseClass implements Runnable, Train.Li
public abstract void found(Route r);
public abstract void prepared(Route r);
@Override
public void on(Signal signal) {
switch (signal) {
case STOP:
abort();
break;
}
}
public void start() {
train.addListener(this);
public PathFinder start() {
Thread thread = new Thread(this);
thread.setName("Pathfinder("+train+")");
thread.start();
return this;
}
}

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

@ -325,14 +325,14 @@ public abstract class Block extends StretchableTile{ @@ -325,14 +325,14 @@ public abstract class Block extends StretchableTile{
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
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(contactForm());
postForm.add(waitTimeForm());
if (!parkedTrains.isEmpty()) postForm.add(parkedTrainList());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public Tile raise(String tag) {

4
src/main/java/de/srsoftware/web4rail/tiles/Bridge.java

@ -75,12 +75,12 @@ public abstract class Bridge extends Tile { @@ -75,12 +75,12 @@ public abstract class Bridge extends Tile {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Fieldset fieldset = new Fieldset(t("Counterpart"));
new Tag("p").content(isSet(counterpart) ? t("Connected to {}.",counterpart) : t("Not connected to other bridge part!")).addTo(fieldset);
button(t("Select counterpart"),Map.of(ACTION,ACTION_CONNECT)).addTo(fieldset);
preForm.add(fieldset);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public Window propMenu() {

4
src/main/java/de/srsoftware/web4rail/tiles/Contact.java

@ -190,7 +190,7 @@ public class Contact extends Tile{ @@ -190,7 +190,7 @@ public class Contact extends Tile{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag span = new Tag("span");
new Input(ADDRESS, addr).numeric().addTo(span).content(NBSP);
button(t("learn"),Map.of(ACTION,ACTION_ANALYZE)).addTo(span);
@ -199,7 +199,7 @@ public class Contact extends Tile{ @@ -199,7 +199,7 @@ public class Contact extends Tile{
Fieldset fieldset = new Fieldset(t("Actions")).id("props-actions");
actions.list().addTo(fieldset);
postForm.add(fieldset);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java

@ -111,7 +111,7 @@ public abstract class Decoupler extends Tile implements Device{ @@ -111,7 +111,7 @@ public abstract class Decoupler extends Tile implements Device{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag div = new Tag("div");
for (Protocol proto : Protocol.values()) {
new Radio(PROTOCOL, proto.toString(), t(proto.toString()), proto == protocol).addTo(div);
@ -120,7 +120,7 @@ public abstract class Decoupler extends Tile implements Device{ @@ -120,7 +120,7 @@ public abstract class Decoupler extends Tile implements Device{
formInputs.add(t("Address"),new Input(ADDRESS, address).numeric());
formInputs.add(t("Port"),new Input(PORT, port).numeric());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
private char proto() {

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

@ -124,7 +124,7 @@ public class Relay extends Tile implements Device{ @@ -124,7 +124,7 @@ public class Relay extends Tile implements Device{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Name"),new Input(NAME,name));
Tag div = new Tag("div");
for (Protocol proto : Protocol.values()) {
@ -136,7 +136,7 @@ public class Relay extends Tile implements Device{ @@ -136,7 +136,7 @@ public class Relay extends Tile implements Device{
formInputs.add(t("Label for state {}","B"),new Input(LABEL_B, stateLabelB));
formInputs.add(t("Port for state {}",stateLabelA),new Input(PORT_A, portA).numeric());
formInputs.add(t("Port for state {}",stateLabelB),new Input(PORT_B, portB).numeric());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
private char proto() {

4
src/main/java/de/srsoftware/web4rail/tiles/Signal.java

@ -127,7 +127,7 @@ public abstract class Signal extends Tile { @@ -127,7 +127,7 @@ public abstract class Signal extends Tile {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Fieldset aspectEditor = new Fieldset(t("Aspects")).id("props-aspects");
Form form = new Form("aspect-form");
new Input(REALM,REALM_PLAN).hideIn(form);
@ -158,7 +158,7 @@ public abstract class Signal extends Tile { @@ -158,7 +158,7 @@ public abstract class Signal extends Tile {
form.addTo(aspectEditor);
postForm.add(aspectEditor);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public boolean state(String aspect) {

4
src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java

@ -56,9 +56,9 @@ public abstract class StretchableTile extends TileWithShadow { @@ -56,9 +56,9 @@ public abstract class StretchableTile extends TileWithShadow {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(stretchType(),new Input(STRETCH_LENGTH, stretch).numeric().addTo(new Tag("span")).content(NBSP+t("Tile(s)")));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/tiles/Switch.java

@ -126,7 +126,7 @@ public class Switch extends Tile{ @@ -126,7 +126,7 @@ public class Switch extends Tile{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Fieldset fieldset = new Fieldset(t("Actions (On)"));
fieldset.id("actionsOn");
actionsOn.list().addTo(fieldset);
@ -135,7 +135,7 @@ public class Switch extends Tile{ @@ -135,7 +135,7 @@ public class Switch extends Tile{
fieldset.id("actionsOff");
actionsOff.list().addTo(fieldset);
postForm.add(fieldset);
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java

@ -33,9 +33,9 @@ public class TextDisplay extends StretchableTile { @@ -33,9 +33,9 @@ public class TextDisplay extends StretchableTile {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Text"),new Input(TEXT, text));
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
public static Select selector(TextDisplay preselected,Collection<TextDisplay> exclude) {

4
src/main/java/de/srsoftware/web4rail/tiles/Tile.java

@ -260,7 +260,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{ @@ -260,7 +260,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Fieldset fieldset = null;
if (isSet(train)) {
@ -332,7 +332,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{ @@ -332,7 +332,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile>{
}
}
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
private static String replace(String line, Entry<String, Object> replacement) {

4
src/main/java/de/srsoftware/web4rail/tiles/Turnout.java

@ -116,14 +116,14 @@ public abstract class Turnout extends Tile implements Device{ @@ -116,14 +116,14 @@ public abstract class Turnout extends Tile implements Device{
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
Tag div = new Tag("div");
for (Protocol proto : Protocol.values()) {
new Radio(PROTOCOL, proto.toString(), t(proto.toString()), proto == protocol).addTo(div);
}
formInputs.add(t("Protocol"),div);
formInputs.add(t("Address"),new Input(ADDRESS, address).numeric());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
private char proto() {

4
src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java

@ -36,10 +36,10 @@ public abstract class TurnoutL extends Turnout { @@ -36,10 +36,10 @@ public abstract class TurnoutL extends Turnout {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Straight port")+COL,new Input(STRAIGHT, portA).numeric());
formInputs.add(t("Left port")+COL,new Input(LEFT, portB).numeric());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

4
src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java

@ -37,10 +37,10 @@ public abstract class TurnoutR extends Turnout { @@ -37,10 +37,10 @@ public abstract class TurnoutR extends Turnout {
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Straight port")+COL,new Input(STRAIGHT, portA).numeric());
formInputs.add(t("Right port")+COL,new Input(RIGHT, portB).numeric());
return super.properties(preForm, formInputs, postForm);
return super.properties(preForm, formInputs, postForm,errors);
}
@Override

Loading…
Cancel
Save