Browse Source

bugfix + unified link code

lookup-tables
Stephan Richter 5 years ago
parent
commit
ead5a45d2e
  1. 2
      pom.xml
  2. 8
      resources/js/plan.js
  3. 12
      src/main/java/de/srsoftware/web4rail/BaseClass.java
  4. 4
      src/main/java/de/srsoftware/web4rail/Route.java
  5. 6
      src/main/java/de/srsoftware/web4rail/actions/Action.java
  6. 3
      src/main/java/de/srsoftware/web4rail/actions/ActionList.java
  7. 5
      src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java
  8. 8
      src/main/java/de/srsoftware/web4rail/conditions/Condition.java
  9. 7
      src/main/java/de/srsoftware/web4rail/moving/Car.java
  10. 4
      src/main/java/de/srsoftware/web4rail/moving/Train.java
  11. 21
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  12. 5
      src/main/java/de/srsoftware/web4rail/tiles/Contact.java
  13. 5
      src/main/java/de/srsoftware/web4rail/tiles/Relay.java
  14. 5
      src/main/java/de/srsoftware/web4rail/tiles/StretchableTile.java
  15. 19
      src/main/java/de/srsoftware/web4rail/tiles/Tile.java
  16. 5
      src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
  17. 5
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java
  18. 5
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java

2
pom.xml

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId>
<version>0.10.3</version>
<version>0.10.4</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

8
resources/js/plan.js

