refactoring
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package de.srsoftware.web4rail.functions;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import de.srsoftware.web4rail.Params;
|
||||
import de.srsoftware.web4rail.devices.Decoder;
|
||||
import de.srsoftware.web4rail.tags.Checkbox;
|
||||
import de.srsoftware.web4rail.tags.Fieldset;
|
||||
|
||||
public class DirectedFunction extends Function {
|
||||
|
||||
private boolean forward,reverse;
|
||||
|
||||
@Override
|
||||
public boolean enabled(Decoder decoder) {
|
||||
if (!super.enabled(decoder)) return false;
|
||||
if (decoder.reverse()) {
|
||||
return reverse;
|
||||
} else return forward;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fieldset form(Decoder decoder) {
|
||||
Fieldset fieldset = super.form(decoder);
|
||||
String prefix = "functions/"+id()+"/";
|
||||
new Checkbox(prefix+FORWARD, t(FORWARD), forward, true).addTo(fieldset);
|
||||
new Checkbox(prefix+REVERSE, t(REVERSE), reverse, true).addTo(fieldset);
|
||||
return fieldset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject json() {
|
||||
JSONObject json = super.json();
|
||||
if (forward) json.put(FORWARD, true);
|
||||
if (reverse) json.put(REVERSE, true);
|
||||
return json;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DirectedFunction load(JSONObject json) {
|
||||
super.load(json);
|
||||
if (json.has(FORWARD)) forward = true;
|
||||
if (json.has(REVERSE)) reverse = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object update(Params params) {
|
||||
if (params.containsKey(FORWARD)) forward = "on".equals(params.get(FORWARD));
|
||||
if (params.containsKey(REVERSE)) reverse = "on".equals(params.get(REVERSE));
|
||||
return super.update(params);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,11 @@ package de.srsoftware.web4rail.functions;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import de.srsoftware.tools.Tag;
|
||||
import de.srsoftware.web4rail.BaseClass;
|
||||
import de.srsoftware.web4rail.Constants;
|
||||
import de.srsoftware.web4rail.Params;
|
||||
import de.srsoftware.web4rail.devices.Decoder;
|
||||
import de.srsoftware.web4rail.tags.Fieldset;
|
||||
@@ -18,23 +21,25 @@ public abstract class Function extends BaseClass{
|
||||
static final String FORWARD = "forward";
|
||||
static final String REVERSE = "reverse";
|
||||
|
||||
private int decoderFunction = 1;
|
||||
private int decoderFunction = 1;
|
||||
private boolean enabled;
|
||||
|
||||
public static Tag selector() {
|
||||
Select selector = new Select(NEW);
|
||||
selector.addOption("", t("Select function"));
|
||||
|
||||
for (Class<? extends Function> fun : List.of(HeadLight.class,TailLight.class,InteriorLight.class,Coupler.class,CustomFunction.class)) {
|
||||
String className = fun.getSimpleName();
|
||||
selector.addOption(className,t(className));
|
||||
public static Object action(Params params) {
|
||||
String action = params.getString(ACTION);
|
||||
Function function = BaseClass.get(Id.from(params));
|
||||
BaseClass parent = isSet(function) ? function.parent() : null;
|
||||
switch (action) {
|
||||
case ACTION_DROP:
|
||||
if (isSet(function)) {
|
||||
function.remove();
|
||||
return parent.properties();
|
||||
}
|
||||
}
|
||||
|
||||
return selector;
|
||||
String message = t("Unknown action: {}",params.get(Constants.ACTION));
|
||||
return isSet(parent) ? parent.properties(message) : message;
|
||||
}
|
||||
|
||||
public static Function create(String className) {
|
||||
|
||||
|
||||
if (isNull(className)) return null;
|
||||
try {
|
||||
return (Function) Class.forName(PACKAGE+"."+className).getDeclaredConstructor().newInstance();
|
||||
@@ -43,6 +48,10 @@ public abstract class Function extends BaseClass{
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean enabled(Decoder decoder) {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public Fieldset form(Decoder decoder) {
|
||||
Fieldset fieldset = new Fieldset(name());
|
||||
@@ -56,9 +65,53 @@ public abstract class Function extends BaseClass{
|
||||
|
||||
return fieldset;
|
||||
}
|
||||
|
||||
public int index() {
|
||||
return decoderFunction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject json() {
|
||||
JSONObject json = super.json();
|
||||
json.put(TYPE, type());
|
||||
json.put(INDEX, decoderFunction);
|
||||
return json;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Function load(JSONObject json) {
|
||||
super.load(json);
|
||||
if (json.has(INDEX)) decoderFunction = json.getInt(INDEX);
|
||||
return this;
|
||||
}
|
||||
|
||||
private String name() {
|
||||
return t(getClass().getSimpleName());
|
||||
public String name() {
|
||||
return t(type());
|
||||
}
|
||||
|
||||
public static Tag selector() {
|
||||
Select selector = new Select(NEW);
|
||||
selector.addOption("", t("Select function"));
|
||||
|
||||
for (Class<? extends Function> fun : List.of(HeadLight.class,TailLight.class,InteriorLight.class,Coupler.class,CustomFunction.class)) {
|
||||
String className = fun.getSimpleName();
|
||||
selector.addOption(className,t(className));
|
||||
}
|
||||
|
||||
return selector;
|
||||
}
|
||||
|
||||
public void setState(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name()+"("+decoderFunction+"="+enabled+")";
|
||||
}
|
||||
|
||||
private String type() {
|
||||
return getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,24 +2,46 @@ package de.srsoftware.web4rail.functions;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import de.srsoftware.web4rail.Constants;
|
||||
import de.srsoftware.web4rail.moving.Locomotive;
|
||||
|
||||
/**
|
||||
* @author Stephan Richter
|
||||
*
|
||||
*/
|
||||
public class FunctionList extends HashSet<Function>{
|
||||
public class FunctionList extends HashSet<Function> implements Constants{
|
||||
|
||||
private static final long serialVersionUID = 8013610745085726979L;
|
||||
|
||||
public JSONObject json() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
private HashSet<String> enabledFunctions = new HashSet<>();
|
||||
|
||||
public boolean enabled(String name) {
|
||||
return enabledFunctions.contains(name);
|
||||
}
|
||||
|
||||
public void load(JSONObject jsonObject) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
|
||||
public JSONArray json() {
|
||||
JSONArray json = new JSONArray();
|
||||
for (Function fun : this) json.put(fun.json());
|
||||
return json;
|
||||
}
|
||||
|
||||
public void load(JSONArray arr, Locomotive loco) {
|
||||
arr.forEach(o -> {
|
||||
if (o instanceof JSONObject) load((JSONObject)o,loco);
|
||||
});
|
||||
}
|
||||
|
||||
private void load(JSONObject json, Locomotive loco) {
|
||||
if (json.has(TYPE)) add(Function.create(json.getString(TYPE)).load(json).parent(loco));
|
||||
}
|
||||
|
||||
public FunctionList toggle(String name) {
|
||||
boolean enabled = !enabledFunctions.remove(name);
|
||||
if (enabled) enabledFunctions.add(name);
|
||||
stream().filter(fun -> name.equals(fun.name())).forEach(fun -> fun.setState(enabled));
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,5 @@
|
||||
package de.srsoftware.web4rail.functions;
|
||||
|
||||
import de.srsoftware.web4rail.Params;
|
||||
import de.srsoftware.web4rail.devices.Decoder;
|
||||
import de.srsoftware.web4rail.tags.Checkbox;
|
||||
import de.srsoftware.web4rail.tags.Fieldset;
|
||||
public class HeadLight extends DirectedFunction {
|
||||
|
||||
public class HeadLight extends Function {
|
||||
|
||||
private boolean forward,reverse;
|
||||
|
||||
public HeadLight() {
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fieldset form(Decoder decoder) {
|
||||
Fieldset fieldset = super.form(decoder);
|
||||
String prefix = "functions/"+id()+"/";
|
||||
new Checkbox(prefix+FORWARD, t(FORWARD), forward).addTo(fieldset);
|
||||
new Checkbox(prefix+REVERSE, t(REVERSE), reverse).addTo(fieldset);
|
||||
return fieldset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object update(Params params) {
|
||||
if (params.containsKey(FORWARD)) forward = "on".equals(params.get(FORWARD));
|
||||
if (params.containsKey(REVERSE)) reverse = "on".equals(params.get(REVERSE));
|
||||
return super.update(params);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package de.srsoftware.web4rail.functions;
|
||||
|
||||
public class TailLight extends Function {
|
||||
public class TailLight extends DirectedFunction {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user