- implemented load callback

- added waitTime field to context, wait time now determined in route.start
This commit is contained in:
Stephan Richter
2021-03-14 19:12:17 +01:00
parent d86b6dcbcc
commit 9c86955d8d
22 changed files with 253 additions and 266 deletions

View File

@@ -9,11 +9,11 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Checkbox;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Tile;
@@ -69,19 +69,13 @@ public class AddRemoveDestination extends Action {
public Action load(JSONObject json) {
if (json.has(TURN)) turnAtDestination = json.getBoolean(TURN);
if (json.has(SHUNTING)) shunting = json.getBoolean(SHUNTING);
if (json.has(Train.DESTINATION)) {
Id blockId = new Id(json.getString(Train.DESTINATION));
destination = BaseClass.get(blockId);
if (isNull(destination)) {
new DelayedExecution(this) {
@Override
public void execute() {
destination = BaseClass.get(blockId);
}
};
if (json.has(Train.DESTINATION)) new LoadCallback() {
@Override
public void afterLoad() {
destination = BaseClass.get(Id.from(json, Train.DESTINATION));
}
}
};
return super.load(json);
}

View File

@@ -7,9 +7,9 @@ import java.util.Map;
import org.json.JSONObject;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Tile;
@@ -39,18 +39,13 @@ public class DetermineTrainInBlock extends Action {
public Action load(JSONObject json) {
super.load(json);
Id blockId = Id.from(json,BLOCK);
if (isSet(blockId)) {
block = Block.get(blockId);
if (isNull(block)) {
new DelayedExecution(this) {
@Override
public void execute() {
block = Block.get(blockId);
}
};
if (isSet(blockId)) new LoadCallback() {
@Override
public void afterLoad() {
block = Block.get(blockId);
}
}
};
return this;
}

View File

@@ -8,10 +8,10 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Radio;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.Shadow;
import de.srsoftware.web4rail.tiles.Tile;
@@ -43,24 +43,15 @@ public class DisableEnableBlock extends Action {
@Override
public Action load(JSONObject json) {
super.load(json);
Id blockId = Id.from(json,BLOCK);
if (isSet(blockId)) {
block = Block.get(blockId);
if (isNull(block)) {
new DelayedExecution(this) {
@Override
public void execute() {
block = Block.get(blockId);
}
};
if (json.has(STATE)) disable = !json.getBoolean(STATE);
if (json.has(BLOCK)) new LoadCallback() {
@Override
public void afterLoad() {
block = Block.get(Id.from(json,BLOCK));
}
}
if (json.has(STATE)) {
disable = !json.getBoolean(STATE);
}
return this;
};
return super.load(json);
}
@Override

View File

@@ -7,14 +7,14 @@ import java.util.Map;
import org.json.JSONObject;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Decoupler;
import de.srsoftware.web4rail.tiles.Tile;
public class EngageDecoupler extends Action {
private static final String DECOUPLER = Decoupler.class.getSimpleName();
public EngageDecoupler(BaseClass parent) {
@@ -24,12 +24,12 @@ public class EngageDecoupler extends Action {
private Decoupler decoupler = null;
@Override
public boolean fire(Context context,Object cause) {
public boolean fire(Context context, Object cause) {
if (isNull(decoupler)) return false;
decoupler.engage();
return true;
}
@Override
public JSONObject json() {
JSONObject json = super.json();
@@ -38,50 +38,44 @@ public class EngageDecoupler extends Action {
}
return json;
}
@Override
public Action load(JSONObject json) {
super.load(json);
if (json.has(DECOUPLER)) {
String decouplerId = json.getString(DECOUPLER);
decoupler = BaseClass.get(new Id(decouplerId));
if (isNull(decoupler)) new DelayedExecution(this) {
@Override
public void execute() {
decoupler = BaseClass.get(new Id(decouplerId));
}
};
}
return this;
if (json.has(DECOUPLER)) new LoadCallback() {
@Override
public void afterLoad() {
decoupler = BaseClass.get(Id.from(json, DECOUPLER));
}
};
return super.load(json);
}
@Override
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
formInputs.add(t("Decoupler")+": "+(isNull(decoupler) ? t("unset") : decoupler),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,DECOUPLER)));
return super.properties(preForm, formInputs, postForm,errors);
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm, String... errors) {
formInputs.add(t("Decoupler") + ": " + (isNull(decoupler) ? t("unset") : decoupler), button(t("Select from plan"), Map.of(ACTION, ACTION_UPDATE, ASSIGN, DECOUPLER)));
return super.properties(preForm, formInputs, postForm, errors);
}
@Override
protected void removeChild(BaseClass child) {
if (child == decoupler) decoupler = null;
super.removeChild(child);
}
public String toString() {
if (isNull(decoupler)) return "["+t("Click here to setup decoupler")+"]";
return t("Engage {}",decoupler);
if (isNull(decoupler)) return "[" + t("Click here to setup decoupler") + "]";
return t("Engage {}", decoupler);
};
@Override
protected Object update(HashMap<String, String> params) {
LOG.debug("update: {}",params);
LOG.debug("update: {}", params);
if (params.containsKey(DECOUPLER)) {
Tile tile = BaseClass.get(new Id(params.get(DECOUPLER)));
if (tile instanceof Decoupler) {
decoupler = (Decoupler) tile;
} else return t("Clicked tile is not a {}!",t("decoupler"));
decoupler = (Decoupler) tile;
} else return t("Clicked tile is not a {}!", t("decoupler"));
}
return context().properties();
}

View File

@@ -1,7 +1,6 @@
package de.srsoftware.web4rail.actions;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Range;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tiles.Block;
@@ -25,10 +24,10 @@ public class PreserveRoute extends Action {
Block endBlock = route.endBlock();
if (train.destination() == endBlock) return true; // do not reserve routes, when destination has been reached
Range waitTime = endBlock.getWaitTime(train,route.endDirection);
if (waitTime.max > 0) {
Integer waitTime = context.waitTime();
if (isSet(waitTime) && waitTime > 0) {
LOG.debug("Not preserving route, as train needs to stop for {} ms at {}!",waitTime,endBlock);
return true; // train is expected to wait in next block.
return false; // train is expected to wait in next block.
}
train.reserveNext();

View File

@@ -6,10 +6,10 @@ import java.util.List;
import org.json.JSONObject;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.moving.Train;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
public class SetContextTrain extends Action {
@@ -34,21 +34,13 @@ public class SetContextTrain extends Action {
@Override
public Action load(JSONObject json) {
super.load(json);
if (json.has(REALM_TRAIN)) {
Id trainId = Id.from(json,REALM_TRAIN);
if (isSet(trainId)) {
train = Train.get(trainId);
if (isNull(train)) new DelayedExecution(this) {
@Override
public void execute() {
train = Train.get(trainId);
}
};
if (json.has(REALM_TRAIN)) new LoadCallback() {
@Override
public void afterLoad() {
train = Train.get(Id.from(json,REALM_TRAIN));
}
}
return this;
};
return super.load(json);
}
@Override

View File

@@ -7,10 +7,10 @@ import java.util.Map;
import org.json.JSONObject;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.TextDisplay;
import de.srsoftware.web4rail.tiles.Tile;
@@ -43,15 +43,12 @@ public class SetDisplayText extends TextAction{
@Override
public Action load(JSONObject json) {
if (json.has(DISPLAY)) {
new DelayedExecution(this) {
@Override
public void execute() {
display = (TextDisplay) plan.get(Id.from(json,DISPLAY), false);
};
};
}
if (json.has(DISPLAY)) new LoadCallback() {
@Override
public void afterLoad() {
display = (TextDisplay) plan.get(Id.from(json,DISPLAY), false);
}
};
return super.load(json);
}

View File

@@ -8,10 +8,10 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Relay;
import de.srsoftware.web4rail.tiles.Switch;
import de.srsoftware.web4rail.tiles.Tile;
@@ -51,31 +51,23 @@ public class SetRelayOrSwitch extends Action {
@Override
public Action load(JSONObject json) {
super.load(json);
if (json.has(RELAY)) {
String relayId = json.getString(RELAY);
relayOrSwitch = BaseClass.get(new Id(relayId));
if (isNull(relayOrSwitch)) new DelayedExecution(this) {
@Override
public void execute() {
relayOrSwitch = BaseClass.get(new Id(relayId));
};
};
}
if (json.has(SWITCH)) {
String relayId = json.getString(SWITCH);
relayOrSwitch = BaseClass.get(new Id(relayId));
if (isNull(relayOrSwitch)) new DelayedExecution(this) {
@Override
public void execute() {
relayOrSwitch = BaseClass.get(new Id(relayId));
}
};
}
if (json.has(STATE)) state = json.getBoolean(STATE);
return this;
if (json.has(RELAY)) new LoadCallback() {
@Override
public void afterLoad() {
relayOrSwitch = BaseClass.get(Id.from(json, RELAY));
};
};
if (json.has(SWITCH)) new LoadCallback() {
@Override
public void afterLoad() {
relayOrSwitch = BaseClass.get(Id.from(json, SWITCH));
};
};
return super.load(json);
}
@Override

View File

@@ -8,10 +8,10 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Select;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.DelayedExecution;
import de.srsoftware.web4rail.tiles.Turnout;
import de.srsoftware.web4rail.tiles.Turnout.State;
@@ -49,20 +49,15 @@ public class SetTurnout extends Action {
@Override
public Action load(JSONObject json) {
super.load(json);
Id turnoutId = json.has(TURNOUT) ? new Id(json.getString(TURNOUT)) : null;
if (isSet(turnoutId)) {
turnout = BaseClass.get(turnoutId);
if (isNull(turnout)) new DelayedExecution(this) {
@Override
public void execute() {
turnout = BaseClass.get(turnoutId);
}
};
}
if (json.has(Turnout.STATE)) state = Turnout.State.valueOf(json.getString(Turnout.STATE));
return this;
if (json.has(TURNOUT)) new LoadCallback() {
@Override
public void afterLoad() {
turnout = BaseClass.get(Id.from(json, TURNOUT));
}
};
return super.load(json);
}
@Override

View File

@@ -8,6 +8,7 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.LoadCallback;
import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Window;
@@ -82,19 +83,16 @@ public class WaitForContact extends ActionList {
@Override
public Action load(JSONObject json) {
if (json.has(CONTACT)) {
String cid = json.getString(CONTACT);
contact = BaseClass.get(new Id(cid));
if (isNull(contact)) new DelayedExecution(this) {
@Override
public void execute() {
contact = BaseClass.get(new Id(cid));
}
};
}
if (json.has(TIMEOUT)) timeout = json.getInt(TIMEOUT);
if (json.has(TIMEOUT_ACTIONS)) timeoutActions.load(json.getJSONObject(TIMEOUT_ACTIONS));
if (json.has(CONTACT)) new LoadCallback() {
@Override
public void afterLoad() {
contact = BaseClass.get(Id.from(json, CONTACT));
}
};
return super.load(json);
}