From 6bf7882f3b19154b5cc4a7210bdc80ab81919e27 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 12 Mar 2021 16:04:08 +0100 Subject: [PATCH] improved error messages --- pom.xml | 2 +- resources/css/style.css | 9 ++- resources/js/plan.js | 2 +- .../translations/Application.de.translation | 1 + .../de/srsoftware/web4rail/BaseClass.java | 14 ++++- .../java/de/srsoftware/web4rail/Route.java | 41 +++++++------ .../srsoftware/web4rail/actions/Action.java | 4 +- .../web4rail/actions/ActionList.java | 4 +- .../actions/AddRemoveDestination.java | 4 +- .../web4rail/actions/AddRemoveTag.java | 4 +- .../web4rail/actions/AlterDirection.java | 4 +- .../web4rail/actions/ConditionalAction.java | 4 +- .../web4rail/actions/CoupleTrain.java | 4 +- .../web4rail/actions/DelayedAction.java | 4 +- .../actions/DetermineTrainInBlock.java | 4 +- .../web4rail/actions/DisableEnableBlock.java | 4 +- .../web4rail/actions/EngageDecoupler.java | 4 +- .../web4rail/actions/FinishRoute.java | 5 +- .../de/srsoftware/web4rail/actions/Loop.java | 4 +- .../web4rail/actions/SendCommand.java | 4 +- .../web4rail/actions/SetContextTrain.java | 4 +- .../web4rail/actions/SetDisplayText.java | 4 +- .../srsoftware/web4rail/actions/SetPower.java | 4 +- .../web4rail/actions/SetRelayOrSwitch.java | 4 +- .../web4rail/actions/SetSignal.java | 4 +- .../srsoftware/web4rail/actions/SetSpeed.java | 4 +- .../web4rail/actions/SetTurnout.java | 4 +- .../web4rail/actions/SplitTrain.java | 4 +- .../web4rail/actions/StartStopAuto.java | 4 +- .../web4rail/actions/SwitchFunction.java | 4 +- .../web4rail/actions/TextAction.java | 4 +- .../web4rail/actions/TriggerContact.java | 4 +- .../web4rail/actions/WaitForContact.java | 4 +- .../web4rail/conditions/BlockFree.java | 4 +- .../web4rail/conditions/CarInTrain.java | 4 +- .../web4rail/conditions/CarOrientation.java | 4 +- .../web4rail/conditions/Condition.java | 4 +- .../web4rail/conditions/ConditionList.java | 6 +- .../web4rail/conditions/RouteEndBlock.java | 4 +- .../web4rail/conditions/SwitchIsOn.java | 4 +- .../web4rail/conditions/TrainHasTag.java | 4 +- .../web4rail/conditions/TrainLength.java | 4 +- .../web4rail/conditions/TrainSelect.java | 4 +- .../web4rail/conditions/TrainSpeed.java | 4 +- .../web4rail/conditions/TrainWasInBlock.java | 4 +- .../de/srsoftware/web4rail/moving/Car.java | 4 +- .../web4rail/moving/Locomotive.java | 6 +- .../de/srsoftware/web4rail/moving/Train.java | 61 +++++++++---------- .../web4rail/threads/BrakeProcessor.java | 10 +-- .../web4rail/threads/PathFinder.java | 28 ++++----- .../de/srsoftware/web4rail/tiles/Block.java | 4 +- .../de/srsoftware/web4rail/tiles/Bridge.java | 4 +- .../de/srsoftware/web4rail/tiles/Contact.java | 4 +- .../srsoftware/web4rail/tiles/Decoupler.java | 4 +- .../de/srsoftware/web4rail/tiles/Relay.java | 4 +- .../de/srsoftware/web4rail/tiles/Signal.java | 4 +- .../web4rail/tiles/StretchableTile.java | 4 +- .../de/srsoftware/web4rail/tiles/Switch.java | 4 +- .../web4rail/tiles/TextDisplay.java | 4 +- .../de/srsoftware/web4rail/tiles/Tile.java | 4 +- .../de/srsoftware/web4rail/tiles/Turnout.java | 4 +- .../srsoftware/web4rail/tiles/TurnoutL.java | 4 +- .../srsoftware/web4rail/tiles/TurnoutR.java | 4 +- 63 files changed, 205 insertions(+), 184 deletions(-) diff --git a/pom.xml b/pom.xml index 685ad2a..ed11862 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.3.56 + 1.3.57 Web4Rail jar Java Model Railway Control diff --git a/resources/css/style.css b/resources/css/style.css index 60088db..9902704 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -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{ diff --git a/resources/js/plan.js b/resources/js/plan.js index dfb4ef6..a0fd926 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -37,7 +37,7 @@ function arrangeTabs(){ var tabs = $('
',{'class':'tabs'}); var winId = $('.window').attr('id')+"-"; - tabs.insertAfter($('.swapbtn')); + tabs.insertAfter($('.error')); var target = null; var index = null; $('.window > fieldset > legend').each(function(){ diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index b140948..15e63fc 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -1,4 +1,5 @@ abort : abbrechen +Aborting route allocation... : Routen-Reservierung wird abgebrochen... Accessory : Zubehör Action : Aktion Actions : Aktionen diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java index 0c75070..6672bcc 100644 --- a/src/main/java/de/srsoftware/web4rail/BaseClass.java +++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java @@ -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
preForm,FormInput formInputs,List
postForm) { + protected Window properties(List
preForm,FormInput formInputs,List
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)); diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index 33c8843..5ca606c 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -88,7 +88,7 @@ public class Route extends BaseClass { public Direction endDirection; private Vector path; private Vector signals; - private Train train; + //private Train train; private HashMap triggeredActions = new HashMap(); private HashMap turnouts; private Block startBlock = null; @@ -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 { * @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 contacts() { @@ -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 { 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 { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { 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 { @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 { 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 { 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 { // 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 { @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")); diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java index d24afbf..605e6eb 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Action.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java @@ -138,10 +138,10 @@ public abstract class Action extends BaseClass { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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() { diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java index 27ecfeb..6fe6ffa 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java @@ -252,11 +252,11 @@ public class ActionList extends Action implements Iterable{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java b/src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java index 3552aed..96a8698 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java +++ b/src/main/java/de/srsoftware/web4rail/actions/AddRemoveDestination.java @@ -86,14 +86,14 @@ public class AddRemoveDestination extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java b/src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java index 52be625..307610c 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java +++ b/src/main/java/de/srsoftware/web4rail/actions/AddRemoveTag.java @@ -51,13 +51,13 @@ public class AddRemoveTag extends Action{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java b/src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java index 7c6d98d..ea342d2 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java +++ b/src/main/java/de/srsoftware/web4rail/actions/AlterDirection.java @@ -77,14 +77,14 @@ public class AlterDirection extends Action{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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") diff --git a/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java b/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java index 1f3ad8f..ae86c67 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java @@ -70,9 +70,9 @@ public class ConditionalAction extends ActionList { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
postForm,String...errors) { preForm.add(conditions.list()); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } diff --git a/src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java b/src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java index a4557fd..c2fb782 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java +++ b/src/main/java/de/srsoftware/web4rail/actions/CoupleTrain.java @@ -56,10 +56,10 @@ public class CoupleTrain extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java b/src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java index c03f321..5cca381 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java +++ b/src/main/java/de/srsoftware/web4rail/actions/DelayedAction.java @@ -61,10 +61,10 @@ public class DelayedAction extends ActionList { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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) { diff --git a/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java b/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java index c73b5aa..1c70ef7 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java +++ b/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java @@ -55,9 +55,9 @@ public class DetermineTrainInBlock extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java b/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java index 6aee81f..a84f217 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java +++ b/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java @@ -64,13 +64,13 @@ public class DisableEnableBlock extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java b/src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java index f5c21ee..7152a03 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java +++ b/src/main/java/de/srsoftware/web4rail/actions/EngageDecoupler.java @@ -57,10 +57,10 @@ public class EngageDecoupler extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java b/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java index 0a8a94f..a263f94 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java +++ b/src/main/java/de/srsoftware/web4rail/actions/FinishRoute.java @@ -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 { @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; } } diff --git a/src/main/java/de/srsoftware/web4rail/actions/Loop.java b/src/main/java/de/srsoftware/web4rail/actions/Loop.java index 818fe76..a0ac414 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/Loop.java +++ b/src/main/java/de/srsoftware/web4rail/actions/Loop.java @@ -73,9 +73,9 @@ public class Loop extends ActionList { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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() { diff --git a/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java b/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java index 2081ad1..6f186e8 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SendCommand.java @@ -71,13 +71,13 @@ public class SendCommand extends Action{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java b/src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java index 4ea9109..6cb6a70 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetContextTrain.java @@ -52,9 +52,9 @@ public class SetContextTrain extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java b/src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java index 53999f7..1818331 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetDisplayText.java @@ -62,9 +62,9 @@ public class SetDisplayText extends TextAction{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetPower.java b/src/main/java/de/srsoftware/web4rail/actions/SetPower.java index 21889f6..3de5b74 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetPower.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetPower.java @@ -58,14 +58,14 @@ public class SetPower extends Action{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java b/src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java index 19eeadb..a437833 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetRelayOrSwitch.java @@ -79,7 +79,7 @@ public class SetRelayOrSwitch extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { } formInputs.add(t("Select state"),state); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetSignal.java b/src/main/java/de/srsoftware/web4rail/actions/SetSignal.java index 02304f5..883f9b3 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetSignal.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetSignal.java @@ -59,7 +59,7 @@ public class SetSignal extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { } formInputs.add(t("Select state"),state); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java index d0621a8..0d335c5 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetSpeed.java @@ -47,9 +47,9 @@ public class SetSpeed extends Action{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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() { diff --git a/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java b/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java index 78f8fce..f8cd546 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java @@ -66,7 +66,7 @@ public class SetTurnout extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { formInputs.add(t("Select state"),select); } - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java b/src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java index 9ab466f..c3e383d 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SplitTrain.java @@ -47,9 +47,9 @@ public class SplitTrain extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
postForm,String...errors) { formInputs.add(t("Split behind"),new Input(POSITION, position).numeric().addTo(new Tag("span")).content(t(" cars"))); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java b/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java index 53be6a3..6d1b0d9 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java +++ b/src/main/java/de/srsoftware/web4rail/actions/StartStopAuto.java @@ -41,13 +41,13 @@ public class StartStopAuto extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java b/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java index 62768c4..e00d773 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java +++ b/src/main/java/de/srsoftware/web4rail/actions/SwitchFunction.java @@ -61,7 +61,7 @@ public class SwitchFunction extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
postForm,String...errors) { Select selector = new Select(FUNCTION); for (int i=1; i<5;i++) { @@ -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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/TextAction.java b/src/main/java/de/srsoftware/web4rail/actions/TextAction.java index 5cce90d..1b43b1e 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/TextAction.java +++ b/src/main/java/de/srsoftware/web4rail/actions/TextAction.java @@ -46,9 +46,9 @@ public abstract class TextAction extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java index 4c60474..d825322 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java +++ b/src/main/java/de/srsoftware/web4rail/actions/TriggerContact.java @@ -41,9 +41,9 @@ public class TriggerContact extends Action { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java b/src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java index 754486a..a33083c 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java +++ b/src/main/java/de/srsoftware/web4rail/actions/WaitForContact.java @@ -99,7 +99,7 @@ public class WaitForContact extends ActionList { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { timeoutActions.list().addTo(fieldset); postForm.add(fieldset); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java b/src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java index d46794b..b4b8659 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/BlockFree.java @@ -51,9 +51,9 @@ public class BlockFree extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java b/src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java index 532cbd5..a037d14 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/CarInTrain.java @@ -38,10 +38,10 @@ public class CarInTrain extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java b/src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java index 9463942..8ef19fb 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/CarOrientation.java @@ -59,7 +59,7 @@ public class CarOrientation extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { 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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java index 6dab371..d10d46e 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java @@ -142,9 +142,9 @@ public abstract class Condition extends BaseClass { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
postForm,String...errors) { inversionOption(formInputs); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } public static Select selector() { diff --git a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java index 8f4467b..435ef4c 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java @@ -114,10 +114,10 @@ public class ConditionList extends Condition implements Iterable{ } @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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java b/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java index 6eec56a..a055459 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java @@ -57,9 +57,9 @@ public class RouteEndBlock extends Condition{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java b/src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java index dacb2a7..69f2c92 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/SwitchIsOn.java @@ -61,10 +61,10 @@ public class SwitchIsOn extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java index 43206f6..c9f6dcc 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainHasTag.java @@ -46,9 +46,9 @@ public class TrainHasTag extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java index 1b3f084..284cb84 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainLength.java @@ -34,9 +34,9 @@ public class TrainLength extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java index 5ca364a..100d329 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainSelect.java @@ -34,9 +34,9 @@ public class TrainSelect extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java index 885141f..d0586ed 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainSpeed.java @@ -33,9 +33,9 @@ public class TrainSpeed extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java index ed67d39..61d9ce3 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java @@ -48,10 +48,10 @@ public class TrainWasInBlock extends Condition { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/moving/Car.java b/src/main/java/de/srsoftware/web4rail/moving/Car.java index c46499d..731f0f4 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Car.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Car.java @@ -243,7 +243,7 @@ public class Car extends BaseClass implements Comparable{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ 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 diff --git a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java index b474cc5..0d392d5 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Locomotive.java @@ -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{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ 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() { diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 09ec77a..0de8930 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -48,15 +48,6 @@ import de.srsoftware.web4rail.tiles.Tile.Status; * @author Stephan Richter, SRSoftware 2020-2021 * */ public class Train extends BaseClass implements Comparable { - - 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 { private static final String SHUNTING = "shunting"; private boolean shunting = false; - private HashSet listeners = new HashSet(); - private BrakeProcessor brakeProcessor; + private PathFinder pathFinder; + public static Object action(HashMap 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 { 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 { 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 { 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 { @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { 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 { } - 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 { 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 { 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 { 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; + } } diff --git a/src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java b/src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java index b49c0e9..7c3f2d4 100644 --- a/src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java +++ b/src/main/java/de/srsoftware/web4rail/threads/BrakeProcessor.java @@ -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); diff --git a/src/main/java/de/srsoftware/web4rail/threads/PathFinder.java b/src/main/java/de/srsoftware/web4rail/threads/PathFinder.java index aef3ded..7ecf634 100644 --- a/src/main/java/de/srsoftware/web4rail/threads/PathFinder.java +++ b/src/main/java/de/srsoftware/web4rail/threads/PathFinder.java @@ -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 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 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; } } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 166c03e..a84a822 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -325,14 +325,14 @@ public abstract class Block extends StretchableTile{ @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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) { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java index 260f92f..5f7e56c 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Bridge.java @@ -75,12 +75,12 @@ public abstract class Bridge extends Tile { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java index db91815..9beccdb 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java @@ -190,7 +190,7 @@ public class Contact extends Tile{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ 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 diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java b/src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java index 6435689..d3a7157 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Decoupler.java @@ -111,7 +111,7 @@ public abstract class Decoupler extends Tile implements Device{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ 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() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java index b2a8bb4..d6a15af 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Relay.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Relay.java @@ -124,7 +124,7 @@ public class Relay extends Tile implements Device{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ 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() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java index 3f5c537..803ba5d 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Signal.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Signal.java @@ -127,7 +127,7 @@ public abstract class Signal extends Tile { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 { form.addTo(aspectEditor); postForm.add(aspectEditor); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } public boolean state(String aspect) { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java b/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java index eceb967..25285a3 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java @@ -56,9 +56,9 @@ public abstract class StretchableTile extends TileWithShadow { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Switch.java b/src/main/java/de/srsoftware/web4rail/tiles/Switch.java index 974bedf..5a14f43 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Switch.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Switch.java @@ -126,7 +126,7 @@ public class Switch extends Tile{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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{ fieldset.id("actionsOff"); actionsOff.list().addTo(fieldset); postForm.add(fieldset); - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } @Override diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java b/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java index 02610f3..49e847a 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/TextDisplay.java @@ -33,9 +33,9 @@ public class TextDisplay extends StretchableTile { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 exclude) { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index 5887355..e92dcf7 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -260,7 +260,7 @@ public abstract class Tile extends BaseClass implements Comparable{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
postForm,String...errors) { Fieldset fieldset = null; if (isSet(train)) { @@ -332,7 +332,7 @@ public abstract class Tile extends BaseClass implements Comparable{ } } - return super.properties(preForm, formInputs, postForm); + return super.properties(preForm, formInputs, postForm,errors); } private static String replace(String line, Entry replacement) { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java index 0b841e6..8ca7fbb 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Turnout.java @@ -116,14 +116,14 @@ public abstract class Turnout extends Tile implements Device{ } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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() { diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java index e82fa4b..26bdbfa 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java @@ -36,10 +36,10 @@ public abstract class TurnoutL extends Turnout { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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 diff --git a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java index 1c5dfde..ec5a003 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java @@ -37,10 +37,10 @@ public abstract class TurnoutR extends Turnout { } @Override - protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + protected Window properties(List
preForm, FormInput formInputs, List
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