Browse Source

bugfixes + added new action SetTurnout

lookup-tables
Stephan Richter 5 years ago
parent
commit
3eea978c31
  1. 2
      pom.xml
  2. 3
      resources/translations/Application.de.translation
  3. 38
      src/main/java/de/srsoftware/web4rail/BaseClass.java
  4. 1
      src/main/java/de/srsoftware/web4rail/Constants.java
  5. 7
      src/main/java/de/srsoftware/web4rail/Route.java
  6. 1
      src/main/java/de/srsoftware/web4rail/actions/Action.java
  7. 2
      src/main/java/de/srsoftware/web4rail/actions/SetRelay.java
  8. 90
      src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
  9. 21
      src/main/java/de/srsoftware/web4rail/tiles/Turnout.java
  10. 6
      src/main/java/de/srsoftware/web4rail/tiles/Turnout3E.java
  11. 5
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutL.java
  12. 5
      src/main/java/de/srsoftware/web4rail/tiles/TurnoutR.java

2
pom.xml

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

3
resources/translations/Application.de.translation

@ -44,6 +44,7 @@ Click here to add conditions : Hier klicken, um Bedingungen hinzuzufügen
Click here to select train! : Hier klicken, um Zug auszuwählen! Click here to select train! : Hier klicken, um Zug auszuwählen!
click here to setup contact : Hier klicken, um Kontakt auszuwählen click here to setup contact : Hier klicken, um Kontakt auszuwählen
click here to setup relay : Hier klicken, um Relais einzurichten click here to setup relay : Hier klicken, um Relais einzurichten
click here to setup turnout : Hier klicken, um Weiche einzurichten
Click on a name to edit the entry. : Klicke auf einen Namen, um einen Eintrag zu bearbeiten. Click on a name to edit the entry. : Klicke auf einen Namen, um einen Eintrag zu bearbeiten.
Command to send to control unit\: : Kommando, welches zur Zentrale gesendet werden soll: Command to send to control unit\: : Kommando, welches zur Zentrale gesendet werden soll:
ConditionalAction : bedingte Aktion ConditionalAction : bedingte Aktion
@ -156,6 +157,7 @@ Select display : Anzeige auswählen
Select from plan : Auf Plan auswählen Select from plan : Auf Plan auswählen
Select relay\: : Relais auswählen: Select relay\: : Relais auswählen:
Select train : Zug auswählen Select train : Zug auswählen
Select turnout : Weiche wählen
SendCommand : Kommando senden SendCommand : Kommando senden
Send command "{}" to control unit : Kommando „{}“ an Zentrale senden Send command "{}" to control unit : Kommando „{}“ an Zentrale senden
Set {} as context : {} als Kontext setzen Set {} as context : {} als Kontext setzen
@ -170,6 +172,7 @@ Set speed to {} {} : Geschwindigkeit auf {} {} setzen
Set {} to {} : {} auf {} setzen Set {} to {} : {} auf {} setzen
SetPower : Strom schalten SetPower : Strom schalten
Set speed to : Geschwindigkeit setzen Set speed to : Geschwindigkeit setzen
SetTurnout : Weiche stellen
Setup actions : Vorbereitung-Aktionen Setup actions : Vorbereitung-Aktionen
ShowText : Text anzeigen ShowText : Text anzeigen
Signals : Signale Signals : Signale

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