@ -30,10 +30,6 @@ function addTile(x,y){ @@ -30,10 +30,6 @@ function addTile(x,y){
return request({realm:'plan',action:mode,tile:selected.id,x:x,y:y});
}
function car(id,action){
return request({realm:"car",action:action,id:id});
}
function clickTile(x,y){
var id = x+"-"+y;
if ($('#'+id).length > 0) request({realm:'plan',action:'click',id:id});
@ -222,10 +218,6 @@ function tileWindow(){ @@ -222,10 +218,6 @@ function tileWindow(){
$('.swapbtn').text(vertical ? '⇩' : '⇨');
}
function train(id,action){
return request({realm:'train',action:action,id:id});
}
window.onload = function () {
var isDragging = false;
$('.menu > div').click(closeMenu);

12
src/main/java/de/srsoftware/web4rail/BaseClass.java

@ -1,6 +1,18 @@ @@ -1,6 +1,18 @@
package de.srsoftware.web4rail;
import java.util.Map;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
public class BaseClass implements Constants{
public static Tag link(String tagClass,Map<String,Object> params,Object caption) {
String json = new JSONObject(params).toString().replace("\"", "'");
return new Tag(tagClass).clazz("link").attr("onclick","request("+json+")").content(caption.toString());
}
public static boolean isNull(Object o) {
return o==null;
}

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

@ -168,7 +168,7 @@ public class Route extends BaseClass{ @@ -168,7 +168,7 @@ public class Route extends BaseClass{
Tag list = new Tag("ul");
for (Condition condition : conditions) {
Tag li = new Tag("li");
condition.link("span",REALM_ROUTE+":"+id).addTo(li);
link("span",Map.of(REALM,REALM_CONDITION,ID,id,ACTION,ACTION_PROPS,CONTEXT,REALM_ROUTE+":"+id),condition).addTo(li);
Map<String, Object> params = Map.of(REALM,REALM_ROUTE,ID,id(),ACTION,DROP_CONDITION,REALM_CONDITION,condition.id());
new Button(t("delete"), params).addTo(li.content(NBSP)).addTo(list);
}
@ -611,7 +611,7 @@ public class Route extends BaseClass{ @@ -611,7 +611,7 @@ public class Route extends BaseClass{
@Override
public String toString() {
return getClass().getSimpleName()+"("+name()+")";
return getClass().getSimpleName()+"("+(isSet(train)?train+":":"")+name()+")";
}
private void traceTrainFrom(Tile tile) {

6
src/main/java/de/srsoftware/web4rail/actions/Action.java

@ -96,12 +96,6 @@ public abstract class Action extends BaseClass { @@ -96,12 +96,6 @@ public abstract class Action extends BaseClass {
return new JSONObject().put(TYPE, getClass().getSimpleName());
}
protected Tag link(Integer parentId, String context) {
Map<String, String> props = Map.of(REALM,REALM_ACTIONS,ID,parentId+"/"+id,ACTION,ACTION_PROPS,CONTEXT,context);
String action = "request("+(new JSONObject(props).toString().replace("\"", "'"))+")";
return new Tag("span").content(toString()+NBSP).attr("onclick", action);
}
public static List<Class<? extends Action>> list() {
return List.of(
ConditionalAction.class,

3
src/main/java/de/srsoftware/web4rail/actions/ActionList.java

@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; @@ -14,6 +14,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.BaseClass;
import de.srsoftware.web4rail.Constants;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Window;
@ -87,7 +88,7 @@ public class ActionList extends Vector<Action> implements Constants{ @@ -87,7 +88,7 @@ public class ActionList extends Vector<Action> implements Constants{
boolean first = true;
for (Action action : this) {
props.put(ID, id+"/"+action.id());
Tag act = action.link(id,context).addTo(new Tag("li"));
Tag act = BaseClass.link("span", Map.of(REALM,REALM_ACTIONS,ID,id+"/"+action.id(),ACTION,ACTION_PROPS,CONTEXT,context), this+NBSP).addTo(new Tag("li"));;
if (!first) {
props.put(ACTION, ACTION_MOVE);
new Button("↑",props).addTo(act);

5
src/main/java/de/srsoftware/web4rail/actions/ConditionalAction.java

@ -2,6 +2,7 @@ package de.srsoftware.web4rail.actions; @@ -2,6 +2,7 @@ package de.srsoftware.web4rail.actions;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import org.json.JSONArray;
@ -37,7 +38,9 @@ public class ConditionalAction extends Action { @@ -37,7 +38,9 @@ public class ConditionalAction extends Action {
if (!conditions.isEmpty()) {
Tag list = new Tag("ul");
for (Condition condition : conditions) condition.link("li",params.get(CONTEXT)).addTo(list);
for (Condition condition : conditions) {
link("li", Map.of(REALM,REALM_CONDITION,ID,id,ACTION,ACTION_PROPS,CONTEXT,params.get(CONTEXT)), condition).addTo(list);
}
list.addTo(fieldset);
}

8
src/main/java/de/srsoftware/web4rail/conditions/Condition.java

@ -13,6 +13,7 @@ import org.slf4j.LoggerFactory; @@ -13,6 +13,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.BaseClass;
import de.srsoftware.web4rail.Constants;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Window;
@ -24,7 +25,7 @@ import de.srsoftware.web4rail.tags.Input; @@ -24,7 +25,7 @@ import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
public abstract class Condition implements Constants {
public abstract class Condition extends BaseClass {
public static final Logger LOG = LoggerFactory.getLogger(Condition.class);
private static final String INVERTED = "inverted";
private static final String PREFIX = Condition.class.getPackageName();
@ -86,11 +87,6 @@ public abstract class Condition implements Constants { @@ -86,11 +87,6 @@ public abstract class Condition implements Constants {
inverted = json.has(INVERTED) && json.getBoolean(INVERTED);
return this;
}
public Tag link(String tagClass,String context) {
String json = new JSONObject(Map.of(REALM,REALM_CONDITION,ID,id,ACTION,ACTION_PROPS,CONTEXT,context)).toString().replace("\"", "'");
return new Tag(tagClass).clazz("link").attr("onclick","request("+json+")").content(toString());
}
private static List<Class<? extends Condition>> list() {
return List.of(

7
src/main/java/de/srsoftware/web4rail/moving/Car.java

@ -7,6 +7,7 @@ import java.io.FileWriter; @@ -7,6 +7,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeSet;
import java.util.Vector;
@ -18,7 +19,7 @@ import org.slf4j.LoggerFactory; @@ -18,7 +19,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.Constants;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Plan;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Button;
@ -27,7 +28,7 @@ import de.srsoftware.web4rail.tags.Form; @@ -27,7 +28,7 @@ import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
public class Car implements Constants {
public class Car extends BaseClass {
protected static final Logger LOG = LoggerFactory.getLogger(Car.class);
static HashMap<Integer,Car> cars = new HashMap<Integer, Car>();
@ -122,7 +123,7 @@ public class Car implements Constants { @@ -122,7 +123,7 @@ public class Car implements Constants {
}
public Tag link(String tagClass) {
return new Tag(tagClass).clazz("link").attr("onclick","car("+id+",'"+ACTION_PROPS+"')").content(name());
return link(tagClass, Map.of(REALM,REALM_CAR,ID,id,ACTION,ACTION_PROPS), name());
}
static Vector<Car> list() {

4
src/main/java/de/srsoftware/web4rail/moving/Train.java

@ -311,7 +311,7 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -311,7 +311,7 @@ public class Train extends BaseClass implements Comparable<Train> {
}
public Tag link(String tagClass) {
return new Tag(tagClass).clazz("link").attr("onclick","train("+id+",'"+ACTION_PROPS+"')").content(name());
return link(tagClass, Map.of(REALM, REALM_TRAIN,ID,id,ACTION,ACTION_PROPS),name());
}
public static TreeSet<Train> list() {
@ -336,11 +336,11 @@ public class Train extends BaseClass implements Comparable<Train> { @@ -336,11 +336,11 @@ public class Train extends BaseClass implements Comparable<Train> {
private Train load(JSONObject json) {
pushPull = json.getBoolean(PUSH_PULL);
if (json.has(BLOCK)) block = (Block) plan.get(json.getString(BLOCK), false);
if (json.has(DIRECTION)) direction = Direction.valueOf(json.getString(DIRECTION));
if (json.has(NAME)) name = json.getString(NAME);
if (json.has(TAGS)) json.getJSONArray(TAGS ).forEach(elem -> { tags.add(elem.toString()); });
if (json.has(TRACE)) json.getJSONArray(TRACE).forEach(elem -> { trace.add(plan.get(elem.toString(), false).set(this)); });
if (json.has(BLOCK)) block = (Block) plan.get(json.getString(BLOCK), false).set(this); // do not move this up! during set, other fields will be referenced!
for (Object id : json.getJSONArray(CARS)) add(Car.get(id));
for (Object id : json.getJSONArray(LOCOS)) add((Locomotive) Car.get(id));

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

@ -10,8 +10,8 @@ import org.json.JSONObject; @@ -10,8 +10,8 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Connector;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Checkbox;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
@ -51,8 +51,8 @@ public abstract class Block extends StretchableTile{ @@ -51,8 +51,8 @@ public abstract class Block extends StretchableTile{
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
new Tag("h4").content(t("Block properties")).addTo(form);
new Input(NAME, name).addTo(new Label(t("name:")+NBSP)).addTo(new Tag("p")).addTo(form);
@ -64,20 +64,7 @@ public abstract class Block extends StretchableTile{ @@ -64,20 +64,7 @@ public abstract class Block extends StretchableTile{
return form;
}
@Override
public Tag propMenu() {
Tag window = super.propMenu();
if (isSet(train)) {
window.children().insertElementAt(new Button(t("stop"),"train("+train.id+",'"+ACTION_STOP+"')"), 1);
window.children().insertElementAt(new Button(t("start"),"train("+train.id+",'"+ACTION_START+"')"), 1);
window.children().insertElementAt(train.link("span"), 1);
window.children().insertElementAt(new Tag("h4").content(t("Train:")), 1);
}
return window;
}
public abstract List<Connector> startPoints();
@Override
@ -111,8 +98,8 @@ public abstract class Block extends StretchableTile{ @@ -111,8 +98,8 @@ public abstract class Block extends StretchableTile{
} else {
Train newTrain = Train.get(trainId);
if (isSet(newTrain) && newTrain != train) {
newTrain.set(this);
newTrain.dropTrace();
newTrain.set(this);
}
}
}

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

@ -8,6 +8,7 @@ import org.json.JSONObject; @@ -8,6 +8,7 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
@ -105,8 +106,8 @@ public abstract class Contact extends Tile{ @@ -105,8 +106,8 @@ public abstract class Contact extends Tile{
@Override
public Tag propForm(String formId) {
Tag form = super.propForm(formId);
public Form propForm(String formId) {
Form form = super.propForm(formId);
new Tag("h4").content(t("Hardware settings")).addTo(form);
Tag label = new Input(ADDRESS, addr).addTo(new Label(t("Address:")+NBSP));
Map<String, String> props = Map.of(REALM,REALM_CONTACT,ID,id(),ACTION,ACTION_ANALYZE);

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

@ -14,6 +14,7 @@ import de.srsoftware.web4rail.Command.Reply; @@ -14,6 +14,7 @@ import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device;
import de.srsoftware.web4rail.Protocol;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Radio;
@ -123,8 +124,8 @@ public class Relay extends Tile implements Device{ @@ -123,8 +124,8 @@ public class Relay extends Tile implements Device{
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
Fieldset fieldset = new Fieldset(t("Decoder settings"));
Label protocol = new Label(t("Protocol:"));
for (Protocol proto : Protocol.values()) {

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

@ -7,6 +7,7 @@ import java.util.Map.Entry; @@ -7,6 +7,7 @@ import java.util.Map.Entry;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
@ -36,8 +37,8 @@ public abstract class StretchableTile extends Tile { @@ -36,8 +37,8 @@ public abstract class StretchableTile extends Tile {
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
new Tag("h4").content(stretchType()).addTo(form);
new Input(STRETCH_LENGTH, stretch).numeric().addTo(new Label(stretchType()+":"+NBSP)).addTo(new Tag("p")).addTo(form);

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

@ -195,7 +195,7 @@ public abstract class Tile extends BaseClass{ @@ -195,7 +195,7 @@ public abstract class Tile extends BaseClass{
return new Vector<Plan.Direction>();
}
public Tag propForm(String formId) {
public Form propForm(String formId) {
Form form = new Form(formId);
new Input(ACTION, ACTION_UPDATE).hideIn(form);
new Input(REALM, REALM_PLAN).hideIn(form);
@ -214,16 +214,23 @@ public abstract class Tile extends BaseClass{ @@ -214,16 +214,23 @@ public abstract class Tile extends BaseClass{
public Tag propMenu() {
Window window = new Window("tile-properties",t("Properties of {} @ ({},{})",title(),x,y));
String formId = "tile-properties-"+id();
Tag form = propForm(formId);
if (isSet(train)) {
window.children().insertElementAt(new Button(t("stop"),"train("+train.id+",'"+ACTION_STOP+"')"), 1);
window.children().insertElementAt(new Button(t("start"),"train("+train.id+",'"+ACTION_START+"')"), 1);
window.children().insertElementAt(train.link("span"), 1);
window.children().insertElementAt(new Tag("h4").content(t("Train:")), 1);
}
Form form = propForm("tile-properties-"+id());
new Tag("h4").content(t("Length")).addTo(form);
new Input(LENGTH,length).numeric().addTo(new Label(t("Length")+":"+NBSP)).addTo(form);
new Tag("h4").content(t("Availability")).addTo(form);
new Checkbox(DISABLED, t("disabled"), disabled).addTo(form);
new Button(t("Apply"),"submitForm('"+formId+"')").addTo(form);
new Button(t("Apply"),form).addTo(form);
form.addTo(window);
if (isSet(route)) {
if (isSet(route)) {
new Tag("p").content(t("Locked by {}",route)).addTo(window);
}
@ -398,4 +405,4 @@ public abstract class Tile extends BaseClass{ @@ -398,4 +405,4 @@ public abstract class Tile extends BaseClass{
public int width() {
return 1;
}
}
}

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

@ -13,6 +13,7 @@ import de.srsoftware.web4rail.Command.Reply; @@ -13,6 +13,7 @@ import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device;
import de.srsoftware.web4rail.Protocol;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Radio;
@ -108,8 +109,8 @@ public abstract class Turnout extends Tile implements Device{ @@ -108,8 +109,8 @@ public abstract class Turnout extends Tile implements Device{
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
Fieldset fieldset = new Fieldset(t("Decoder settings"));
Label protocol = new Label(t("Protocol:"));
for (Protocol proto : Protocol.values()) {

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

@ -5,6 +5,7 @@ import java.util.HashMap; @@ -5,6 +5,7 @@ import java.util.HashMap;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
@ -34,8 +35,8 @@ public class TurnoutL extends Turnout { @@ -34,8 +35,8 @@ public class TurnoutL extends Turnout {
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
Tag fieldset = null;
for (Tag child : form.children()) {
if (child.is(Fieldset.TYPE)) {

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

@ -5,6 +5,7 @@ import java.util.HashMap; @@ -5,6 +5,7 @@ import java.util.HashMap;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
@ -35,8 +36,8 @@ public class TurnoutR extends Turnout { @@ -35,8 +36,8 @@ public class TurnoutR extends Turnout {
}
@Override
public Tag propForm(String id) {
Tag form = super.propForm(id);
public Form propForm(String id) {
Form form = super.propForm(id);
Tag fieldset = null;
for (Tag child : form.children()) {
if (child.is(Fieldset.TYPE)) {

Loading…
Cancel
Save