From 51954726dbfbb3735debbbd96cf691cb10d751cd Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sun, 15 Nov 2020 11:57:49 +0100
Subject: [PATCH] #166 - split trigger points into stop and eof

---
 PlayWall/src/main/resources/lang/_de.properties       |  3 ++-
 .../de/tobias/playpad/pad/PadSettingsSerializer.java  | 11 ++++++++---
 .../listener/trigger/PadTriggerDurationListener.java  |  4 ++--
 .../listener/trigger/PadTriggerStatusListener.java    |  8 ++++----
 .../main/java/de/tobias/playpad/tigger/Trigger.java   |  8 +++++---
 .../java/de/tobias/playpad/tigger/TriggerPoint.java   |  3 ++-
 6 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/PlayWall/src/main/resources/lang/_de.properties b/PlayWall/src/main/resources/lang/_de.properties
index cfbdf22e..9e927c66 100755
--- a/PlayWall/src/main/resources/lang/_de.properties
+++ b/PlayWall/src/main/resources/lang/_de.properties
@@ -210,7 +210,8 @@ Trigger.Cart.Name=Kacheln
 Trigger.Volume.Name=Lautst\u00E4rke
 # TriggerPoint - Enum
 TriggerPoint.START=Start
-TriggerPoint.EOF_STOP=Ende/Stop
+TriggerPoint.STOP=Stop
+TriggerPoint.EOF=Ende (EoF)
 # Drag and Drop Mode
 DnDMode.Replace=Ersetzen
 DnDMode.Duplicate=Duplizieren
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
index c4a44e1d..f3fc932c 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.pad;
 
+import de.thecodelabs.logger.Logger;
 import de.thecodelabs.storage.settings.UserDefaults;
 import de.tobias.playpad.design.modern.model.ModernCartDesign;
 import de.tobias.playpad.design.modern.serializer.ModernCartDesignSerializer;
@@ -92,9 +93,13 @@ public class PadSettingsSerializer {
 		Element triggersElement = settingsElement.element(TRIGGERS_ELEMENT);
 		if (triggersElement != null) {
 			for (Element triggerElement : triggersElement.elements(TRIGGER_ELEMENT)) {
-				Trigger trigger = new Trigger();
-				trigger.load(triggerElement);
-				padSettings.getTriggers().put(trigger.getTriggerPoint(), trigger);
+				try {
+					Trigger trigger = new Trigger();
+					trigger.load(triggerElement);
+					padSettings.getTriggers().put(trigger.getTriggerPoint(), trigger);
+				} catch (IllegalArgumentException e) {
+					Logger.error(e);
+				}
 			}
 		}
 		padSettings.updateTrigger(); // Add missing trigger points
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
index 56eb71c9..5ed71ddb 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java
@@ -15,7 +15,7 @@ import javafx.util.Duration;
 
 public class PadTriggerDurationListener implements ChangeListener<Duration> {
 
-	private Pad pad;
+	private final Pad pad;
 
 	public PadTriggerDurationListener(Pad pad) {
 		this.pad = pad;
@@ -37,7 +37,7 @@ public class PadTriggerDurationListener implements ChangeListener<Duration> {
 				Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START);
 				startTrigger.handle(pad, newValue, pad.getProject(), mainViewController, currentProfile);
 
-				Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF_STOP);
+				Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF);
 				endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile);
 			}
 		}
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
index 45174361..f7edfbdf 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java
@@ -14,7 +14,7 @@ import javafx.util.Duration;
 
 public class PadTriggerStatusListener implements ChangeListener<PadStatus> {
 
-	private Pad pad;
+	private final Pad pad;
 
 	public PadTriggerStatusListener(Pad pad) {
 		this.pad = pad;
@@ -28,10 +28,10 @@ public class PadTriggerStatusListener implements ChangeListener<PadStatus> {
 			// Execute Trigger
 			if (newValue == PadStatus.PLAY) { // TRIGGER FÜR START
 				executeTrigger(padSettings.getTriggers().get(TriggerPoint.START));
-			} else if (newValue == PadStatus.STOP || (oldValue == PadStatus.PLAY && newValue == PadStatus.READY)) { // TRIGGER FÜR STOP
-				executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF_STOP));
+			} else if (newValue == PadStatus.STOP) { // TRIGGER FÜR STOP
+				executeTrigger(padSettings.getTriggers().get(TriggerPoint.STOP));
 			} else if (oldValue == PadStatus.PLAY && newValue == PadStatus.READY && pad.isEof()) { // TRIGGER FÜR EOF
-				executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF_STOP));
+				executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF));
 			}
 		} else {
 			pad.setIgnoreTrigger(false);
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
index 2f65d793..fcfb8301 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java
@@ -71,7 +71,7 @@ public class Trigger {
 		try {
 			triggerPoint = TriggerPoint.valueOf(element.attributeValue(POINT_ATTR));
 		} catch (Exception e) {
-			Logger.error(e);
+			throw new IllegalArgumentException("Trigger Point " + element.attributeValue(POINT_ATTR) + " not exists");
 		}
 
 		for (Element itemElement : element.elements(ITEM_ELEMENT)) {
@@ -108,7 +108,9 @@ public class Trigger {
 		for (TriggerItem item : items) {
 			if (triggerPoint == TriggerPoint.START) {
 				handleStartPoint(pad, duration, project, mainViewController, currentProfile, item);
-			} else if ((triggerPoint == TriggerPoint.EOF_STOP)) {
+			} else if (triggerPoint == TriggerPoint.STOP) {
+				handleEndPoint(pad, duration, project, mainViewController, currentProfile, item);
+			} else if (triggerPoint == TriggerPoint.EOF) {
 				handleEndPoint(pad, duration, project, mainViewController, currentProfile, item);
 			}
 		}
@@ -126,7 +128,7 @@ public class Trigger {
 
 	private void handleStartPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) {
 		if (pad.getStatus() == PadStatus.PLAY) {
-			// Mitten drin, wenn die Zeit die gepsiel wurde größer ist als die gesetzte und noch der Trigger noch nicht ausgeführt
+			// Mitten drin, wenn die Zeit die gespiel wurde größer ist als die gesetzte und noch der Trigger noch nicht ausgeführt
 			// wurde (null)
 			if ((item.getPerformedAt() == null && item.getDurationFromPoint().lessThan(duration))
 					// Wenn der Trigger am Anfang ist
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
index 30730e5b..c25fb939 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java
@@ -3,6 +3,7 @@ package de.tobias.playpad.tigger;
 public enum TriggerPoint {
 
 	START,
-	EOF_STOP
+	STOP,
+	EOF
 
 }
-- 
GitLab