]> git.mxchange.org Git - pizzaservice-war.git/blob - src/java/org/mxchange/pizzaapplication/beans/checkout/CheckoutWebBean.java
Continued:
[pizzaservice-war.git] / src / java / org / mxchange / pizzaapplication / beans / checkout / CheckoutWebBean.java
1 /*
2  * Copyright (C) 2015 Roland Haeder
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 package org.mxchange.pizzaapplication.beans.checkout;
18
19 import java.util.List;
20 import javax.annotation.PostConstruct;
21 import javax.annotation.PreDestroy;
22 import javax.enterprise.context.SessionScoped;
23 import javax.faces.FacesException;
24 import javax.inject.Inject;
25 import javax.inject.Named;
26 import javax.jms.Connection;
27 import javax.jms.JMSException;
28 import javax.jms.MessageProducer;
29 import javax.jms.ObjectMessage;
30 import javax.jms.Queue;
31 import javax.jms.QueueConnectionFactory;
32 import javax.jms.Session;
33 import javax.naming.Context;
34 import javax.naming.InitialContext;
35 import javax.naming.NamingException;
36 import org.mxchange.jcore.model.contact.gender.Gender;
37 import org.mxchange.jcoreee.beans.BaseFrameworkBean;
38 import org.mxchange.jshopcore.model.basket.AddableBasketItem;
39 import org.mxchange.jshopcore.model.customer.Customer;
40 import org.mxchange.jshopcore.model.customer.ShopCustomer;
41 import org.mxchange.jshopcore.wrapper.CheckoutWrapper;
42 import org.mxchange.jshopcore.wrapper.WrapableCheckout;
43 import org.mxchange.pizzaapplication.beans.basket.BasketWebController;
44
45 /**
46  * Checkout controller
47  *
48  * @author Roland Haeder<roland@mxchange.org>
49  */
50 @Named ("checkoutController")
51 @SessionScoped
52 public class CheckoutWebBean extends BaseFrameworkBean implements CheckoutWebController {
53
54         /**
55          * Serial number
56          */
57         private static final long serialVersionUID = 51_987_348_347_183L;
58
59         /**
60          * Connection
61          */
62         private Connection connection;
63
64         /**
65          * Message producer
66          */
67         private MessageProducer messageProducer;
68
69         /**
70          * Queue instance
71          */
72         private Queue queue;
73
74         /**
75          * Session instance
76          */
77         private Session session;
78
79         /**
80          * Object message
81          */
82         private ObjectMessage message;
83
84         ////////////////////// Bean injections ///////////////////////
85         /**
86          * Basket bean
87          */
88         @Inject
89         private BasketWebController basketController;
90
91         /////////////////////// Properties /////////////////////
92         /**
93          * Gender
94          */
95         private Gender gender;
96
97         /**
98          * First name
99          */
100         private String firstName;
101
102         /**
103          * Family name
104          */
105         private String familyName;
106
107         /**
108          * Company name
109          */
110         private String companyName;
111
112         /**
113          * Street
114          */
115         private String street;
116
117         /**
118          * House number
119          */
120         private Long houseNumber;
121
122         /**
123          * ZIP code
124          */
125         private Long zipCode;
126
127         /**
128          * City
129          */
130         private String city;
131
132         /**
133          * Phone number
134          */
135         private String phoneNumber;
136
137         /**
138          * Fax number
139          */
140         private String faxNumber;
141
142         /**
143          * Cellphone number
144          */
145         private String cellphoneNumber;
146
147         @Override
148         public String doCheckout () {
149                 // Is the bean set?
150                 if (this.basketController != null) {
151                         // Abort here
152                         throw new NullPointerException("basketController is null");
153                 }
154
155                 // Are at least the required fields set?
156                 if (!this.isRequiredPersonalDataSet()) {
157                         // Not set, should not happen
158                         return "checkout2";
159                 } else if (this.basketController.isEmpty()) {
160                         // Nothing to order
161                         return "empty_basket";
162                 }
163
164                 // Create customer instance
165                 Customer customer = this.createCustomer();
166
167                 // Get ordered list
168                 List<AddableBasketItem> list = this.basketController.allItems();
169
170                 // Construct container
171                 WrapableCheckout wrapper = new CheckoutWrapper();
172                 wrapper.setCustomer(customer);
173                 wrapper.setList(list);
174
175                 try {
176                         // Construct object message
177                         this.message.setObject(wrapper);
178
179                         // Send message
180                         this.messageProducer.send(this.message);
181                 } catch (final JMSException ex) {
182                         // TODO: Log exception?
183                         // Not working
184                         return "jms_failed";
185                 }
186
187                 // Clear basket
188                 this.basketController.clear();
189
190                 // All fine
191                 return "checkout_done";
192         }
193
194         @Override
195         public String getCellphoneNumber () {
196                 return this.cellphoneNumber;
197         }
198
199         @Override
200         public void setCellphoneNumber (final String cellphoneNumber) {
201                 this.cellphoneNumber = cellphoneNumber;
202         }
203
204         @Override
205         public String getCity () {
206                 return this.city;
207         }
208
209         @Override
210         public void setCity (final String city) {
211                 this.city = city;
212         }
213
214         @Override
215         public String getCompanyName () {
216                 return this.companyName;
217         }
218
219         @Override
220         public void setCompanyName (final String companyName) {
221                 this.companyName = companyName;
222         }
223
224         @Override
225         public String getFamilyName () {
226                 return this.familyName;
227         }
228
229         @Override
230         public void setFamilyName (final String familyName) {
231                 this.familyName = familyName;
232         }
233
234         @Override
235         public String getFaxNumber () {
236                 return this.faxNumber;
237         }
238
239         @Override
240         public void setFaxNumber (final String faxNumber) {
241                 this.faxNumber = faxNumber;
242         }
243
244         @Override
245         public String getFirstName () {
246                 return this.firstName;
247         }
248
249         @Override
250         public void setFirstName (final String firstName) {
251                 this.firstName = firstName;
252         }
253
254         @Override
255         public Gender getGender () {
256                 return this.gender;
257         }
258
259         @Override
260         public void setGender (final Gender gender) {
261                 this.gender = gender;
262         }
263
264         @Override
265         public Long getHouseNumber () {
266                 return this.houseNumber;
267         }
268
269         @Override
270         public void setHouseNumber (final Long houseNumber) {
271                 this.houseNumber = houseNumber;
272         }
273
274         @Override
275         public String getPhoneNumber () {
276                 return this.phoneNumber;
277         }
278
279         @Override
280         public void setPhoneNumber (final String phoneNumber) {
281                 this.phoneNumber = phoneNumber;
282         }
283
284         @Override
285         public String getStreet () {
286                 return this.street;
287         }
288
289         @Override
290         public void setStreet (final String street) {
291                 this.street = street;
292         }
293
294         @Override
295         public Long getZipCode () {
296                 return this.zipCode;
297         }
298
299         @Override
300         public void setZipCode (final Long zipCode) {
301                 this.zipCode = zipCode;
302         }
303
304         @PostConstruct
305         public void init () {
306                 // Call super init for getting resource bundle
307                 super.genericInit();
308
309                 try {
310                         // Get initial context
311                         Context context = new InitialContext();
312
313                         // Get factory from JMS resource
314                         QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup("jms/shopConnectionFactory"); //NOI18N
315
316                         // Lookup queue
317                         this.queue = (Queue) context.lookup("jms/shopCheckoutQueue"); //NOI18N
318
319                         // Create connection
320                         this.connection = connectionFactory.createConnection();
321
322                         // Init session instance
323                         this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
324
325                         // And message producer
326                         this.messageProducer = session.createProducer(queue);
327                 } catch (final NamingException | JMSException e) {
328                         // Continued to throw
329                         throw new FacesException(e);
330                 }
331         }
332
333         /**
334          * Destructor
335          */
336         @PreDestroy
337         public void destroy () {
338                 try {
339                         // Try to close all
340                         this.messageProducer.close();
341                         this.session.close();
342                         this.connection.close();
343                 } catch (final JMSException ex) {
344                         // TODO: Continue to throw is fine?
345                         throw new FacesException(ex);
346                 }
347         }
348
349         /**
350          * Creates a full customer instance
351          *
352          * @return Customer instance
353          */
354         private Customer createCustomer () {
355                 // Required personal data must be set
356                 assert (this.isRequiredPersonalDataSet()) : "not all personal data is set";
357
358                 // Create new customer instance
359                 Customer customer = new ShopCustomer();
360                 customer.setGender(this.getGender());
361                 customer.setFirstName(this.getFirstName());
362                 customer.setFamilyName(this.getFamilyName());
363                 customer.setCompanyName(this.getCompanyName());
364                 customer.setStreet(this.getStreet());
365                 customer.setHouseNumber(this.getHouseNumber());
366                 customer.setZipCode(this.getZipCode());
367                 customer.setCity(this.getCity());
368                 customer.setPhoneNumber(this.getPhoneNumber());
369                 customer.setFaxNumber(this.getFaxNumber());
370                 customer.setCellphoneNumber(this.getCellphoneNumber());
371
372                 // Return it
373                 return customer;
374         }
375
376         /**
377          * Checks if the required personal data is set
378          *
379          * @return Whether the required personal data is set
380          */
381         private boolean isRequiredPersonalDataSet () {
382                 return ((this.getGender() != null) && (this.getFirstName() != null) && (this.getFamilyName() != null) && (this.getStreet() != null) && (this.getHouseNumber() != null) && (this.getZipCode() != null) && (this.getCity() != null));
383         }
384 }