overhauled registry

This commit is contained in:
Stephan Richter
2020-12-03 12:11:27 +01:00
parent 559538d55e
commit 50a5508a33
65 changed files with 552 additions and 352 deletions

View File

@@ -12,6 +12,7 @@ import org.json.JSONArray;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.Range;
@@ -233,11 +234,16 @@ public abstract class Block extends StretchableTile implements Comparable<Block>
return this;
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
public static Select selector(Block preselected,Collection<Block> exclude) {
if (isNull(exclude)) exclude = new Vector<Block>();
Select select = new Select(Block.class.getSimpleName());
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
for (Block block : plan.blocks()) {
for (Block block : BaseClass.listElements(Block.class)) {
if (exclude.contains(block)) continue;
Tag opt = select.addOption(block.id(), block);
if (block == preselected) opt.attr("selected", "selected");

View File

@@ -7,6 +7,7 @@ import java.util.Map;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
@@ -100,6 +101,12 @@ public abstract class Bridge extends Tile {
return t("Click other bridge to connect to!");
}
@Override
protected void removeChild(BaseClass child) {
if (child == counterpart) counterpart = null;
plan.place(this);
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
Tag tag = super.tag(replacements);

View File

@@ -11,6 +11,7 @@ import java.util.TreeMap;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.ActionList;
import de.srsoftware.web4rail.tags.Fieldset;
@@ -165,6 +166,11 @@ public class Contact extends Tile{
return super.properties(preForm, formInputs, postForm);
}
@Override
protected void removeChild(BaseClass child) {
if (child == actions) actions = null;
}
public static Select selector(Contact preselect) {
TreeMap<String,Contact> sortedSet = new TreeMap<String, Contact>(); // Map from Name to Contact
for (Contact contact : contactsById.values()) sortedSet.put(contact.toString(), contact);

View File

@@ -2,9 +2,15 @@ package de.srsoftware.web4rail.tiles;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
public abstract class Cross extends Tile {
public abstract Map<Connector,Turnout.State> offsetConnections(Direction from);
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -31,4 +32,9 @@ public class CrossPlus extends Tile{
public List<Direction> possibleDirections() {
return List.of(Direction.EAST,Direction.WEST,Direction.NORTH,Direction.SOUTH);
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -21,4 +22,9 @@ public class DiagES extends Tile{
return new HashMap<>();
}
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -21,4 +22,9 @@ public class DiagNE extends Tile{
return new HashMap<>();
}
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -20,4 +21,9 @@ public class DiagSW extends Tile{
return new HashMap<>();
}
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -22,4 +23,10 @@ public class DiagWN extends Tile{
return new HashMap<>();
}
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -1,4 +1,10 @@
package de.srsoftware.web4rail.tiles;
import de.srsoftware.web4rail.BaseClass;
public class EndE extends Tile{
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -1,4 +1,11 @@
package de.srsoftware.web4rail.tiles;
import de.srsoftware.web4rail.BaseClass;
public class EndN extends Tile{
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -1,4 +1,10 @@
package de.srsoftware.web4rail.tiles;
import de.srsoftware.web4rail.BaseClass;
public class EndS extends Tile{
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -1,3 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class EndW extends Tile{}
import de.srsoftware.web4rail.BaseClass;
public class EndW extends Tile{
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -1,5 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class Eraser extends Tile {
import de.srsoftware.web4rail.BaseClass;
public class Eraser extends Tile {
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
}

View File

@@ -11,6 +11,7 @@ import java.util.concurrent.TimeoutException;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Command;
import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device;
@@ -40,7 +41,6 @@ public class Relay extends Tile implements Device{
private String name = t("Relay");
protected boolean state = true;
private static final HashMap<Id,Relay> relays = new HashMap<Id, Relay>();
public static final boolean STATE_A = true,STATE_B=false;
private static final String LABEL_A = "label_a";
private static final String LABEL_B = "label_b";
@@ -125,7 +125,6 @@ public class Relay extends Tile implements Device{
@Override
public Tile position(int x, int y) {
super.position(x, y);
relays.put(id(), this);
return this;
}
@@ -161,6 +160,11 @@ public class Relay extends Tile implements Device{
}
}
@Override
protected void removeChild(BaseClass child) {
// TODO Auto-generated method stub
}
public Relay setLabel(boolean state, String tx) {
if (state) {
stateLabelA = tx;
@@ -235,19 +239,11 @@ public class Relay extends Tile implements Device{
return super.update(params);
}
public static Collection<Relay> list() {
return relays.values();
}
public static Relay get(Id relayId) {
return relays.get(relayId);
}
public static Select selector(Relay preselected, Collection<Relay> exclude) {
if (isNull(exclude)) exclude = new Vector<Relay>();
Select select = new Select(Relay.class.getSimpleName());
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
for (Relay relay : Relay.list()) {
for (Relay relay : BaseClass.listElements(Relay.class)) {
if (exclude.contains(relay)) continue;
Tag opt = select.addOption(relay.id, relay);
if (relay == preselected) opt.attr("selected", "selected");

View File

@@ -4,6 +4,7 @@ import java.io.IOException;
import java.util.Map;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -28,6 +29,14 @@ public class Shadow extends Tile{
return overlay;
}
@Override
protected void removeChild(BaseClass child) {
if (child == overlay) {
overlay = null;
remove();
}
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
Tag tag = super.tag(replacements);

View File

@@ -7,6 +7,7 @@ import java.util.TreeSet;
import java.util.Vector;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Plan.Direction;
public abstract class Signal extends Tile implements Comparable<Signal>{
@@ -37,6 +38,11 @@ public abstract class Signal extends Tile implements Comparable<Signal>{
}
public abstract boolean isAffectedFrom(Direction dir);
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
public boolean state(String state) {
this.state = state;

View File

@@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -23,18 +24,23 @@ public class StraightH extends StretchableTile{
}
}
@Override
public int width() {
return stretch;
}
@Override
public List<Direction> possibleDirections() {
return List.of(Direction.EAST,Direction.WEST);
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
@Override
protected String stretchType() {
return t("Width");
}
}
@Override
public int width() {
return stretch;
}
}

View File

@@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan.Direction;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -33,6 +34,11 @@ public class StraightV extends StretchableTile{
return List.of(Direction.NORTH,Direction.SOUTH);
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
@Override
protected String stretchType() {
return t("Height");

View File

@@ -11,6 +11,7 @@ import java.util.Vector;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
@@ -43,16 +44,20 @@ public class TextDisplay extends StretchableTile {
formInputs.add(t("Text"),new Input(TEXT, text));
return super.properties(preForm, formInputs, postForm);
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
public static Select selector(TextDisplay preselected,Collection<TextDisplay> exclude) {
if (isNull(exclude)) exclude = new Vector<TextDisplay>();
Select select = new Select(TextDisplay.class.getSimpleName());
new Tag("option").attr("value","0").content(t("unset")).addTo(select);
for (Tile tile : plan.tiles.values()) {
if (!(tile instanceof TextDisplay)) continue;
if (exclude.contains(tile)) continue;
Tag opt = select.addOption(tile.id(), tile);
if (tile == preselected) opt.attr("selected", "selected");
for (TextDisplay display : BaseClass.listElements(TextDisplay.class)) {
if (exclude.contains(display)) continue;
Tag opt = select.addOption(display.id(), display);
if (display == preselected) opt.attr("selected", "selected");
}
return select;
}

View File

@@ -251,10 +251,12 @@ public abstract class Tile extends BaseClass{
return super.properties(preForm, formInputs, postForm);
}
public void remove(Route route) {
routes.remove(route);
@Override
public BaseClass remove() {
plan.stream("remove "+id());
return super.remove();
}
private static String replace(String line, Entry<String, Object> replacement) {
String key = replacement.getKey();
Object val = replacement.getValue();
@@ -280,9 +282,9 @@ public abstract class Tile extends BaseClass{
return routes;
}
public static void saveAll(HashMap<Id, Tile> tiles ,String filename) throws IOException {
public static void saveAll(String filename) throws IOException {
BufferedWriter file = new BufferedWriter(new FileWriter(filename));
for (Tile tile : tiles.values()) {
for (Tile tile : BaseClass.listElements(Tile.class)) {
if (isNull(tile) || tile instanceof Shadow) continue;
file.append(tile.json()+"\n");
}

View File

@@ -9,6 +9,7 @@ import java.util.concurrent.TimeoutException;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Command;
import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device;
@@ -139,6 +140,11 @@ public abstract class Turnout extends Tile implements Device{
}
}
@Override
protected void removeChild(BaseClass child) {
// this class has no child elements
}
public State state() {
return state;
}

View File

@@ -8,7 +8,7 @@ import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
public class TurnoutL extends Turnout {
public abstract class TurnoutL extends Turnout {
private static final String LEFT = "left";

View File

@@ -8,7 +8,7 @@ import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
public class TurnoutR extends Turnout {
public abstract class TurnoutR extends Turnout {
private static final String RIGHT = "right";