From 00e5fc905834df52e19929dbe1913b255445dc82 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 8 Jan 2021 15:45:27 +0100 Subject: [PATCH] implemented RouteEndBlock condition --- .gitignore | 10 ++- pom.xml | 2 +- .../translations/Application.de.translation | 3 + .../web4rail/conditions/Condition.java | 1 + .../web4rail/conditions/RouteEndBlock.java | 71 +++++++++++++++++++ .../de/srsoftware/web4rail/tiles/Block.java | 11 +-- .../web4rail/tiles/BlockContact.java | 8 +-- .../de/srsoftware/web4rail/tiles/Contact.java | 2 + .../de/srsoftware/web4rail/tiles/Tile.java | 10 +-- 9 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java diff --git a/.gitignore b/.gitignore index 570b5b6..d943149 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,11 @@ -/Debug/ *.pyc *.log +*.plan +*.cars +*.cu +*.routes +*.trains +/backup /bin/ +/Debug/ /target/ -/default.* -/backup diff --git a/pom.xml b/pom.xml index 88e7f29..bfcadc4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.srsoftware web4rail - 1.3.8 + 1.3.9 Web4Rail jar Java Model Railway Control diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation index 48c572a..335ca3c 100644 --- a/resources/translations/Application.de.translation +++ b/resources/translations/Application.de.translation @@ -211,6 +211,9 @@ reverse : wenden Reversed {}. : {} umgedreht. RIGHT : rechts Right port\: : Port für rechts +RouteEndBlock : Routen-End-Block +Route does not end at {}. : Route endet nicht in {}. +Route ends at {}. : Route endet in {}. Route properties : Routen-Eigenschaften Routes : Fahrstraßen Routes using this tile : Fahrstraßen, die diesen Abschnitt verwenden diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java index 24ed3fc..4d79843 100644 --- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java +++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java @@ -121,6 +121,7 @@ public abstract class Condition extends BaseClass { CarOrientation.class, OrCondition.class, PushPullTrain.class, + RouteEndBlock.class, TrainHasTag.class, TrainLength.class, TrainSelect.class, diff --git a/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java b/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java new file mode 100644 index 0000000..f39536d --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/conditions/RouteEndBlock.java @@ -0,0 +1,71 @@ +package de.srsoftware.web4rail.conditions; + +import java.util.HashMap; +import java.util.List; + +import org.json.JSONObject; + +import de.srsoftware.web4rail.BaseClass; +import de.srsoftware.web4rail.Route; +import de.srsoftware.web4rail.Window; +import de.srsoftware.web4rail.tags.Fieldset; +import de.srsoftware.web4rail.tiles.Block; + +public class RouteEndBlock extends Condition{ + + private static final String BLOCK = Block.class.getSimpleName(); + private Block block; + + private RouteEndBlock block(Block block) { + this.block = block; + return this; + } + + @Override + public boolean fulfilledBy(Context context) { + if (isNull(context)) return false; + Route route = context.route(); + if (isNull(route)) return false; + return route.endBlock() == block; + } + + @Override + public JSONObject json() { + return super.json().put(BLOCK, block.id()); + } + + public Condition load(JSONObject json) { + super.load(json); + block(Block.get(new Id(json.getString(BLOCK)))); + return this; + } + + @Override + protected Window properties(List
preForm, FormInput formInputs, List
postForm) { + formInputs.add(t("Select block"), Block.selector(block, null)); + return super.properties(preForm, formInputs, postForm); + } + + @Override + protected void removeChild(BaseClass child) { + if (child == block) block = null; + super.removeChild(child); + } + + @Override + public String toString() { + if (block == null) return "["+t("Click here to select block!")+"]"; + return t(inverted ? "Route does not end at {}.":"Route ends at {}.",block); + } + + + @Override + protected Object update(HashMap params) { + if (!params.containsKey(BLOCK)) return t("No block id passed to RouteEndBlock.update()!"); + Id bid = new Id(params.get(BLOCK)); + Block block = Block.get(bid); + if (block == null) return t("No block with id {} found!",bid); + this.block = block; + return super.update(params); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Block.java b/src/main/java/de/srsoftware/web4rail/tiles/Block.java index 5c967ae..0fc5f57 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Block.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Block.java @@ -158,7 +158,7 @@ public abstract class Block extends StretchableTile{ if (!internalContacts.isEmpty()) { Tag ul = new Tag("ul"); for (BlockContact contact : internalContacts) { - Tag li = new Tag("li").content(contact.toString()+NBSP); + Tag li = contact.link("span", contact).content(NBSP).addTo(new Tag("li")); contact.button(t("learn"),Map.of(ACTION,ACTION_ANALYZE)).addTo(li); contact.button(t("delete"),Map.of(ACTION,ACTION_DROP)).addTo(li); li.addTo(ul); @@ -224,10 +224,9 @@ public abstract class Block extends StretchableTile{ json.put(WAIT_TIMES, jWaitTimes); JSONObject jContacts = null; for (BlockContact contact : internalContacts) { - int addr = contact.addr(); - if (addr != 0) { + if (contact.addr() != 0) { if (isNull(jContacts)) jContacts = new JSONObject(); - jContacts.put(contact.id().toString(), contact.addr()); + jContacts.put(contact.id().toString(), contact.json()); } } if (isSet(jContacts)) json.put(CONTACT, jContacts); @@ -260,7 +259,9 @@ public abstract class Block extends StretchableTile{ } if (json.has(CONTACT)) { JSONObject jContact = json.getJSONObject(CONTACT); - for (String key : jContact.keySet()) new BlockContact(this).addr(jContact.getInt(key)); + for (String key : jContact.keySet()) { + new BlockContact(this).load(jContact.getJSONObject(key)); + } } return super.load(json); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java b/src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java index 321e7e2..68847f6 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java @@ -5,7 +5,6 @@ import java.util.Map; import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Route; -import de.srsoftware.web4rail.Window; public class BlockContact extends Contact { @@ -27,12 +26,7 @@ public class BlockContact extends Contact { Block block = ((Block)parent()); return new Id(block.name+":"+block.indexOf(this)); } - - @Override - public Window properties() { - return parent().properties(); - } - + @Override public Route route() { return ((Block)parent()).route(); diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java index b2808f5..a64cf47 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Contact.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Contact.java @@ -171,6 +171,8 @@ public class Contact extends Tile{ contact.remove(); if (contact instanceof BlockContact) return contact.properties(); return t("Removed {}.",id); + case ACTION_PROPS: + return contact.properties(); case ACTION_UPDATE: return plan.update(params); } diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index c545003..839380d 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -159,7 +159,7 @@ public abstract class Tile extends BaseClass implements Comparable{ public JSONObject json() { JSONObject json = super.json(); json.put(TYPE, getClass().getSimpleName()); - json.put(POS, new JSONObject(Map.of(X,x,Y,y))); + if (isSet(x) && isSet(y)) json.put(POS, new JSONObject(Map.of(X,x,Y,y))); if (isSet(route)) json.put(ROUTE, route.id()); if (isSet(oneWay)) json.put(ONEW_WAY, oneWay); if (disabled) json.put(DISABLED, true); @@ -206,9 +206,11 @@ public abstract class Tile extends BaseClass implements Comparable{ public Tile load(JSONObject json) { if (json.has(ID)) json.remove(ID); // id should be created from cordinates super.load(json); - JSONObject pos = json.getJSONObject(POS); - x = pos.getInt(X); - y = pos.getInt(Y); + if (json.has(POS)) { + JSONObject pos = json.getJSONObject(POS); + x = pos.getInt(X); + y = pos.getInt(Y); + } if (json.has(DISABLED)) disabled = json.getBoolean(DISABLED); if (json.has(LENGTH)) length = json.getInt(LENGTH); if (json.has(ONEW_WAY)) oneWay = Direction.valueOf(json.getString(ONEW_WAY));