]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
Support for space notifications for pizzeria and group agents. Change table model...
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / Group.java
1 package at.ac.tuwien.sbc.valesriegler.group;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
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;
13
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!
18
19         final private GroupData groupData;
20
21         public GroupData getGroupData() {
22                 return groupData;
23         }
24
25         public Group() {
26                 groupData = new GroupData(++idNext);
27         }
28
29         @Override
30         public void run() {
31                 log.debug("Thread started for:" + this);
32                 try {
33                         Thread.sleep((long) (Math.random() * 10000));
34
35                         switch (groupData.getState()) {
36                         case NEW:
37                                 // TODO : may not happen!
38                                 break;
39                         case WAITING:
40                                 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
41                                 break;
42                         case SITTING:
43                                 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
44                                 order();
45                                 break;
46                         case ORDER_PENDING:
47                                 break; // do nothing.
48                         case ORDERED:
49                                 break; // do nothing.
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));
55                                 break;
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));
61                                 break;
62                         case GONE:
63                                 break; // do nothing.
64                         default:
65                                 break;
66                         }
67
68                 } catch (InterruptedException e) {
69                         e.printStackTrace();
70                 }
71         }
72
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();
78         }
79
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);
87         }
88
89         // ask the group to send their order.
90         public void order() {
91                 groupData.setState(GroupState.ORDER_PENDING);
92                 new Thread(this).start();
93                 log.debug("order(): " + this);
94         }
95
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);
102         }
103
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);
111         }
112
113         @Override
114         public int getId() {
115                 return groupData.getId();
116         }
117 }