diff --git a/pom.xml b/pom.xml
index 8b659d5..0a2f0af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 0.6.14
+ 0.7.1
Web4Rail
jar
Java Model Railway Control
diff --git a/src/main/java/de/srsoftware/web4rail/Constants.java b/src/main/java/de/srsoftware/web4rail/Constants.java
index fabede2..b69da78 100644
--- a/src/main/java/de/srsoftware/web4rail/Constants.java
+++ b/src/main/java/de/srsoftware/web4rail/Constants.java
@@ -11,6 +11,7 @@ public interface Constants {
public static final String ACTION_AUTO = "auto";
public static final String ACTION_CLICK = "click";
public static final String ACTION_CONNECT = "connect";
+ public static final String ACTION_DROP = "drop";
public static final String ACTION_EMERGENCY = "emergency";
public static final String ACTION_FASTER10 = "faster10";
public static final String ACTION_MOVE = "move";
@@ -40,5 +41,7 @@ public interface Constants {
public static final String ID = "id";
public static final String PORT = "port";
public static final Charset UTF8 = StandardCharsets.UTF_8;
+ public static final String CONTACT = "contact";
+ public static final String TYPE = "type";
}
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 4c08f2c..d7b8289 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -409,6 +409,8 @@ public class Plan implements Constants{
switch (params.get(ACTION)) {
case ACTION_ADD_ACTION:
return route.addActionForm(params);
+ case ACTION_DROP:
+ return route.dropAction(params);
case ACTION_PROPS:
return route.properties();
case ACTION_UPDATE:
diff --git a/src/main/java/de/srsoftware/web4rail/Route.java b/src/main/java/de/srsoftware/web4rail/Route.java
index 88355ef..f8bd2e2 100644
--- a/src/main/java/de/srsoftware/web4rail/Route.java
+++ b/src/main/java/de/srsoftware/web4rail/Route.java
@@ -66,12 +66,11 @@ public class Route implements Constants{
private static final String TRIGGER = "trigger";
private static final String ACTIONS = "actions";
- private static final String CONTACT = "contact";
- private static final String TYPE = "type";
+ private static final String ACTION_ID = "action_id";
private Tag actionTypeForm(Contact contact) {
String formId ="add-action-to-contact-"+contact.id();
- Tag typeForm = new Form().id(formId);
+ Tag typeForm = new Form(formId);
new Input(REALM, REALM_ROUTE).hideIn(typeForm);
new Input(ID,id()).hideIn(typeForm);
new Input(ACTION,ACTION_ADD_ACTION).hideIn(typeForm);
@@ -108,7 +107,7 @@ public class Route implements Constants{
return tile;
}
- private void addAction(String trigger, Action action) {
+ public void addAction(String trigger, Action action) {
Vector actions = triggers.get(trigger);
if (actions == null) {
actions = new Vector();
@@ -117,6 +116,24 @@ public class Route implements Constants{
actions.add(action);
}
+ public Object dropAction(HashMap params) {
+ String action_id = params.get(ACTION_ID);
+ if (action_id == null) return t("No action id passed to request!");
+ String contactId = params.get(CONTACT);
+ Tile tag = plan.get(contactId, false);
+ if (!(tag instanceof Contact)) return t("No contact id passed to request!");
+ Contact contact = (Contact) tag;
+ Vector actions = triggers.get(contact.trigger());
+
+ for (int i=0; i params) {
String contactId = params.get(CONTACT);
Tile tag = plan.get(contactId, false);
@@ -130,7 +147,7 @@ public class Route implements Constants{
if (type == null) return (actionTypeForm(contact).addTo(win));
switch (type) {
case "SpeedReduction":
- return SpeedReduction.propForm(params);
+ return SpeedReduction.propForm(params,this,contact);
}
return win;
@@ -170,7 +187,9 @@ public class Route implements Constants{
Tag act = new Tag("li").content(action.toString());
new Button("↑").addTo(act);
new Button("↓").addTo(act);
- new Button("-").addTo(act);
+ json.put(ACTION, ACTION_DROP);
+ json.put(ACTION_ID, action.toString());
+ new Button("-",json).addTo(act);
act.addTo(ul);
}
ul.addTo(link);
@@ -262,7 +281,6 @@ public class Route implements Constants{
public Vector contacts() {
return new Vector<>(contacts);
}
-
public void finish() throws IOException {
startBlock.train(null);
@@ -404,8 +422,7 @@ public class Route implements Constants{
file.close();
}
- public boolean lock() {
-
+ public boolean lock() {
ArrayList lockedTiles = new ArrayList();
try {
for (Tile tile : path) lockedTiles.add(tile.lock(this));
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index f43ec2d..34c5bf4 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -42,11 +42,11 @@ public abstract class Action {
return null;
}
- public static Object propForm(HashMap params) {
+ public static Window propForm(HashMap params) {
return new Window("action-props", "Action properties");
}
- protected String t(String tex,Object...fills) {
+ protected static String t(String tex,Object...fills) {
return Translation.get(Application.class, tex, fills);
}
}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java b/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java
index d84316d..da34162 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/SpeedReduction.java
@@ -1,13 +1,23 @@
package de.srsoftware.web4rail.actions;
+import java.util.HashMap;
+
import org.json.JSONObject;
+import de.srsoftware.tools.Tag;
+import de.srsoftware.web4rail.Constants;
import de.srsoftware.web4rail.Route;
+import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.moving.Train;
+import de.srsoftware.web4rail.tags.Button;
+import de.srsoftware.web4rail.tags.Form;
+import de.srsoftware.web4rail.tags.Input;
+import de.srsoftware.web4rail.tags.Label;
+import de.srsoftware.web4rail.tiles.Contact;
-public class SpeedReduction extends RouteAction {
+public class SpeedReduction extends RouteAction implements Constants{
- static final String MAX_SPEED = "max_speed";
+ public static final String MAX_SPEED = "max_speed";
private int maxSpeed;
public SpeedReduction(int routeId, int kmh) {
@@ -28,6 +38,39 @@ public class SpeedReduction extends RouteAction {
return json;
}
+ public static Window propForm(HashMap params, Route route, Contact contact) {
+ String error = null;
+ String ms = params.get(MAX_SPEED);
+ if (ms == null) {
+ ms = ""+128;
+ } else {
+ try {
+ int s = Integer.parseInt(ms);
+ if (s<0) error = t("Speed must not be less than zero!");
+ if (error == null) {
+ route.addAction(contact.trigger(),new SpeedReduction(route.id(), s));
+ contact.plan().stream("Action added!");
+ return null;
+ }
+ } catch (NumberFormatException e) {
+ error = t("Not a valid number!");
+ }
+ }
+ Window win = Action.propForm(params);
+ String formId = "add-action-to-contact-"+contact.id();
+ Tag form = new Form(formId);
+ new Tag("div").content(t("Add Action {} to contact {} on route {}:",SpeedReduction.class.getSimpleName(),contact,route)).addTo(win);
+ new Input(REALM, REALM_ROUTE).hideIn(form);
+ new Input(ID,route.id()).hideIn(form);
+ new Input(ACTION,ACTION_ADD_ACTION).hideIn(form);
+ new Input(CONTACT,contact.id()).hideIn(form);
+ new Input(TYPE,SpeedReduction.class.getSimpleName()).hideIn(form);
+ new Input(MAX_SPEED, ms).addTo(new Label("new speed")).addTo(form);
+ if (error != null) new Tag("div").content(error).addTo(form);
+ new Button(t("Create action"),"return submitForm('"+formId+"');").addTo(form).addTo(win);
+ return win;
+ }
+
@Override
public String toString() {
return t("Reduce speed to {} km/h",maxSpeed);
diff --git a/src/main/java/de/srsoftware/web4rail/tags/Form.java b/src/main/java/de/srsoftware/web4rail/tags/Form.java
index ed74899..cd768bb 100644
--- a/src/main/java/de/srsoftware/web4rail/tags/Form.java
+++ b/src/main/java/de/srsoftware/web4rail/tags/Form.java
@@ -5,10 +5,16 @@ import de.srsoftware.tools.Tag;
public class Form extends Tag {
private static final long serialVersionUID = 3518580733330482303L;
+
public Form() {
super("form");
attr("method","POST");
}
+ public Form(String id) {
+ super("form");
+ attr("method","POST");
+ id(id);
+ }
}