* added new Loop action

* added TrainSpeed condition
* improved gui
This commit is contained in:
Stephan Richter
2020-12-07 01:20:03 +01:00
parent 77d7ded897
commit ab635b213a
11 changed files with 223 additions and 55 deletions

View File

@@ -48,6 +48,7 @@ public abstract class Action extends BaseClass {
DelayedAction.class,
DetermineTrainInBlock.class,
FinishRoute.class,
Loop.class,
PreserveRoute.class,
SavePlan.class,
SendCommand.class,

View File

@@ -0,0 +1,105 @@
package de.srsoftware.web4rail.actions;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Contact;
import de.srsoftware.web4rail.tiles.Signal;
import de.srsoftware.web4rail.tiles.Turnout;
public class Loop extends ActionList {
private String subject = Train.class.getSimpleName();
private static final String SUBJECT = "subject";
public Loop(BaseClass parent) {
super(parent);
}
@Override
public boolean fire(Context context) {
if (isNull(subject)) return false;
List<? extends BaseClass> elements = null;
switch (subject) {
case "Block":
elements = BaseClass.listElements(Block.class);
break;
case "Contact":
elements = BaseClass.listElements(Contact.class);
break;
case "Route":
elements = BaseClass.listElements(Route.class);
break;
case "Signal":
elements = BaseClass.listElements(Signal.class);
break;
case "Turnout":
elements = BaseClass.listElements(Turnout.class);
break;
case "Train":
elements = BaseClass.listElements(Train.class);
break;
}
if (elements == null) return false;
for (BaseClass element : elements) super.fire(context.setMain(element));
return true;
}
@Override
public JSONObject json() {
JSONObject json = super.json();
if (isSet(subject)) json.put(SUBJECT, subject);
return json;
}
@Override
public Action load(JSONObject json) {
super.load(json);
if (json.has(SUBJECT)) subject = json.getString(SUBJECT);
return this;
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) {
formInputs.add(t("Select subject"),typeSelector());
return super.properties(preForm, formInputs, postForm);
}
public String toString() {
return t("For each {} do:",subject);
};
private Tag typeSelector() {
Select select = new Select(SUBJECT);
List<String> types = List.of(Block.class,Contact.class,Route.class,Signal.class,Train.class,Turnout.class)
.stream()
.map(cls -> cls.getSimpleName())
.sorted((s1,s2) -> (t(s1).compareTo(t(s2))))
.collect(Collectors.toList());
for (String cls : types) {
Tag option = select.addOption(cls,t(cls));
if (cls.equals(subject)) option.attr("selected", "selected");
}
return select;
}
@Override
protected Object update(HashMap<String, String> params) {
LOG.debug("update: {}",params);
String newSubject = params.get(SUBJECT);
if (isSet(newSubject)) subject = newSubject;
return super.update(params);
}
}