1 | package com.hammurapi.eventbus.tests.fastfood; |
2 | |
3 | import java.util.concurrent.atomic.AtomicInteger; |
4 | |
5 | /** |
6 | * @author Pavel Vlasov |
7 | * |
8 | */ |
9 | public class Order { |
10 | |
11 | private static AtomicInteger INSTANCE_COUNTER = new AtomicInteger(); |
12 | |
13 | private final int instanceId = INSTANCE_COUNTER.incrementAndGet(); |
14 | |
15 | private Class<? extends MainDish> mainDishType; |
16 | private Class<? extends SideDish> sideDishType; |
17 | private MainDish mainDish; |
18 | private SideDish sideDish; |
19 | |
20 | public Order(Class<? extends MainDish> mainDishType, Class<? extends SideDish> sideDishType) { |
21 | super(); |
22 | this.mainDishType = mainDishType; |
23 | this.sideDishType = sideDishType; |
24 | } |
25 | |
26 | public Class<? extends MainDish> getMainDishType() { |
27 | return mainDishType; |
28 | } |
29 | |
30 | public Class<? extends SideDish> getSideDishType() { |
31 | return sideDishType; |
32 | } |
33 | |
34 | public MainDish getMainDish() { |
35 | return mainDish; |
36 | } |
37 | |
38 | /** |
39 | * Sets main dish |
40 | * @param mainDish |
41 | * @return true if success, false if main dish is of the wrong type or already consumed. |
42 | */ |
43 | public boolean setMainDish(MainDish mainDish) { |
44 | if (this.mainDish==null) { |
45 | if (mainDishType.isInstance(mainDish)) { |
46 | if (mainDish.consume()) { |
47 | this.mainDish = mainDish; |
48 | return true; |
49 | } |
50 | } else { |
51 | System.err.println("Wrong main dish: "+mainDish+", expected "+mainDishType); |
52 | } |
53 | } else { |
54 | System.err.println("Order already has main dish: "+this); |
55 | } |
56 | return false; |
57 | } |
58 | |
59 | public SideDish getSideDish() { |
60 | return sideDish; |
61 | } |
62 | |
63 | /** |
64 | * Sets side dish |
65 | * @param sideDish |
66 | * @return true if success, false if side dish is of wrong type or already consumed. |
67 | */ |
68 | public boolean setSideDish(SideDish sideDish) { |
69 | if (this.sideDish==null) { |
70 | if (sideDishType.isInstance(sideDish)) { |
71 | if (sideDish.consume()) { |
72 | this.sideDish = sideDish; |
73 | return true; |
74 | } |
75 | } else { |
76 | System.err.println("Wrong side dish: "+sideDish+", expected "+sideDishType); |
77 | } |
78 | } else { |
79 | System.err.println("Order already has side dish: "+this); |
80 | } |
81 | return false; |
82 | } |
83 | |
84 | public boolean isFulfilled() { |
85 | return mainDish!=null && sideDish!=null; |
86 | } |
87 | |
88 | @Override |
89 | public String toString() { |
90 | return "Order [" + instanceId + "]"; |
91 | } |
92 | |
93 | } |