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.group.actions.TableRequest;
7 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
9 import at.ac.tuwien.sbc.valesriegler.types.Order;
10 import at.ac.tuwien.sbc.valesriegler.types.Table;
12 // class doing all the Group related work as required.
13 public class Group implements Runnable {
14 private static final Logger log = LoggerFactory.getLogger(Group.class);
15 private static int idNext = -1; // TODO: set to 0 after debugging!
17 final private GroupData groupData;
19 public GroupData getGroupData() {
24 groupData = new GroupData(++idNext);
29 log.debug("Thread started for:" + this);
31 Thread.sleep((long) (Math.random() * 10000));
33 switch (groupData.getState()) {
35 // TODO : may not happen!
38 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
41 // MessageProducer wantToOrder =
42 // session.createProducer(session.createQueue("WantToOrder"));
43 // wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
44 // wantToOrder.send(session.createObjectMessage(this));
48 case EATING:// just wait some more and request bill.
49 // MessageProducer wantToPay =
50 // session.createProducer(session.createQueue("WantToPay"));
51 // wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
52 // wantToPay.send(session.createObjectMessage(this));
54 case PAY:// leave table
55 // MessageProducer wantToLeave =
56 // session.createProducer(session.createQueue("LeftPizzaria"));
57 // wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
58 // wantToLeave.send(session.createObjectMessage(this));
66 } catch (InterruptedException e) {
71 // lets go to the pizzaria.
72 public void goGrabSomeFood() {
73 log.debug("goGrabSomeFood():" + this);
74 groupData.setState(GroupState.WAITING);
75 new Thread(this).start();
78 // get a table assigned by a waiter.
79 public void assignTable(Table t, int waiterID) {
80 groupData.setState(GroupState.SITTING);
81 groupData.setTable(t);
82 groupData.setTableWaiter(waiterID);
83 new Thread(this).start();
84 log.debug("assignTable():" + this);
87 // ask the group to send their order.
88 public void askForOrder(int waiter) {
89 groupData.setState(GroupState.ORDERED);
90 groupData.setOrderWaiter(waiter);
91 new Thread(this).start();
92 log.debug("askForOrder():" + this);
95 // pizzas are here! nom pizzas!
96 public void bringOrderedPizzas(Order order, int waiter) {
97 groupData.setState(GroupState.EATING);
98 groupData.setOrder(order);
99 groupData.setPizzaWaiter(waiter);
100 new Thread(this).start();
101 log.debug("bringOrderedPizzas():" + this);