8 changed files with 280 additions and 1 deletions
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
package de.srsoftware.web4rail; |
||||
|
||||
import java.util.HashMap; |
||||
|
||||
public class Store { |
||||
|
||||
private static HashMap<String,Store> stores = new HashMap<>(); |
||||
private String name; |
||||
private Integer value = null; |
||||
|
||||
public Store(String name) { |
||||
this.name = name; |
||||
stores.put(name, this); |
||||
} |
||||
|
||||
public static Store get(String name) { |
||||
Store store = stores.get(name); |
||||
if (BaseClass.isNull(store)) store = new Store(name); |
||||
return store; |
||||
} |
||||
|
||||
public String name() { |
||||
return name; |
||||
} |
||||
|
||||
public Integer value() { |
||||
return value; |
||||
} |
||||
|
||||
public void setValue(int newVal) { |
||||
value = newVal; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return name+"("+(BaseClass.isNull(value) ? BaseClass.t("no value") : value)+")"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,75 @@
@@ -0,0 +1,75 @@
|
||||
package de.srsoftware.web4rail.actions; |
||||
|
||||
import java.util.List; |
||||
|
||||
import org.json.JSONObject; |
||||
|
||||
import de.srsoftware.web4rail.BaseClass; |
||||
import de.srsoftware.web4rail.Params; |
||||
import de.srsoftware.web4rail.moving.Car; |
||||
import de.srsoftware.web4rail.moving.Train; |
||||
import de.srsoftware.web4rail.tags.Fieldset; |
||||
import de.srsoftware.web4rail.tags.Input; |
||||
import de.srsoftware.web4rail.tags.Window; |
||||
|
||||
public class DetermineCarAtPosition extends Action { |
||||
|
||||
private static final String POSITION = "position"; |
||||
|
||||
public DetermineCarAtPosition(BaseClass parent) { |
||||
super(parent); |
||||
} |
||||
|
||||
private int position = 1; |
||||
|
||||
@Override |
||||
public boolean fire(Context context) { |
||||
if (isNull(context)) return false; |
||||
Train train = context.train(); |
||||
if (isNull(train)) return false; |
||||
List<Car> cars = train.cars(); |
||||
Car car = null; |
||||
if (position > 0 && position <= cars.size()) { |
||||
car = cars.get(position-1); |
||||
} |
||||
if (position < 0 && -position <= cars.size()) { |
||||
car = cars.get(cars.size()+position); |
||||
} |
||||
if (isNull(car)) return false; |
||||
context.car(car); |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject json() { |
||||
JSONObject json = super.json(); |
||||
json.put(POSITION, position); |
||||
return json; |
||||
} |
||||
|
||||
@Override |
||||
public Action load(JSONObject json) { |
||||
super.load(json); |
||||
if (json.has(POSITION)) position = json.getInt(POSITION); |
||||
return this; |
||||
} |
||||
|
||||
@Override |
||||
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) { |
||||
formInputs.add(t("Position in train"),new Input(POSITION).numeric()); |
||||
return super.properties(preForm, formInputs, postForm,errors); |
||||
} |
||||
|
||||
public String toString() { |
||||
return t("Determine, which car is at position {} of the current train",position); |
||||
}; |
||||
|
||||
@Override |
||||
protected Object update(Params params) { |
||||
LOG.debug("update: {}",params); |
||||
if (params.containsKey(POSITION)) { |
||||
position = Integer.parseInt(POSITION); |
||||
} |
||||
return context().properties(); |
||||
} |
||||
} |
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
package de.srsoftware.web4rail.actions; |
||||
|
||||
import java.util.List; |
||||
|
||||
import org.json.JSONObject; |
||||
|
||||
import de.srsoftware.web4rail.BaseClass; |
||||
import de.srsoftware.web4rail.LoadCallback; |
||||
import de.srsoftware.web4rail.LookupTable; |
||||
import de.srsoftware.web4rail.Params; |
||||
import de.srsoftware.web4rail.Store; |
||||
import de.srsoftware.web4rail.tags.Fieldset; |
||||
import de.srsoftware.web4rail.tags.Input; |
||||
import de.srsoftware.web4rail.tags.Window; |
||||
|
||||
public class LookupValue extends Action { |
||||
|
||||
private static final String TABLE = "table"; |
||||
private static final String STORE = "store"; |
||||
private LookupTable lookupTable = null; |
||||
private Store store = null; |
||||
|
||||
public LookupValue(BaseClass parent) { |
||||
super(parent); |
||||
} |
||||
|
||||
@Override |
||||
public boolean fire(Context context) { |
||||
try { |
||||
if (!isSet(store,lookupTable)) return false; |
||||
int value = lookupTable.getValue(context); |
||||
store.setValue(value); |
||||
} catch (NullPointerException npe) { |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject json() { |
||||
JSONObject json = super.json(); |
||||
if (isSet(lookupTable)) json.put(TABLE, lookupTable.id()); |
||||
if (isSet(store)) json.put(STORE, store.name()); |
||||
return json; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public Action load(JSONObject json) { |
||||
super.load(json); |
||||
if (json.has(TABLE)) new LoadCallback() { |
||||
@Override |
||||
public void afterLoad() { |
||||
lookupTable = LookupTable.get(new Id(json.getString(TABLE))); |
||||
} |
||||
}; |
||||
|
||||
if (json.has(STORE)) store = Store.get(json.getString(STORE)); |
||||
return this; |
||||
} |
||||
|
||||
@Override |
||||
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) { |
||||
formInputs.add(t("Lookup table"),LookupTable.selector(lookupTable, null)); |
||||
formInputs.add(t("Store"), new Input(STORE,isSet(store)?store.name():"")); |
||||
return super.properties(preForm, formInputs, postForm,errors); |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
if (isSet(store,lookupTable)) return t("Set {} to value from {}",store.name(),lookupTable); |
||||
return t("[Click here to setup look-up]"); |
||||
} |
||||
|
||||
@Override |
||||
protected Object update(Params params) { |
||||
LOG.debug("update: {}",params); |
||||
if (params.containsKey(LookupTable.class.getSimpleName())) { |
||||
Id tableId = Id.from(params, LookupTable.class.getSimpleName()); |
||||
if (tableId.equals(0)) { |
||||
lookupTable = null; |
||||
} else { |
||||
LookupTable newTable = LookupTable.get(tableId); |
||||
if (isSet(newTable)) lookupTable = newTable; |
||||
} |
||||
|
||||
} |
||||
|
||||
String storeName = params.getString(STORE); |
||||
if (isSet(storeName) && !storeName.isEmpty()) store = Store.get(storeName); |
||||
return super.update(params); |
||||
} |
||||
} |
Loading…
Reference in new issue