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.group.jms.JMSGroupConnector;
12 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
13 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
14 import at.ac.tuwien.sbc.valesriegler.types.Order;
15 import at.ac.tuwien.sbc.valesriegler.types.OrderStatus;
16 import at.ac.tuwien.sbc.valesriegler.types.Table;
19 * class denoting a Group's will.
24 public class Group implements Runnable, HasId {
25 private static final Logger log = LoggerFactory.getLogger(Group.class);
26 private static int idNext = 0;
28 private GroupData groupData;
31 groupData = new GroupData(++idNext);
34 public Group(Integer id) {
35 groupData = new GroupData(id);
40 log.debug("Thread started for:" + this);
42 Thread.sleep((long) (Math.random() * 10000));
44 switch (groupData.getState()) {
46 // TODO : may not happen!
49 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableRequest(groupData));
52 groupData.getOrder().genId();
53 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new OrderRequest(groupData));
60 case EATING : // request bill.
61 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new PayRequest(groupData));
63 case PAY :// leave table
64 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableFree(groupData));
65 groupData.setState(GroupState.GONE);
66 groupData.setTable(null);
74 } catch (InterruptedException e) {
79 public void setGroupData(GroupData groupData) {
80 this.groupData = groupData;
83 public GroupData getGroupData() {
87 // lets go to the pizzaria.
88 public void goGrabSomeFood() {
89 log.debug("goGrabSomeFood(): " + this);
90 groupData.setState(GroupState.WAITING);
91 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
92 new Thread(this).start();
95 // get a table assigned by a waiter.
96 public void assignTable(Table t, int waiterID) {
97 groupData.setState(GroupState.SITTING);
98 groupData.setTable(t);
99 groupData.setTableWaiter(waiterID);
100 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
101 new Thread(this).start();
102 log.debug("assignTable(): " + this);
105 // ask the group to send their order.
106 public void order() {
107 groupData.setState(GroupState.ORDER_PENDING);
108 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
109 new Thread(this).start();
110 log.debug("order(): " + this);
113 // Waiter telling group he/she forwarded the order.
114 public void orderReceived(int waiter) {
115 groupData.setState(GroupState.ORDERED);
116 groupData.getOrder().setStatus(OrderStatus.ORDERED);
117 groupData.setOrderWaiter(waiter);
118 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
119 new Thread(this).start();
120 log.debug("orderReceived(): " + this);
123 // pizzas are here! nom nom nom
124 public void deliverPizzas(Order order, int waiter) {
125 groupData.setState(GroupState.EATING);
126 groupData.setOrder(order);
127 groupData.setServingWaiter(waiter);
128 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
129 new Thread(this).start();
130 log.debug("bringOrderedPizzas(): " + this);
133 // pay for the pizzas and leave
134 public void payForPizzas(int waiter) {
135 groupData.setState(GroupState.PAY);
136 groupData.setPayingWaiter(waiter);
137 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
138 new Thread(this).start();
139 log.debug("payForPizzas(): " + this);
144 return groupData.getId();