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