From 312fcc900b27e5a23e04b6b68c0ff3d41fe4e67e Mon Sep 17 00:00:00 2001
From: Stephan Richter <github@keawe.de>
Date: Thu, 24 Dec 2020 15:05:34 +0100
Subject: [PATCH] added AndCondition

---
 pom.xml                                         |  2 +-
 .../translations/Application.de.translation     |  1 +
 .../srsoftware/web4rail/actions/BrakeStop.java  |  2 +-
 .../web4rail/conditions/AndCondition.java       | 17 +++++++++++++++++
 .../web4rail/conditions/Condition.java          |  1 +
 .../web4rail/conditions/ConditionList.java      |  6 +++++-
 6 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/de/srsoftware/web4rail/conditions/AndCondition.java

diff --git a/pom.xml b/pom.xml
index 3953156..8fe0cf2 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.2.55</version>
+	<version>1.2.56</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 7e1afe0..0c39e69 100644
--- a/resources/translations/Application.de.translation
+++ b/resources/translations/Application.de.translation
@@ -20,6 +20,7 @@ Address : Adresse
 Address\: : Adresse:
 Analyze : analysieren
 and : und
+AndCondition : Und-Bedingung
 Apply : Übernehmen
 Auto pilot : Autopilot
 AutopilotActive : Autopilot aktiv
diff --git a/src/main/java/de/srsoftware/web4rail/actions/BrakeStop.java b/src/main/java/de/srsoftware/web4rail/actions/BrakeStop.java
index ab38ac0..e3d94c6 100644
--- a/src/main/java/de/srsoftware/web4rail/actions/BrakeStop.java
+++ b/src/main/java/de/srsoftware/web4rail/actions/BrakeStop.java
@@ -10,7 +10,7 @@ public class BrakeStop extends Action {
 	
 	@Override
 	public boolean fire(Context context) {
-		if (isNull(context.route())) return false;
+		if (isNull(context.route()) || isNull(context.route().train())) return false;
 		context.route().brakeStop();
 		return true;
 	}
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/AndCondition.java b/src/main/java/de/srsoftware/web4rail/conditions/AndCondition.java
new file mode 100644
index 0000000..ccbf018
--- /dev/null
+++ b/src/main/java/de/srsoftware/web4rail/conditions/AndCondition.java
@@ -0,0 +1,17 @@
+package de.srsoftware.web4rail.conditions;
+
+public class AndCondition extends ConditionList{
+	
+	@Override
+	public boolean fulfilledBy(Context context) {
+		for (Condition condition : this) {
+			if (!condition.fulfilledBy(context)) return false;
+		}
+		return true;
+	}
+	
+	@Override
+	protected String glue() {
+		return t("and");
+	}	
+}
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
index 98c933b..24ed3fc 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/Condition.java
@@ -114,6 +114,7 @@ public abstract class Condition extends BaseClass {
 		
 	private static List<Class<? extends Condition>> list() {
 		return List.of(
+				AndCondition.class,
 				AutopilotActive.class,
 				BlockFree.class,
 				CarInTrain.class,
diff --git a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
index 234fb21..9ec1ffc 100644
--- a/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
+++ b/src/main/java/de/srsoftware/web4rail/conditions/ConditionList.java
@@ -148,7 +148,11 @@ public class ConditionList extends Condition implements Iterable<Condition>{
 		if (conditions.isEmpty()) return "["+t("Click here to add conditions")+"]";
 		StringBuffer sb = new StringBuffer(conditions.firstElement().toString());
 		String glue = glue();
-		for (int i=1; i<conditions.size(); i++) sb.append(" ").append(glue).append(" "+conditions.get(i));
+		for (int i=1; i<conditions.size(); i++) {
+			Condition condition = conditions.get(i);
+			String cString = condition instanceof ConditionList ? " ("+condition+")" : " "+condition;
+			sb.append(" ").append(glue).append(cString);
+		}
 		return sb.toString();
 	}
 }