Browse Source

started to implement route search

lookup-tables
Stephan Richter 5 years ago
parent
commit
ce75a0c027
  1. 7
      src/main/java/de/srsoftware/web4rail/Application.java
  2. 31
      src/main/java/de/srsoftware/web4rail/Connector.java
  3. 26
      src/main/java/de/srsoftware/web4rail/Plan.java
  4. 34
      src/main/java/de/srsoftware/web4rail/Route.java
  5. 5
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  6. 10
      src/main/java/de/srsoftware/web4rail/tiles/BlockH.java
  7. 8
      src/main/java/de/srsoftware/web4rail/tiles/BlockV.java
  8. 17
      src/main/java/de/srsoftware/web4rail/tiles/DiagES.java
  9. 17
      src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java
  10. 17
      src/main/java/de/srsoftware/web4rail/tiles/StraightH.java
  11. 8
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  12. 17
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutWN.java

7
src/main/java/de/srsoftware/web4rail/Application.java

@ -3,6 +3,7 @@ package de.srsoftware.web4rail; @@ -3,6 +3,7 @@ package de.srsoftware.web4rail;
import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
@ -39,7 +40,11 @@ public class Application { @@ -39,7 +40,11 @@ public class Application {
server.createContext("/js" , client -> sendFile(client));
server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool());
server.start();
plan = Plan.load("default.plan");
try {
plan = Plan.load("default.plan");
} catch (FileNotFoundException e) {
plan = new Plan();
}
Desktop.getDesktop().browse(URI.create("http://localhost:"+config.getInt(PORT)+"/plan"));
}

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

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package de.srsoftware.web4rail;
public class Connector {
private String from;
private int y;
private int x;
public Connector(int x, int y, String from) {
this.x = x;
this.y = y;
this.from = from;
}
public String from() {
return from;
}
public int x() {
return x;
}
public int y() {
return y;
}
@Override
public String toString() {
return getClass().getSimpleName()+"("+x+", "+y+", from "+from+")";
}
}

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

