]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
[JMS] OLD workflow now works with dynamic pizzerias.
[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.group.jms.JMSGroupConnector;
12 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
13 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
14 import at.ac.tuwien.sbc.valesriegler.types.Order;
15 import at.ac.tuwien.sbc.valesriegler.types.OrderStatus;
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;
27
28         private GroupData groupData;
29
30         public Group() {
31                 groupData = new GroupData(++idNext);
32         }
33
34         public Group(Integer id) {
35                 groupData = new GroupData(id);
36         }
37
38         @Override
39         public void run() {
40                 log.debug("Thread started for:" + this);
41                 try {
42                         Thread.sleep((long) (Math.random() * 10000));
43
44                         switch (groupData.getState()) {
45                                 case NEW :
46                                         // TODO : may not happen!
47                                         break;
48                                 case WAITING :
49                                         JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableRequest(groupData));
50                                         break;
51                                 case SITTING :
52                                         groupData.getOrder().genId();
53                                         JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new OrderRequest(groupData));
54                                         order();
55                                         break;
56                                 case ORDER_PENDING :
57                                         break; // do nothing.
58                                 case ORDERED :
59                                         break; // do nothing.
60                                 case EATING : // request bill.
61                                         JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new PayRequest(groupData));
62                                         break;
63                                 case PAY :// leave table
64                                         JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableFree(groupData));
65                                         groupData.setState(GroupState.GONE);
66                                         groupData.setTable(null);
67                                         break;
68                                 case GONE :
69                                         break; // do nothing.
70                                 default :
71                                         break;
72                         }
73
74                 } catch (InterruptedException e) {
75                         e.printStackTrace();
76                 }
77         }
78
79         public void setGroupData(GroupData groupData) {
80                 this.groupData = groupData;
81         }
82
83         public GroupData getGroupData() {
84                 return groupData;
85         }
86
87         // lets go to the pizzaria.
88         public void goGrabSomeFood() {
89                 log.debug("goGrabSomeFood(): " + this);
90                 groupData.setState(GroupState.WAITING);
91                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
92                 new Thread(this).start();
93         }
94
95         // get a table assigned by a waiter.
96         public void assignTable(Table t, int waiterID) {
97                 groupData.setState(GroupState.SITTING);
98                 groupData.setTable(t);
99                 groupData.setTableWaiter(waiterID);
100                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
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                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
109                 new Thread(this).start();
110                 log.debug("order(): " + this);
111         }
112
113         // Waiter telling group he/she forwarded the order.
114         public void orderReceived(int waiter) {
115                 groupData.setState(GroupState.ORDERED);
116                 groupData.getOrder().setStatus(OrderStatus.ORDERED);
117                 groupData.setOrderWaiter(waiter);
118                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
119                 new Thread(this).start();
120                 log.debug("orderReceived(): " + this);
121         }
122
123         // pizzas are here! nom nom nom
124         public void deliverPizzas(Order order, int waiter) {
125                 groupData.setState(GroupState.EATING);
126                 groupData.setOrder(order);
127                 groupData.setServingWaiter(waiter);
128                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
129                 new Thread(this).start();
130                 log.debug("bringOrderedPizzas(): " + this);
131         }
132
133         // pay for the pizzas and leave
134         public void payForPizzas(int waiter) {
135                 groupData.setState(GroupState.PAY);
136                 groupData.setPayingWaiter(waiter);
137                 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
138                 new Thread(this).start();
139                 log.debug("payForPizzas(): " + this);
140         }
141
142         @Override
143         public int getId() {
144                 return groupData.getId();
145         }
146 }