bugfixes + added new action SetTurnout
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>de.srsoftware</groupId>
|
||||
<artifactId>web4rail</artifactId>
|
||||
<version>1.2.22</version>
|
||||
<version>1.2.23</version>
|
||||
<name>Web4Rail</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>Java Model Railway Control</description>
|
||||
|
||||
@@ -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 setup contact : Hier klicken, um Kontakt auszuwählen
|
||||
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.
|
||||
Command to send to control unit\: : Kommando, welches zur Zentrale gesendet werden soll:
|
||||
ConditionalAction : bedingte Aktion
|
||||
@@ -156,6 +157,7 @@ Select display : Anzeige auswählen
|
||||
Select from plan : Auf Plan auswählen
|
||||
Select relay\: : Relais auswählen:
|
||||
Select train : Zug auswählen
|
||||
Select turnout : Weiche wählen
|
||||
SendCommand : Kommando senden
|
||||
Send command "{}" to control unit : Kommando „{}“ an Zentrale senden
|
||||
Set {} as context : {} als Kontext setzen
|
||||
@@ -170,6 +172,7 @@ Set speed to {} {} : Geschwindigkeit auf {} {} setzen
|
||||
Set {} to {} : {} auf {} setzen
|
||||
SetPower : Strom schalten
|
||||
Set speed to : Geschwindigkeit setzen
|
||||
SetTurnout : Weiche stellen
|
||||
Setup actions : Vorbereitung-Aktionen
|
||||
ShowText : Text anzeigen
|
||||
Signals : Signale
|
||||
|
||||
@@ -247,20 +247,6 @@ public abstract class BaseClass implements Constants{
|
||||
public Button button(String text) {
|
||||
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) {
|
||||
Form form = new Form(id);
|
||||
@@ -280,14 +266,8 @@ public abstract class BaseClass implements Constants{
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T get(Id id) {
|
||||
BaseClass element = registry.get(id);
|
||||
if (isNull(element)) return null;
|
||||
try {
|
||||
return (T) element;
|
||||
} catch (ClassCastException e) {
|
||||
return null;
|
||||
}
|
||||
public static <T extends BaseClass> T get(Id id) {
|
||||
return (T) registry.get(id);
|
||||
}
|
||||
|
||||
public Id id() {
|
||||
@@ -394,6 +374,20 @@ public abstract class BaseClass implements Constants{
|
||||
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() {
|
||||
return toString();
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ public interface Constants {
|
||||
public static final String PARENT = "parent";
|
||||
public static final String PORT = "port";
|
||||
public static final String RELAY = "relay";
|
||||
public static final String TURNOUT = "turnout";
|
||||
public static final String TYPE = "type";
|
||||
public static final Charset UTF8 = StandardCharsets.UTF_8;
|
||||
}
|
||||
|
||||
@@ -702,7 +702,7 @@ public class Route extends BaseClass implements Comparable<Route>{
|
||||
for (Tile tile : path) {
|
||||
if (ignoredPath.contains(tile)) continue;
|
||||
try {
|
||||
tile.setRoute(this);
|
||||
alreadyLocked.add(tile.setRoute(this));
|
||||
} catch (IllegalStateException e) {
|
||||
success = false;
|
||||
break;
|
||||
@@ -839,16 +839,13 @@ public class Route extends BaseClass implements Comparable<Route>{
|
||||
|
||||
public boolean setTurnouts() {
|
||||
Turnout turnout = null;
|
||||
for (Entry<Turnout, Turnout.State> entry : turnouts.entrySet()) try {
|
||||
for (Entry<Turnout, Turnout.State> entry : turnouts.entrySet()) {
|
||||
turnout = entry.getKey();
|
||||
Turnout.State targetVal = entry.getValue();
|
||||
if (!turnout.state(targetVal).succeeded()) return false;
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {}
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Was not able to switch turnout {}!",turnout,e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ public abstract class Action extends BaseClass {
|
||||
SetRelay.class,
|
||||
SetSignal.class,
|
||||
SetSpeed.class,
|
||||
SetTurnout.class,
|
||||
ShowText.class,
|
||||
StopAllTrains.class,
|
||||
StopAuto.class,
|
||||
|
||||
@@ -42,7 +42,7 @@ public class SetRelay extends Action {
|
||||
super.load(json);
|
||||
String relayId = json.getString(RELAY);
|
||||
if (isSet(relayId)) {
|
||||
relay = Relay.get(new Id(relayId));
|
||||
relay = BaseClass.get(new Id(relayId));
|
||||
state = json.getBoolean(Relay.STATE);
|
||||
}
|
||||
return this;
|
||||
|
||||
90
src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
Normal file
90
src/main/java/de/srsoftware/web4rail/actions/SetTurnout.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -9,6 +10,7 @@ import java.util.concurrent.TimeoutException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.BaseClass;
|
||||
import de.srsoftware.web4rail.Command;
|
||||
import de.srsoftware.web4rail.Command.Reply;
|
||||
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.Input;
|
||||
import de.srsoftware.web4rail.tags.Radio;
|
||||
import de.srsoftware.web4rail.tags.Select;
|
||||
|
||||
/**
|
||||
* 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() {
|
||||
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 (address == 0) {
|
||||
state = newState;
|
||||
@@ -173,10 +188,10 @@ public abstract class Turnout extends Tile implements Device{
|
||||
LOG.warn(e.getMessage());
|
||||
}
|
||||
return new Reply(417,t("Timeout while trying to switch {}.",this));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public abstract List<State> states();
|
||||
|
||||
public void success() {
|
||||
this.error = false;
|
||||
try {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.srsoftware.web4rail.tiles;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import de.srsoftware.web4rail.Connector;
|
||||
@@ -33,4 +34,9 @@ public class Turnout3E extends Turnout{
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<State> states() {
|
||||
return List.of(State.STRAIGHT,State.RIGHT,State.LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,11 @@ public abstract class TurnoutL extends Turnout {
|
||||
return super.properties(preForm, formInputs, postForm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<State> states() {
|
||||
return List.of(State.STRAIGHT,State.LEFT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tile update(HashMap<String, String> params) {
|
||||
if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT));
|
||||
|
||||
@@ -41,6 +41,11 @@ public abstract class TurnoutR extends Turnout {
|
||||
return super.properties(preForm, formInputs, postForm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<State> states() {
|
||||
return List.of(State.STRAIGHT,State.RIGHT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tile update(HashMap<String, String> params) {
|
||||
if (params.containsKey(STRAIGHT)) portA = Integer.parseInt(params.get(STRAIGHT));
|
||||
|
||||
Reference in New Issue
Block a user