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.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.Table;
16 // class doing all the Group related work as required.
17 public class Group implements Runnable, HasId {
18 private static final Logger log = LoggerFactory.getLogger(Group.class);
19 private static int idNext = -1; // TODO: set to 0 after debugging!
21 final private GroupData groupData;
23 public GroupData getGroupData() {
28 groupData = new GroupData(++idNext);
33 log.debug("Thread started for:" + this);
35 Thread.sleep((long) (Math.random() * 10000));
37 switch (groupData.getState()) {
39 // TODO : may not happen!
42 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
45 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
52 case EATING: // request bill.
53 GroupAgent.getInstance().getGroupcomm().send(new PayRequest(groupData));
55 case PAY:// leave table
56 GroupAgent.getInstance().getGroupcomm().send(new TableFree(groupData));
57 groupData.setState(GroupState.GONE);
65 } catch (InterruptedException e) {
70 // lets go to the pizzaria.
71 public void goGrabSomeFood() {
72 log.debug("goGrabSomeFood(): " + this);
73 groupData.setState(GroupState.WAITING);
74 new Thread(this).start();
77 // get a table assigned by a waiter.
78 public void assignTable(Table t, int waiterID) {
79 groupData.setState(GroupState.SITTING);
80 groupData.setTable(t);
81 groupData.setTableWaiter(waiterID);
82 new Thread(this).start();
83 log.debug("assignTable(): " + this);
86 // ask the group to send their order.
88 groupData.setState(GroupState.ORDER_PENDING);
89 new Thread(this).start();
90 log.debug("order(): " + this);
93 // Waiter telling group he/she forwarded the order.
94 public void orderReceived(int waiter) {
95 groupData.setState(GroupState.ORDERED);
96 groupData.setState(GroupState.EATING); // TODO: skip pizza creation step
97 groupData.setOrderWaiter(waiter);
98 new Thread(this).start();
99 log.debug("orderReceived(): " + this);
102 // pizzas are here! nom nom nom
103 public void deliverPizzas(Order order, int waiter) {
104 groupData.setState(GroupState.EATING);
105 groupData.setOrder(order);
106 groupData.setServingWaiter(waiter);
107 new Thread(this).start();
108 log.debug("bringOrderedPizzas(): " + this);
113 return groupData.getId();
116 // pay for the pizzas and leave
117 public void payForPizzas(int waiter) {
118 groupData.setState(GroupState.PAY);
119 groupData.setPayingWaiter(waiter);
120 new Thread(this).start();
121 log.debug("payForPizzas(): " + this);