diff --git a/pom.xml b/pom.xml
index 9ade4f2..85811a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.srsoftware
web4rail
- 1.4.22
+ 1.4.23
Web4Rail
jar
Java Model Railway Control
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index 16be29c..c24938c 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -14,6 +14,7 @@ ActivateRoute : Route aktivieren
add : hinzufügen
add command for {} : Kommando für {} hinzufügen
Added {} : {} hinzugefügt
+Added {} routes. : {} Routen hinzugefügt.
add action : Aktion hinzufügen
Add action to action list : Aktion zur Liste hinzufügen
add car : Waggon hinzufügen
@@ -296,6 +297,8 @@ Route will only be available, if all conditions are fulfilled. : Route ist nur v
Save "{}" : „{}“ speichern
Save : speichern
SavePlan : Plan speichern
+Search new routes, do not update existing : Neue Routen suchen, bestehende nicht verändern
+Search new routes, update existing : Neue Routen suchen, bestehende Aktualisieren
Seek in last : Durchsuche letzte
Select block : Block auswählen
Select car : Fahrzeug auswählen
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index d8d0e55..c764933 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -35,6 +35,7 @@ import de.srsoftware.web4rail.tags.Fieldset;
import de.srsoftware.web4rail.tags.Form;
import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
+import de.srsoftware.web4rail.tags.Radio;
import de.srsoftware.web4rail.tags.Table;
import de.srsoftware.web4rail.tags.Window;
import de.srsoftware.web4rail.threads.ControlUnit;
@@ -158,6 +159,9 @@ public class Plan extends BaseClass{
private static final String RENAME = "rename";
private static final String SPEED_STEP = "speed_step";
private static final String ALLOW_JSON_EDIT = "allow_json_edit";
+ private static final String DISCOVERY_MODE = "discovery_mode";
+ private static final String DISCOVER_NEW = "discover_new";
+ private static final String DISCOVER_UPDATE = "discover_update";
private String name = DEFAULT_NAME;
private ControlUnit controlUnit = new ControlUnit(this); // the control unit, to which the plan is connected
@@ -309,27 +313,54 @@ public class Plan extends BaseClass{
Window win = new Window("confirm-analyze", t("Confirmation required"));
new Tag("p").content(t("Your plan currently has {} routes.",oldRoutes.size())).addTo(win);
new Tag("p").content(t("Analyze may overwrite these routes!")).addTo(win);
- button(t("analyze"), Map.of(ACTION,ACTION_ANALYZE,CONFIRM,"yes")).addTo(win);
- button(t("abort")).addTo(win);
+
+ Form form = new Form("plan-analyze-form");
+
+ Tag p = new Tag("p");
+ new Input(REALM,REALM_PLAN).hideIn(form);
+ new Input(ACTION,ACTION_ANALYZE).hideIn(form);
+ new Input(CONFIRM,"yes").hideIn(form);
+ new Radio(DISCOVERY_MODE, DISCOVER_UPDATE, t("Search new routes, update existing"), true).addTo(p);
+ new Radio(DISCOVERY_MODE, DISCOVER_NEW, t("Search new routes, do not update existing"), false).addTo(p);
+ p.addTo(form);
+
+ new Button(t("analyze"),form).addTo(form);
+ button(t("abort")).addTo(form);
+
+ form.addTo(win);
return win;
}
+ boolean keepExisting = DISCOVER_NEW.equals(params.get(DISCOVERY_MODE));
+
new Thread(Application.threadName("Plan.Analyzer")) {
public void run() {
Vector newRoutes = new Vector();
for (Block block : BaseClass.listElements(Block.class)) {
- for (Connector con : block.startPoints()) {
- newRoutes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
- }
+ for (Connector con : block.startPoints()) newRoutes.addAll(follow(new Route().begin(block,con.from.inverse()),con));
}
for (Tile tile : BaseClass.listElements(Tile.class)) tile.routes().clear();
- for (Route route : newRoutes) registerRoute(route.complete());
+ int count = 0;
+ for (Route newRoute : newRoutes) {
+ newRoute.complete();
+ Route replacedRoute = BaseClass.get(newRoute.id());
+ if (isSet(replacedRoute)) {
+ if (keepExisting) continue;
+ newRoute.addPropertiesFrom(replacedRoute);
+ }
+ registerRoute(newRoute);
+ count ++;
+ }
for (Route oldRoute : oldRoutes) {
- oldRoute.id = new Id("test"); // new routes may have the same ids and shall not be deleted in the next step!
- oldRoute.remove();
+ if (keepExisting) {
+ registerRoute(oldRoute);
+ } else {
+ oldRoute.id = new Id("test"); // new routes may have the same ids and shall not be deleted in the next step!
+ oldRoute.remove();
+ }
}
- stream(t("Found {} routes.",newRoutes.size()));
+ stream(t(keepExisting?"Added {} routes.":"Found {} routes.",count));
}
}.start();
@@ -736,16 +767,14 @@ public class Plan extends BaseClass{
}
/**
- * adds a new route to the plan
- * @param newRoute
+ * adds a route to the plan
+ * @param route
* @return
*/
- Route registerRoute(Route newRoute) {
- newRoute.path().stream().filter(Tile::isSet).forEach(tile -> tile.add(newRoute));
- Route existingRoute = BaseClass.get(newRoute.id());
- if (isSet(existingRoute)) newRoute.addPropertiesFrom(existingRoute);
- newRoute.parent(this).register();
- return newRoute;
+ Route registerRoute(Route route) {
+ route.path().stream().filter(Tile::isSet).forEach(tile -> tile.add(route));
+ route.parent(this).register();
+ return route;
}
private Fieldset relayProperties() {