Browse Source

started implementing route properties

lookup-tables
Stephan Richter 5 years ago
parent
commit
4ee75d0a53
  1. 2
      resources/css/style.css
  2. 19
      resources/js/plan.js
  3. 18
      src/main/java/de/srsoftware/web4rail/Connector.java
  4. 25
      src/main/java/de/srsoftware/web4rail/Plan.java
  5. 33
      src/main/java/de/srsoftware/web4rail/Route.java
  6. 2
      src/main/java/de/srsoftware/web4rail/Window.java
  7. 2
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  8. 2
      src/main/java/de/srsoftware/web4rail/tiles/Signal.java
  9. 2
      src/main/java/de/srsoftware/web4rail/tiles/SignalE.java
  10. 2
      src/main/java/de/srsoftware/web4rail/tiles/SignalN.java
  11. 2
      src/main/java/de/srsoftware/web4rail/tiles/SignalS.java
  12. 2
      src/main/java/de/srsoftware/web4rail/tiles/SignalW.java

2
resources/css/style.css

@ -105,7 +105,7 @@ svg circle{
background: yellow; background: yellow;
} }
#tile-properties{ .window{
position: fixed; position: fixed;
top: 10px; top: 10px;
bottom: 10px; bottom: 10px;

19
resources/js/plan.js

