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.TableRequest;
9 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
10 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
11 import at.ac.tuwien.sbc.valesriegler.types.Order;
12 import at.ac.tuwien.sbc.valesriegler.types.Table;
14 // class doing all the Group related work as required.
15 public class Group implements Runnable, HasId {
16 private static final Logger log = LoggerFactory.getLogger(Group.class);
17 private static int idNext = -1; // TODO: set to 0 after debugging!
19 final private GroupData groupData;
21 public GroupData getGroupData() {
26 groupData = new GroupData(++idNext);
31 log.debug("Thread started for:" + this);
33 Thread.sleep((long) (Math.random() * 10000));
35 switch (groupData.getState()) {
37 // TODO : may not happen!
40 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
43 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
50 case EATING:// just wait some more and request bill.
51 // MessageProducer wantToPay =
52 // session.createProducer(session.createQueue("WantToPay"));
53 // wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
54 // wantToPay.send(session.createObjectMessage(this));
56 case PAY:// leave table
57 // MessageProducer wantToLeave =
58 // session.createProducer(session.createQueue("LeftPizzaria"));
59 // wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
60 // wantToLeave.send(session.createObjectMessage(this));
68 } catch (InterruptedException e) {
73 // lets go to the pizzaria.
74 public void goGrabSomeFood() {
75 log.debug("goGrabSomeFood(): " + this);
76 groupData.setState(GroupState.WAITING);
77 new Thread(this).start();
80 // get a table assigned by a waiter.
81 public void assignTable(Table t, int waiterID) {
82 groupData.setState(GroupState.SITTING);
83 groupData.setTable(t);
84 groupData.setTableWaiter(waiterID);
85 new Thread(this).start();
86 log.debug("assignTable(): " + this);
89 // ask the group to send their order.
91 groupData.setState(GroupState.ORDER_PENDING);
92 new Thread(this).start();
93 log.debug("order(): " + this);
96 // Waiter telling group he/she forwarded the order.
97 public void orderReceived(int waiter) {
98 groupData.setState(GroupState.ORDERED);
99 groupData.setOrderWaiter(waiter);
100 new Thread(this).start();
101 log.debug("orderReceived(): " + this);
104 // pizzas are here! nom nom nom
105 public void deliverPizzas(Order order, int waiter) {
106 groupData.setState(GroupState.EATING);
107 groupData.setOrder(order);
108 groupData.setPizzaWaiter(waiter);
109 new Thread(this).start();
110 log.debug("bringOrderedPizzas(): " + this);
115 return groupData.getId();