|
|
|
@ -7,6 +7,7 @@ import org.json.JSONObject;
@@ -7,6 +7,7 @@ import org.json.JSONObject;
|
|
|
|
|
import de.srsoftware.tools.Tag; |
|
|
|
|
import de.srsoftware.web4rail.BaseClass; |
|
|
|
|
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; |
|
|
|
@ -20,6 +21,7 @@ public class DelayedAction extends ActionList {
@@ -20,6 +21,7 @@ public class DelayedAction extends ActionList {
|
|
|
|
|
private static final int DEFAULT_DELAY = 1000; |
|
|
|
|
private int min_delay = DEFAULT_DELAY; |
|
|
|
|
private int max_delay = DEFAULT_DELAY; |
|
|
|
|
private Store store = null; |
|
|
|
|
|
|
|
|
|
public DelayedAction(BaseClass parent) { |
|
|
|
|
super(parent); |
|
|
|
@ -31,24 +33,30 @@ public class DelayedAction extends ActionList {
@@ -31,24 +33,30 @@ public class DelayedAction extends ActionList {
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean fire(Context context) { |
|
|
|
|
int delay = min_delay + (min_delay < max_delay ? random.nextInt(max_delay - min_delay) : 0); |
|
|
|
|
try { |
|
|
|
|
int delay = isSet(store) ? store.value() : min_delay + (min_delay < max_delay ? random.nextInt(max_delay - min_delay) : 0); |
|
|
|
|
|
|
|
|
|
new DelayedExecution(delay,this) { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void execute() { |
|
|
|
|
LOG.debug("{} ms passed by, firing actions:",delay); |
|
|
|
|
if (context.invalidated()) return; |
|
|
|
|
DelayedAction.super.fire(context); |
|
|
|
|
plan.alter(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
new DelayedExecution(delay,this) { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void execute() { |
|
|
|
|
LOG.debug("{} ms passed by, firing actions:",delay); |
|
|
|
|
if (context.invalidated()) return; |
|
|
|
|
DelayedAction.super.fire(context); |
|
|
|
|
plan.alter(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} catch (NullPointerException npe) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public JSONObject json() { |
|
|
|
|
return super.json().put(MIN_DELAY, min_delay).put(MAX_DELAY, max_delay); |
|
|
|
|
JSONObject json = super.json().put(MIN_DELAY, min_delay).put(MAX_DELAY, max_delay); |
|
|
|
|
if (isSet(store)) json.put(Store.class.getSimpleName(), store.name()); |
|
|
|
|
return json; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public DelayedAction load(JSONObject json) { |
|
|
|
@ -59,13 +67,17 @@ public class DelayedAction extends ActionList {
@@ -59,13 +67,17 @@ public class DelayedAction extends ActionList {
|
|
|
|
|
} |
|
|
|
|
if (json.has(MIN_DELAY)) min_delay = json.getInt(MIN_DELAY); |
|
|
|
|
if (json.has(MAX_DELAY)) max_delay = json.getInt(MAX_DELAY); |
|
|
|
|
if (json.has(Store.class.getSimpleName())) store = Store.get(json.getString(Store.class.getSimpleName())); |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) { |
|
|
|
|
formInputs.add(t("Minimum delay"),new Input(MIN_DELAY,min_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms")); |
|
|
|
|
formInputs.add(t("Maximum delay"),new Input(MAX_DELAY,max_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms")); |
|
|
|
|
formInputs.add(t("Read delay from store:"),Store.selector(store)); |
|
|
|
|
if (isNull(store)) { |
|
|
|
|
formInputs.add(t("Minimum delay"),new Input(MIN_DELAY,min_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms")); |
|
|
|
|
formInputs.add(t("Maximum delay"),new Input(MAX_DELAY,max_delay).numeric().addTo(new Tag("span")).content(NBSP+"ms")); |
|
|
|
|
} |
|
|
|
|
return super.properties(preForm, formInputs, postForm,errors); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -81,6 +93,7 @@ public class DelayedAction extends ActionList {
@@ -81,6 +93,7 @@ public class DelayedAction extends ActionList {
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public String toString() { |
|
|
|
|
if (isSet(store)) return t("Read delay from \"{}\", wait, then",store.name()); |
|
|
|
|
return t("Wait {} ms, then",min_delay < max_delay ? min_delay+"…"+max_delay : min_delay)+COL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -96,6 +109,10 @@ public class DelayedAction extends ActionList {
@@ -96,6 +109,10 @@ public class DelayedAction extends ActionList {
|
|
|
|
|
props.children().insertElementAt(new Tag("div").content(nfe.getMessage()), 2); |
|
|
|
|
return props; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
d = params.getString(Store.class.getSimpleName()); |
|
|
|
|
if (isSet(d)) store = d.isEmpty() ? null : Store.get(d); |
|
|
|
|
|
|
|
|
|
d = params.getString(MAX_DELAY); |
|
|
|
|
if (isSet(d)) try { |
|
|
|
|
int ms = Integer.parseInt(d); |
|
|
|
|