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