2 * Copyright (C) 2016, 2017 Roland Häder
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.
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.
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/>.
17 package org.mxchange.jjobs.beans.phone;
19 import java.text.MessageFormat;
20 import java.util.List;
21 import java.util.Locale;
22 import java.util.MissingResourceException;
23 import java.util.Objects;
24 import java.util.ResourceBundle;
25 import javax.annotation.PostConstruct;
26 import javax.enterprise.context.RequestScoped;
27 import javax.enterprise.event.Event;
28 import javax.enterprise.inject.Any;
29 import javax.faces.application.FacesMessage;
30 import javax.faces.context.FacesContext;
31 import javax.faces.view.facelets.FaceletException;
32 import javax.inject.Inject;
33 import javax.inject.Named;
34 import javax.naming.Context;
35 import javax.naming.InitialContext;
36 import javax.naming.NamingException;
37 import org.mxchange.jcountry.data.Country;
38 import org.mxchange.jjobs.beans.BaseJobsController;
39 import org.mxchange.jjobs.beans.helper.JobsWebRequestHelperController;
40 import org.mxchange.jphone.events.fax.deleted.AdminDeletedFaxNumberEvent;
41 import org.mxchange.jphone.events.fax.deleted.AdminFaxNumberDeletedEvent;
42 import org.mxchange.jphone.events.fax.removed.AdminFaxNumberRemovedFromListEvent;
43 import org.mxchange.jphone.events.fax.removed.AdminRemoveFaxNumberFromListEvent;
44 import org.mxchange.jphone.events.fax.updated.AdminFaxNumberUpdatedEvent;
45 import org.mxchange.jphone.events.fax.updated.AdminUpdatedFaxNumberEvent;
46 import org.mxchange.jphone.events.landline.deleted.AdminDeletedLandLineNumberEvent;
47 import org.mxchange.jphone.events.landline.deleted.AdminLandLineNumberDeletedEvent;
48 import org.mxchange.jphone.events.landline.removed.AdminLandLineNumberRemovedFromListEvent;
49 import org.mxchange.jphone.events.landline.removed.AdminRemoveLandLineNumberFromListEvent;
50 import org.mxchange.jphone.events.landline.updated.AdminLandLineNumberUpdatedEvent;
51 import org.mxchange.jphone.events.landline.updated.AdminUpdatedLandLineNumberEvent;
52 import org.mxchange.jphone.events.mobile.deleted.AdminDeletedMobileNumberEvent;
53 import org.mxchange.jphone.events.mobile.deleted.AdminMobileNumberDeletedEvent;
54 import org.mxchange.jphone.events.mobile.remove.AdminMobileNumberRemovedFromListEvent;
55 import org.mxchange.jphone.events.mobile.remove.AdminRemoveMobileNumberFromListEvent;
56 import org.mxchange.jphone.events.mobile.updated.AdminMobileNumberUpdatedEvent;
57 import org.mxchange.jphone.events.mobile.updated.AdminUpdatedMobileNumberEvent;
58 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
59 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
60 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
61 import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
62 import org.mxchange.jphone.phonenumbers.phone.AdminPhoneSessionBeanRemote;
65 * Administrative controller (bean) for phone numbers
67 * @author Roland Häder<roland@mxchange.org>
69 @Named ("adminPhoneController")
71 public abstract class JobsAdminPhoneWebRequestBean extends BaseJobsController implements JobsAdminPhoneWebRequestController {
76 private static final short THREAD_STACK = 5;
81 private static final long serialVersionUID = 184_598_175_371_269_016L;
84 * Remote EJB for phone number (administrative)
86 private AdminPhoneSessionBeanRemote adminPhoneBean;
92 private JobsWebRequestHelperController beanHelper;
97 private DialableFaxNumber faxNumber;
100 * Event being fired when an administrator has deleted fax number
104 private Event<AdminDeletedFaxNumberEvent> faxNumberDeletedEvent;
107 * Event being fired when an administrator has updated fax number
111 private Event<AdminUpdatedFaxNumberEvent> faxNumberUpdatedEvent;
116 private DialableLandLineNumber landLineNumber;
119 * Event being fired when an administrator has deleted land-line number
123 private Event<AdminDeletedLandLineNumberEvent> landLineNumberDeletedEvent;
126 * Event being fired when an administrator has updated fax number
130 private Event<AdminUpdatedLandLineNumberEvent> landLineNumberUpdatedEvent;
133 * Chosen mobile number
135 private DialableMobileNumber mobileNumber;
138 * Event being fired when an administrator has deleted mobile number
142 private Event<AdminDeletedMobileNumberEvent> mobileNumberDeletedEvent;
145 * Event being fired when an administrator has updated land-line number
149 private Event<AdminUpdatedMobileNumberEvent> mobileNumberUpdatedEvent;
154 private MobileProvider mobileProvider;
157 * Area code (city dial prefix)
159 private Integer phoneAreaCode;
162 * Generic hone controller
165 private JobsPhoneWebApplicationController phoneController;
168 * Country (for dial prefix)
170 private Country phoneCountry;
175 private Long phoneNumber;
178 * Event being fired when a list of all unsed fax numbers is being created.
182 private Event<AdminRemoveFaxNumberFromListEvent> removeLinkedFaxNumbersEvent;
185 * Event being fired when a list of all unsed land-line numbers is being
190 private Event<AdminRemoveLandLineNumberFromListEvent> removeLinkedLandLineNumbersEvent;
193 * Event being fired when a list of all unsed mobile numbers is being
198 private Event<AdminRemoveMobileNumberFromListEvent> removeLinkedMobileNumbersEvent;
201 * Default constructor
203 public JobsAdminPhoneWebRequestBean () {
204 // Call super constructor
207 // String caller = MessageFormat.format("{0}.{1}", Thread.currentThread().getStackTrace()[3].getClassName(), Thread.currentThread().getStackTrace()[3].getMethodName());
208 // System.out.println(MessageFormat.format("{0}: Constructed, caller: {1}", this.getClass().getSimpleName(), caller));
212 * Returns a list of all unused ("non-linked") land-line numbers
214 * @return List with all unused land-line numbers
216 public List<DialableFaxNumber> allNonLinkedFaxNumbers () {
217 // Get list of all mobile numbers
218 List<DialableFaxNumber> list = this.phoneController.allFaxNumbers();
220 // Visit all controllers to reduce the list
221 this.removeLinkedFaxNumbersEvent.fire(new AdminFaxNumberRemovedFromListEvent(list));
228 * Returns a list of all unused ("non-linked") land-line numbers
230 * @return List with all unused land-line numbers
232 public List<DialableLandLineNumber> allNonLinkedLandLineNumbers () {
233 // Get list of all mobile numbers
234 List<DialableLandLineNumber> list = this.phoneController.allLandLineNumbers();
236 // Visit all controllers to reduce the list
237 this.removeLinkedLandLineNumbersEvent.fire(new AdminLandLineNumberRemovedFromListEvent(list));
244 * Returns a list of all unused ("non-linked") mobile numbers
246 * @return List with all unused mobile numbers
248 public List<DialableMobileNumber> allNonLinkedMobileNumbers () {
249 // Get list of all mobile numbers
250 List<DialableMobileNumber> list = this.phoneController.allMobileNumbers();
252 // Visit all controllers to reduce the list
253 this.removeLinkedMobileNumbersEvent.fire(new AdminMobileNumberRemovedFromListEvent(list));
260 * Deletes given fax entry data
262 * @return Redirect outcome
264 public String deleteFaxData () {
265 // Get fax number from bean helper
266 DialableFaxNumber number = this.beanHelper.getFaxNumber();
269 if (number == null) {
270 // Not set, throw NPE
271 throw new NullPointerException("faxNumber is null"); //NOI18N
272 } else if (number.getPhoneId() == null) {
274 throw new NullPointerException("faxNumber.phoneId is null"); //NOI18N
275 } else if (number.getPhoneId() < 1) {
277 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
278 } else if (number.getPhoneCountry() == null) {
280 throw new NullPointerException("faxNumber.phoneCountry is null"); //NOI18N
281 } else if (number.getPhoneCountry().getCountryId() == null) {
283 throw new NullPointerException("faxNumber.phoneCountry.countryId is null"); //NOI18N
284 } else if (number.getPhoneCountry().getCountryId() < 1) {
286 throw new NullPointerException(MessageFormat.format("faxNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
287 } else if (number.getPhoneAreaCode() == null) {
289 throw new NullPointerException("faxNumber.phoneAreaCode is null"); //NOI18N
290 } else if (number.getPhoneAreaCode() < 1) {
292 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
293 } else if (number.getPhoneNumber() == null) {
295 throw new NullPointerException("faxNumber.phoneNumber is null"); //NOI18N
296 } else if (number.getPhoneNumber() < 1) {
298 throw new NullPointerException(MessageFormat.format("faxNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
302 this.adminPhoneBean.deleteFaxData(number);
305 this.faxNumberDeletedEvent.fire(new AdminFaxNumberDeletedEvent(number));
307 // All fine, redirect
308 return "admin_list_fax"; //NOI18N
312 * Deletes given land-line entry data
314 * @return Redirect outcome
316 public String deleteLandLineData () {
317 // Get land-line number from helper
318 DialableLandLineNumber number = this.beanHelper.getLandLineNumber();
321 if (number == null) {
322 // Not set, throw NPE
323 throw new NullPointerException("landLineNumber is null"); //NOI18N
324 } else if (number.getPhoneId() == null) {
326 throw new NullPointerException("landLineNumber.phoneId is null"); //NOI18N
327 } else if (number.getPhoneId() < 1) {
329 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
330 } else if (number.getPhoneCountry() == null) {
332 throw new NullPointerException("landLineNumber.phoneCountry is null"); //NOI18N
333 } else if (number.getPhoneCountry().getCountryId() == null) {
335 throw new NullPointerException("landLineNumber.phoneCountry.countryId is null"); //NOI18N
336 } else if (number.getPhoneCountry().getCountryId() < 1) {
338 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
339 } else if (number.getPhoneAreaCode() == null) {
341 throw new NullPointerException("landLineNumber.phoneAreaCode is null"); //NOI18N
342 } else if (number.getPhoneAreaCode() < 1) {
344 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
345 } else if (number.getPhoneNumber() == null) {
347 throw new NullPointerException("landLineNumber.phoneNumber is null"); //NOI18N
348 } else if (number.getPhoneNumber() < 1) {
350 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
354 this.adminPhoneBean.deleteLandLineData(number);
357 this.landLineNumberDeletedEvent.fire(new AdminLandLineNumberDeletedEvent(number));
359 // All fine, redirect
360 return "admin_list_landline"; //NOI18N
364 * Deletes given mobile entry data
366 * @return Redirect outcome
368 public String deleteMobileData () {
369 // Get mobile number from helper
370 DialableMobileNumber number = this.beanHelper.getMobileNumber();
373 if (number == null) {
374 // Not set, throw NPE
375 throw new NullPointerException("mobileNumber is null"); //NOI18N
376 } else if (number.getPhoneId() == null) {
378 throw new NullPointerException("mobileNumber.phoneId is null"); //NOI18N
379 } else if (number.getPhoneId() < 1) {
381 throw new IllegalArgumentException(MessageFormat.format("mobileNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
382 } else if (number.getMobileProvider() == null) {
384 throw new NullPointerException("mobileNumber.mobileProvider is null"); //NOI18N
385 } else if (number.getMobileProvider().getProviderId() == null) {
387 throw new NullPointerException("mobileNumber.mobileProvider.providerId is null"); //NOI18N
388 } else if (number.getMobileProvider().getProviderId() < 1) {
390 throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileProvider.providerId={0} is not valid.", number.getMobileProvider().getProviderId())); //NOI18N
391 } else if (number.getPhoneNumber() == null) {
393 throw new NullPointerException("mobileNumber.phoneNumber is null"); //NOI18N
394 } else if (number.getPhoneNumber() < 1) {
396 throw new NullPointerException(MessageFormat.format("mobileNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
400 this.adminPhoneBean.deleteMobileData(number);
403 this.mobileNumberDeletedEvent.fire(new AdminMobileNumberDeletedEvent(number));
405 // All fine, redirect
406 return "admin_list_mobile"; //NOI18N
410 * Changes fax entry data
412 * @return Redirect outcome
414 public String doChangeFaxNumber () {
415 // Get fax number from bean helper
416 DialableFaxNumber number = this.beanHelper.getFaxNumber();
419 if (number == null) {
420 // Not set, throw NPE
421 throw new NullPointerException("faxNumber is null"); //NOI18N
422 } else if (number.getPhoneId() == null) {
424 throw new NullPointerException("faxNumber.phoneId is null"); //NOI18N
425 } else if (number.getPhoneId() < 1) {
427 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
428 } else if (number.getPhoneCountry() == null) {
430 throw new NullPointerException("faxNumber.phoneCountry is null"); //NOI18N
431 } else if (number.getPhoneCountry().getCountryId() == null) {
433 throw new NullPointerException("faxNumber.phoneCountry.countryId is null"); //NOI18N
434 } else if (number.getPhoneCountry().getCountryId() < 1) {
436 throw new NullPointerException(MessageFormat.format("faxNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
437 } else if (number.getPhoneAreaCode() == null) {
439 throw new NullPointerException("faxNumber.phoneAreaCode is null"); //NOI18N
440 } else if (number.getPhoneAreaCode() < 1) {
442 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
443 } else if (number.getPhoneNumber() == null) {
445 throw new NullPointerException("faxNumber.phoneNumber is null"); //NOI18N
446 } else if (number.getPhoneNumber() < 1) {
448 throw new NullPointerException(MessageFormat.format("faxNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
451 // Is the mobile provider and number the same?
452 if ((Objects.equals(this.getPhoneCountry(), number.getPhoneCountry())) && (Objects.equals(this.getPhoneAreaCode(), number.getPhoneAreaCode())) && (Objects.equals(this.getPhoneNumber(), number.getPhoneNumber()))) {
454 this.showFacesMessage("form_edit_fax:faxNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED"); //NOI18N
456 // No difference in both together, no need to edit
461 number.setPhoneCountry(this.getPhoneCountry());
462 number.setPhoneAreaCode(this.getPhoneAreaCode());
463 number.setPhoneNumber(this.getPhoneNumber());
466 DialableFaxNumber updatedNumber = this.adminPhoneBean.updateFaxData(number);
469 this.faxNumberUpdatedEvent.fire(new AdminFaxNumberUpdatedEvent(updatedNumber));
471 // All fine, redirect
472 return "admin_show_fax"; //NOI18N
476 * Changes land-line entry data
478 * @return Redirect outcome
480 public String doChangeLandLineNumber () {
481 // Get land-line number from helper
482 DialableLandLineNumber number = this.beanHelper.getLandLineNumber();
485 if (number == null) {
486 // Not set, throw NPE
487 throw new NullPointerException("landLineNumber is null"); //NOI18N
488 } else if (number.getPhoneId() == null) {
490 throw new NullPointerException("landLineNumber.phoneId is null"); //NOI18N
491 } else if (number.getPhoneId() < 1) {
493 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
494 } else if (number.getPhoneCountry() == null) {
496 throw new NullPointerException("landLineNumber.phoneCountry is null"); //NOI18N
497 } else if (number.getPhoneCountry().getCountryId() == null) {
499 throw new NullPointerException("landLineNumber.phoneCountry.countryId is null"); //NOI18N
500 } else if (number.getPhoneCountry().getCountryId() < 1) {
502 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
503 } else if (number.getPhoneAreaCode() == null) {
505 throw new NullPointerException("landLineNumber.phoneAreaCode is null"); //NOI18N
506 } else if (number.getPhoneAreaCode() < 1) {
508 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
509 } else if (number.getPhoneNumber() == null) {
511 throw new NullPointerException("landLineNumber.phoneNumber is null"); //NOI18N
512 } else if (number.getPhoneNumber() < 1) {
514 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
517 // Is the mobile provider and number the same?
518 if ((Objects.equals(this.getPhoneCountry(), number.getPhoneCountry())) && (Objects.equals(this.getPhoneAreaCode(), number.getPhoneAreaCode())) && (Objects.equals(this.getPhoneNumber(), number.getPhoneNumber()))) {
520 this.showFacesMessage("form_edit_landline:landLineNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED"); //NOI18N
522 // No difference in both together, no need to edit
527 number.setPhoneCountry(this.getPhoneCountry());
528 number.setPhoneAreaCode(this.getPhoneAreaCode());
529 number.setPhoneNumber(this.getPhoneNumber());
532 DialableLandLineNumber updatedNumber = this.adminPhoneBean.updateLandLineData(number);
535 this.landLineNumberUpdatedEvent.fire(new AdminLandLineNumberUpdatedEvent(updatedNumber));
537 // All fine, redirect
538 return "admin_show_landline"; //NOI18N
542 * Changes mobile entry data
544 * @return Redirect outcome
546 public String doUpdateMobileNumber () {
547 // Get mobile number from helper
548 DialableMobileNumber number = this.beanHelper.getMobileNumber();
551 if (number == null) {
552 // Not set, throw NPE
553 throw new NullPointerException("mobileNumber is null"); //NOI18N
554 } else if (number.getPhoneId() == null) {
556 throw new NullPointerException("mobileNumber.phoneId is null"); //NOI18N
557 } else if (number.getPhoneId() < 1) {
559 throw new IllegalArgumentException(MessageFormat.format("mobileNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
560 } else if (number.getMobileProvider() == null) {
562 throw new NullPointerException("mobileNumber.mobileProvider is null"); //NOI18N
563 } else if (number.getMobileProvider().getProviderId() == null) {
565 throw new NullPointerException("mobileNumber.mobileProvider.providerId is null"); //NOI18N
566 } else if (number.getMobileProvider().getProviderId() < 1) {
568 throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileProvider.providerId={0} is not valid.", number.getMobileProvider().getProviderId())); //NOI18N
569 } else if (number.getPhoneNumber() == null) {
571 throw new NullPointerException("mobileNumber.phoneNumber is null"); //NOI18N
572 } else if (number.getPhoneNumber() < 1) {
574 throw new NullPointerException(MessageFormat.format("mobileNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
575 } else if (this.getMobileProvider() == null) {
577 this.showFacesMessage("form_edit_mobile:mobileProvider", "ERROR_ADMIN_NO_MOBILE_PROVIDER_SELECTED"); //NOI18N
579 } else if (this.getMobileProvider().getProviderId() == null) {
580 // Throw NPE again ...
581 throw new NullPointerException("this.mobileProvider.providerId is null"); //NOI18N
582 } else if (this.getMobileProvider().getProviderId() < 0) {
584 throw new IllegalArgumentException(MessageFormat.format("this.mobileProvider.providerId={0} is not valid.", this.getMobileProvider().getProviderId())); //NOI18N
585 } else if (this.getPhoneNumber() == null) {
587 this.showFacesMessage("form_edit_mobile:mobileNumber", "ERROR_ADMIN_EMPTY_MOBILE_NUMBER"); //NOI18N
591 // Is the mobile provider and number the same?
592 if ((Objects.equals(this.getMobileProvider(), number.getMobileProvider())) && (Objects.equals(this.getPhoneNumber(), number.getPhoneNumber()))) {
594 this.showFacesMessage("form_edit_mobile:mobileNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED"); //NOI18N
596 // No difference in both together, no need to edit
601 number.setMobileProvider(this.getMobileProvider());
602 number.setPhoneNumber(this.getPhoneNumber());
605 DialableMobileNumber updatedNumber = this.adminPhoneBean.updateMobileData(number);
608 this.mobileNumberUpdatedEvent.fire(new AdminMobileNumberUpdatedEvent(updatedNumber));
610 // All fine, redirect
611 return "admin_show_mobile"; //NOI18N
615 * Getter for chosen fax number
619 public DialableFaxNumber getFaxNumber () {
620 return this.faxNumber;
624 * Setter for chosen fax number
626 * @param faxNumber fax number
628 public void setFaxNumber (final DialableFaxNumber faxNumber) {
629 this.faxNumber = faxNumber;
633 * Getter for chosen land-line number
635 * @return land-line number
637 public DialableLandLineNumber getLandLineNumber () {
638 return this.landLineNumber;
642 * Setter for chosen land-line number
644 * @param landLineNumber land-line number
646 public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
647 this.landLineNumber = landLineNumber;
651 * Getter for chosen mobile number
653 * @return mobile number
655 public DialableMobileNumber getMobileNumber () {
656 return this.mobileNumber;
660 * Setter for chosen mobile number
662 * @param mobileNumber mobile number
664 public void setMobileNumber (final DialableMobileNumber mobileNumber) {
665 this.mobileNumber = mobileNumber;
669 * Getter for mobile provider
671 * @return Mobile provider
673 public MobileProvider getMobileProvider () {
674 return this.mobileProvider;
678 * Setter for mobile provider
680 * @param mobileProvider Mobile provider
682 public void setMobileProvider (final MobileProvider mobileProvider) {
683 this.mobileProvider = mobileProvider;
687 * Getter for phone area code
689 * @return Phone area code
691 public Integer getPhoneAreaCode () {
692 return this.phoneAreaCode;
696 * Setter for phone area code
698 * @param phoneAreaCode Phone area code
700 public void setPhoneAreaCode (final Integer phoneAreaCode) {
701 this.phoneAreaCode = phoneAreaCode;
705 * Getter for phone country (for dial prefix)
707 * @return Phone country
709 public Country getPhoneCountry () {
710 return this.phoneCountry;
714 * Setter for phone country (for dial prefix)
716 * @param phoneCountry Phone country
718 public void setPhoneCountry (final Country phoneCountry) {
719 this.phoneCountry = phoneCountry;
723 * Getter for dial number without prefix
725 * @return Dial number without prefix
727 public Long getPhoneNumber () {
728 return this.phoneNumber;
732 * Setter for dial number without prefix
734 * @param phoneNumber Dial number without prefix
736 public void setPhoneNumber (final Long phoneNumber) {
737 this.phoneNumber = phoneNumber;
741 * Post-construction method
744 public void init () {
747 // Get initial context
748 Context context = new InitialContext();
750 // Try to lookup the beans
751 this.adminPhoneBean = (AdminPhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/adminPhone!org.mxchange.jphone.phonenumbers.phone.AdminPhoneSessionBeanRemote"); //NOI18N
752 } catch (final NamingException e) {
754 throw new FaceletException(e);
759 * Returns given property key or throws an exception if not found.
761 * @param parameterKey Property key
763 * @return Property value
765 * @throws NullPointerException If given key is not found
766 * @throws NumberFormatException If no number is given in context parameter
768 protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
769 // Get context parameter
770 Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
776 * Returns given property key or throws an exception if not found.
778 * @param parameterKey Property key
780 * @return Property value
782 * @throws NullPointerException If given key is not found
784 protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
785 // Get context parameter
786 String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
788 if (null == contextValue) {
790 throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
797 * Checks whether debug mode is enabled for given controller
799 * @param controllerName Name of controller
801 * @return Whether debug mode is enabled
803 protected boolean isDebugModeEnabled (final String controllerName) {
804 // Parameters should be valid
805 if (null == controllerName) {
807 throw new NullPointerException("controllerName is null"); //NOI18N
808 } else if (controllerName.isEmpty()) {
810 throw new IllegalArgumentException("controllerName is empty"); //NOI18N
812 // Try to get context parameter
813 String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
814 // Is it set and true?
815 boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
821 * Loads resource bundle for given locale. This must be implemented per
822 * project so all projects can still customize their methods. Calling
823 * ResourceBundleloadBundle() in this class means that also the bundle files
824 * must be present here.
826 * @param locale Locale from e.g. FacesContext
828 * @return Initialized and loaded resource bundle
830 protected abstract ResourceBundle loadResourceBundle (final Locale locale);
833 * Shows a faces message for given causing exception. The message from the
834 * exception is being inserted into the message.
836 * @param clientId Client id to send message to
837 * @param cause Causing exception
839 protected void showFacesMessage (final String clientId, final Throwable cause) {
840 // Get context and add message
841 this.showFacesMessage(clientId, cause.getMessage());
845 * Shows a faces message with given message (i18n) key.
847 * @param clientId Client id to send message to
848 * @param i18nKey Message key
850 * @throws NullPointerException If clientId or i18nKey is null
851 * @throws IllegalArgumentException If clientId or i18nKey is empty
853 protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
854 // Both parameter must be valid
855 if (null == clientId) {
857 throw new NullPointerException("clientId is null"); //NOI18N
858 } else if (clientId.isEmpty()) {
860 throw new IllegalArgumentException("clientId is null"); //NOI18N
861 } else if (null == i18nKey) {
863 throw new NullPointerException("i18nKey is null"); //NOI18N
864 } else if (i18nKey.isEmpty()) {
866 throw new IllegalArgumentException("i18nKey is null"); //NOI18N
868 // Get current locale
869 Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
871 ResourceBundle bundle = this.loadResourceBundle(locale);
872 // Default is i18nKey
873 String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
877 message = bundle.getString(i18nKey);
878 } catch (final MissingResourceException ex) {
879 // Did not find it, ignored
881 // Get context and add message
882 FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));