1 package at.ac.tuwien.sbc.valesriegler.group.jms;
3 import java.util.ArrayList;
4 import java.util.HashMap;
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;
16 import org.apache.activemq.ActiveMQConnectionFactory;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
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;
39 * This class handles the communication with other processes using JMS.
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>();
48 public final String JMS_CONNECTSTRING;
49 private Connection connection;
51 public JMSGroupConnector(String address) {
53 throw new IllegalArgumentException("Address may not be null!");
54 JMS_CONNECTSTRING = address;
61 connection = new ActiveMQConnectionFactory(JMS_CONNECTSTRING).createConnection();
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);
72 public void onMessage(Message msg) {
75 if (msg instanceof ObjectMessage) {
76 ObjectMessage objMsg = (ObjectMessage) msg;
77 Object obj = objMsg.getObject();
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());
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());
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());
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());
104 } else if (obj instanceof DeliveryOrderResponse) {
105 DeliveryOrderResponse deliveryOrderResponse = (DeliveryOrderResponse) obj;
106 log.debug("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);
113 } else if (obj instanceof DeliveryOrderInfo) {
114 DeliveryOrderInfo deliveryOrderInfo = (DeliveryOrderInfo) obj;
115 log.debug("Received: " + deliveryOrderInfo);
116 ArrayList<DeliveryGroupData> gd = new ArrayList<DeliveryGroupData>();
117 gd.add(deliveryOrderInfo.getDeliveryGroupData());
118 GroupAgent.getInstance().getDeliveryModel().addDeliveries(gd);
121 } else if (obj instanceof OrderDeliveredInfo) {
122 OrderDeliveredInfo orderDeliveredInfo = (OrderDeliveredInfo) obj;
123 log.debug("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);
132 log.warn("Unknown messagetype received!");
133 } catch (JMSException e) {
134 log.error("EXCEPTION!", e);
139 public void send(AbstractAction request) {
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));
147 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
148 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
149 informPizzariaGui.send(session.createObjectMessage(request));
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));
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));
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()));
172 MessageProducer wantToLeave = session.createProducer(session.createQueue("WantToLeave"));
173 wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
174 wantToLeave.send(session.createObjectMessage(request));
176 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
177 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
178 informPizzariaGui.send(session.createObjectMessage(request));
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));
188 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
189 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
190 informPizzariaGui.send(session.createObjectMessage(request));
194 } catch (JMSException e) {
195 log.error("EXCEPTION!", e);
199 public static HashMap<String, JMSGroupConnector> getConnectors() {
203 public static JMSGroupConnector getConnector(String key) {
204 return connectors.get(key);
207 public Connection getConnection() {