You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.0 KiB
107 lines
3.0 KiB
package de.srsoftware.web4rail.actions; |
|
|
|
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.Params; |
|
import de.srsoftware.web4rail.Route; |
|
import de.srsoftware.web4rail.moving.Train; |
|
import de.srsoftware.web4rail.tags.Fieldset; |
|
import de.srsoftware.web4rail.tags.Select; |
|
import de.srsoftware.web4rail.tags.Window; |
|
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 object = Train.class.getSimpleName(); |
|
private static final String SUBJECT = "subject"; |
|
private static final String OBJECT = "object"; |
|
|
|
public Loop(BaseClass parent) { |
|
super(parent); |
|
} |
|
|
|
@Override |
|
public boolean fire(Context context,Object cause) { |
|
if (isNull(object)) return false; |
|
List<? extends BaseClass> elements = null; |
|
switch (object) { |
|
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),cause); |
|
return true; |
|
} |
|
|
|
@Override |
|
public JSONObject json() { |
|
JSONObject json = super.json(); |
|
if (isSet(object)) json.put(OBJECT, object); |
|
return json; |
|
} |
|
|
|
@Override |
|
public Action load(JSONObject json) { |
|
super.load(json); |
|
if (json.has(SUBJECT)) object = json.getString(SUBJECT); |
|
if (json.has(OBJECT)) object = json.getString(OBJECT); |
|
return this; |
|
} |
|
|
|
@Override |
|
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) { |
|
formInputs.add(t("Select object"),typeSelector()); |
|
return super.properties(preForm, formInputs, postForm,errors); |
|
} |
|
|
|
public String toString() { |
|
return t("For each {} do",object)+COL; |
|
}; |
|
|
|
private Tag typeSelector() { |
|
Select select = new Select(OBJECT); |
|
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(object)) option.attr("selected", "selected"); |
|
} |
|
return select; |
|
} |
|
|
|
@Override |
|
protected Object update(Params params) { |
|
LOG.debug("update: {}",params); |
|
String newObject = params.getString(OBJECT); |
|
if (isSet(newObject)) object = newObject; |
|
return super.update(params); |
|
} |
|
|
|
}
|
|
|