From b23be0fcdcb7d4bff85494cc63aedad9a64a5bc6 Mon Sep 17 00:00:00 2001 From: Stephan Richter <s.richter@srsoftware.de> Date: Sun, 14 Nov 2021 00:07:25 +0100 Subject: [PATCH] usability improvements --- pom.xml | 2 +- .../translations/Application.de.translation | 2 ++ .../de/srsoftware/web4rail/BaseClass.java | 1 + .../web4rail/actions/ActionList.java | 2 +- .../actions/DetermineTrainInBlock.java | 3 ++- .../web4rail/conditions/TrainWasInBlock.java | 22 ++++++++++++++----- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 887d090..567d640 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.srsoftware</groupId> <artifactId>web4rail</artifactId> - <version>1.5.32</version> + <version>1.5.33</version> <name>Web4Rail</name> <packaging>jar</packaging> <description>Java Model Railway Control</description> diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index a57d7e7..bd8c8be 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -463,8 +463,10 @@ train has tag "{}" : Zug hat Markierung „{}“ TrainHasTag : Zug hat Markierung train is a push-pull train : Zug ist ein Wendezug train is faster than {} {} : Zug ist schneller als {} {} +Train is in "{}" : Zug ist in „{}“ train is longer than {} {} : Zug ist länger als {} {} train is not a push-pull train : Zug ist kein Wendezug +Train is not in "{}" : Zug ist nicht in „{}“ train is not shunting : Zug rangiert nicht train is shorter than {} {} : Zug ist kürzer als {} {} TrainIsShunting : Rangierfahrt diff --git a/src/main/java/de/srsoftware/web4rail/BaseClass.java b/src/main/java/de/srsoftware/web4rail/BaseClass.java index 6a7ad01..00bd60a 100644 --- a/src/main/java/de/srsoftware/web4rail/BaseClass.java +++ b/src/main/java/de/srsoftware/web4rail/BaseClass.java @@ -377,6 +377,7 @@ public abstract class BaseClass implements Constants{ @SuppressWarnings("unchecked") public static <T extends BaseClass> T get(Id id) { + if (isNull(id)) return null; return (T) registry.get(id); } diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java index 5bbcd49..bdf72ca 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java +++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java @@ -54,7 +54,7 @@ public class ActionList extends Action implements Iterable<Action>{ Action action = Action.create(type,this); if (action instanceof Action) { add(action); - return context().properties(); + return action.properties(); } return new Tag("span").content(t("Unknown action type: {}",type)).addTo(actionTypeForm()); } diff --git a/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java b/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java index 810a111..a6a5f70 100644 --- a/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java +++ b/src/main/java/de/srsoftware/web4rail/actions/DetermineTrainInBlock.java @@ -83,13 +83,14 @@ public class DetermineTrainInBlock extends Action { @Override protected Object update(Params params) { LOG.debug("update: {}",params); + parked = ("on".equals(params.get(PARKED_TRAIN))); if (params.containsKey(BLOCK)) { Tile tile = plan.get(new Id(params.getString(BLOCK)), true); if (tile instanceof Block) { block = (Block) tile; + return properties(); } else return t("Clicked tile is not a {}!",t("block")); } - parked = ("on".equals(params.get(PARKED_TRAIN))); return context().properties(); } } diff --git a/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java b/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java index f553b72..5fac21f 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/TrainWasInBlock.java @@ -7,6 +7,7 @@ import org.json.JSONObject; import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.BaseClass; +import de.srsoftware.web4rail.LoadCallback; import de.srsoftware.web4rail.Params; import de.srsoftware.web4rail.moving.Train; import de.srsoftware.web4rail.tags.Fieldset; @@ -31,7 +32,8 @@ public class TrainWasInBlock extends Condition { @Override public boolean fulfilledBy(Context context) { Train train = context.train(); - if (isNull(train)) return false; + if (isNull(train)) return false; + if (count == 0) return (train.currentBlock() == block) != inverted; return train.lastBlocks(count).contains(block) != inverted; } @@ -42,8 +44,14 @@ public class TrainWasInBlock extends Condition { public Condition load(JSONObject json) { super.load(json); - if (json.has(BLOCK)) block(Block.get(new Id(json.getString(BLOCK)))); if (json.has(COUNT)) count = json.getInt(COUNT); + new LoadCallback() { + + @Override + public void afterLoad() { + if (json.has(BLOCK)) block(Block.get(Id.from(json, BLOCK))); + } + }; return this; } @@ -63,18 +71,22 @@ public class TrainWasInBlock extends Condition { @Override public String toString() { if (block == null) return "["+t("Click here to select block!")+"]"; + if (count == 0) return t(inverted ? "Train is not in \"{}\"" : "Train is in \"{}\"", block); return t(inverted ? "{} not within last {} blocks of train":"{} within last {} blocks of train",block,count); } @Override protected Object update(Params params) { - if (!params.containsKey(BLOCK)) return t("No block id passed to TrainWasInBlock.update()!"); - Id bid = new Id(params.getString(BLOCK)); + Id bid = Id.from(params, BLOCK); Tile tile = BaseClass.get(bid); if (tile instanceof Shadow) tile = ((Shadow)tile).overlay(); - if (tile instanceof Block) block = (Block) tile; if (params.containsKey(COUNT)) count=params.getInt(COUNT); + if (tile instanceof Block) { + block = (Block) tile; + super.update(params); + return properties(); + } return super.update(params); } }