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.common.Util;
8 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
9 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
10 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
11 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
12 import at.ac.tuwien.sbc.valesriegler.group.jms.JMSGroupConnector;
13 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
14 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
15 import at.ac.tuwien.sbc.valesriegler.types.Order;
16 import at.ac.tuwien.sbc.valesriegler.types.OrderStatus;
17 import at.ac.tuwien.sbc.valesriegler.types.Table;
20 * class denoting a Group's will.
25 public class Group implements Runnable, HasId {
26 private static final Logger log = LoggerFactory.getLogger(Group.class);
27 private static int idNext = 0;
29 private GroupData groupData;
32 groupData = new GroupData(++idNext);
35 public Group(Integer id) {
36 groupData = new GroupData(id);
41 log.debug("Thread started for:" + this);
43 if (!Util.runSimulation) {
44 Thread.sleep((long) (Math.random() * 10000));
47 switch (groupData.getState()) {
49 // TODO : may not happen!
52 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableRequest(groupData));
55 groupData.getOrder().genId();
56 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new OrderRequest(groupData));
63 case EATING : // request bill.
64 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new PayRequest(groupData));
66 case PAY :// leave table
67 JMSGroupConnector.getConnector(groupData.getPizzeriaId()).send(new TableFree(groupData));
68 groupData.setState(GroupState.GONE);
69 groupData.setTable(null);
77 } catch (InterruptedException e) {
82 public void setGroupData(GroupData groupData) {
83 this.groupData = groupData;
86 public GroupData getGroupData() {
90 // lets go to the pizzaria.
91 public void goGrabSomeFood() {
92 log.debug("goGrabSomeFood(): " + this);
93 groupData.setState(GroupState.WAITING);
94 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
95 new Thread(this).start();
98 // get a table assigned by a waiter.
99 public void assignTable(Table t, int waiterID) {
100 groupData.setState(GroupState.SITTING);
101 groupData.setTable(t);
102 groupData.setTableWaiter(waiterID);
103 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
104 new Thread(this).start();
105 log.debug("assignTable(): " + this);
108 // ask the group to send their order.
109 public void order() {
110 groupData.setState(GroupState.ORDER_PENDING);
111 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
112 new Thread(this).start();
113 log.debug("order(): " + this);
116 // Waiter telling group he/she forwarded the order.
117 public void orderReceived(int waiter) {
118 groupData.setState(GroupState.ORDERED);
119 groupData.getOrder().setStatus(OrderStatus.ORDERED);
120 groupData.setOrderWaiter(waiter);
121 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
122 new Thread(this).start();
123 log.debug("orderReceived(): " + this);
126 // pizzas are here! nom nom nom
127 public void deliverPizzas(Order order, int waiter) {
128 groupData.setState(GroupState.EATING);
129 groupData.setOrder(order);
130 groupData.setServingWaiter(waiter);
131 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
132 new Thread(this).start();
133 log.debug("bringOrderedPizzas(): " + this);
136 // pay for the pizzas and leave
137 public void payForPizzas(int waiter) {
138 groupData.setState(GroupState.PAY);
139 groupData.setPayingWaiter(waiter);
140 GroupAgent.getInstance().getGroupModel().fireTableDataChanged();
141 new Thread(this).start();
142 log.debug("payForPizzas(): " + this);
147 return groupData.getId();