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