@ -71,6 +71,10 @@ function closeMenu(ev){
return false; return false;
} }
function closeWindows(){
$('.window').remove();
}
function enableAdding(ev){ function enableAdding(ev){
// console.log('enableAdding:',ev); // console.log('enableAdding:',ev);
if (selected != null) $(selected).css('border',''); if (selected != null) $(selected).css('border','');
@ -125,6 +129,21 @@ function moveTile(x,y){
}); });
} }
function openRoute(id){
closeWindows();
$.ajax({
url : PLAN,
method : POST,
data : {action:'openRoute',id:id},
success: function(resp){
if (resp.startsWith('<')){
$('body').append($(resp));
} else {
addMessage(resp);
}
}
});
}
function runAction(ev){ function runAction(ev){
console.log("runAction: ",ev.target.id); console.log("runAction: ",ev.target.id);
$.ajax({ $.ajax({

18
src/main/java/de/srsoftware/web4rail/Connector.java

@ -2,9 +2,9 @@ package de.srsoftware.web4rail;
public class Connector { public class Connector {
private Plan.Direction from; public Plan.Direction from;
private int y; public int y;
private int x; public int x;
public Connector(int x, int y, Plan.Direction from) { public Connector(int x, int y, Plan.Direction from) {
this.x = x; this.x = x;
@ -12,18 +12,6 @@ public class Connector {
this.from = from; this.from = from;
} }
public Plan.Direction from() {
return from;
}
public int x() {
return x;
}
public int y() {
return y;
}
@Override @Override
public String toString() { public String toString() {
return getClass().getSimpleName()+"("+x+", "+y+", from "+from+")"; return getClass().getSimpleName()+"("+x+", "+y+", from "+from+")";

25
src/main/java/de/srsoftware/web4rail/Plan.java

@ -38,6 +38,7 @@ import de.srsoftware.web4rail.tiles.EndS;
import de.srsoftware.web4rail.tiles.EndW; import de.srsoftware.web4rail.tiles.EndW;
import de.srsoftware.web4rail.tiles.Eraser; import de.srsoftware.web4rail.tiles.Eraser;
import de.srsoftware.web4rail.tiles.Shadow; import de.srsoftware.web4rail.tiles.Shadow;
import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.SignalE; import de.srsoftware.web4rail.tiles.SignalE;
import de.srsoftware.web4rail.tiles.SignalN; import de.srsoftware.web4rail.tiles.SignalN;
import de.srsoftware.web4rail.tiles.SignalS; import de.srsoftware.web4rail.tiles.SignalS;
@ -71,9 +72,12 @@ public class Plan {
private static final String Y = "y"; private static final String Y = "y";
private static final String FILE = "file"; private static final String FILE = "file";
private static final String DIRECTION = "direction"; private static final String DIRECTION = "direction";
private static final String ACTION_ROUTE = "openRoute";
private static final String ID = "id";
private HashMap<Integer,HashMap<Integer,Tile>> tiles = new HashMap<Integer,HashMap<Integer,Tile>>(); private HashMap<Integer,HashMap<Integer,Tile>> tiles = new HashMap<Integer,HashMap<Integer,Tile>>();
private HashSet<Block> blocks = new HashSet<Block>(); private HashSet<Block> blocks = new HashSet<Block>();
private HashMap<String, Route> routes = new HashMap<String, Route>();
private Tag actionMenu() throws IOException { private Tag actionMenu() throws IOException {
Tag tileMenu = new Tag("div").clazz("actions").content(t("Actions")); Tag tileMenu = new Tag("div").clazz("actions").content(t("Actions"));
@ -100,20 +104,25 @@ public class Plan {
for (Block block : blocks) { for (Block block : blocks) {
for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con)); for (Connector con : block.startPoints()) routes.addAll(follow(new Route().start(block),con));
} }
this.routes.clear();
for (Route route : routes) { for (Route route : routes) {
route.start().add(route); route.start().add(route);
LOG.debug("found route: {}",route); this.routes.put(route.id(), route);
} }
return t("Found {} routes.",routes.size()); return t("Found {} routes.",routes.size());
} }
private Collection<Route> follow(Route route, Connector con) { private Collection<Route> follow(Route route, Connector con) {
Tile tile = get(con.x(),con.y()); Tile tile = get(con.x,con.y);
Vector<Route> results = new Vector<>(); Vector<Route> results = new Vector<>();
if (tile == null) return results; if (tile == null) return results;
Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile); Tile added = route.add(tile instanceof Shadow ? ((Shadow)tile).overlay() : tile);
if (added instanceof Signal) {
Signal signal = (Signal) added;
if (signal.isAffectedFrom(con.from)) route.addSignal(signal);
}
if (added instanceof Block) return List.of(route); if (added instanceof Block) return List.of(route);
List<Connector> connectors = tile.connections(con.from()); List<Connector> connectors = tile.connections(con.from);
List<Route>routes = route.multiply(connectors.size()); List<Route>routes = route.multiply(connectors.size());
for (int i=0; i<connectors.size(); i++) results.addAll(follow(routes.get(i),connectors.get(i))); for (int i=0; i<connectors.size(); i++) results.addAll(follow(routes.get(i),connectors.get(i)));
return results; return results;
@ -247,6 +256,8 @@ public class Plan {
return moveTile(params.get(DIRECTION),params.get(X),params.get(Y)); return moveTile(params.get(DIRECTION),params.get(X),params.get(Y));
case ACTION_PROPS: case ACTION_PROPS:
return propMenu(params.get(X),params.get(Y)); return propMenu(params.get(X),params.get(Y));
case ACTION_ROUTE:
return routeProperties(params.get(ID));
case ACTION_SAVE: case ACTION_SAVE:
return saveTo(params.get(FILE)); return saveTo(params.get(FILE));
case ACTION_UPDATE: case ACTION_UPDATE:
@ -260,6 +271,12 @@ public class Plan {
} }
} }
private Object routeProperties(String routeId) {
Route route = routes.get(routeId);
if (route == null) return t("Could not find route \"{}\"",routeId);
return route.properties();
}
private Page update(HashMap<String, String> params) throws IOException { private Page update(HashMap<String, String> params) throws IOException {
return update(Integer.parseInt(params.get("x")),Integer.parseInt(params.get("y")),params); return update(Integer.parseInt(params.get("x")),Integer.parseInt(params.get("y")),params);
} }

33
src/main/java/de/srsoftware/web4rail/Route.java

@ -3,7 +3,10 @@ package de.srsoftware.web4rail;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
import de.keawe.tools.translations.Translation;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tiles.Block; import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.Signal; import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.Tile; import de.srsoftware.web4rail.tiles.Tile;
@ -11,16 +14,25 @@ public class Route {
private Vector<Tile> path; private Vector<Tile> path;
private Vector<Signal> signals; private Vector<Signal> signals;
private Vector<Contact> contacts;
private String id; private String id;
private String name; private String name;
public Tile add(Tile tile) { public Tile add(Tile tile) {
path.add(tile); path.add(tile);
if (tile instanceof Contact) contacts.add((Contact) tile);
return tile; return tile;
}
public Route addSignal(Signal signal) {
signals.add(signal);
return this;
} }
protected Route clone() { protected Route clone() {
Route clone = new Route(); Route clone = new Route();
clone.contacts = new Vector<Contact>(contacts);
clone.signals = new Vector<Signal>(signals);
clone.path = new Vector<>(path); clone.path = new Vector<>(path);
return clone; return clone;
} }
@ -53,8 +65,23 @@ public class Route {
if (name == null) name = id(); if (name == null) name = id();
return name; return name;
} }
public Window properties() {
Window win = new Window("route-properties",t("Properties of {})",this));
new Tag("h4").content(t("Signals")).addTo(win);
Tag list = new Tag("ul");
for (Signal s : signals) new Tag("li").content(s.toString()).addTo(list);
list.addTo(win);
new Tag("h4").content(t("Contacts")).addTo(win);
list = new Tag("ul");
for (Contact c : contacts) new Tag("li").content(c.toString()).addTo(list);
list.addTo(win);
return win;
}
public Route start(Block block) { public Route start(Block block) {
contacts = new Vector<Contact>();
signals = new Vector<Signal>();
path = new Vector<Tile>(); path = new Vector<Tile>();
path.add(block); path.add(block);
return this; return this;
@ -62,10 +89,14 @@ public class Route {
@Override @Override
public String toString() { public String toString() {
return getClass().getSimpleName()+"("+id()+")"; return getClass().getSimpleName()+"("+name()+")";
} }
public Block start() { public Block start() {
return (Block) path.get(0); return (Block) path.get(0);
} }
protected static String t(String txt, Object...fills) {
return Translation.get(Application.class, txt, fills);
}
} }

2
src/main/java/de/srsoftware/web4rail/Window.java

@ -8,7 +8,7 @@ public class Window extends Tag{
public Window(String id, String title) { public Window(String id, String title) {
super("div"); super("div");
id(id); id(id).clazz("window");
new Tag("h2") new Tag("h2")
.clazz("title") .clazz("title")
.content(title).addTo(this); .content(title).addTo(this);

2
src/main/java/de/srsoftware/web4rail/tiles/Block.java

@ -52,7 +52,7 @@ public abstract class Block extends StretchableTile{
new Tag("h4").content(t("Routes from here:")).addTo(form); new Tag("h4").content(t("Routes from here:")).addTo(form);
Tag routeList = new Tag("ul"); Tag routeList = new Tag("ul");
for (Route route : routes) { for (Route route : routes) {
new Tag("li").content(route.id()).addTo(routeList); new Tag("li").content(route.id()).attr("onclick","openRoute('"+route.id()+"')").addTo(routeList);
} }
routeList.addTo(form); routeList.addTo(form);

2
src/main/java/de/srsoftware/web4rail/tiles/Signal.java

@ -9,5 +9,5 @@ public abstract class Signal extends Tile{
classes.add("signal"); classes.add("signal");
} }
abstract boolean isAffectedFrom(Direction dir); public abstract boolean isAffectedFrom(Direction dir);
} }

2
src/main/java/de/srsoftware/web4rail/tiles/SignalE.java

@ -20,7 +20,7 @@ public class SignalE extends Signal{
} }
@Override @Override
boolean isAffectedFrom(Direction dir) { public boolean isAffectedFrom(Direction dir) {
return dir == Direction.EAST; return dir == Direction.EAST;
} }
} }

2
src/main/java/de/srsoftware/web4rail/tiles/SignalN.java

@ -21,7 +21,7 @@ public class SignalN extends Signal {
} }
@Override @Override
boolean isAffectedFrom(Direction dir) { public boolean isAffectedFrom(Direction dir) {
return dir == Direction.NORTH; return dir == Direction.NORTH;
} }
} }

2
src/main/java/de/srsoftware/web4rail/tiles/SignalS.java

@ -21,7 +21,7 @@ public class SignalS extends Signal{
} }
@Override @Override
boolean isAffectedFrom(Direction dir) { public boolean isAffectedFrom(Direction dir) {
return dir == Direction.SOUTH; return dir == Direction.SOUTH;
} }
} }

2
src/main/java/de/srsoftware/web4rail/tiles/SignalW.java

@ -20,7 +20,7 @@ public class SignalW extends Signal{
} }
@Override @Override
boolean isAffectedFrom(Direction dir) { public boolean isAffectedFrom(Direction dir) {
return dir == Direction.WEST; return dir == Direction.WEST;
} }
} }

Loading…
Cancel
Save