]> git.mxchange.org Git - jjobs-war.git/blob - src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
WIP: Please cherry-pick:
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / helper / JobsWebRequestHelperBean.java
1 /*
2  * Copyright (C) 2016, 2017 Roland Häder
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.jjobs.beans.helper;
18
19 import java.text.MessageFormat;
20 import javax.enterprise.context.RequestScoped;
21 import javax.enterprise.event.Event;
22 import javax.enterprise.inject.Any;
23 import javax.inject.Inject;
24 import javax.inject.Named;
25 import org.mxchange.jcontacts.contact.Contact;
26 import org.mxchange.jcontacts.events.contact.helper.created.HelperCreatedContactEvent;
27 import org.mxchange.jcontacts.events.contact.helper.created.ObservableHelperCreatedContactEvent;
28 import org.mxchange.jjobs.beans.BaseJobsController;
29 import org.mxchange.jjobs.beans.contact.JobsAdminContactWebRequestController;
30 import org.mxchange.jjobs.beans.phone.JobsAdminPhoneWebRequestController;
31 import org.mxchange.jjobs.beans.user.JobsAdminUserWebRequestController;
32 import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
33 import org.mxchange.jphone.events.helper.fax.created.HelperCreatedFaxNumberEvent;
34 import org.mxchange.jphone.events.helper.fax.created.ObservableHelperCreatedFaxNumberEvent;
35 import org.mxchange.jphone.events.helper.landline.created.HelperCreatedLandLineNumberEvent;
36 import org.mxchange.jphone.events.helper.landline.created.ObservableHelperCreatedLandLineNumberEvent;
37 import org.mxchange.jphone.events.helper.mobile.created.HelperCreatedMobileNumberEvent;
38 import org.mxchange.jphone.events.helper.mobile.created.ObservableHelperCreatedMobileNumberEvent;
39 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
40 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
41 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
42 import org.mxchange.jusercore.events.user.helper.created.HelperCreatedUserEvent;
43 import org.mxchange.jusercore.events.user.helper.created.ObservableHelperCreatedUserEvent;
44 import org.mxchange.jusercore.model.user.User;
45
46 /**
47  * A general helper for beans
48  * <p>
49  * @author Roland Häder<roland@mxchange.org>
50  */
51 @Named ("beanHelper")
52 @RequestScoped
53 public class JobsWebRequestHelperBean extends BaseJobsController implements JobsWebRequestHelperController {
54
55         /**
56          * Call-stack instance (5 may show BeanELResolver.getValue as caller)
57          */
58         private static final short THREAD_STACK = 5;
59
60         /**
61          * Serial number
62          */
63         private static final long serialVersionUID = 17_258_793_567_145_701L;
64
65         /**
66          * Administrative contact controller
67          */
68         @Inject
69         private JobsAdminContactWebRequestController adminContactController;
70
71         /**
72          * Administrative phone controller
73          */
74         @Inject
75         private JobsAdminPhoneWebRequestController adminPhoneController;
76
77         /**
78          * Administrative user controller
79          */
80         @Inject
81         private JobsAdminUserWebRequestController adminUserController;
82
83         /**
84          * Contact instance
85          */
86         private Contact contact;
87
88         /**
89          * Event for when a contact instance was created
90          */
91         @Any
92         @Inject
93         private Event<ObservableHelperCreatedContactEvent> contactCreatedEvent;
94
95         /**
96          * Fax number
97          */
98         private DialableFaxNumber faxNumber;
99
100         /**
101          * Event for when a fax number instance was created
102          */
103         @Any
104         @Inject
105         private Event<ObservableHelperCreatedFaxNumberEvent> faxNumberCreatedEvent;
106
107         /**
108          * Land-line number
109          */
110         private DialableLandLineNumber landLineNumber;
111
112         /**
113          * Event for when a land-line number instance was created
114          */
115         @Any
116         @Inject
117         private Event<ObservableHelperCreatedLandLineNumberEvent> landLineNumberCreatedEvent;
118
119         /**
120          * Mobile number
121          */
122         private DialableMobileNumber mobileNumber;
123
124         /**
125          * Event for when a mobile number instance was created
126          */
127         @Any
128         @Inject
129         private Event<ObservableHelperCreatedMobileNumberEvent> mobileNumberCreatedEvent;
130
131         /**
132          * User instance
133          */
134         private User user;
135
136         /**
137          * Regular user controller
138          */
139         @Inject
140         private JobsUserWebSessionController userController;
141
142         /**
143          * Event for when a user instance was created
144          */
145         @Any
146         @Inject
147         private Event<ObservableHelperCreatedUserEvent> userCreatedEvent;
148
149         /**
150          * Default constructor
151          */
152         public JobsWebRequestHelperBean () {
153                 // Call super constructor
154                 super();
155
156                 // String caller = MessageFormat.format("{0}.{1}", Thread.currentThread().getStackTrace()[3].getClassName(), Thread.currentThread().getStackTrace()[3].getMethodName());
157                 // System.out.println(MessageFormat.format("{0}: Constructed, caller: {1}", this.getClass().getSimpleName(), caller));
158         }
159
160         /**
161          * Copies currently set contact instances data to adminContactController
162          */
163         public void copyContactToController () {
164                 // String caller = MessageFormat.format("{0}.{1}", Thread.currentThread().getStackTrace()[THREAD_STACK].getClassName(), Thread.currentThread().getStackTrace()[THREAD_STACK].getMethodName());
165                 // System.out.println(MessageFormat.format("{0}.copyContactToController: CALLED, caller: {2}", this.getClass().getSimpleName(), this.contact, caller));
166
167                 // Validate contact instance
168                 if (this.getContact() == null) {
169                         // Throw NPE
170                         throw new NullPointerException("this.contact is null"); //NOI18N
171                 } else if (this.getContact().getContactId() == null) {
172                         // Throw NPE again
173                         throw new NullPointerException("this.contact.contactId is null"); //NOI18N
174                 } else if (this.getContact().getContactId() < 1) {
175                         // Not valid
176                         throw new IllegalStateException(MessageFormat.format("this.contact.contactId={0} is not valid.", this.getContact().getContactId())); //NOI18N
177                 }
178
179                 // Set all phone instances
180                 this.setPhoneInstances(this.getContact());
181
182                 // Set all fields: user
183                 this.contactCreatedEvent.fire(new HelperCreatedContactEvent(this.getContact()));
184         }
185
186         /**
187          * Copies currently set fax number's data to admin phone controller
188          */
189         public void copyFaxNumberToController () {
190                 // Validate fax instance
191                 if (this.getFaxNumber() == null) {
192                         // Throw NPE
193                         throw new NullPointerException("this.faxNumber is null"); //NOI18N
194                 } else if (this.getFaxNumber().getPhoneId() == null) {
195                         // Throw again
196                         throw new NullPointerException("this.faxNumber.phoneId is null"); //NOI18N
197                 } else if (this.getFaxNumber().getPhoneId() < 1) {
198                         // Invalid id number
199                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneId={0} is not valid", this.getFaxNumber().getPhoneId())); //NOI18N
200                 } else if (this.getFaxNumber().getPhoneAreaCode() == null) {
201                         // Throw again
202                         throw new NullPointerException("this.faxNumber.phoneAreaCode is null"); //NOI18N
203                 } else if (this.getFaxNumber().getPhoneAreaCode() < 1) {
204                         // Invalid id number
205                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneAreaCode={0} is not valid", this.getFaxNumber().getPhoneAreaCode())); //NOI18N
206                 } else if (this.getFaxNumber().getPhoneCountry() == null) {
207                         // Throw NPE again
208                         throw new NullPointerException("this.faxNumber.phoneCountry is null"); //NOI18N
209                 } else if (this.getFaxNumber().getPhoneCountry().getCountryId() == null) {
210                         // ... throw again
211                         throw new NullPointerException("this.faxNumber.phoneCountry.countryId is null"); //NOI18N
212                 } else if (this.getFaxNumber().getPhoneCountry().getCountryId() < 1) {
213                         // Invalid id
214                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneCountry.countryId={0} is invalid", this.getFaxNumber().getPhoneCountry().getCountryId())); //NOI18N
215                 } else if (this.getFaxNumber().getPhoneNumber() == null) {
216                         // Throw NPE again ...
217                         throw new NullPointerException("this.faxNumber.phoneNumber is null"); //NOI18N
218                 } else if (this.getFaxNumber().getPhoneNumber() < 1) {
219                         // Invalid id number
220                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneNumber={0} is not valid", this.getFaxNumber().getPhoneNumber())); //NOI18N
221                 }
222
223                 // Fire event
224                 this.faxNumberCreatedEvent.fire(new HelperCreatedFaxNumberEvent(this.getFaxNumber()));
225         }
226
227         /**
228          * Copies currently set land-line number's data to admin phone controller
229          */
230         public void copyLandLineNumberToController () {
231                 // Validate land-line instance
232                 if (this.getLandLineNumber() == null) {
233                         // Throw NPE
234                         throw new NullPointerException("this.landLineNumber is null"); //NOI18N
235                 } else if (this.getLandLineNumber().getPhoneId() == null) {
236                         // Throw again
237                         throw new NullPointerException("this.landLineNumber.phoneId is null"); //NOI18N
238                 } else if (this.getLandLineNumber().getPhoneId() < 1) {
239                         // Invalid id number
240                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneId={0} is not valid", this.getLandLineNumber().getPhoneId())); //NOI18N
241                 } else if (this.getLandLineNumber().getPhoneAreaCode() == null) {
242                         // Throw again
243                         throw new NullPointerException("this.landLineNumber.phoneAreaCode is null"); //NOI18N
244                 } else if (this.getLandLineNumber().getPhoneAreaCode() < 1) {
245                         // Invalid id number
246                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneAreaCode={0} is not valid", this.getFaxNumber().getPhoneAreaCode())); //NOI18N
247                 } else if (this.getLandLineNumber().getPhoneCountry() == null) {
248                         // Throw NPE again
249                         throw new NullPointerException("this.landLineNumber.phoneCountry is null"); //NOI18N
250                 } else if (this.getLandLineNumber().getPhoneCountry().getCountryId() == null) {
251                         // ... throw again
252                         throw new NullPointerException("this.landLineNumber.phoneCountry.countryId is null"); //NOI18N
253                 } else if (this.getLandLineNumber().getPhoneCountry().getCountryId() < 1) {
254                         // Invalid id
255                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneCountry.countryId={0} is invalid", this.getLandLineNumber().getPhoneCountry().getCountryId())); //NOI18N
256                 } else if (this.getLandLineNumber().getPhoneNumber() == null) {
257                         // Throw NPE again ...
258                         throw new NullPointerException("this.landLineNumber.phoneNumber is null"); //NOI18N
259                 } else if (this.getLandLineNumber().getPhoneNumber() < 1) {
260                         // Invalid id number
261                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneNumber={0} is not valid", this.getLandLineNumber().getPhoneNumber())); //NOI18N
262                 }
263
264                 // Fire event
265                 this.landLineNumberCreatedEvent.fire(new HelperCreatedLandLineNumberEvent(this.getLandLineNumber()));
266         }
267
268         /**
269          * Copies currently set mobile number's data to admin phone controller
270          */
271         public void copyMobileNumberToController () {
272                 // Validate mobile instance
273                 if (this.getMobileNumber() == null) {
274                         // Throw NPE
275                         throw new NullPointerException("this.mobileNumber is null"); //NOI18N
276                 } else if (this.getMobileNumber().getPhoneId() == null) {
277                         // Throw again
278                         throw new NullPointerException("this.mobileNumber.phoneId is null"); //NOI18N
279                 } else if (this.getMobileNumber().getPhoneId() < 1) {
280                         // Invalid id number
281                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.phoneId={0} is not valid", this.getMobileNumber().getPhoneId())); //NOI18N
282                 } else if (this.getMobileNumber().getMobileProvider() == null) {
283                         // Throw NPE again
284                         throw new NullPointerException("this.mobileNumber.mobileProvider is null"); //NOI18N
285                 } else if (this.getMobileNumber().getMobileProvider().getProviderId() == null) {
286                         // ... throw again
287                         throw new NullPointerException("this.mobileNumber.mobileProvider.providerId is null"); //NOI18N
288                 } else if (this.getMobileNumber().getMobileProvider().getProviderId() < 1) {
289                         // Invalid id
290                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.mobileProvider.providerId={0} is invalid", this.getMobileNumber().getMobileProvider().getProviderId())); //NOI18N
291                 } else if (this.getMobileNumber().getPhoneNumber() == null) {
292                         // Throw NPE again ...
293                         throw new NullPointerException("this.mobileNumber.phoneNumber is null"); //NOI18N
294                 } else if (this.getMobileNumber().getPhoneNumber() < 1) {
295                         // Invalid id number
296                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.phoneNumber={0} is not valid", this.getMobileNumber().getPhoneNumber())); //NOI18N
297                 }
298
299                 // Fire event
300                 this.mobileNumberCreatedEvent.fire(new HelperCreatedMobileNumberEvent(this.getMobileNumber()));
301         }
302
303         /**
304          * Copies currently set user instances data to adminUserController
305          */
306         public void copyUserToController () {
307                 // Log message
308                 //* NOISY-DEBUG: */ System.out.println("AdminHelper::copyUserToController - CALLED!"); //NOI18N
309
310                 // Validate user instance
311                 if (this.getUser() == null) {
312                         // Throw NPE
313                         throw new NullPointerException("this.user is null"); //NOI18N
314                 } else if (this.getUser().getUserId() == null) {
315                         // Throw NPE again
316                         throw new NullPointerException("this.user.userId is null"); //NOI18N
317                 } else if (this.getUser().getUserId() < 1) {
318                         // Not valid
319                         throw new IllegalStateException(MessageFormat.format("this.user.userId={0} is not valid.", this.getUser().getUserId())); //NOI18N
320                 }
321
322                 // Get contact
323                 Contact userContact = this.getUser().getUserContact();
324
325                 // Set contact here, too. This avoids parameters that cannot auto-complete in IDEs.
326                 this.setContact(userContact);
327
328                 // Set all phone instances
329                 this.setPhoneInstances(userContact);
330
331                 // Fire event
332                 this.userCreatedEvent.fire(new HelperCreatedUserEvent(this.getUser()));
333         }
334
335         /**
336          * Getter for contact instance
337          * <p>
338          * @return Contact instance
339          */
340         public Contact getContact () {
341                 return this.contact;
342         }
343
344         /**
345          * Setter for contact instance
346          * <p>
347          * @param contact Contact instance
348          */
349         public void setContact (final Contact contact) {
350                 // String caller = MessageFormat.format("{0}.{1}", Thread.currentThread().getStackTrace()[THREAD_STACK].getClassName(), Thread.currentThread().getStackTrace()[THREAD_STACK].getMethodName());
351                 // System.out.println(MessageFormat.format("{0}: Setting contact={1}, previous: {2}, caller: {3}", this.getClass().getSimpleName(), contact, this.contact, caller));
352                 this.contact = contact;
353         }
354
355         /**
356          * Returns a message key depending on if this contact is a user and/or a
357          * contact. If this contact is unused, a default key is returned.
358          * <p>
359          * @param contact Contact instance to check
360          * <p>
361          * @return Message key
362          */
363         public String getContactUsageMessageKey (final Contact contact) {
364                 // The contact must be valid
365                 if (null == contact) {
366                         // Throw NPE
367                         throw new NullPointerException("contact is null"); //NOI18N
368                 } else if (contact.getContactId() == null) {
369                         // Throw again ...
370                         throw new NullPointerException("contact.contactId is null"); //NOI18N
371                 } else if (contact.getContactId() < 1) {
372                         // Not valid
373                         throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
374                 }
375
376                 // Default key is "unused"
377                 String messageKey = "CONTACT_IS_UNUSED"; //NOI18N
378
379                 // Check user contact
380                 boolean isUserContact = this.userController.isContactFound(contact);
381
382                 // Check user first
383                 if (isUserContact) {
384                         // Only user
385                         messageKey = "CONTACT_IS_USER"; //NOI18N
386                 }
387
388                 // Return message key
389                 return messageKey;
390         }
391
392         /**
393          * Getter for dialable fax number
394          * <p>
395          * @return Dialable fax number
396          */
397         public DialableFaxNumber getFaxNumber () {
398                 return this.faxNumber;
399         }
400
401         /**
402          * Setter for dialable fax number
403          * <p>
404          * @param faxNumber Dialable fax number
405          */
406         public void setFaxNumber (final DialableFaxNumber faxNumber) {
407                 this.faxNumber = faxNumber;
408         }
409
410         /**
411          * Getter for dialable land-line number
412          * <p>
413          * @return Dialable land-line number
414          */
415         public DialableLandLineNumber getLandLineNumber () {
416                 return this.landLineNumber;
417         }
418
419         /**
420          * Setter for dialable land-line number
421          * <p>
422          * @param landLineNumber Dialable land-line number
423          */
424         public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
425                 this.landLineNumber = landLineNumber;
426         }
427
428         /**
429          * Getter for dialable mobile number
430          * <p>
431          * @return Dialable mobile number
432          */
433         public DialableMobileNumber getMobileNumber () {
434                 return this.mobileNumber;
435         }
436
437         /**
438          * Setter for dialable mobile number
439          * <p>
440          * @param mobileNumber Dialable mobile number
441          */
442         public void setMobileNumber (final DialableMobileNumber mobileNumber) {
443                 this.mobileNumber = mobileNumber;
444         }
445
446         /**
447          * Getter for user instance
448          * <p>
449          * @return User instance
450          */
451         public User getUser () {
452                 return this.user;
453         }
454
455         /**
456          * Setter for user instance
457          * <p>
458          * @param user User instance
459          */
460         public void setUser (final User user) {
461                 this.user = user;
462         }
463
464         /**
465          * Set's all given contact's phone instances: land-line, mobile and
466          * faxNumber
467          * <p>
468          * @param contact Contact to set phone instances for
469          */
470         private void setPhoneInstances (final Contact contact) {
471                 // The contact must be valid
472                 if (null == contact) {
473                         // Throw NPE
474                         throw new NullPointerException("contact is null"); //NOI18N
475                 } else if (contact.getContactId() == null) {
476                         // Throw again ...
477                         throw new NullPointerException("contact.contactId is null"); //NOI18N
478                 } else if (contact.getContactId() < 1) {
479                         // Not valid
480                         throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
481                 }
482
483                 // Is mobile set?
484                 if (contact.getContactMobileNumber() instanceof DialableMobileNumber) {
485                         // Yes, then set it in admin controller
486                         this.setMobileNumber(contact.getContactMobileNumber());
487                 }
488
489                 // Is land-line set?
490                 if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
491                         // Yes, then set it in admin controller
492                         this.setLandLineNumber(contact.getContactLandLineNumber());
493                 }
494
495                 // Is faxNumber set?
496                 if (contact.getContactFaxNumber() instanceof DialableFaxNumber) {
497                         // Yes, then set it in admin controller
498                         this.setFaxNumber(contact.getContactFaxNumber());
499                 }
500         }
501
502 }