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.OrderStatus;
15 import at.ac.tuwien.sbc.valesriegler.types.Table;
18 * class denoting a Group's will.
23 public class Group implements Runnable, HasId {
24 private static final Logger log = LoggerFactory.getLogger(Group.class);
25 private static int idNext = 0; // TODO: set to 0 after debugging!
27 private GroupData groupData;
30 groupData = new GroupData(++idNext);
33 public Group(Integer id) {
34 groupData = new GroupData(id);
39 log.debug("Thread started for:" + this);
41 Thread.sleep((long) (Math.random() * 10000));
43 switch (groupData.getState()) {
45 // TODO : may not happen!
48 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
51 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
58 case EATING: // request bill.
59 GroupAgent.getInstance().getGroupcomm().send(new PayRequest(groupData));
61 case PAY:// leave table
62 GroupAgent.getInstance().getGroupcomm().send(new TableFree(groupData));
63 groupData.setState(GroupState.GONE);
64 groupData.setTable(null);
72 } catch (InterruptedException e) {
77 public void setGroupData(GroupData groupData) {
78 this.groupData = groupData;
81 public GroupData getGroupData() {
85 // lets go to the pizzaria.
86 public void goGrabSomeFood() {
87 log.debug("goGrabSomeFood(): " + this);
88 groupData.setState(GroupState.WAITING);
89 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
90 new Thread(this).start();
93 // get a table assigned by a waiter.
94 public void assignTable(Table t, int waiterID) {
95 groupData.setState(GroupState.SITTING);
96 groupData.setTable(t);
97 groupData.setTableWaiter(waiterID);
98 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
99 new Thread(this).start();
100 log.debug("assignTable(): " + this);
103 // ask the group to send their order.
104 public void order() {
105 groupData.setState(GroupState.ORDER_PENDING);
106 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
107 new Thread(this).start();
108 log.debug("order(): " + this);
111 // Waiter telling group he/she forwarded the order.
112 public void orderReceived(int waiter) {
113 groupData.setState(GroupState.ORDERED);
114 groupData.getOrder().setStatus(OrderStatus.ORDERED);
115 groupData.setOrderWaiter(waiter);
116 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
117 new Thread(this).start();
118 log.debug("orderReceived(): " + this);
121 // pizzas are here! nom nom nom
122 public void deliverPizzas(Order order, int waiter) {
123 groupData.setState(GroupState.EATING);
124 groupData.setOrder(order);
125 groupData.setServingWaiter(waiter);
126 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
127 new Thread(this).start();
128 log.debug("bringOrderedPizzas(): " + this);
131 // pay for the pizzas and leave
132 public void payForPizzas(int waiter) {
133 groupData.setState(GroupState.PAY);
134 groupData.setPayingWaiter(waiter);
135 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
136 new Thread(this).start();
137 log.debug("payForPizzas(): " + this);
142 return groupData.getId();