]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
Space cooks prepare pizzas and Pizzeria GUI shows that
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / Group.java
1 package at.ac.tuwien.sbc.valesriegler.group;
2
3 import java.io.Serializable;
4
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
7
8 import at.ac.tuwien.sbc.valesriegler.common.HasId;
9 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
10 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
11 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
12 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
13 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
14 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
15 import at.ac.tuwien.sbc.valesriegler.types.Order;
16 import at.ac.tuwien.sbc.valesriegler.types.Table;
17
18 /**
19  * class denoting a Group's will.
20  * 
21  * @author jan
22  * 
23  */
24 public class Group implements Runnable, HasId {
25         private static final Logger log = LoggerFactory.getLogger(Group.class);
26         private static int idNext = 0; // TODO: set to 0 after debugging!
27
28         private GroupData groupData;
29
30
31         public Group() {
32                 groupData = new GroupData(++idNext);
33         }
34         
35         public Group(Integer id) {
36                 groupData = new GroupData(id);
37         }
38         
39         
40
41         @Override
42         public void run() {
43                 log.debug("Thread started for:" + this);
44                 try {
45                         Thread.sleep((long) (Math.random() * 10000));
46
47                         switch (groupData.getState()) {
48                         case NEW:
49                                 // TODO : may not happen!
50                                 break;
51                         case WAITING:
52                                 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
53                                 break;
54                         case SITTING:
55                                 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
56                                 order();
57                                 break;
58                         case ORDER_PENDING:
59                                 break; // do nothing.
60                         case ORDERED:
61                                 break; // do nothing.
62                         case EATING: // request bill.
63                                 GroupAgent.getInstance().getGroupcomm().send(new PayRequest(groupData));
64                                 break;
65                         case PAY:// leave table
66                                 GroupAgent.getInstance().getGroupcomm().send(new TableFree(groupData));
67                                 groupData.setState(GroupState.GONE);
68                                 break;
69                         case GONE:
70                                 break; // do nothing.
71                         default:
72                                 break;
73                         }
74
75                 } catch (InterruptedException e) {
76                         e.printStackTrace();
77                 }
78         }
79         
80
81         public void setGroupData(GroupData groupData) {
82                 this.groupData = groupData;
83         }
84
85         public GroupData getGroupData() {
86                 return groupData;
87         }
88
89         // lets go to the pizzaria.
90         public void goGrabSomeFood() {
91                 log.debug("goGrabSomeFood(): " + this);
92                 groupData.setState(GroupState.WAITING);
93                 new Thread(this).start();
94         }
95
96         // get a table assigned by a waiter.
97         public void assignTable(Table t, int waiterID) {
98                 groupData.setState(GroupState.SITTING);
99                 groupData.setTable(t);
100                 groupData.setTableWaiter(waiterID);
101                 new Thread(this).start();
102                 log.debug("assignTable(): " + this);
103         }
104
105         // ask the group to send their order.
106         public void order() {
107                 groupData.setState(GroupState.ORDER_PENDING);
108                 new Thread(this).start();
109                 log.debug("order(): " + this);
110         }
111
112         // Waiter telling group he/she forwarded the order.
113         public void orderReceived(int waiter) {
114                 groupData.setState(GroupState.ORDERED);
115                 groupData.setState(GroupState.EATING); // TODO: skip pizza creation step
116                 groupData.setOrderWaiter(waiter);
117                 new Thread(this).start();
118                 log.debug("orderReceived(): " + this);
119         }
120
121         // pizzas are here! nom nom nom
122         public void deliverPizzas(Order order, int waiter) {
123                 groupData.setState(GroupState.EATING);
124                 groupData.setOrder(order);
125                 groupData.setServingWaiter(waiter);
126                 new Thread(this).start();
127                 log.debug("bringOrderedPizzas(): " + this);
128         }
129
130         @Override
131         public int getId() {
132                 return groupData.getId();
133         }
134         
135         // pay for the pizzas and leave
136         public void payForPizzas(int waiter) {
137                 groupData.setState(GroupState.PAY);
138                 groupData.setPayingWaiter(waiter);
139                 new Thread(this).start();
140                 log.debug("payForPizzas(): " + this);
141         }
142 }