From b8b121c1c396a9e80643b592df2eb96f83d71a9b Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Sat, 10 Oct 2020 18:36:48 +0200
Subject: [PATCH] Add entry and exit for hierarchical state

---
 src/soon/PlayZustand.java    | 10 +++----
 src/soon/PowerOff.java       |  7 +++--
 src/soon/PowerOn.java        | 53 ++++++++++++++++++++++++++++++++++--
 src/soon/PowerOnZustand.java | 18 ++++++++++++
 src/soon/Soon.java           | 34 +++++++++--------------
 src/soon/SoonTestDrive.java  |  2 --
 src/soon/StopZustand.java    | 10 +++----
 src/soon/Zustand.java        |  4 +--
 8 files changed, 98 insertions(+), 40 deletions(-)
 create mode 100644 src/soon/PowerOnZustand.java

diff --git a/src/soon/PlayZustand.java b/src/soon/PlayZustand.java
index fc8bf73..beddd6c 100644
--- a/src/soon/PlayZustand.java
+++ b/src/soon/PlayZustand.java
@@ -1,15 +1,15 @@
 package soon;
 
-public class PlayZustand extends PowerOn {
+public class PlayZustand extends PowerOnZustand {
 	
-	public PlayZustand(Soon s) {
-		super(s);
+	public PlayZustand(Soon s, PowerOn p) {
+		super(s, p);
 	}
 	
 	public void stopButton() {
 		exit();
-		s.setZustand(s.getStopZustand());
-		s.getZustand().entry();
+		p.setZustand(p.getStopZustand());
+		p.getZustand().entry();
 	}
 
 	public void volumeUpButton() {
diff --git a/src/soon/PowerOff.java b/src/soon/PowerOff.java
index 2643e77..d4e26c4 100644
--- a/src/soon/PowerOff.java
+++ b/src/soon/PowerOff.java
@@ -1,14 +1,15 @@
 package soon;
 
 public class PowerOff extends Zustand {
-	
+
 	public PowerOff(Soon s) {
 		super(s);
 	}
 	
 	public void powerButton() {
 		exit();
-		s.setZustand(s.getPowerOnHistory());
+		s.setZustand(s.getPowerOnZustand());
 		System.out.println("Anschalten");
-		s.getZustand().entry();	}
+		s.getZustand().entry();
+	}
 }
diff --git a/src/soon/PowerOn.java b/src/soon/PowerOn.java
index de675f1..fc3ab60 100644
--- a/src/soon/PowerOn.java
+++ b/src/soon/PowerOn.java
@@ -1,15 +1,64 @@
 package soon;
 
-public abstract class PowerOn extends Zustand {
+public class PowerOn extends Zustand {
+	PowerOnZustand playZustand;
+	PowerOnZustand stopZustand;
 
+	PowerOnZustand zustand;
+	
 	public PowerOn(Soon s) {
 		super(s);
+		stopZustand = new StopZustand(s, this);
+		playZustand = new PlayZustand(s, this);
+		zustand = stopZustand;
+	}
+	
+	public PowerOnZustand getStopZustand() {
+		return stopZustand;
+	}
+
+	public PowerOnZustand getPlayZustand() {
+		return playZustand;
+	}
+
+	public PowerOnZustand getZustand() {
+		return zustand;
+	}
+
+	public void setZustand(PowerOnZustand zustand) {
+		this.zustand = zustand;
+	}
+	
+	public void playButton() {
+		zustand.playButton();
 	}
 	
+	public void stopButton() {
+		zustand.stopButton();
+	}
+	
+	public void volumeUpButton() {
+		zustand.volumeUpButton();
+	}
+	
+	public void volumeDownButton() {
+		zustand.volumeDownButton();
+	}
+
 	public void powerButton() {
 		exit();
-		s.setPowerOnHistory(s.getZustand());
 		s.setZustand(s.getPowerOffZustand());
 		System.out.println("Ausschalten");
+		s.getZustand().entry();
+	}
+	
+	public void entry() {
+		s.powerLED_On();
+		zustand.entry();
+	}
+	
+	public void exit() {
+		s.powerLED_Off();
+		zustand.exit();
 	}
 }
diff --git a/src/soon/PowerOnZustand.java b/src/soon/PowerOnZustand.java
new file mode 100644
index 0000000..36589af
--- /dev/null
+++ b/src/soon/PowerOnZustand.java
@@ -0,0 +1,18 @@
+package soon;
+
+public abstract class PowerOnZustand {
+	Soon s;
+	PowerOn p;
+	
+	public PowerOnZustand(Soon s, PowerOn p) {
+		this.s = s;
+		this.p = p;
+	}
+	
+	public void playButton() {};
+	public void stopButton() {};
+	public void volumeUpButton() {};
+	public void volumeDownButton() {};
+	public void entry() {};
+	public void exit() {};
+}
diff --git a/src/soon/Soon.java b/src/soon/Soon.java
index bbfaada..d03e0df 100644
--- a/src/soon/Soon.java
+++ b/src/soon/Soon.java
@@ -1,35 +1,23 @@
 package soon;
 
 public class Soon {
-	Zustand stopZustand;
-	Zustand playZustand;
+	Zustand powerOnZustand;
 	Zustand powerOffZustand;
-	Zustand powerOnHistory;
 	
 	Zustand zustand;
 	
 	public Soon () {
-		stopZustand = new StopZustand(this);
-		playZustand = new PlayZustand(this);
+		powerOnZustand = new PowerOn(this);
 		powerOffZustand = new PowerOff(this);
 		zustand = powerOffZustand;
-		powerOnHistory = stopZustand;
 	}
 
 	public Zustand getPowerOffZustand() {
 		return powerOffZustand;
 	}
 
-	public void powerButton() {
-		zustand.powerButton();
-	}
-
-	public Zustand getStopZustand() {
-		return stopZustand;
-	}
-
-	public Zustand getPlayZustand() {
-		return playZustand;
+	public Zustand getPowerOnZustand() {
+		return powerOnZustand;
 	}
 
 	public Zustand getZustand() {
@@ -56,6 +44,10 @@ public class Soon {
 		zustand.volumeDownButton();
 	}
 
+	public void powerButton() {
+		zustand.powerButton();
+	}
+
 	public void startPlay() {
 		System.out.println("Musik an");
 	}
@@ -71,13 +63,13 @@ public class Soon {
 	public void volumeDown() {
 		System.out.println("Leiser");
 	}
-	
-	public Zustand getPowerOnHistory() {
-		return powerOnHistory;
+
+	public void powerLED_On() {
+		System.out.println("LED on");
 	}
 	
-	public void setPowerOnHistory(Zustand z) {
-		powerOnHistory = z;
+	public void powerLED_Off() {
+		System.out.println("LED off");
 	}
 
 	public String toString() {
diff --git a/src/soon/SoonTestDrive.java b/src/soon/SoonTestDrive.java
index 991af0b..7e3fc47 100644
--- a/src/soon/SoonTestDrive.java
+++ b/src/soon/SoonTestDrive.java
@@ -10,8 +10,6 @@ public class SoonTestDrive {
 		player.powerButton();
 		player.playButton();
 		player.volumeUpButton();
-		player.powerButton();
-		player.powerButton();
 		player.volumeDownButton();
 		player.stopButton();
 		player.powerButton();
diff --git a/src/soon/StopZustand.java b/src/soon/StopZustand.java
index 354c263..67cf428 100644
--- a/src/soon/StopZustand.java
+++ b/src/soon/StopZustand.java
@@ -1,14 +1,14 @@
 package soon;
 
-public class StopZustand extends PowerOn {
+public class StopZustand extends PowerOnZustand {
 	
-	public StopZustand(Soon s) {
-		super(s);
+	public StopZustand(Soon s, PowerOn p) {
+		super(s, p);
 	}
 	
 	public void playButton() {
 		exit();
-		s.setZustand(s.getPlayZustand());
-		s.getZustand().entry();
+		p.setZustand(p.getPlayZustand());
+		p.getZustand().entry();
 	}
 }
diff --git a/src/soon/Zustand.java b/src/soon/Zustand.java
index f1ab591..8a7d896 100644
--- a/src/soon/Zustand.java
+++ b/src/soon/Zustand.java
@@ -3,8 +3,8 @@ package soon;
 public abstract class Zustand {
 	protected Soon s;
 
-	public Zustand(Soon k) {
-		this.s = k;
+	public Zustand(Soon s) {
+		this.s = s;
 	}
 
 	public void playButton() {};
-- 
GitLab