]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/jms/JMSGroupConnector.java
GUI fix for Tables OutOfBoundsException
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / jms / JMSGroupConnector.java
1 package at.ac.tuwien.sbc.valesriegler.group.jms;
2
3 import at.ac.tuwien.sbc.valesriegler.common.AbstractAction;
4 import at.ac.tuwien.sbc.valesriegler.cook.actions.DeliveryOrderInfo;
5 import at.ac.tuwien.sbc.valesriegler.driver.actions.OrderDeliveredInfo;
6 import at.ac.tuwien.sbc.valesriegler.group.AbstractGroupConnector;
7 import at.ac.tuwien.sbc.valesriegler.group.Group;
8 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
9 import at.ac.tuwien.sbc.valesriegler.group.actions.*;
10 import at.ac.tuwien.sbc.valesriegler.types.DeliveryGroupData;
11 import at.ac.tuwien.sbc.valesriegler.waiter.actions.DeliverOrder;
12 import org.apache.activemq.ActiveMQConnectionFactory;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import javax.jms.*;
17 import java.util.ArrayList;
18 import java.util.Date;
19 import java.util.HashMap;
20
21 /**
22  * This class handles the communication with other processes using JMS.
23  *
24  * @author jan
25  */
26 public class JMSGroupConnector extends AbstractGroupConnector implements MessageListener {
27     private static final Logger log = LoggerFactory.getLogger(JMSGroupConnector.class);
28     private static HashMap<String, JMSGroupConnector> connectors = new HashMap<String, JMSGroupConnector>();
29
30     public final String JMS_CONNECTSTRING;
31     private Connection connection;
32
33     public JMSGroupConnector(String address) {
34         if (address == null)
35             throw new IllegalArgumentException("Address may not be null!");
36         JMS_CONNECTSTRING = address;
37         init();
38     }
39
40     @Override
41     public void init() {
42         try {
43             connection = new ActiveMQConnectionFactory(JMS_CONNECTSTRING).createConnection();
44             connection.start();
45             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
46             MessageConsumer consumer = session.createConsumer(session.createQueue("GroupConnector"));
47             consumer.setMessageListener(this);
48         } catch (JMSException e) {
49             log.error("EXCEPTION!", e);
50         }
51     }
52
53     @Override
54     public void onMessage(Message msg) {
55         try {
56             msg.acknowledge();
57             if (msg instanceof ObjectMessage) {
58                 ObjectMessage objMsg = (ObjectMessage) msg;
59                 Object obj = objMsg.getObject();
60
61                 if (obj instanceof TableResponse) {
62                     TableResponse tablerresponse = (TableResponse) obj;
63                     log.debug("Received: " + tablerresponse);
64                     Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(tablerresponse.getGroupdata().getId());
65                     g.assignTable(tablerresponse.getTable(), tablerresponse.getWaiterId());
66                     return;
67                 } else if (obj instanceof OrderResponse) {
68                     OrderResponse orderresponse = (OrderResponse) obj;
69                     log.debug("Received: " + orderresponse);
70                     Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(orderresponse.getGroupdata().getId());
71                     g.orderReceived(orderresponse.getWaiterId());
72                     return;
73                 } else if (obj instanceof DeliverOrder) {
74                     DeliverOrder deliverorder = (DeliverOrder) obj;
75                     log.debug("Received: " + deliverorder);
76                     Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(deliverorder.getGroupdata().getId());
77                     g.deliverPizzas(deliverorder.getGroupdata().getOrder(), deliverorder.getWaiterId());
78                     return;
79                 } else if (obj instanceof PayResponse) {
80                     PayResponse payresponse = (PayResponse) obj;
81                     log.debug("Received: " + payresponse);
82                     Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(payresponse.getGroupdata().getId());
83                     g.payForPizzas(payresponse.getWaiterId());
84                     return;
85
86                 } else if (obj instanceof DeliveryOrderResponse) {
87                     DeliveryOrderResponse deliveryOrderResponse = (DeliveryOrderResponse) obj;
88                     log.debug("Received: " + deliveryOrderResponse);
89                     deliveryOrderResponse.getDeliveryGroupData().setWaiterIdOfOrder(deliveryOrderResponse.getWaiterId());
90                     ArrayList<DeliveryGroupData> gd = new ArrayList<DeliveryGroupData>();
91                     gd.add(deliveryOrderResponse.getDeliveryGroupData());
92                     GroupAgent.getInstance().getDeliveryModel().addDeliveries(gd);
93                     return;
94
95                 } else if (obj instanceof DeliveryOrderInfo) {
96                     DeliveryOrderInfo deliveryOrderInfo = (DeliveryOrderInfo) obj;
97                     log.debug("Received: " + deliveryOrderInfo);
98                     ArrayList<DeliveryGroupData> gd = new ArrayList<DeliveryGroupData>();
99                     gd.add(deliveryOrderInfo.getDeliveryGroupData());
100                     GroupAgent.getInstance().getDeliveryModel().addDeliveries(gd);
101                     return;
102
103                 } else if (obj instanceof OrderDeliveredInfo) {
104                     OrderDeliveredInfo orderDeliveredInfo = (OrderDeliveredInfo) obj;
105                     log.debug("Received: " + orderDeliveredInfo);
106                     orderDeliveredInfo.getDeliveryGroupData().setDriverId(orderDeliveredInfo.getDriverId());
107                     ArrayList<DeliveryGroupData> gd = new ArrayList<DeliveryGroupData>();
108                     gd.add(orderDeliveredInfo.getDeliveryGroupData());
109                     GroupAgent.getInstance().getDeliveryModel().addDeliveries(gd);
110
111                     if (GroupAgent.getInstance().getDeliveryModel().hasFinished()) {
112                         log.warn("Finished after {} seconds", (new Date().getTime() - GroupAgent.startTime.get()) / 1000);
113                     }
114                     return;
115                 }
116
117             }
118             log.warn("Unknown messagetype received!");
119         } catch (JMSException e) {
120             log.error("EXCEPTION!", e);
121         }
122     }
123
124     @Override
125     public void send(AbstractAction request) {
126         try {
127             if (request instanceof TableRequest) {
128                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
129                 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("WantToSitAtTable"));
130                 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
131                 wantToSitAtTable.send(session.createObjectMessage(request));
132
133                 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
134                 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
135                 informPizzariaGui.send(session.createObjectMessage(request));
136                 return;
137
138             } else if (request instanceof OrderRequest) {
139                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
140                 MessageProducer wantToOrder = session.createProducer(session.createQueue("WantToOrder"));
141                 wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
142                 wantToOrder.send(session.createObjectMessage(request));
143                 return;
144
145             } else if (request instanceof PayRequest) {
146                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
147                 MessageProducer wantToPay = session.createProducer(session.createQueue("WantToPay"));
148                 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
149                 wantToPay.send(session.createObjectMessage(request));
150                 return;
151
152             } else if (request instanceof TableFree) {
153                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
154                 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("TablesFree"));
155                 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
156                 wantToSitAtTable.send(session.createObjectMessage(request.getGroupdata().getTable()));
157
158                 MessageProducer wantToLeave = session.createProducer(session.createQueue("WantToLeave"));
159                 wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
160                 wantToLeave.send(session.createObjectMessage(request));
161
162                 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
163                 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
164                 informPizzariaGui.send(session.createObjectMessage(request));
165                 session.close();
166                 return;
167
168             } else if (request instanceof DeliveryOrderRequest) {
169                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
170                 MessageProducer wantToPay = session.createProducer(session.createQueue("WantADelivery"));
171                 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
172                 wantToPay.send(session.createObjectMessage(request));
173
174                 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
175                 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
176                 informPizzariaGui.send(session.createObjectMessage(request));
177                 session.close();
178                 return;
179             }
180         } catch (JMSException e) {
181             log.error("EXCEPTION!", e);
182         }
183     }
184
185     public static HashMap<String, JMSGroupConnector> getConnectors() {
186         return connectors;
187     }
188
189     public static JMSGroupConnector getConnector(String key) {
190         return connectors.get(key);
191     }
192
193     public Connection getConnection() {
194         return connection;
195     }
196
197 }