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.
151 lines
3.9 KiB
151 lines
3.9 KiB
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); |
|
if (isNull(name)||name.trim().isEmpty()) return null; |
|
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); |
|
} |
|
car.addLogEntry(t("executed \"{}\" after {}",name,BaseClass.distance(lastExecutionDist))); |
|
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); |
|
tasks.forEach(task -> select.addOption(task)); |
|
return select; |
|
} |
|
|
|
@Override |
|
public String toString() { |
|
return name; |
|
} |
|
} |