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