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.OrderRequest;
7 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
9 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
10 import at.ac.tuwien.sbc.valesriegler.types.Order;
11 import at.ac.tuwien.sbc.valesriegler.types.Table;
13 // class doing all the Group related work as required.
14 public class Group implements Runnable {
15 private static final Logger log = LoggerFactory.getLogger(Group.class);
16 private static int idNext = -1; // TODO: set to 0 after debugging!
18 final private GroupData groupData;
20 public GroupData getGroupData() {
25 groupData = new GroupData(++idNext);
30 log.debug("Thread started for:" + this);
32 Thread.sleep((long) (Math.random() * 10000));
34 switch (groupData.getState()) {
36 // TODO : may not happen!
39 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
42 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
46 case EATING:// just wait some more and request bill.
47 // MessageProducer wantToPay =
48 // session.createProducer(session.createQueue("WantToPay"));
49 // wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
50 // wantToPay.send(session.createObjectMessage(this));
52 case PAY:// leave table
53 // MessageProducer wantToLeave =
54 // session.createProducer(session.createQueue("LeftPizzaria"));
55 // wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
56 // wantToLeave.send(session.createObjectMessage(this));
64 } catch (InterruptedException e) {
69 // lets go to the pizzaria.
70 public void goGrabSomeFood() {
71 log.debug("goGrabSomeFood(): " + this);
72 groupData.setState(GroupState.WAITING);
73 new Thread(this).start();
76 // get a table assigned by a waiter.
77 public void assignTable(Table t, int waiterID) {
78 groupData.setState(GroupState.SITTING);
79 groupData.setTable(t);
80 groupData.setTableWaiter(waiterID);
81 new Thread(this).start();
82 log.debug("assignTable(): " + this);
85 // ask the group to send their order.
86 public void askForOrder(int waiter) {
87 groupData.setState(GroupState.ORDERED);
88 groupData.setOrderWaiter(waiter);
89 new Thread(this).start();
90 log.debug("askForOrder(): " + this);
93 // pizzas are here! nom pizzas!
94 public void bringOrderedPizzas(Order order, int waiter) {
95 groupData.setState(GroupState.EATING);
96 groupData.setOrder(order);
97 groupData.setPizzaWaiter(waiter);
98 new Thread(this).start();
99 log.debug("bringOrderedPizzas(): " + this);