1 package at.ac.tuwien.sbc.valesriegler.group;
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
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;
15 // class doing all the Group related work as required.
16 public class Group implements Runnable {
17 private static final Logger log = LoggerFactory.getLogger(Group.class);
18 private static int idNext = -1; // TODO: set to 0 after debugging!
20 final private GroupData groupData;
22 public GroupData getGroupData() {
27 groupData = new GroupData(++idNext);
32 log.debug("Thread started for:" + this);
34 Thread.sleep((long) (Math.random() * 10000));
36 switch (groupData.getState()) {
38 // TODO : may not happen!
41 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
44 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
51 case EATING: // request bill.
52 GroupAgent.getInstance().getGroupcomm().send(new PayRequest(groupData));
54 case PAY:// leave table
55 GroupAgent.getInstance().getGroupcomm().send(new TableFree(groupData));
56 groupData.setState(GroupState.GONE);
64 } catch (InterruptedException e) {
69 // lets go to the pizzaria.
70 public void goGrabSomeFood() {
71 log.debug("goGrabSomeFood(): " + this);
72 groupData.setState(GroupState.WAITING);
73 new Thread(this).start();
76 // get a table assigned by a waiter.
77 public void assignTable(Table t, int waiterID) {
78 groupData.setState(GroupState.SITTING);
79 groupData.setTable(t);
80 groupData.setTableWaiter(waiterID);
81 new Thread(this).start();
82 log.debug("assignTable(): " + this);
85 // ask the group to send their order.
87 groupData.setState(GroupState.ORDER_PENDING);
88 new Thread(this).start();
89 log.debug("order(): " + this);
92 // Waiter telling group he/she forwarded the order.
93 public void orderReceived(int waiter) {
94 groupData.setState(GroupState.ORDERED);
95 groupData.setState(GroupState.EATING); // TODO: skip pizza creation step
96 groupData.setOrderWaiter(waiter);
97 new Thread(this).start();
98 log.debug("orderReceived(): " + this);
101 // pizzas are here! nom nom nom
102 public void deliverPizzas(Order order, int waiter) {
103 groupData.setState(GroupState.EATING);
104 groupData.setOrder(order);
105 groupData.setServingWaiter(waiter);
106 new Thread(this).start();
107 log.debug("bringOrderedPizzas(): " + this);
110 // pay for the pizzas and leave
111 public void payForPizzas(int waiter) {
112 groupData.setState(GroupState.PAY);
113 groupData.setPayingWaiter(waiter);
114 new Thread(this).start();
115 log.debug("payForPizzas(): " + this);