]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
großer Brocken an GruppenGui-Änderungen kombiniert mit ersten Teil des Bestellworkflows.
[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.group.actions.TableRequest;
7 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.Order;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
9 import at.ac.tuwien.sbc.valesriegler.types.Table;
10
11 // class doing all the Group related work as required.
12 public class Group implements Runnable {
13         private static final Logger log = LoggerFactory.getLogger(Group.class);
14         private static int idNext = -1; // TODO: set to 0 after debugging!
15
16         final private GroupData groupData;
17
18         public GroupData getGroupData() {
19                 return groupData;
20         }
21
22         public Group() {
23                 groupData = new GroupData(++idNext);
24         }
25
26         @Override
27         public void run() {
28                 log.debug("Thread started for:" + this);
29                 try {
30                         Thread.sleep((long) (Math.random() * 10000));
31
32                         switch (groupData.getState()) {
33                         case NEW:
34                                 // TODO : may not happen!
35                                 break;
36                         case WAITING:
37                                 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
38                                 break;
39                         case SITTING:
40                                 // MessageProducer wantToOrder =
41                                 // session.createProducer(session.createQueue("WantToOrder"));
42                                 // wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
43                                 // wantToOrder.send(session.createObjectMessage(this));
44                                 break;
45                         case ORDERED:
46                                 break; // do nothing.
47                         case EATING:// just wait some more and request bill.
48                                 // MessageProducer wantToPay =
49                                 // session.createProducer(session.createQueue("WantToPay"));
50                                 // wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
51                                 // wantToPay.send(session.createObjectMessage(this));
52                                 break;
53                         case PAY:// leave table
54                                 // MessageProducer wantToLeave =
55                                 // session.createProducer(session.createQueue("LeftPizzaria"));
56                                 // wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
57                                 // wantToLeave.send(session.createObjectMessage(this));
58                                 break;
59                         case GONE:
60                                 break; // do nothing.
61                         default:
62                                 break;
63                         }
64
65                 } catch (InterruptedException e) {
66                         e.printStackTrace();
67                 }
68         }
69
70         // lets go to the pizzaria.
71         public void goGrabSomeFood() {
72                 log.debug("goGrabSomeFood():" + this);
73                 groupData.setState(GroupState.WAITING);
74                 new Thread(this).start();
75         }
76
77         // get a table assigned by a waiter.
78         public void assignTable(Table t, int waiterID) {
79                 groupData.setState(GroupState.SITTING);
80                 groupData.setTable(t);
81                 groupData.setTableWaiter(waiterID);
82                 new Thread(this).start();
83                 log.debug("assignTable():" + this);
84         }
85
86         // ask the group to send their order.
87         public void askForOrder(int waiter) {
88                 groupData.setState(GroupState.ORDERED);
89                 groupData.setOrderWaiter(waiter);
90                 new Thread(this).start();
91                 log.debug("askForOrder():" + this);
92         }
93
94         // pizzas are here! nom pizzas!
95         public void bringOrderedPizzas(Order order, int waiter) {
96                 groupData.setState(GroupState.EATING);
97                 groupData.setOrder(order);
98                 groupData.setPizzaWaiter(waiter);
99                 new Thread(this).start();
100                 log.debug("bringOrderedPizzas():" + this);
101         }
102 }