* added action that allows to switch relays

* added action list to route setup procedure
This commit is contained in:
Stephan Richter
2020-11-01 02:16:42 +01:00
parent cc7fbd2bda
commit 69f38373c3
10 changed files with 161 additions and 12 deletions

View File

@@ -62,7 +62,7 @@ public abstract class Action implements Constants {
public static Action load(JSONObject json) {
String clazz = json.getString(TYPE);
switch (clazz) {
switch (clazz) { // TODO: das kann generisch mittels Reflection implementiert werden!
case "ActivateRoute":
return new ActivateRoute();
case "ConditionalAction":
@@ -75,9 +75,12 @@ public abstract class Action implements Constants {
return new SetSignalsToStop();
case "SetSpeed":
return SetSpeed.load(json);
case "SetRelay":
return SetRelay.load(json);
case "TurnTrain":
return new TurnTrain();
}
LOG.error("Found unknwon action \"{}\" in json!",clazz);
return null;
}

View File

@@ -63,7 +63,8 @@ public class ActionList extends Vector<Action> implements Constants{
FinishRoute.class,
TurnTrain.class,
StopAuto.class,
PowerOff.class
PowerOff.class,
SetRelay.class
);
for (Class<? extends Action> clazz : classes) select.addOption(clazz.getSimpleName());
select.addTo(new Label("Action type:")).addTo(typeForm);
@@ -76,7 +77,7 @@ public class ActionList extends Vector<Action> implements Constants{
String context = params.get(CONTEXT);
if (type == null) return actionTypeForm(win,context);
switch (type) {
switch (type) { // TODO: das kann man mit Reflection generischer lösen
case "ConditionalAction":
add(new ConditionalAction());
break;
@@ -98,6 +99,9 @@ public class ActionList extends Vector<Action> implements Constants{
case "PowerOff":
add(new PowerOff());
break;
case "SetRelay":
add(new SetRelay());
break;
default:
actionTypeForm(win,context);
new Tag("span").content(t("Unknown action type: {}",type)).addTo(win);

View File

@@ -0,0 +1,92 @@
package de.srsoftware.web4rail.actions;
import java.io.IOException;
import java.util.HashMap;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.tags.Button;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tiles.Relay;
public class SetRelay extends Action {
private static final String RELAY = "relay";
private Relay relay = null;
private boolean state = false;
@Override
public boolean fire(Context context) throws IOException {
if (relay != null) {
relay.state(state);
return true;
}
return false;
}
@Override
public JSONObject json() {
JSONObject json = super.json();
if (relay != null) {
json.put(RELAY, relay.id());
json.put(Relay.STATE, state);
}
return json;
}
public static SetRelay load(JSONObject json) {
String relayId = json.getString(RELAY);
SetRelay result = new SetRelay();
if (relayId != null) {
result.relay = Relay.get(relayId);
result.state = json.getBoolean(Relay.STATE);
}
return result;
}
@Override
public Window properties(HashMap<String, String> params) {
Window win = super.properties(params);
Form form = new Form("action-prop-form-"+id);
new Input(REALM,REALM_ACTIONS).hideIn(form);
new Input(ID,params.get(ID)).hideIn(form);
new Input(ACTION,ACTION_UPDATE).hideIn(form);
new Input(CONTEXT,params.get(CONTEXT)).hideIn(form);
Select select = new Select(RELAY);
for (Relay relay : Relay.list()) {
Tag option = select.addOption(relay.id(),relay.title());
if (relay == this.relay) option.attr("selected", "selected");
}
select.addTo(new Label(t("Select relay:")+NBSP)).addTo(form);
Select state = new Select(Relay.STATE);
state.addOption(true,relay == null?Relay.DEFAULT_LABEL_A:relay.stateLabelA);
state.addOption(false,relay == null?Relay.DEFAULT_LABEL_B:relay.stateLabelB);
state.addTo(new Label(t("Select state:")+NBSP)).addTo(form);
new Button(t("Apply"),form).addTo(form).addTo(win);
return win;
}
public String toString() {
if (relay == null) return t("[click here to setup relay]");
return t("Set "+relay+" to "+(state?relay.stateLabelA:relay.stateLabelB));
};
@Override
protected Object update(HashMap<String, String> params) {
LOG.debug("update: {}",params);
String relayId = params.get(RELAY);
relay = Relay.get(relayId);
String st = params.get(Relay.STATE);
if (st != null) state = st.equals("true");
return properties(params);
}
}

View File

@@ -51,7 +51,7 @@ public class SetSpeed extends Action{
new Input(ACTION,ACTION_UPDATE).hideIn(form);
new Input(CONTEXT,params.get(CONTEXT)).hideIn(form);
Label label = new Label(t("Set speed to")+NBSP);
new Input(MAX_SPEED, maxSpeed).addTo(label).content(NBSP+t("km/h"));
new Input(MAX_SPEED, maxSpeed).numeric().addTo(label).content(NBSP+t("km/h"));
label.addTo(form);
new Button(t("Apply"),form).addTo(form).addTo(win);
return win;