11 changed files with 223 additions and 55 deletions
@ -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); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package de.srsoftware.web4rail.conditions; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.json.JSONObject; |
||||||
|
|
||||||
|
import de.srsoftware.tools.Tag; |
||||||
|
import de.srsoftware.web4rail.Window; |
||||||
|
import de.srsoftware.web4rail.tags.Fieldset; |
||||||
|
import de.srsoftware.web4rail.tags.Input; |
||||||
|
|
||||||
|
public class TrainSpeed extends Condition { |
||||||
|
|
||||||
|
private static final String SPEED = "speed"; |
||||||
|
private int treshold = 0; |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean fulfilledBy(Context context) { |
||||||
|
if (isNull(context.train())) return false; |
||||||
|
return inverted ? context.train().speed > treshold : context.train().speed < treshold; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject json() { |
||||||
|
return super.json().put(SPEED, treshold); |
||||||
|
} |
||||||
|
|
||||||
|
public Condition load(JSONObject json) { |
||||||
|
super.load(json); |
||||||
|
if (json.has(SPEED)) treshold = json.getInt(SPEED); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm) { |
||||||
|
formInputs.add(t("Train speed"),new Input(SPEED, treshold).numeric().addTo(new Tag("span")).content(speedUnit)); |
||||||
|
return super.properties(preForm, formInputs, postForm); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return t(inverted ? "train is faster than {} {}" : "train is slower than {} {}",treshold,speedUnit) ; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Object update(HashMap<String, String> params) { |
||||||
|
if (params.containsKey(SPEED)) try { |
||||||
|
int ml = Integer.parseInt(params.get(SPEED)); |
||||||
|
if (ml < 0) throw new NumberFormatException(t("speed must be non-negative!")); |
||||||
|
treshold = ml; |
||||||
|
} catch (NumberFormatException nfe) { |
||||||
|
Window win = properties(); |
||||||
|
win.children().insertElementAt(new Tag("div").content(nfe.getMessage()),1); |
||||||
|
return win; |
||||||
|
} |
||||||
|
return super.update(params); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue