12 changed files with 295 additions and 10 deletions
@ -0,0 +1,150 @@
@@ -0,0 +1,150 @@
|
||||
package de.srsoftware.web4rail; |
||||
|
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
import java.util.Map; |
||||
|
||||
import org.json.JSONObject; |
||||
|
||||
import de.srsoftware.web4rail.moving.Car; |
||||
import de.srsoftware.web4rail.moving.Train; |
||||
import de.srsoftware.web4rail.tags.AddSelect; |
||||
import de.srsoftware.web4rail.tags.Button; |
||||
import de.srsoftware.web4rail.tiles.Block; |
||||
|
||||
public class MaintnanceTask extends BaseClass{ |
||||
private static final HashSet<String> tasks = new HashSet<>(); |
||||
|
||||
private static final String NAME = "name"; |
||||
|
||||
public static final String INTERVAL = "interval"; |
||||
|
||||
private static final String LAST_DATE = "last_date"; |
||||
|
||||
private static final String LAST_DIST = "last_dist"; |
||||
|
||||
private long interval; |
||||
private long lastExecutionDist; |
||||
private Date lastExecutionDate; |
||||
private String name; |
||||
|
||||
public MaintnanceTask(Car car, String name, long interval) { |
||||
this.name = name; |
||||
this.interval = interval; |
||||
parent(car); |
||||
register(); |
||||
if (isSet(name)) tasks.add(name); |
||||
} |
||||
|
||||
public static Object action(HashMap<String, String> params) { |
||||
String action = params.get(ACTION); |
||||
if (isNull(action)) return t("No action set!"); |
||||
|
||||
MaintnanceTask task = BaseClass.get(Id.from(params)); |
||||
|
||||
switch (action) { |
||||
case ACTION_ADD: |
||||
Car car = BaseClass.get(Id.from(params, REALM_CAR)); |
||||
return car.addTask(createTask(params)); |
||||
case ACTION_DROP: |
||||
if (isSet(task)) { |
||||
BaseClass parent = task.parent(); |
||||
task.remove(); |
||||
return parent.properties(); |
||||
} |
||||
return t("No task!"); |
||||
case ACTION_START: |
||||
return isSet(task) ? task.executed() : t("No task!"); |
||||
} |
||||
String err = t("unknown action: {}",action); |
||||
return (isSet(task)) ? task.parent().properties(err) : err; |
||||
} |
||||
|
||||
private static MaintnanceTask createTask(HashMap<String, String> params) { |
||||
String name = params.get(NAME); |
||||
long interval = Long.parseLong(params.get(INTERVAL)); |
||||
Car car = BaseClass.get(Id.from(params, REALM_CAR)); |
||||
return new MaintnanceTask(car, name,interval); |
||||
} |
||||
|
||||
public Button execBtn() { |
||||
return button(t("executed"), Map.of(REALM,REALM_MAINTENANCE,ACTION,ACTION_START)); |
||||
} |
||||
|
||||
private Object executed() { |
||||
BaseClass parent = parent(); |
||||
if (parent instanceof Car) { |
||||
Car car = (Car) parent; |
||||
lastExecutionDate = new Date(); |
||||
lastExecutionDist = car.drivenDistance(); |
||||
Train train = car.train(); |
||||
if (isSet(train)) { |
||||
Block block = train.currentBlock(); |
||||
if (isSet(block)) plan.place(block); |
||||
} |
||||
return car.properties(); |
||||
} |
||||
return t("parent is not a car!"); |
||||
} |
||||
|
||||
public long interval() { |
||||
return interval; |
||||
} |
||||
|
||||
public boolean isDue() { |
||||
return ((Car)parent()).drivenDistance() > lastExecutionDist+interval; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject json() { |
||||
JSONObject json = super.json(); |
||||
json.put(NAME, name); |
||||
json.put(INTERVAL, interval); |
||||
if (isSet(lastExecutionDate)) { |
||||
json.put(LAST_DATE, lastExecutionDate.getTime()); |
||||
json.put(LAST_DIST, lastExecutionDist); |
||||
} |
||||
return json; |
||||
} |
||||
|
||||
public Date lastDate() { |
||||
return lastExecutionDate; |
||||
} |
||||
|
||||
public long lastMileage() { |
||||
return lastExecutionDist; |
||||
} |
||||
|
||||
@Override |
||||
public MaintnanceTask load(JSONObject json) { |
||||
json.remove(ID); // we're using the id created by the constructor!
|
||||
super.load(json); |
||||
name = json.getString(NAME); |
||||
interval = json.getLong(INTERVAL); |
||||
if (json.has(LAST_DATE)) lastExecutionDate = new Date(json.getLong(LAST_DATE)); |
||||
if (json.has(LAST_DIST)) lastExecutionDist = json.getLong(LAST_DIST); |
||||
if (isSet(name)) tasks.add(name); |
||||
return this; |
||||
} |
||||
|
||||
public long nextMileage() { |
||||
return lastExecutionDist+interval; |
||||
} |
||||
|
||||
public Button removeBtn() { |
||||
return button(t("delete"), Map.of(REALM,REALM_MAINTENANCE,ACTION,ACTION_DROP)); |
||||
} |
||||
|
||||
public static AddSelect selector() { |
||||
AddSelect select = new AddSelect(NAME); |
||||
select.addOption(t("create new task type")); |
||||
tasks.forEach(task -> select.addOption(task)); |
||||
return select; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return name; |
||||
} |
||||
} |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
package de.srsoftware.web4rail.tags; |
||||
|
||||
import de.srsoftware.tools.Tag; |
||||
|
||||
public class AddSelect extends Input { |
||||
private static final long serialVersionUID = -2168654457876014503L; |
||||
private Tag dataList; |
||||
|
||||
public AddSelect(String name) { |
||||
super("select"); |
||||
attr("name",name); |
||||
attr("list","list-options"); |
||||
dataList = new Tag("datalist").id("list-options"); |
||||
dataList.addTo(this); |
||||
} |
||||
|
||||
public Tag addOption(Object value) { |
||||
return addOption(value, value); |
||||
} |
||||
|
||||
public Tag addOption(Object value, Object text) { |
||||
Tag option = new Tag("option").attr("value", value.toString()).content(text.toString()); |
||||
option.addTo(dataList); |
||||
return option; |
||||
} |
||||
} |
Loading…
Reference in new issue