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