From 4c3002f2b068255120a82712f823326203714a96 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Sat, 10 Oct 2020 15:29:57 +0200
Subject: [PATCH] Add registry for pizza Chicago style

---
 src/pizzeria/ChicagoPizzaRegistry.java       | 24 ++++++++++++++++++++
 src/pizzeria/ChicagoPizzaStore.java          | 17 +++++++-------
 src/pizzeria/ChicagoStyleCheesePizza.java    |  9 ++++++++
 src/pizzeria/ChicagoStyleClamPizza.java      |  9 ++++++++
 src/pizzeria/ChicagoStylePepperoniPizza.java | 10 ++++++++
 src/pizzeria/ChicagoStyleVeggiePizza.java    | 11 +++++++++
 src/pizzeria/NYStyleCheesePizza.java         |  5 ++++
 src/pizzeria/NYStyleClamPizza.java           |  4 ++++
 src/pizzeria/NYStylePepperoniPizza.java      |  6 +++++
 src/pizzeria/NYStyleVeggiePizza.java         |  6 +++++
 src/pizzeria/Pizza.java                      |  4 +++-
 src/pizzeria/PizzaTestDrive.java             |  9 ++++++++
 12 files changed, 104 insertions(+), 10 deletions(-)
 create mode 100644 src/pizzeria/ChicagoPizzaRegistry.java

diff --git a/src/pizzeria/ChicagoPizzaRegistry.java b/src/pizzeria/ChicagoPizzaRegistry.java
new file mode 100644
index 0000000..a5f114c
--- /dev/null
+++ b/src/pizzeria/ChicagoPizzaRegistry.java
@@ -0,0 +1,24 @@
+package pizzeria;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+public class ChicagoPizzaRegistry {
+	static List<Pizza> pizzaHandlers = new ArrayList<>();
+	
+	static void register(Pizza pizza) {
+		pizzaHandlers.add(pizza);
+	}
+	
+	static Pizza getPizzaHandler(String type) {
+		ListIterator<Pizza> iter = pizzaHandlers.listIterator();
+		while (iter.hasNext()) {
+			Pizza pizza = iter.next();
+			if (pizza.canHandle(type)) {
+				return pizza;
+			}
+		}
+		return null;
+	}
+}
diff --git a/src/pizzeria/ChicagoPizzaStore.java b/src/pizzeria/ChicagoPizzaStore.java
index 22851d2..276ab68 100644
--- a/src/pizzeria/ChicagoPizzaStore.java
+++ b/src/pizzeria/ChicagoPizzaStore.java
@@ -3,14 +3,13 @@ package pizzeria;
 public class ChicagoPizzaStore extends PizzaStore {
 
 	Pizza createPizza(String item) {
-        	if (item.equals("cheese")) {
-            		return new ChicagoStyleCheesePizza();
-        	} else if (item.equals("veggie")) {
-        	    	return new ChicagoStyleVeggiePizza();
-        	} else if (item.equals("clam")) {
-        	    	return new ChicagoStyleClamPizza();
-        	} else if (item.equals("pepperoni")) {
-            		return new ChicagoStylePepperoniPizza();
-        	} else return null;
+		Pizza pizza = null;
+
+		pizza = ChicagoPizzaRegistry.getPizzaHandler(item);
+		if (pizza == null) {
+			System.out.println("Kein Handler gefunden");
+		}
+
+		return pizza;
 	}
 }
diff --git a/src/pizzeria/ChicagoStyleCheesePizza.java b/src/pizzeria/ChicagoStyleCheesePizza.java
index 83b26ee..8095e9b 100644
--- a/src/pizzeria/ChicagoStyleCheesePizza.java
+++ b/src/pizzeria/ChicagoStyleCheesePizza.java
@@ -2,6 +2,10 @@ package pizzeria;
 
 public class ChicagoStyleCheesePizza extends Pizza {
 
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleCheesePizza());
+	}
+
 	public ChicagoStyleCheesePizza() { 
 		name = "Chicago Style Deep Dish Cheese Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -13,4 +17,9 @@ public class ChicagoStyleCheesePizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("cheese");
+	}
 }
diff --git a/src/pizzeria/ChicagoStyleClamPizza.java b/src/pizzeria/ChicagoStyleClamPizza.java
index 9999b8b..7a69c73 100644
--- a/src/pizzeria/ChicagoStyleClamPizza.java
+++ b/src/pizzeria/ChicagoStyleClamPizza.java
@@ -1,6 +1,10 @@
 package pizzeria;
 
 public class ChicagoStyleClamPizza extends Pizza {
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleClamPizza());
+	}
+
 	public ChicagoStyleClamPizza() {
 		name = "Chicago Style Clam Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -13,4 +17,9 @@ public class ChicagoStyleClamPizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("clam");
+	}
 }
