2 * Copyright (C) 2015 Roland Haeder
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.
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.
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/>.
17 package org.mxchange.pizzaapplication.beans.checkout;
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;
48 * @author Roland Haeder<roland@mxchange.org>
50 @Named ("checkoutController")
52 public class CheckoutWebBean extends BaseFrameworkBean implements CheckoutWebController {
57 private static final long serialVersionUID = 51_987_348_347_183L;
62 private Connection connection;
67 private MessageProducer messageProducer;
77 private Session session;
82 private ObjectMessage message;
84 ////////////////////// Bean injections ///////////////////////
89 private BasketWebController basketController;
91 /////////////////////// Properties /////////////////////
95 private Gender gender;
100 private String firstName;
105 private String familyName;
110 private String companyName;
115 private String street;
120 private Long houseNumber;
125 private Long zipCode;
135 private String phoneNumber;
140 private String faxNumber;
145 private String cellphoneNumber;
148 public String doCheckout () {
150 if (this.basketController != null) {
152 throw new NullPointerException("basketController is null"); //NOI18N
155 // Are at least the required fields set?
156 if (!this.isRequiredPersonalDataSet()) {
157 // Not set, should not happen
158 return "checkout2"; //NOI18N
159 } else if (this.basketController.isEmpty()) {
161 return "empty_basket"; //NOI18N
164 // Create customer instance
165 Customer customer = this.createCustomer();
168 List<AddableBasketItem> list = this.basketController.allItems();
170 // Construct container
171 WrapableCheckout wrapper = new CheckoutWrapper();
172 wrapper.setCustomer(customer);
173 wrapper.setList(list);
176 // Construct object message
177 this.message.setObject(wrapper);
180 this.messageProducer.send(this.message);
181 } catch (final JMSException ex) {
182 // TODO: Log exception?
184 return "jms_failed"; //NOI18N
188 this.basketController.clear();
191 return "checkout_done"; //NOI18N
195 public String getCellphoneNumber () {
196 return this.cellphoneNumber;
200 public void setCellphoneNumber (final String cellphoneNumber) {
201 this.cellphoneNumber = cellphoneNumber;
205 public String getCity () {
210 public void setCity (final String city) {
215 public String getCompanyName () {
216 return this.companyName;
220 public void setCompanyName (final String companyName) {
221 this.companyName = companyName;
225 public String getFamilyName () {
226 return this.familyName;
230 public void setFamilyName (final String familyName) {
231 this.familyName = familyName;
235 public String getFaxNumber () {
236 return this.faxNumber;
240 public void setFaxNumber (final String faxNumber) {
241 this.faxNumber = faxNumber;
245 public String getFirstName () {
246 return this.firstName;
250 public void setFirstName (final String firstName) {
251 this.firstName = firstName;
255 public Gender getGender () {
260 public void setGender (final Gender gender) {
261 this.gender = gender;
265 public Long getHouseNumber () {
266 return this.houseNumber;
270 public void setHouseNumber (final Long houseNumber) {
271 this.houseNumber = houseNumber;
275 public String getPhoneNumber () {
276 return this.phoneNumber;
280 public void setPhoneNumber (final String phoneNumber) {
281 this.phoneNumber = phoneNumber;
285 public String getStreet () {
290 public void setStreet (final String street) {
291 this.street = street;
295 public Long getZipCode () {
300 public void setZipCode (final Long zipCode) {
301 this.zipCode = zipCode;
305 public void init () {
306 // Call super init for getting resource bundle
310 // Get initial context
311 Context context = new InitialContext();
313 // Get factory from JMS resource
314 QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup("jms/shopConnectionFactory"); //NOI18N
317 this.queue = (Queue) context.lookup("jms/shopCheckoutQueue"); //NOI18N
320 this.connection = connectionFactory.createConnection();
322 // Init session instance
323 this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
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);
337 public void destroy () {
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);
350 * Creates a full customer instance
352 * @return Customer instance
354 private Customer createCustomer () {
355 // Required personal data must be set
356 assert (this.isRequiredPersonalDataSet()) : "not all personal data is set"; //NOI18N
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());
377 * Checks if the required personal data is set
379 * @return Whether the required personal data is set
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));