From fd3ff8e43e4007866dc8d7240c0ac97f71904348 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 6 Oct 2020 16:23:42 +0200 Subject: [PATCH] started restructuring --- resources/js/plan.js | 22 ++-- .../de/srsoftware/web4rail/Application.java | 2 - .../de/srsoftware/web4rail/Constants.java | 29 +++++ .../de/srsoftware/web4rail/ControlUnit.java | 13 +- .../java/de/srsoftware/web4rail/Plan.java | 113 +++++------------- .../java/de/srsoftware/web4rail/Route.java | 8 +- .../de/srsoftware/web4rail/moving/Train.java | 7 +- 7 files changed, 90 insertions(+), 104 deletions(-) create mode 100644 src/main/java/de/srsoftware/web4rail/Constants.java diff --git a/resources/js/plan.js b/resources/js/plan.js index 09c8a0c..7f74f3e 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -25,14 +25,6 @@ function addMessage(txt){ messageTimer = setInterval(fadeMessage,100); } -function fadeMessage(){ - messageOpacity -= 10; - if (messageOpacity < 1) window.clearInterval(messageTimer); - var o = messageOpacity; - if (o>OPAC) o=OPAC; - $('#messages').css('opacity',o/OPAC); -} - function addTile(x,y){ return request({action:mode,tile:selected.id,x:x,y:y}); } @@ -99,6 +91,14 @@ function enableMove(ev){ return false; // otherwise body.click would also be triggered } +function fadeMessage(){ + messageOpacity -= 10; + if (messageOpacity < 1) window.clearInterval(messageTimer); + var o = messageOpacity; + if (o>OPAC) o=OPAC; + $('#messages').css('opacity',o/OPAC); +} + function heartbeat(data){ $('#heartbeat').show().fadeOut(2000); return false; @@ -168,8 +168,10 @@ function request(data){ } function runAction(ev){ -// console.log("runAction: ",ev.target.id); - return request({action:ev.target.id,file:'default'}); // TODO: ask for name + var clicked = ev.target; + var realm = clicked.hasAttribute('class') ? clicked.getAttribute('class') : null; + //console.log("runAction: ",{action: clicked.id, realm:realm}); + return request({action:ev.target.id,realm:realm}); // TODO: ask for name } function stream(ev){ diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java index f95fe36..b69bbbc 100644 --- a/src/main/java/de/srsoftware/web4rail/Application.java +++ b/src/main/java/de/srsoftware/web4rail/Application.java @@ -10,8 +10,6 @@ import java.io.OutputStreamWriter; import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; import java.net.URI; -import java.net.URL; -import java.net.URLClassLoader; import java.net.URLDecoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/src/main/java/de/srsoftware/web4rail/Constants.java b/src/main/java/de/srsoftware/web4rail/Constants.java new file mode 100644 index 0000000..7a4ff72 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/Constants.java @@ -0,0 +1,29 @@ +package de.srsoftware.web4rail; + +public interface Constants { + public static final String ACTION = "action"; + public static final String ACTION_ADD = "add"; + public static final String ACTION_ANALYZE = "analyze"; + public static final String ACTION_CLICK = "click"; + public static final String ACTION_CONNECT = "connect"; + public static final String ACTION_EMERGENCY = "emergency"; + public static final String ACTION_FASTER10 = "faster10"; + public static final String ACTION_MOVE = "move"; + public static final String ACTION_POWER = "power"; + public static final String ACTION_PROPS = "props"; + public static final String ACTION_SAVE = "save"; + public static final String ACTION_SLOWER10 = "slower10"; + public static final String ACTION_STOP = "stop"; + public static final String ACTION_TURN = "turn"; + public static final String ACTION_UPDATE = "update"; + + public static final String REALM = "realm"; + public static final String REALM_CAR = "car"; + public static final String REALM_CU = "cu"; + public static final String REALM_LOCO = "loco"; + public static final String REALM_ROUTE = "route"; + public static final String REALM_TILE = "tile"; + public static final String REALM_TRAIN = "train"; + + public static final String ID = "id"; +} diff --git a/src/main/java/de/srsoftware/web4rail/ControlUnit.java b/src/main/java/de/srsoftware/web4rail/ControlUnit.java index 1ef016c..639c47a 100644 --- a/src/main/java/de/srsoftware/web4rail/ControlUnit.java +++ b/src/main/java/de/srsoftware/web4rail/ControlUnit.java @@ -22,7 +22,7 @@ import de.srsoftware.web4rail.tags.Form; import de.srsoftware.web4rail.tags.Input; import de.srsoftware.web4rail.tags.Label; -public class ControlUnit extends Thread{ +public class ControlUnit extends Thread implements Constants{ private static final Logger LOG = LoggerFactory.getLogger(ControlUnit.class); private static final String DEFAULT_HOST = "localhost"; private static final int DEFAULT_PORT = 4303; @@ -117,8 +117,8 @@ public class ControlUnit extends Thread{ public Object properties() { Window win = new Window("cu-props", t("Properties of the control unit")); Form form = new Form(); - new Input(Plan.ACTION,Plan.ACTION_UPDATE).hideIn(form); - new Input(Plan.REALM,Plan.REALM_CU).hideIn(form); + new Input(ACTION,ACTION_UPDATE).hideIn(form); + new Input(REALM,REALM_CU).hideIn(form); Fieldset fieldset = new Fieldset(t("Server connection")); new Input(HOST,host).addTo(new Label(t("Hostname"))).addTo(fieldset); new Input(PORT,port).attr("type", "numeric").addTo(new Label(t("Port"))).addTo(fieldset); @@ -228,4 +228,11 @@ public class ControlUnit extends Thread{ if (json.has(BUS)) bus = json.getInt(BUS); if (json.has(HOST)) host = json.getString(HOST); } + + public Object process(HashMap params) { + String action = params.get(ACTION); + if (action == null) throw new NullPointerException(ACTION+" should not be null!"); + + return null; + } } diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index 54eafcc..a92156d 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -59,7 +59,7 @@ import de.srsoftware.web4rail.tiles.TurnoutRN; import de.srsoftware.web4rail.tiles.TurnoutRS; import de.srsoftware.web4rail.tiles.TurnoutRW; -public class Plan { +public class Plan implements Constants{ public enum Direction{ NORTH, SOUTH, EAST, WEST; @@ -88,43 +88,14 @@ public class Plan { } } - public static final String ACTION = "action"; - private static final String ACTION_ADD = "add"; - private static final String ACTION_ANALYZE = "analyze"; - private static final String ACTION_MOVE = "move"; - private static final String ACTION_CLICK = "click"; - private static final String ACTION_SAVE = "save"; - public static final String ACTION_UPDATE = "update"; + private static final String TILE = "tile"; private static final Logger LOG = LoggerFactory.getLogger(Plan.class); private static final String X = "x"; private static final String Y = "y"; private static final String FILE = "file"; private static final String DIRECTION = "direction"; - private static final String ACTION_ROUTE = "openRoute"; - public static final String ID = "id"; - private static final String ROUTE = "route"; private static final HashMap clients = new HashMap(); - private static final String ACTION_TRAIN = "train"; - private static final String ACTION_LOCOS = "locos"; - private static final String ACTION_TRAINS = "trains"; - private static final String ACTION_CAR = "car"; - public static final String ACTION_ADD_LOCO = "addLoco"; - public static final String ACTION_ADD_TRAIN = "addTrain"; - public static final String ACTION_CU_PROPS = "cuProps"; - public static final String ACTION_UPDATE_CU = "update-cu"; - public static final String REALM = "realm"; - public static final String REALM_CU = "cu"; - public static final String REALM_ROUTE = "route"; - public static final String REALM_TILE = "tile"; - public static final String REALM_CAR = "car"; - private static final String ACTION_CONNECT = "connect"; - private static final String ACTION_POWER = "power"; - private static final String ACTION_EMERGENCY = "emergency"; - public static final String ACTION_FASTER10 = "faster10"; - public static final String ACTION_SLOWER10 = "slower10"; - public static final String ACTION_STOP = "stop"; - public static final String ACTION_TURN = "turn"; public HashMap tiles = new HashMap(); private HashSet blocks = new HashSet(); @@ -139,7 +110,7 @@ public class Plan { private Tag actionMenu() throws IOException { Tag actionMenu = new Tag("div").clazz("actions").content(t("Actions")); Tag actions = new Tag("div").clazz("list").content(""); - new Div("power").content(t("Toggle power")).addTo(actions); + new Div("power").clazz(REALM_CU).content(t("Toggle power")).addTo(actions); new Div("save").content(t("Save plan")).addTo(actions); new Div("analyze").content(t("Analyze plan")).addTo(actions); return actions.addTo(actionMenu); @@ -260,7 +231,7 @@ public class Plan { private Tag hardwareMenu() throws IOException { Tag tileMenu = new Tag("div").clazz("hardware").content(t("Hardware")); Tag list = new Tag("div").clazz("list").content(""); - new Div(ACTION_CU_PROPS).content(t("Control unit")).addTo(list); + new Div(ACTION_PROPS).content(t("Control unit")).addTo(list); return list.addTo(tileMenu); } @@ -319,10 +290,9 @@ public class Plan { return plan; } - private Object locoAction(HashMap params) throws IOException { - + private Object locoAction(HashMap params) throws IOException { switch (params.get(ACTION)) { - case ACTION_ADD_LOCO: + case ACTION_ADD: new Locomotive(params.get(Locomotive.NAME)); break; case ACTION_FASTER10: @@ -423,52 +393,23 @@ public class Plan { public Object process(HashMap params) { try { + String realm = params.get(REALM); + if (realm == null) throw new NullPointerException(REALM+" should not be null!"); String action = params.get(ACTION); - if (action == null) throw new NullPointerException(ACTION+" should not be null!"); - switch (action) { - case ACTION_ADD: - return addTile(params.get(TILE),params.get(X),params.get(Y),null); - case ACTION_ADD_LOCO: - case ACTION_FASTER10: - case ACTION_STOP: - case ACTION_SLOWER10: - case ACTION_TURN: + switch (realm) { + case REALM_CAR: + return carAction(params); + case REALM_CU: + return controlUnit.process(params); + case REALM_LOCO: return locoAction(params); - case ACTION_ADD_TRAIN: - case ACTION_TRAIN: + case REALM_TILE: + return tileAction(params); + case REALM_TRAIN: return trainAction(params); - case ACTION_ANALYZE: - return analyze(); - case ACTION_CAR: - return carAction(params); - case ACTION_CLICK: - return click(get(params.get(Tile.ID),true)); - case ACTION_CONNECT: - return connect(params); - case ACTION_CU_PROPS: - return cuProps(params); - case ACTION_LOCOS: - return Locomotive.manager(); - case ACTION_EMERGENCY: - power = true; - return togglePower(); - case ACTION_MOVE: - return moveTile(params.get(DIRECTION),params.get(Tile.ID)); - case ACTION_POWER: - return togglePower(); - case ACTION_ROUTE: - return routeProperties(Integer.parseInt(params.get(ID))); - case ACTION_SAVE: - return saveTo(params.get(FILE)); - case ACTION_TRAINS: - return Train.manager(); - case ACTION_UPDATE: - return update(params); - default: - LOG.warn("Unknown action: {}",action); } - return t("Unknown action: {}",action); + return t("Unknown realm: {}",realm); } catch (Exception e) { String msg = e.getMessage(); if (msg == null || msg.isEmpty()) msg = t("An unknown error occured!"); @@ -477,6 +418,14 @@ public class Plan { } } + private Object tileAction(HashMap params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, IOException { + switch (params.get(Plan.ACTION)) { + case ACTION_ADD: + return addTile(params.get(TILE),params.get(X),params.get(Y),null); + } + return null; + } + private Object togglePower() throws IOException { power = !power; String PW = power?"ON":"OFF"; @@ -487,12 +436,12 @@ public class Plan { private Object trainAction(HashMap params) throws IOException { LOG.debug("Params: {}",params); switch (params.get(ACTION)) { - case ACTION_ADD_TRAIN: + case ACTION_ADD: Locomotive loco = (Locomotive) Locomotive.get(params.get(Train.LOCO_ID)); if (loco == null) return t("unknown locomotive: {}",params.get(Locomotive.ID)); new Train(loco); break; - case ACTION_TRAIN: + case ACTION_PROPS: Object result = Train.action(params); if (!(result instanceof Train)) return result; break; @@ -624,8 +573,8 @@ public class Plan { private Tag trainMenu() throws IOException { Tag tileMenu = new Tag("div").clazz("trains").content(t("Trains")); Tag tiles = new Tag("div").clazz("list").content(""); - new Div(ACTION_TRAINS).content(t("Manage trains")).addTo(tiles); - new Div(ACTION_LOCOS).content(t("Manage locos")).addTo(tiles); + new Div(ACTION_PROPS).clazz(REALM_TRAIN).content(t("Manage trains")).addTo(tiles); + new Div(ACTION_PROPS).clazz(REALM_LOCO).content(t("Manage locos")).addTo(tiles); return tiles.addTo(tileMenu); } @@ -642,7 +591,7 @@ public class Plan { break; case REALM_ROUTE: Route route = routes.get(Integer.parseInt(params.get(ID))); - if (route == null) return t("Unknown route: {}",params.get(ROUTE)); + if (route == null) return t("Unknown route: {}",params.get(ID)); route.update(params); break; case REALM_TILE: diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java index a09eee8..b2c2218 100644 --- a/src/main/java/de/srsoftware/web4rail/Route.java +++ b/src/main/java/de/srsoftware/web4rail/Route.java @@ -38,7 +38,7 @@ import de.srsoftware.web4rail.tiles.Tile; import de.srsoftware.web4rail.tiles.Turnout; import de.srsoftware.web4rail.tiles.Turnout.State; -public class Route { +public class Route implements Constants{ private static final Logger LOG = LoggerFactory.getLogger(Route.class); static final String NAME = "name"; static final String PATH = "path"; @@ -367,9 +367,9 @@ public class Route { public Tag propForm() { Form form = new Form(); - new Input(Plan.ACTION, Plan.ACTION_UPDATE).hideIn(form); - new Input(Plan.REALM,Plan.REALM_ROUTE).hideIn(form); - new Input(Plan.ID,id()).hideIn(form); + new Input(ACTION, ACTION_UPDATE).hideIn(form); + new Input(REALM,REALM_ROUTE).hideIn(form); + new Input(ID,id()).hideIn(form); Tag label = new Tag("label").content(t("name:")); new Tag("input").attr("type", "text").attr(NAME,"name").attr("value", name()).addTo(label); diff --git a/src/main/java/de/srsoftware/web4rail/moving/Train.java b/src/main/java/de/srsoftware/web4rail/moving/Train.java index 477be55..05a50f9 100644 --- a/src/main/java/de/srsoftware/web4rail/moving/Train.java +++ b/src/main/java/de/srsoftware/web4rail/moving/Train.java @@ -20,7 +20,7 @@ import org.slf4j.LoggerFactory; import de.keawe.tools.translations.Translation; import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Application; -import de.srsoftware.web4rail.Plan; +import de.srsoftware.web4rail.Constants; import de.srsoftware.web4rail.Plan.Direction; import de.srsoftware.web4rail.Route; import de.srsoftware.web4rail.Window; @@ -36,7 +36,7 @@ import de.srsoftware.web4rail.tiles.Contact; import de.srsoftware.web4rail.tiles.Signal; import de.srsoftware.web4rail.tiles.Tile; -public class Train { +public class Train implements Constants { private static final Logger LOG = LoggerFactory.getLogger(Train.class); private static final HashMap trains = new HashMap<>(); @@ -233,7 +233,8 @@ public class Train { list.addTo(win); Form form = new Form(); - new Input(Plan.ACTION, Plan.ACTION_ADD_TRAIN).hideIn(form); + new Input(ACTION, ACTION_ADD).hideIn(form); + new Input(REALM,REALM_TRAIN).hideIn(form); Fieldset fieldset = new Fieldset(t("add new train")); new Input(Train.NAME, t("new train")).addTo(new Label(t("Name:")+" ")).addTo(fieldset);