diff --git a/src/pizzeria/ChicagoStylePepperoniPizza.java b/src/pizzeria/ChicagoStylePepperoniPizza.java
index ad85beb..f7e9874 100644
--- a/src/pizzeria/ChicagoStylePepperoniPizza.java
+++ b/src/pizzeria/ChicagoStylePepperoniPizza.java
@@ -1,6 +1,11 @@
 package pizzeria;
 
 public class ChicagoStylePepperoniPizza extends Pizza {
+
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStylePepperoniPizza());
+	}
+
 	public ChicagoStylePepperoniPizza() {
 		name = "Chicago Style Pepperoni Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -16,4 +21,9 @@ public class ChicagoStylePepperoniPizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("pepperoni");
+	}
 }
diff --git a/src/pizzeria/ChicagoStyleVeggiePizza.java b/src/pizzeria/ChicagoStyleVeggiePizza.java
index 52f5968..cfee2f9 100644
--- a/src/pizzeria/ChicagoStyleVeggiePizza.java
+++ b/src/pizzeria/ChicagoStyleVeggiePizza.java
@@ -1,6 +1,11 @@
 package pizzeria;
 
 public class ChicagoStyleVeggiePizza extends Pizza {
+
+	static {
+		ChicagoPizzaRegistry.register(new ChicagoStyleVeggiePizza());
+	}
+
 	public ChicagoStyleVeggiePizza() {
 		name = "Chicago Deep Dish Veggie Pizza";
 		dough = "Extra Thick Crust Dough";
@@ -15,4 +20,10 @@ public class ChicagoStyleVeggiePizza extends Pizza {
 	void cut() {
 		System.out.println("Cutting the pizza into square slices");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("veggie");
+	}
+
 }
diff --git a/src/pizzeria/NYStyleCheesePizza.java b/src/pizzeria/NYStyleCheesePizza.java
index 7ba90a6..ef9b823 100644
--- a/src/pizzeria/NYStyleCheesePizza.java
+++ b/src/pizzeria/NYStyleCheesePizza.java
@@ -9,4 +9,9 @@ public class NYStyleCheesePizza extends Pizza {
  
 		toppings.add("Grated Reggiano Cheese");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("cheese");
+	}
 }
diff --git a/src/pizzeria/NYStyleClamPizza.java b/src/pizzeria/NYStyleClamPizza.java
index 23935af..ef38c36 100644
--- a/src/pizzeria/NYStyleClamPizza.java
+++ b/src/pizzeria/NYStyleClamPizza.java
@@ -10,4 +10,8 @@ public class NYStyleClamPizza extends Pizza {
 		toppings.add("Grated Reggiano Cheese");
 		toppings.add("Fresh Clams from Long Island Sound");
 	}
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("clam");
+	}
 }
diff --git a/src/pizzeria/NYStylePepperoniPizza.java b/src/pizzeria/NYStylePepperoniPizza.java
index 66cde53..533bb71 100644
--- a/src/pizzeria/NYStylePepperoniPizza.java
+++ b/src/pizzeria/NYStylePepperoniPizza.java
@@ -14,4 +14,10 @@ public class NYStylePepperoniPizza extends Pizza {
 		toppings.add("Mushrooms");
 		toppings.add("Red Pepper");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("pepperoni");
+	}
+
 }
diff --git a/src/pizzeria/NYStyleVeggiePizza.java b/src/pizzeria/NYStyleVeggiePizza.java
index cb66220..b832894 100644
--- a/src/pizzeria/NYStyleVeggiePizza.java
+++ b/src/pizzeria/NYStyleVeggiePizza.java
@@ -13,4 +13,10 @@ public class NYStyleVeggiePizza extends Pizza {
 		toppings.add("Mushrooms");
 		toppings.add("Red Pepper");
 	}
+
+	@Override
+	public Boolean canHandle(String type) {
+		return type.equalsIgnoreCase("veggie");
+	}
+
 }
diff --git a/src/pizzeria/Pizza.java b/src/pizzeria/Pizza.java
index 65e3e4c..bbf1652 100644
--- a/src/pizzeria/Pizza.java
+++ b/src/pizzeria/Pizza.java
@@ -7,7 +7,9 @@ public abstract class Pizza {
 	String dough;
 	String sauce;
 	ArrayList<String> toppings = new ArrayList<String>();
- 
+
+	public abstract Boolean canHandle(String type);
+
 	void prepare() {
 		System.out.println("Preparing " + name);
 		System.out.println("Tossing dough...");
diff --git a/src/pizzeria/PizzaTestDrive.java b/src/pizzeria/PizzaTestDrive.java
index a4ce31a..8ee017b 100644
--- a/src/pizzeria/PizzaTestDrive.java
+++ b/src/pizzeria/PizzaTestDrive.java
@@ -3,6 +3,15 @@ package pizzeria;
 public class PizzaTestDrive {
  
 	public static void main(String[] args) {
+		try {
+			Class.forName("pizzeria.ChicagoStyleCheesePizza");
+			Class.forName("pizzeria.ChicagoStyleClamPizza");
+			Class.forName("pizzeria.ChicagoStylePepperoniPizza");
+			Class.forName("pizzeria.ChicagoStyleVeggiePizza");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
 		PizzaStore nyStore = new NYPizzaStore();
 		PizzaStore chicagoStore = new ChicagoPizzaStore();
  
-- 
GitLab