1 package at.ac.tuwien.sbc.valesriegler.group;
3 import java.io.Serializable;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
8 import at.ac.tuwien.sbc.valesriegler.common.HasId;
9 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
10 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
11 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
12 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
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.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; // TODO: set to 0 after debugging!
28 private GroupData groupData;
32 groupData = new GroupData(++idNext);
35 public Group(Integer id) {
36 groupData = new GroupData(id);
43 log.debug("Thread started for:" + this);
45 Thread.sleep((long) (Math.random() * 10000));
47 switch (groupData.getState()) {
49 // TODO : may not happen!
52 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
55 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
62 case EATING: // request bill.
63 GroupAgent.getInstance().getGroupcomm().send(new PayRequest(groupData));
65 case PAY:// leave table
66 GroupAgent.getInstance().getGroupcomm().send(new TableFree(groupData));
67 groupData.setState(GroupState.GONE);
75 } catch (InterruptedException e) {
81 public void setGroupData(GroupData groupData) {
82 this.groupData = groupData;
85 public GroupData getGroupData() {
89 // lets go to the pizzaria.
90 public void goGrabSomeFood() {
91 log.debug("goGrabSomeFood(): " + this);
92 groupData.setState(GroupState.WAITING);
93 new Thread(this).start();
96 // get a table assigned by a waiter.
97 public void assignTable(Table t, int waiterID) {
98 groupData.setState(GroupState.SITTING);
99 groupData.setTable(t);
100 groupData.setTableWaiter(waiterID);
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 new Thread(this).start();
109 log.debug("order(): " + this);
112 // Waiter telling group he/she forwarded the order.
113 public void orderReceived(int waiter) {
114 groupData.setState(GroupState.ORDERED);
115 groupData.setState(GroupState.EATING); // TODO: skip pizza creation step
116 groupData.setOrderWaiter(waiter);
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 new Thread(this).start();
127 log.debug("bringOrderedPizzas(): " + this);
132 return groupData.getId();
135 // pay for the pizzas and leave
136 public void payForPizzas(int waiter) {
137 groupData.setState(GroupState.PAY);
138 groupData.setPayingWaiter(waiter);
139 new Thread(this).start();
140 log.debug("payForPizzas(): " + this);