From 80f31e2628aecd32d491520eae8cf3722fc12f8b Mon Sep 17 00:00:00 2001
From: Stephan Richter <github@keawe.de>
Date: Thu, 24 Jun 2021 17:42:42 +0200
Subject: [PATCH] altered Action "DisableEnableBlock": this action now is able
 to disable/enable any tile

---
 pom.xml                                       |  2 +-
 .../translations/Application.de.translation   |  2 +-
 .../java/de/srsoftware/web4rail/Plan.java     | 24 +++++++-------
 .../srsoftware/web4rail/actions/Action.java   |  2 +-
 .../web4rail/actions/ActionList.java          |  2 ++
 ...nableBlock.java => DisableEnableTile.java} | 32 +++++++++----------
 6 files changed, 34 insertions(+), 30 deletions(-)
 rename src/main/java/de/srsoftware/web4rail/actions/{DisableEnableBlock.java => DisableEnableTile.java} (66%)

diff --git a/pom.xml b/pom.xml
index c74566d..df0326b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>de.srsoftware</groupId>
 	<artifactId>web4rail</artifactId>
-	<version>1.5.6</version>
+	<version>1.5.7</version>
 	<name>Web4Rail</name>
 	<packaging>jar</packaging>
 	<description>Java Model Railway Control</description>
diff --git a/resources/translations/Application.de.translation b/resources/translations/Application.de.translation
index bb4a249..4da6c47 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -142,7 +142,7 @@ disable : deaktivieren
 disabled : deaktiviert
 disable {} : {} deaktivieren
 disabled routes : deaktivierte Fahrstraßen
-DisableEnableBlock : Block (de)aktivieren
+DisableEnableTile : Kachel (de)aktivieren
 dismount : ausbauen
 Display "{}" on {}. : „{}“ auf {} anzeigen.
 Do you know, what you are doing? : Weißt du, was du da tust?
diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java
index 804d5f2..45b5a46 100644
--- a/src/main/java/de/srsoftware/web4rail/Plan.java
+++ b/src/main/java/de/srsoftware/web4rail/Plan.java
@@ -910,20 +910,22 @@ public class Plan extends BaseClass{
 
 	public void sensor(int addr, boolean active) {
 		Contact contact = Contact.get(addr);
-		if (active && isSet(learningContact)) {
-			if (isSet(contact)) {
-				contact.addr(0);
-				LOG.debug("unsibscribed {} from {}",contact,addr);
-			}
-			
-			stream(learningContact.addr(addr).properties().toString());
-			LOG.debug("learned: {} = {}",addr,learningContact);			
-			learningContact = null;
-			return;
-		}
+		if (active && isSet(learningContact)) learnContact(addr,contact);
 		if (isSet(contact)) contact.activate(active);
 	}
 	
+	private void learnContact(int addr, Contact contact) {
+		if (isSet(contact)) {
+			contact.addr(0);
+			LOG.debug("unsibscribed {} from {}",contact,addr);
+		}
+		
+		stream(learningContact.addr(addr).properties().toString());
+		LOG.debug("learned: {} = {}",addr,learningContact);			
+		learningContact = null;
+		return;
+	}
+
 	public void setAppConfig(Configuration config) {
 		appConfig = config;
 	}
diff --git a/src/main/java/de/srsoftware/web4rail/actions/Action.java b/src/main/java/de/srsoftware/web4rail/actions/Action.java
index aecb12d..5ab1ed8 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/Action.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/Action.java
@@ -49,7 +49,7 @@ public abstract class Action extends BaseClass {
 			CoupleTrain.class,
 			DelayedAction.class,
 			DetermineTrainInBlock.class,
-			DisableEnableBlock.class,
+			DisableEnableTile.class,
 			EngageDecoupler.class,
 			FinishRoute.class,
 			Loop.class,
diff --git a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
index 09f5416..5bbcd49 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/ActionList.java
@@ -162,6 +162,8 @@ public class ActionList extends Action implements Iterable<Action>{
 		switch (type) {
 			case "AddDestination":
 				return AddRemoveDestination.class.getSimpleName();
+			case "DisableEnableBlock":
+				return DisableEnableTile.class.getSimpleName();
 			default:
 				return type;
 		}		
diff --git a/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java b/src/main/java/de/srsoftware/web4rail/actions/DisableEnableTile.java
similarity index 66%
rename from src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java
rename to src/main/java/de/srsoftware/web4rail/actions/DisableEnableTile.java
index 2e2176c..a87c51a 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/DisableEnableBlock.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/DisableEnableTile.java
@@ -16,34 +16,34 @@ import de.srsoftware.web4rail.tiles.Block;
 import de.srsoftware.web4rail.tiles.Shadow;
 import de.srsoftware.web4rail.tiles.Tile;
 
-public class DisableEnableBlock extends Action {
+public class DisableEnableTile extends Action {
 		
-	public DisableEnableBlock(BaseClass parent) {
+	public DisableEnableTile(BaseClass parent) {
 		super(parent);
 	}
 
-	private Block block = null;
+	private Tile tile = null;
 	private boolean disable = true;
 	
 	@Override
 	public boolean fire(Context context) {
-		if (isNull(block)) block = context.block();
-		if (isNull(block)) return false;
-		block.setEnabled(!disable);
+		if (isNull(tile)) tile = context.block();
+		if (isNull(tile)) return false;
+		tile.setEnabled(!disable);
 		return true;
 	}
 	
 	@Override
 	public JSONObject json() {
 		JSONObject json = super.json();
-		if (isSet(block)) json.put(BLOCK, block.id());
+		if (isSet(tile)) json.put(BLOCK, tile.id());
 		json.put(STATE, !disable);
 		return json;
 	}
 	
 	@Override
 	protected String highlightId() {
-		return isSet(block) ? block.id().toString() : null;
+		return isSet(tile) ? tile.id().toString() : null;
 	}
 	
 	
@@ -53,7 +53,7 @@ public class DisableEnableBlock extends Action {
 		if (json.has(BLOCK)) new LoadCallback() {
 			@Override
 			public void afterLoad() {
-				block = Block.get(Id.from(json,BLOCK));
+				tile = Block.get(Id.from(json,BLOCK));
 			}
 		};						
 		return super.load(json);
@@ -62,7 +62,7 @@ public class DisableEnableBlock extends Action {
 	
 	@Override
 	protected Window properties(List<Fieldset> preForm, FormInput formInputs, List<Fieldset> postForm,String...errors) {
-		formInputs.add(t("Block")+": "+(isNull(block) ? t("block from context") : block),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Block.class.getSimpleName())));
+		formInputs.add(t("Block")+": "+(isNull(tile) ? t("tile from context") : tile),button(t("Select from plan"),Map.of(ACTION,ACTION_UPDATE,ASSIGN,Tile.class.getSimpleName())));
 		Tag radios = new Tag("p");
 		new Radio(STATE, "enable", t("enable"), !disable).addTo(radios);
 		new Radio(STATE, "disable", t("disable"), disable).addTo(radios);
@@ -72,22 +72,22 @@ public class DisableEnableBlock extends Action {
 	
 	@Override
 	protected void removeChild(BaseClass child) {
-		if (child == block) block = null;
+		if (child == tile) tile = null;
 		super.removeChild(child);
 	}
 	
 	public String toString() {
-		String blk = isSet(block) ? block.toString() : t("block from context");
+		String blk = isSet(tile) ? tile.toString() : t("block from context");
 		return t(disable ? "disable {}" : "enable {}",blk);
 	};
 	
 	@Override
 	protected Object update(Params params) {
 		LOG.debug("update: {}",params);
-		Id blockId = Id.from(params,Block.class.getSimpleName());
-		Tile tile = isSet(blockId) ? BaseClass.get(blockId) : null;
-		if (tile instanceof Shadow) tile = ((Shadow)tile).overlay();
-		if (tile instanceof Block) block = (Block) tile;
+		Id tileId = Id.from(params,Tile.class.getSimpleName());
+		Tile newTile = BaseClass.get(tileId);;
+		if (newTile instanceof Shadow) newTile = ((Shadow)newTile).overlay();
+		if (isSet(newTile)) tile = newTile;
 		disable = !"enable".equals(params.get(STATE)); 
 		return properties();
 	}