From 7176669aad9208ff881849fc56d038b510f5a5d0 Mon Sep 17 00:00:00 2001
From: Nicolas Fley <nicolas.fley@student.ecp.fr>
Date: Wed, 5 Apr 2017 17:24:33 +0200
Subject: [PATCH] visitors fixed & Order added

---
 src/Item/Dish.java           | 11 ++++++++--
 src/Item/Meal.java           | 22 +++++++++++++------
 src/Item/VisitablePrice.java |  2 +-
 src/Item/VisitorPrice.java   |  2 +-
 src/Order/Order.java         | 41 ++++++++++++++++++++++++++++++++++++
 5 files changed, 67 insertions(+), 11 deletions(-)
 create mode 100644 src/Order/Order.java

diff --git a/src/Item/Dish.java b/src/Item/Dish.java
index b6669d4..ac68bfe 100644
--- a/src/Item/Dish.java
+++ b/src/Item/Dish.java
@@ -29,7 +29,14 @@ public class Dish extends Item implements VisitablePrice{
 	
 	/** VISIT LOGIC **/
 	
-	public double acceptPrice(VisitorPrice v) {
-		return v.visitPrice(this);
+	public void acceptPrice(VisitorPrice v) {
+		if(v instanceof Meal){
+			Meal vMeal = (Meal) v;
+			vMeal.setPrice(vMeal.getPrice()+price);
+		}
+		if(v instanceof Dish){
+			Dish vDish = (Dish) v;
+			vDish.setPrice(vDish.getPrice()+price);
+		}
 	}
 }
diff --git a/src/Item/Meal.java b/src/Item/Meal.java
index e1ae4ef..c6741ad 100644
--- a/src/Item/Meal.java
+++ b/src/Item/Meal.java
@@ -2,6 +2,8 @@ package Item;
 
 import java.util.ArrayList;
 
+import Order.Order;
+
 
 /**
  * 
@@ -88,6 +90,9 @@ public abstract class Meal extends Item implements VisitorPrice{
 	public double getPrice(){
 		return price;
 	}
+	public void setPrice(double _price){
+		price = _price;
+	}
 	public ArrayList<Dish> getListDish() {
 		return listDish;
 	}
@@ -102,16 +107,19 @@ public abstract class Meal extends Item implements VisitorPrice{
 	/** VISIT LOGIC **/
 
 	@Override	
-	public double acceptPrice(VisitorPrice v){
-		price=0;
-		for(Dish item: listDish){
-			item.acceptPrice(this);
+	public void acceptPrice(VisitorPrice v){
+		price=0; // reseting price
+		if(v instanceof Order){
+			Order vOrder = (Order) v;
+			for(Dish item: listDish){
+				item.acceptPrice(this);
+			}
+			vOrder.setPrice(vOrder.getPrice()+this.getPrice()*0.95);
 		}
-		return this.getPrice();
 	}
 
 	@Override
-	public double visitPrice(VisitablePrice v) {
-		return v.acceptPrice(this);
+	public void visitPrice(VisitablePrice v) {
+		v.acceptPrice(this);
 	}
 }
diff --git a/src/Item/VisitablePrice.java b/src/Item/VisitablePrice.java
index 0628659..9c21992 100644
--- a/src/Item/VisitablePrice.java
+++ b/src/Item/VisitablePrice.java
@@ -1,5 +1,5 @@
 package Item;
 
 public interface VisitablePrice {
-	public double acceptPrice(VisitorPrice v);
+	public void acceptPrice(VisitorPrice v);
 }
diff --git a/src/Item/VisitorPrice.java b/src/Item/VisitorPrice.java
index fd8f4f1..f60047f 100644
--- a/src/Item/VisitorPrice.java
+++ b/src/Item/VisitorPrice.java
@@ -1,5 +1,5 @@
 package Item;
 
 public interface VisitorPrice {
-	public double visitPrice(VisitablePrice v);
+	public void visitPrice(VisitablePrice v);
 }
diff --git a/src/Order/Order.java b/src/Order/Order.java
new file mode 100644
index 0000000..f35b236
--- /dev/null
+++ b/src/Order/Order.java
@@ -0,0 +1,41 @@
+package Order;
+
+import java.util.ArrayList;
+
+import Item.Dish;
+import Item.Meal;
+import Item.VisitablePrice;
+import Item.VisitorPrice;
+
+public class Order implements VisitorPrice{
+	
+	private double price;
+
+	ArrayList<Dish> listDish;
+	ArrayList<Meal> listMeal;
+	
+	public Order() {
+		// TODO Auto-generated constructor stub
+	}
+	
+	/** GETTER AND SETTER **/
+	
+	public double getPrice() {
+		return price;
+	}
+
+	public void setPrice(double price) {
+		this.price = price;
+	}
+
+	@Override
+	public void visitPrice(VisitablePrice v) {
+		for(Dish dish:listDish){
+			dish.acceptPrice(this);
+		}
+		for(Meal meal:listMeal){
+			meal.acceptPrice(this);
+		}
+	}
+	
+}
-- 
GitLab