@ -247,20 +247,6 @@ public abstract class BaseClass implements Constants{
public Button button(String text) { public Button button(String text) {
return button(text,null); return button(text,null);
} }
public String realm() {
if (this instanceof Tile) return REALM_PLAN;
if (this instanceof Contact) return REALM_CONTACT;
if (this instanceof Car) return REALM_CAR;
if (this instanceof Locomotive) return REALM_LOCO;
if (this instanceof Action) return REALM_ACTIONS;
if (this instanceof Condition) return REALM_CONDITION;
if (this instanceof Route) return REALM_ROUTE;
if (this instanceof Train) return REALM_TRAIN;
return REALM_PLAN;
}
public Form form(String id,List<Map.Entry<String, Tag>> elements) { public Form form(String id,List<Map.Entry<String, Tag>> elements) {
Form form = new Form(id); Form form = new Form(id);
@ -280,14 +266,8 @@ public abstract class BaseClass implements Constants{
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> T get(Id id) { public static <T extends BaseClass> T get(Id id) {
BaseClass element = registry.get(id); return (T) registry.get(id);
if (isNull(element)) return null;
try {
return (T) element;
} catch (ClassCastException e) {
return null;
}
} }
public Id id() { public Id id() {
@ -394,6 +374,20 @@ public abstract class BaseClass implements Constants{
return win; return win;
} }
public String realm() {
if (this instanceof Tile) return REALM_PLAN;
if (this instanceof Contact) return REALM_CONTACT;
if (this instanceof Car) return REALM_CAR;
if (this instanceof Locomotive) return REALM_LOCO;
if (this instanceof Action) return REALM_ACTIONS;
if (this instanceof Condition) return REALM_CONDITION;
if (this instanceof Route) return REALM_ROUTE;
if (this instanceof Train) return REALM_TRAIN;
return REALM_PLAN;
}
private String title() { private String title() {
return toString(); return toString();
} }

1
src/main/java/de/srsoftware/web4rail/Constants.java

@ -61,6 +61,7 @@ public interface Constants {
public static final String PARENT = "parent"; public static final String PARENT = "parent";
public static final String PORT = "port"; public static final String PORT = "port";
public static final String RELAY = "relay"; public static final String RELAY = "relay";
public static final String TURNOUT = "turnout";
public static final String TYPE = "type"; public static final String TYPE = "type";
public static final Charset UTF8 = StandardCharsets.UTF_8; public static final Charset UTF8 = StandardCharsets.UTF_8;
} }

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

@ -702,7 +702,7 @@ public class Route extends BaseClass implements Comparable<Route>{
for (Tile tile : path) { for (Tile tile : path) {
if (ignoredPath.contains(tile)) continue; if (ignoredPath.contains(tile)) continue;
try { try {
tile.setRoute(this); alreadyLocked.add(tile.setRoute(this));
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
success = false; success = false;
break; break;
@ -839,16 +839,13 @@ public class Route extends BaseClass implements Comparable<Route>{
public boolean setTurnouts() { public boolean setTurnouts() {
Turnout turnout = null; Turnout turnout = null;
for (Entry<Turnout, Turnout.State> entry : turnouts.entrySet()) try { for (Entry<Turnout, Turnout.State> entry : turnouts.entrySet()) {
turnout = entry.getKey(); turnout = entry.getKey();
Turnout.State targetVal = entry.getValue(); Turnout.State targetVal = entry.getValue();
if (!turnout.state(targetVal).succeeded()) return false; if (!turnout.state(targetVal).succeeded()) return false;
try { try {
Thread.sleep(500); Thread.sleep(500);
} catch (InterruptedException e) {} } catch (InterruptedException e) {}
} catch (IOException e) {
LOG.warn("Was not able to switch turnout {}!",turnout,e);
return false;
} }
return true; return true;
} }

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

@ -78,6 +78,7 @@ public abstract class Action extends BaseClass {
SetRelay.class, SetRelay.class,
SetSignal.class, SetSignal.class,
SetSpeed.class, SetSpeed.class,
SetTurnout.class,
ShowText.class, ShowText.class,
StopAllTrains.class, StopAllTrains.class,
StopAuto.class, StopAuto.class,

2
src/main/java/de/srsoftware/web4rail/actions/SetRelay.java

@ -42,7 +42,7 @@ public class SetRelay extends Action {
super.load(json); super.load(json);
String relayId = json.getString(RELAY); String relayId = json.getString(RELAY);
if (isSet(relayId)) { if (isSet(relayId)) {
relay = Relay.get(new Id(relayId)); relay = BaseClass.get(new Id(relayId));
state = json.getBoolean(Relay.STATE); state = json.getBoolean(Relay.STATE);
} }
return this; return this;

90
src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java

@ -0,0 +1,90 @@
package de.srsoftware.web4rail.actions;
import java.util.HashMap;
import java.util.List;
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.Select;
import de.srsoftware.web4rail.tiles.Turnout;
import de.srsoftware.web4rail.tiles.Turnout.State;
public class SetTurnout extends Action {
public SetTurnout(BaseClass parent) {
super(parent);
}
private Turnout turnout = null;
private Turnout.State state = State.STRAIGHT;
@Override
public boolean fire(Context context) {
if (isNull(turnout)) return false;
return turnout.state(state).succeeded();
}
@Override
public JSONObject json() {
JSONObject json = super.json();
if (isSet(turnout)) {
json.put(TURNOUT, turnout.id());
json.put(Turnout.STATE, state);
}
return json;
}
@Override
public Action load(JSONObject json) {
super.load(json);
String turnoutId = json.getString(TURNOUT);
if (isSet(turnoutId)) {
turnout = BaseClass.get(new Id(turnoutId));
state = Turnout.State.valueOf(json.getString(Turnout.STATE));
}
return this;
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Select turnout"),Turnout.selector(turnout,null));
if (isSet(turnout)) {
Select select = new Select(Turnout.STATE);
for (Turnout.State st : turnout.states()) {
Tag option = select.addOption(st,t(st.toString()));
if (st == state) option.attr("selected", "selected");
}
formInputs.add(t("Select state"),select);
}
return super.properties(preForm, formInputs, postForm);
}
@Override
protected void removeChild(BaseClass child) {
if (child == turnout) turnout = null;
super.removeChild(child);
}
public String toString() {
if (isNull(turnout)) return "["+t("click here to setup turnout")+"]";
return t("Set {} to {}",turnout,state);
};
@Override
protected Object update(HashMap<String, String> params) {
LOG.debug("update: {}",params);
Id turnoutId = new Id(params.get(TURNOUT));
turnout = BaseClass.get(turnoutId);
String st = params.get(Turnout.STATE);
if (isSet(st)) state = Turnout.State.valueOf(st);
return super.update(params);
}
}

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

@ -1,6 +1,7 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.io.IOException; import java.io.IOException;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -9,6 +10,7 @@ import java.util.concurrent.TimeoutException;
import org.json.JSONObject; import org.json.JSONObject;
import de.srsoftware.tools.Tag; import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Command; import de.srsoftware.web4rail.Command;
import de.srsoftware.web4rail.Command.Reply; import de.srsoftware.web4rail.Command.Reply;
import de.srsoftware.web4rail.Device; import de.srsoftware.web4rail.Device;
@ -17,6 +19,7 @@ import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Fieldset; import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input; import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Radio; import de.srsoftware.web4rail.tags.Radio;
import de.srsoftware.web4rail.tags.Select;
/** /**
* Base class for Turnouts * Base class for Turnouts
@ -139,11 +142,23 @@ public abstract class Turnout extends Tile implements Device{
} }
} }
public static Select selector(Turnout preselect, Collection<Turnout> exclude) {
Select selector = new Select(TURNOUT);
List<Turnout> turnouts = BaseClass.listElements(Turnout.class);
turnouts.sort((t1,t2) -> t1.x == t2.x ? t1.y - t2.y : t1.x - t2.x);
for (Turnout turnout : turnouts) {
if (isSet(exclude) && exclude.contains(turnout)) continue;
Tag option = selector.addOption(turnout.id(), turnout);
if (turnout == preselect) option.attr("selected", "selected");
}
return selector;
}
public State state() { public State state() {
return state; return state;
} }
public Reply state(State newState) throws IOException { public Reply state(State newState) {
if (train != null && newState != state) return new Reply(415, t("{} locked by {}!",this,train)); if (train != null && newState != state) return new Reply(415, t("{} locked by {}!",this,train));
if (address == 0) { if (address == 0) {
state = newState; state = newState;
@ -173,10 +188,10 @@ public abstract class Turnout extends Tile implements Device{
LOG.warn(e.getMessage()); LOG.warn(e.getMessage());
} }
return new Reply(417,t("Timeout while trying to switch {}.",this)); return new Reply(417,t("Timeout while trying to switch {}.",this));
} }
public abstract List<State> states();
public void success() { public void success() {
this.error = false; this.error = false;
try { try {

6
src/main/java/de/srsoftware/web4rail/tiles/Turnout3E.java

@ -1,6 +1,7 @@
package de.srsoftware.web4rail.tiles; package de.srsoftware.web4rail.tiles;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import de.srsoftware.web4rail.Connector; import de.srsoftware.web4rail.Connector;
@ -33,4 +34,9 @@ public class Turnout3E extends Turnout{
return new HashMap<>(); return new HashMap<>();
} }
} }
@Override
public List<State> states() {
return List.of(State.STRAIGHT,State.RIGHT,State.LEFT);
}
} }

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

@ -40,6 +40,11 @@ public abstract class TurnoutL extends Turnout {
return super.properties(preForm, formInputs, postForm); return super.properties(preForm, formInputs, postForm);
} }
@Override
public List<State> states() {
return List.of(State.STRAIGHT,State.LEFT);
}
@Override @Override
public Tile update(HashMap<String, String> params) { public Tile update(HashMap<String, String> params) {
if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT)); if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT));

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

@ -41,6 +41,11 @@ public abstract class TurnoutR extends Turnout {
return super.properties(preForm, formInputs, postForm); return super.properties(preForm, formInputs, postForm);
} }
@Override
public List<State> states() {
return List.of(State.STRAIGHT,State.RIGHT);
}
@Override @Override
public Tile update(HashMap<String, String> params) { public Tile update(HashMap<String, String> params) {
if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT)); if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT));

Loading…
Cancel
Save