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>
|
<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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
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;
|
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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user