]> git.mxchange.org Git - jfinancials-war.git/blob
b0a005bcad9df96aa8e6028b0ef7fdbbd5ac913e
[jfinancials-war.git] /
1 /*
2  * Copyright (C) 2016 - 2018 Free Software Foundation
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Affero General Public License as
6  * published by the Free Software Foundation, either version 3 of the
7  * License, or (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 Affero General Public License for more details.
13  *
14  * You should have received a copy of the GNU Affero General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 package org.mxchange.jfinancials.beans.generic_product.action;
18
19 import java.math.BigDecimal;
20 import java.text.MessageFormat;
21 import javax.ejb.EJB;
22 import javax.enterprise.event.Event;
23 import javax.enterprise.inject.Any;
24 import javax.faces.view.ViewScoped;
25 import javax.faces.view.facelets.FaceletException;
26 import javax.inject.Inject;
27 import javax.inject.Named;
28 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
29 import org.mxchange.jfinancials.beans.BaseFinancialsBean;
30 import org.mxchange.jfinancials.beans.generic_product.list.FinancialsProductListWebViewController;
31 import org.mxchange.jproduct.events.product.updated.ObservableProductUpdatedEvent;
32 import org.mxchange.jproduct.events.product.updated.ProductUpdatedEvent;
33 import org.mxchange.jproduct.exceptions.product.ProductNotFoundException;
34 import org.mxchange.jproduct.model.category.Category;
35 import org.mxchange.jproduct.model.product.AdminProductSessionBeanRemote;
36 import org.mxchange.jproduct.model.product.GenericProduct;
37 import org.mxchange.jproduct.model.product.Product;
38 import org.mxchange.jproduct.model.product.agegroup.AgeGroup;
39
40 /**
41  * Main application class
42  * <p>
43  * @author Roland Häder<roland@mxchange.org>
44  */
45 @Named ("adminGenericProductActionController")
46 @ViewScoped
47 public class FinancialAdminGenericProductActionWebViewBean extends BaseFinancialsBean implements FinancialAdminProductActionWebViewController {
48
49         /**
50          * Serial number
51          */
52         private static final long serialVersionUID = 5_819_375_183_472_872L;
53
54         /**
55          * Remote bean for products
56          */
57         @EJB (lookup = "java:global/jfinancials-ejb/adminProduct!org.mxchange.jproduct.model.product.AdminProductSessionBeanRemote")
58         private AdminProductSessionBeanRemote adminProductBean;
59
60         /**
61          * Product instance
62          */
63         private Product product;
64
65         /**
66          * Product's age group
67          */
68         private AgeGroup productAgeGroup;
69
70         /**
71          * Availability
72          */
73         private Boolean productAvailability;
74
75         /**
76          * Barcode number
77          */
78         private String productBarCodeNumber;
79
80         /**
81          * Category instance
82          */
83         private Category productCategory;
84
85         /**
86          * Product's price currency code like EUR or USD
87          */
88         private String productCurrencyCode;
89
90         /**
91          * Product's gross price
92          */
93         private BigDecimal productGrossPrice;
94
95         /**
96          * I18n key of product
97          */
98         private String productI18nKey;
99
100         /**
101          * Product id
102          */
103         private Long productId;
104
105         /**
106          * Product list controller
107          */
108         @Inject
109         private FinancialsProductListWebViewController productListController;
110
111         /**
112          * Product's manufacturing/producing company
113          */
114         private BasicData productManufacturer;
115
116         /**
117          * Product's net price
118          */
119         private BigDecimal productNetPrice;
120
121         /**
122          * Product number
123          */
124         private Long productNumber;
125
126         /**
127          * Product size (for shoes, clothings)
128          */
129         private String productSize;
130
131         /**
132          * Product's tax rate
133          */
134         private BigDecimal productTaxRate;
135
136         /**
137          * Product's unit amount
138          */
139         private BigDecimal productUnitAmount;
140
141         /**
142          * Product's i18n key
143          */
144         private String productUnitI18nKey;
145
146         /**
147          * Event for updated product
148          */
149         @Inject
150         @Any
151         private Event<ObservableProductUpdatedEvent> updatedProductEvent;
152
153         /**
154          * Default constructor
155          */
156         public FinancialAdminGenericProductActionWebViewBean () {
157                 // Call super constructor
158                 super();
159         }
160
161         /**
162          * Copies all product's properties back to this bean.
163          */
164         public void copyAllProductProperties () {
165                 // Validate product instance
166                 if (this.getProduct() == null) {
167                         // Throw NPE
168                         throw new NullPointerException("this.product is null"); //NOI18N
169                 } else if (this.getProduct().getProductId() == null) {
170                         // Throw NPE again
171                         throw new NullPointerException("this.product.productId is null"); //NOI18N
172                 } else if (this.getProduct().getProductId() < 1) {
173                         // Not valid
174                         throw new IllegalStateException(MessageFormat.format("this.product.productId={0} is not valid.", this.getProduct().getProductId())); //NOI18N
175                 }
176
177                 // Now copy all fields
178                 this.setProductAgeGroup(this.getProduct().getProductAgeGroup());
179                 this.setProductAvailability(this.getProduct().getProductAvailability());
180                 this.setProductBarCodeNumber(this.getProduct().getProductBarCodeNumber());
181                 this.setProductCategory(this.getProduct().getProductCategory());
182                 this.setProductCurrencyCode(this.getProduct().getProductCurrencyCode());
183                 this.setProductGrossPrice(this.getProduct().getProductGrossPrice());
184                 this.setProductI18nKey(this.getProduct().getProductI18nKey());
185                 this.setProductId(this.getProduct().getProductId());
186                 this.setProductManufacturer(this.getProduct().getProductManufacturer());
187                 this.setProductNetPrice(this.getProduct().getProductNetPrice());
188                 this.setProductNumber(this.getProduct().getProductNumber());
189                 this.setProductSize(this.getProduct().getProductSize());
190                 this.setProductTaxRate(this.getProduct().getProductTaxRate());
191                 this.setProductUnitAmount(this.getProduct().getProductUnitAmount());
192                 this.setProductUnitI18nKey(this.getProduct().getProductUnitI18nKey());
193         }
194
195         /**
196          * Getter for product instance
197          * <p>
198          * @return Product instance
199          */
200         public Product getProduct () {
201                 return this.product;
202         }
203
204         /**
205          * Setter for product instance
206          * <p>
207          * @param product Product instance
208          */
209         public void setProduct (final Product product) {
210                 this.product = product;
211         }
212
213         /**
214          * Getter for product's age group
215          * <p>
216          * @return Product's age group
217          */
218         public AgeGroup getProductAgeGroup () {
219                 return this.productAgeGroup;
220         }
221
222         /**
223          * Setter for product's age group
224          * <p>
225          * @param productAgeGroup Product's age group
226          */
227         public void setProductAgeGroup (final AgeGroup productAgeGroup) {
228                 this.productAgeGroup = productAgeGroup;
229         }
230
231         /**
232          * Getter for product's available
233          * <p>
234          * @return Product's available
235          */
236         public Boolean getProductAvailability () {
237                 return this.productAvailability;
238         }
239
240         /**
241          * Setter for product's available
242          * <p>
243          * @param productAvailability Product's available
244          */
245         public void setProductAvailability (final Boolean productAvailability) {
246                 this.productAvailability = productAvailability;
247         }
248
249         /**
250          * Getter for product's bar-code number
251          * <p>
252          * @return Product's bar-code number
253          */
254         public String getProductBarCodeNumber () {
255                 return this.productBarCodeNumber;
256         }
257
258         /**
259          * Setter for product's bar-code number
260          * <p>
261          * @param productBarCodeNumber Product's bar-code number
262          */
263         public void setProductBarCodeNumber (final String productBarCodeNumber) {
264                 this.productBarCodeNumber = productBarCodeNumber;
265         }
266
267         /**
268          * Getter for product's category
269          * <p>
270          * @return Product's category
271          */
272         public Category getProductCategory () {
273                 return this.productCategory;
274         }
275
276         /**
277          * Setter for product's category instance
278          * <p>
279          * @param productCategory Product's category instance
280          */
281         public void setProductCategory (final Category productCategory) {
282                 this.productCategory = productCategory;
283         }
284
285         /**
286          * Getter for product's price currency code
287          * <p>
288          * @return Product's price currency code
289          */
290         public String getProductCurrencyCode () {
291                 return this.productCurrencyCode;
292         }
293
294         /**
295          * Setter for product's price currency code
296          * <p>
297          * @param productCurrencyCode Product's price currency code
298          */
299         public void setProductCurrencyCode (final String productCurrencyCode) {
300                 this.productCurrencyCode = productCurrencyCode;
301         }
302
303         /**
304          * Getter for product's gross price
305          * <p>
306          * @return Product's gross price
307          */
308         public BigDecimal getProductGrossPrice () {
309                 return this.productGrossPrice;
310         }
311
312         /**
313          * Setter for product's gross price
314          * <p>
315          * @param productGrossPrice Product's gross price
316          */
317         public void setProductGrossPrice (final BigDecimal productGrossPrice) {
318                 this.productGrossPrice = productGrossPrice;
319         }
320
321         /**
322          * Getter for product unit's i18n key
323          * <p>
324          * @return Product's i18n key
325          */
326         public String getProductI18nKey () {
327                 return this.productI18nKey;
328         }
329
330         /**
331          * Setter for product unit's i18n key
332          * <p>
333          * @param productI18nKey Product's i18n key
334          */
335         public void setProductI18nKey (final String productI18nKey) {
336                 this.productI18nKey = productI18nKey;
337         }
338
339         /**
340          * Getter for product id
341          * <p>
342          * @return Product id
343          */
344         public Long getProductId () {
345                 return this.productId;
346         }
347
348         /**
349          * Setter for product id
350          * <p>
351          * @param productId Product id
352          */
353         public void setProductId (final Long productId) {
354                 this.productId = productId;
355         }
356
357         /**
358          * Getter for product's manufacturing/producing company
359          * <p>
360          * @return Product's manufacturing/producing company
361          */
362         public BasicData getProductManufacturer () {
363                 return this.productManufacturer;
364         }
365
366         /**
367          * Setter for product's manufacturing/producing company
368          * <p>
369          * @param productManufacturer Product's manufacturing/producing company
370          */
371         public void setProductManufacturer (final BasicData productManufacturer) {
372                 this.productManufacturer = productManufacturer;
373         }
374
375         /**
376          * Getter for product's net price
377          * <p>
378          * @return Product's net price
379          */
380         public BigDecimal getProductNetPrice () {
381                 return this.productNetPrice;
382         }
383
384         /**
385          * Setter for product's net price
386          * <p>
387          * @param productNetPrice Product's net price
388          */
389         public void setProductNetPrice (final BigDecimal productNetPrice) {
390                 this.productNetPrice = productNetPrice;
391         }
392
393         /**
394          * Getter for product's number
395          * <p>
396          * @return Product's number
397          */
398         public Long getProductNumber () {
399                 return this.productNumber;
400         }
401
402         /**
403          * Setter for product's number
404          * <p>
405          * @param productNumber Product's number
406          */
407         public void setProductNumber (final Long productNumber) {
408                 this.productNumber = productNumber;
409         }
410
411         /**
412          * Getter for product's size
413          * <p>
414          * @return Product's size
415          */
416         public String getProductSize () {
417                 return this.productSize;
418         }
419
420         /**
421          * Setter for product's size
422          * <p>
423          * @param productSize Product's size
424          */
425         public void setProductSize (final String productSize) {
426                 this.productSize = productSize;
427         }
428
429         /**
430          * Getter for product's tax rate
431          * <p>
432          * @return Product's tax rate
433          */
434         public BigDecimal getProductTaxRate () {
435                 return this.productTaxRate;
436         }
437
438         /**
439          * Setter for product's tax rate
440          * <p>
441          * @param productTaxRate Product's tax rate
442          */
443         public void setProductTaxRate (final BigDecimal productTaxRate) {
444                 this.productTaxRate = productTaxRate;
445         }
446
447         /**
448          * Getter for product's unit amount
449          * <p>
450          * @return Product's unit amount
451          */
452         public BigDecimal getProductUnitAmount () {
453                 return this.productUnitAmount;
454         }
455
456         /**
457          * Setter for product's unit amount
458          * <p>
459          * @param productUnitAmount Product's unit amount
460          */
461         public void setProductUnitAmount (final BigDecimal productUnitAmount) {
462                 this.productUnitAmount = productUnitAmount;
463         }
464
465         /**
466          * Getter for product unit's i18n key
467          * <p>
468          * @return Product's i18n key
469          */
470         public String getProductUnitI18nKey () {
471                 return this.productUnitI18nKey;
472         }
473
474         /**
475          * Setter for product unit's i18n key
476          * <p>
477          * @param productUnitI18nKey Product unit's i18n key
478          */
479         public void setProductUnitI18nKey (final String productUnitI18nKey) {
480                 this.productUnitI18nKey = productUnitI18nKey;
481         }
482
483         /**
484          * Updates given product data from request to database
485          * <p>
486          * @throws FaceletException If something unexpected happened
487          */
488         public void updateProduct () throws FaceletException {
489                 // Get product instance
490                 final Product newProduct = this.createProductInstance();
491                 // Check if product instance is in helper and valid
492
493                 if (null == newProduct) {
494                         // Throw NPE
495                         throw new NullPointerException("newProduct is null"); //NOI18N
496                 } else if (newProduct.getProductId() == null) {
497                         // Throw NPE again
498                         throw new NullPointerException("newProduct.productId is null"); //NOI18N //NOI18N
499                 } else if (newProduct.getProductId() < 1) {
500                         // Invalid id
501                         throw new IllegalStateException(MessageFormat.format("newProduct.productId={0} is invalid", newProduct.getProductId())); //NOI18N
502                 }
503
504                 // Init productr
505                 final Product updatedProduct;
506
507                 try {
508                         // Call EJB for updating product data
509                         updatedProduct = this.adminProductBean.updateProductData(newProduct);
510                 } catch (final ProductNotFoundException ex) {
511                         // Throw again
512                         throw new FaceletException(ex);
513                 }
514
515                 // Fire event
516                 this.updatedProductEvent.fire(new ProductUpdatedEvent(updatedProduct));
517
518                 // Clear bean
519                 this.clear();
520         }
521
522         /**
523          * Clears this bean (example: product has been added)
524          */
525         private void clear () {
526                 // Clear all data
527                 this.setProductAgeGroup(null);
528                 this.setProductAvailability(Boolean.FALSE);
529                 this.setProductBarCodeNumber(null);
530                 this.setProductCategory(null);
531                 this.setProductGrossPrice(null);
532                 this.setProductI18nKey(null);
533                 this.setProductId(null);
534                 this.setProductManufacturer(null);
535                 this.setProductNetPrice(null);
536                 this.setProductNumber(null);
537                 this.setProductSize(null);
538                 this.setProductTaxRate(null);
539                 this.setProductUnitAmount(null);
540                 this.setProductUnitI18nKey(null);
541         }
542
543         /**
544          * Creates a product instance with all fields
545          * <p>
546          * @return Product instance
547          */
548         private Product createProductInstance () {
549                 // Create product instance
550                 final Product newProduct = new GenericProduct(
551                                           this.getProductI18nKey(),
552                                           this.getProductGrossPrice(),
553                                           this.getProductCurrencyCode(),
554                                           this.getProductCategory(),
555                                           this.getProductAvailability(),
556                                           this.getProductUnitAmount(),
557                                           this.getProductUnitI18nKey()
558                           );
559
560                 // Set all optional fields
561                 newProduct.setProductAgeGroup(this.getProductAgeGroup());
562                 newProduct.setProductBarCodeNumber(this.getProductBarCodeNumber());
563                 newProduct.setProductManufacturer(this.getProductManufacturer());
564                 newProduct.setProductNumber(this.getProductNumber());
565                 newProduct.setProductNetPrice(this.getProductNetPrice());
566                 newProduct.setProductSize(this.getProductSize());
567                 newProduct.setProductTaxRate(this.getProductTaxRate());
568
569                 // Is product id set?
570                 if (this.getProductId() instanceof Long) {
571                         // Set it, too
572                         newProduct.setProductId(this.getProductId());
573                 }
574
575                 // Return it
576                 return newProduct;
577         }
578
579 }