@ -7,8 +7,10 @@ import java.io.FileReader; @@ -7,8 +7,10 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Vector;
@ -59,10 +61,10 @@ public class Plan { @@ -59,10 +61,10 @@ public class Plan {
private static final String Y = "y";
private static final String FILE = "file";
private static final String DIRECTION = "direction";
private static final String EAST = "east";
private static final String WEST = "west";
private static final String SOUTH = "south";
private static final String NORTH = "north";
public static final String EAST = "east";
public static final String WEST = "west";
public static final String SOUTH = "south";
public static final String NORTH = "north";
private HashMap<Integer,HashMap<Integer,Tile>> tiles = new HashMap<Integer,HashMap<Integer,Tile>>();
private HashSet<Block> blocks = new HashSet<Block>();
@ -88,12 +90,28 @@ public class Plan { @@ -88,12 +90,28 @@ public class Plan {
}
private String analyze() {
Vector<Route> routes = new Vector<Route>();
for (Block block : blocks) {
LOG.debug("searching routes from {}",block);
for (Connector con : block.startPoints()) {
routes.addAll(follow(new Route().start(block),con));
}
}
return "analyze() not implemented, yet!";
}
private Collection<Route> follow(Route route, Connector con) {
LOG.debug("follow({}, {})",route,con);
Tile tile = get(con.x(),con.y());
Vector<Route> result = new Vector<>();
if (tile == null) return result;
route.add(tile);
List<Connector> connectors = tile.connections(con.from());
List<Route>routes = route.multiply(connectors.size());
for (int i=0; i<connectors.size(); i++) result.addAll(follow(routes.get(i),connectors.get(i)));
return routes;
}
public Tile get(int x, int y) {
HashMap<Integer, Tile> column = tiles.get(x);
return column == null ? null : column.get(y);

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

@ -1,5 +1,39 @@ @@ -1,5 +1,39 @@
package de.srsoftware.web4rail;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Tile;
public class Route {
private Vector<Tile> path;
public void add(Tile tile) {
path.add(tile);
}
protected Route clone() {
Route clone = new Route();
clone.path = new Vector<>(path);
return clone;
}
public List<Route> multiply(int size) {
Vector<Route> routes = new Vector<Route>();
for (int i=0; i<size; i++) routes.add(i==0 ? this : this.clone());
return routes;
}
public Route start(Block block) {
path = new Vector<Tile>();
path.add(block);
return this;
}
@Override
public String toString() {
return getClass().getSimpleName()+"("+path+")";
}
}

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

@ -1,10 +1,13 @@ @@ -1,10 +1,13 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Set;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.tiles.StretchableTile;
public abstract class Block extends StretchableTile{
public abstract Set<Route> routes();
public abstract List<Connector> startPoints();
}

10
src/main/java/de/srsoftware/web4rail/tiles/BlockH.java

@ -2,12 +2,15 @@ package de.srsoftware.web4rail.tiles; @@ -2,12 +2,15 @@ package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Route;
public class BlockH extends Block{
@ -45,10 +48,15 @@ public class BlockH extends Block{ @@ -45,10 +48,15 @@ public class BlockH extends Block{
}
@Override
public Set<Route> routes() {
public Set<Route> routes() {
return null;
}
@Override
public List<Connector> startPoints() {
return List.of(new Connector(x-1, y, Plan.EAST),new Connector(x+len(), y, Plan.WEST));
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
if (replacements == null) replacements = new HashMap<String, Object>();

8
src/main/java/de/srsoftware/web4rail/tiles/BlockV.java

@ -2,12 +2,15 @@ package de.srsoftware.web4rail.tiles; @@ -2,12 +2,15 @@ package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Route;
public class BlockV extends Block{
@ -49,6 +52,11 @@ public class BlockV extends Block{ @@ -49,6 +52,11 @@ public class BlockV extends Block{
return null;
}
@Override
public List<Connector> startPoints() {
return List.of(new Connector(x,y-1,Plan.SOUTH),new Connector(x,y+height(),Plan.NORTH));
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
if (replacements == null) replacements = new HashMap<String, Object>();

17
src/main/java/de/srsoftware/web4rail/tiles/DiagES.java

@ -1,6 +1,21 @@ @@ -1,6 +1,21 @@
package de.srsoftware.web4rail.tiles;
public class DiagES extends Tile{
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class DiagES extends Tile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.SOUTH:
return List.of(new Connector(x+1,y,Plan.WEST));
case Plan.EAST:
return List.of(new Connector(x,y+1,Plan.NORTH));
}
return new Vector<>();
}
}

17
src/main/java/de/srsoftware/web4rail/tiles/DiagWN.java

@ -1,4 +1,21 @@ @@ -1,4 +1,21 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class DiagWN extends Tile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.NORTH:
return List.of(new Connector(x-1,y,Plan.EAST));
case Plan.WEST:
return List.of(new Connector(x,y-1,Plan.SOUTH));
}
return new Vector<>();
}
}

17
src/main/java/de/srsoftware/web4rail/tiles/StraightH.java

@ -1,7 +1,24 @@ @@ -1,7 +1,24 @@
package de.srsoftware.web4rail.tiles;
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class StraightH extends StretchableTile{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.WEST:
return List.of(new Connector(x+len(),y,from));
case Plan.EAST:
return List.of(new Connector(x-1,y,from));
}
return new Vector<>();
}
@Override
public int len() {
return length;

8
src/main/java/de/srsoftware/web4rail/tiles/Tile.java

@ -5,9 +5,11 @@ import java.io.IOException; @@ -5,9 +5,11 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Vector;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -16,6 +18,7 @@ import org.slf4j.LoggerFactory; @@ -16,6 +18,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.Connector;
import de.srsoftware.web4rail.Window;
public abstract class Tile {
@ -32,6 +35,11 @@ public abstract class Tile { @@ -32,6 +35,11 @@ public abstract class Tile {
public JSONObject config() {
return new JSONObject();
}
public List<Connector> connections(String from){
return new Vector<>();
}
public void configure(JSONObject config) {}

17
src/main/java/de/srsoftware/web4rail/tiles/TurnoutWN.java

@ -1,7 +1,22 @@ @@ -1,7 +1,22 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutWN extends Turnout{
import java.util.List;
import java.util.Vector;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.Plan;
public class TurnoutWN extends Turnout{
@Override
public List<Connector> connections(String from) {
switch (from) {
case Plan.WEST:
return List.of(new Connector(x+1,y,from),new Connector(x, y-1, Plan.SOUTH));
case Plan.EAST:
case Plan.NORTH:
return List.of(new Connector(x-1,y,Plan.EAST));
}
return new Vector<>();
}
}

Loading…
Cancel
Save