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.LinkedList;
21 import java.util.List;
22 import java.util.Locale;
23 import java.util.MissingResourceException;
24 import java.util.Objects;
25 import java.util.ResourceBundle;
26 import javax.annotation.PostConstruct;
27 import javax.enterprise.context.ApplicationScoped;
28 import javax.enterprise.event.Observes;
29 import javax.faces.application.FacesMessage;
30 import javax.faces.context.FacesContext;
31 import javax.faces.view.facelets.FaceletException;
32 import javax.inject.Named;
33 import javax.naming.Context;
34 import javax.naming.InitialContext;
35 import javax.naming.NamingException;
36 import org.mxchange.jcontacts.contact.Contact;
37 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
38 import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
39 import org.mxchange.jcontacts.events.fax.linked.ObservableAdminLinkedFaxNumberEvent;
40 import org.mxchange.jcontacts.events.landline.linked.ObservableAdminLinkedLandLineNumberEvent;
41 import org.mxchange.jcontacts.events.mobile.linked.ObservableAdminLinkedMobileNumberEvent;
42 import org.mxchange.jjobs.beans.BaseJobsController;
43 import org.mxchange.jphone.events.fax.deleted.AdminDeletedFaxNumberEvent;
44 import org.mxchange.jphone.events.fax.updated.AdminUpdatedFaxNumberEvent;
45 import org.mxchange.jphone.events.landline.deleted.AdminDeletedLandLineNumberEvent;
46 import org.mxchange.jphone.events.landline.updated.AdminUpdatedLandLineNumberEvent;
47 import org.mxchange.jphone.events.mobile.deleted.AdminDeletedMobileNumberEvent;
48 import org.mxchange.jphone.events.mobile.updated.AdminUpdatedMobileNumberEvent;
49 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
50 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
51 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
52 import org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote;
53 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
56 * Regular controller (bean) for phone numbers
58 * @author Roland Häder<roland@mxchange.org>
60 @Named ("phoneController")
62 public abstract class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
67 private static final long serialVersionUID = 491_058_674_675_690_105L;
72 private final List<DialableFaxNumber> faxNumbers;
75 * All land-line numbers
77 private final List<DialableLandLineNumber> landLineNumbers;
82 private final List<DialableMobileNumber> mobileNumbers;
85 * General EJB for phone numbers
87 private PhoneSessionBeanRemote phoneBean;
92 public JobsPhoneWebApplicationBean () {
93 // Call super constructor
97 this.mobileNumbers = new LinkedList<>();
98 this.faxNumbers = new LinkedList<>();
99 this.landLineNumbers = new LinkedList<>();
103 public void afterAdminAddedContactEvent (@Observes final ObservableAdminAddedContactEvent event) {
104 // The event must be valid
107 throw new NullPointerException("event is null"); //NOI18N
108 } else if (event.getAddedContact() == null) {
110 throw new NullPointerException("event.addedContact is null"); //NOI18N
111 } else if (event.getAddedContact().getContactId() == null) {
113 throw new NullPointerException("event.addedContact.contactId is null"); //NOI18N
114 } else if (event.getAddedContact().getContactId() < 1) {
116 throw new IllegalArgumentException(MessageFormat.format("event.addedContact.contactId={0} is not valid", event.getAddedContact().getContactId())); //NOI18N
119 // Update contact's mobile, land-line and fax number
120 this.updateContactPhoneNumbers(event.getAddedContact());
127 public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
128 // event should not be null
131 throw new NullPointerException("event is null"); //NOI18N
132 } else if (event.getAddedUser() == null) {
134 throw new NullPointerException("event.addedUser is null"); //NOI18N
135 } else if (event.getAddedUser().getUserId() == null) {
137 throw new NullPointerException("event.addedUser.userId is null"); //NOI18N
138 } else if (event.getAddedUser().getUserId() < 1) {
140 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N
143 // Update contact's mobile, land-line and fax number
144 this.updateContactPhoneNumbers(event.getAddedUser().getUserContact());
151 public void afterAdminDeletedFaxNumberEvent (@Observes final AdminDeletedFaxNumberEvent event) {
152 // event should not be null
155 throw new NullPointerException("event is null"); //NOI18N
156 } else if (event.getDeletedFaxNumber() == null) {
158 throw new NullPointerException("event.deletedFaxNumber is null"); //NOI18N
159 } else if (event.getDeletedFaxNumber().getPhoneId() == null) {
161 throw new NullPointerException("event.deletedFaxNumber.phoneId is null"); //NOI18N
162 } else if (event.getDeletedFaxNumber().getPhoneId() < 1) {
164 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getDeletedFaxNumber(), event.getDeletedFaxNumber().getPhoneId())); //NOI18N
167 // Update contact's mobile, land-line and fax number
168 this.allFaxNumbers().remove(event.getDeletedFaxNumber());
175 public void afterAdminDeletedLandLineNumberEvent (@Observes final AdminDeletedLandLineNumberEvent event) {
176 // event should not be null
179 throw new NullPointerException("event is null"); //NOI18N
180 } else if (event.getDeletedLandLineNumber() == null) {
182 throw new NullPointerException("event.deletedLandLineNumber is null"); //NOI18N
183 } else if (event.getDeletedLandLineNumber().getPhoneId() == null) {
185 throw new NullPointerException("event.deletedLandLineNumber.phoneId is null"); //NOI18N
186 } else if (event.getDeletedLandLineNumber().getPhoneId() < 1) {
188 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getDeletedLandLineNumber(), event.getDeletedLandLineNumber().getPhoneId())); //NOI18N
191 // Update contact's mobile, land-line and fax number
192 this.allLandLineNumbers().remove(event.getDeletedLandLineNumber());
199 public void afterAdminDeletedMobileNumberEvent (@Observes final AdminDeletedMobileNumberEvent event) {
200 // event should not be null
203 throw new NullPointerException("event is null"); //NOI18N
204 } else if (event.getDeletedMobileNumber() == null) {
206 throw new NullPointerException("event.deletedMobileNumber is null"); //NOI18N
207 } else if (event.getDeletedMobileNumber().getPhoneId() == null) {
209 throw new NullPointerException("event.deletedMobileNumber.phoneId is null"); //NOI18N
210 } else if (event.getDeletedMobileNumber().getPhoneId() < 1) {
212 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getDeletedMobileNumber(), event.getDeletedMobileNumber().getPhoneId())); //NOI18N
215 // Update contact's mobile, land-line and fax number
216 this.allMobileNumbers().remove(event.getDeletedMobileNumber());
223 public void afterAdminLinkedFaxNumberEvent (@Observes final ObservableAdminLinkedFaxNumberEvent event) {
224 // Is the event fine?
227 throw new NullPointerException("event is null"); //NOI18N
228 } else if (event.getContact() == null) {
230 throw new NullPointerException("event.contact is null");
231 } else if (event.getContact().getContactId() == null) {
233 throw new NullPointerException("event.contact.contactId is null");
234 } else if (event.getContact().getContactId() < 1) {
236 throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
237 } else if (event.getContact().getContactFaxNumber() == null) {
239 throw new NullPointerException("event.contact.contactFaxNumber is null");
240 } else if (event.getContact().getContactFaxNumber().getPhoneId() == null) {
242 throw new NullPointerException("event.contact.contactFaxNumber.phoneId is null");
243 } else if (event.getContact().getContactFaxNumber().getPhoneId() < 1) {
245 throw new NullPointerException("event.contact.contactFaxNumber.phoneId=" + event.getContact().getContactFaxNumber().getPhoneId() + " is invalid");
246 } else if (event.getLinkedFaxNumber() == null) {
248 throw new NullPointerException("event.linkedFaxNumer is null");
251 // Is the id number in linked number not set?
252 if (event.getLinkedFaxNumber().getPhoneId() == null) {
253 // Then it is a new number, so add it from contact as there the id number has been set
254 this.uniqueAddFaxNumber(event.getContact().getContactFaxNumber());
259 public void afterAdminLinkedLandLineNumberEvent (@Observes final ObservableAdminLinkedLandLineNumberEvent event) {
260 // Is the event fine?
263 throw new NullPointerException("event is null"); //NOI18N
264 } else if (event.getContact() == null) {
266 throw new NullPointerException("event.contact is null");
267 } else if (event.getContact().getContactId() == null) {
269 throw new NullPointerException("event.contact.contactId is null");
270 } else if (event.getContact().getContactId() < 1) {
272 throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
273 } else if (event.getContact().getContactLandLineNumber() == null) {
275 throw new NullPointerException("event.contact.contactLandLineNumber is null");
276 } else if (event.getContact().getContactLandLineNumber().getPhoneId() == null) {
278 throw new NullPointerException("event.contact.contactLandLineNumber.phoneId is null");
279 } else if (event.getContact().getContactLandLineNumber().getPhoneId() < 1) {
281 throw new NullPointerException("event.contact.contactLandLineNumber.phoneId=" + event.getContact().getContactLandLineNumber().getPhoneId() + " is invalid");
282 } else if (event.getLinkedLandLineNumber() == null) {
284 throw new NullPointerException("event.linkedLandLineNumer is null");
287 // Is the id number in linked number not set?
288 if (event.getLinkedLandLineNumber().getPhoneId() == null) {
289 // Then it is a new number, so add it from contact as there the id number has been set
290 this.uniqueAddLandLineNumber(event.getContact().getContactLandLineNumber());
295 public void afterAdminLinkedMobileNumberEvent (@Observes final ObservableAdminLinkedMobileNumberEvent event) {
296 // Is the event fine?
299 throw new NullPointerException("event is null"); //NOI18N
300 } else if (event.getContact() == null) {
302 throw new NullPointerException("event.contact is null");
303 } else if (event.getContact().getContactId() == null) {
305 throw new NullPointerException("event.contact.contactId is null");
306 } else if (event.getContact().getContactId() < 1) {
308 throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
309 } else if (event.getContact().getContactMobileNumber() == null) {
311 throw new NullPointerException("event.contact.contactMobileNumber is null");
312 } else if (event.getContact().getContactMobileNumber().getPhoneId() == null) {
314 throw new NullPointerException("event.contact.contactMobileNumber.phoneId is null");
315 } else if (event.getContact().getContactMobileNumber().getPhoneId() < 1) {
317 throw new NullPointerException("event.contact.contactMobileNumber.phoneId=" + event.getContact().getContactMobileNumber().getPhoneId() + " is invalid");
318 } else if (event.getLinkedMobileNumber() == null) {
320 throw new NullPointerException("event.linkedMobileNumer is null");
323 // Is the id number in linked number not set?
324 if (event.getLinkedMobileNumber().getPhoneId() == null) {
325 // Then it is a new number, so add it from contact as there the id number has been set
326 this.uniqueAddMobileNumber(event.getContact().getContactMobileNumber());
331 public void afterAdminUpdatedContactDataEvent (@Observes final ObservableAdminUpdatedContactEvent event) {
332 // event should not be null
335 throw new NullPointerException("event is null"); //NOI18N
336 } else if (event.getUpdatedContact() == null) {
338 throw new NullPointerException("event.updatedContact is null"); //NOI18N
339 } else if (event.getUpdatedContact().getContactId() == null) {
341 throw new NullPointerException("event.updatedContact.contactId is null"); //NOI18N
342 } else if (event.getUpdatedContact().getContactId() < 1) {
344 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N
347 // Update contact's mobile, land-line and fax number
348 this.updateContactPhoneNumbers(event.getUpdatedContact());
355 public void afterAdminUpdatedFaxNumberEvent (@Observes final AdminUpdatedFaxNumberEvent event) {
356 // event should not be null
359 throw new NullPointerException("event is null"); //NOI18N
360 } else if (event.getUpdatedFaxNumber() == null) {
362 throw new NullPointerException("event.updatedFaxNumber is null"); //NOI18N
363 } else if (event.getUpdatedFaxNumber().getPhoneId() == null) {
365 throw new NullPointerException("event.updatedFaxNumber.phoneId is null"); //NOI18N
366 } else if (event.getUpdatedFaxNumber().getPhoneId() < 1) {
368 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getUpdatedFaxNumber(), event.getUpdatedFaxNumber().getPhoneId())); //NOI18N
372 this.uniqueAddFaxNumber(event.getUpdatedFaxNumber());
379 public void afterAdminUpdatedLandLineNumberEvent (@Observes final AdminUpdatedLandLineNumberEvent event) {
380 // event should not be null
383 throw new NullPointerException("event is null"); //NOI18N
384 } else if (event.getUpdatedLandLineNumber() == null) {
386 throw new NullPointerException("event.updatedLandLineNumber is null"); //NOI18N
387 } else if (event.getUpdatedLandLineNumber().getPhoneId() == null) {
389 throw new NullPointerException("event.updatedLandLineNumber.phoneId is null"); //NOI18N
390 } else if (event.getUpdatedLandLineNumber().getPhoneId() < 1) {
392 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getUpdatedLandLineNumber(), event.getUpdatedLandLineNumber().getPhoneId())); //NOI18N
396 this.uniqueAddLandLineNumber(event.getUpdatedLandLineNumber());
403 public void afterAdminUpdatedMobileNumberEvent (@Observes final AdminUpdatedMobileNumberEvent event) {
404 // event should not be null
407 throw new NullPointerException("event is null"); //NOI18N
408 } else if (event.getUpdatedMobileNumber() == null) {
410 throw new NullPointerException("event.updatedMobileNumber is null"); //NOI18N
411 } else if (event.getUpdatedMobileNumber().getPhoneId() == null) {
413 throw new NullPointerException("event.updatedMobileNumber.phoneId is null"); //NOI18N
414 } else if (event.getUpdatedMobileNumber().getPhoneId() < 1) {
416 throw new IllegalArgumentException(MessageFormat.format("phoneId of contact={0} is not valid: {1}", event.getUpdatedMobileNumber(), event.getUpdatedMobileNumber().getPhoneId())); //NOI18N
420 this.uniqueAddMobileNumber(event.getUpdatedMobileNumber());
427 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
428 public List<DialableFaxNumber> allFaxNumbers () {
429 return this.faxNumbers;
433 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
434 public List<DialableLandLineNumber> allLandLineNumbers () {
435 return this.landLineNumbers;
439 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
440 public List<DialableMobileNumber> allMobileNumbers () {
441 return this.mobileNumbers;
445 * Post-construction method
448 public void init () {
451 // Get initial context
452 Context context = new InitialContext();
454 // Try to lookup the beans
455 this.phoneBean = (PhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote"); //NOI18N
456 } catch (final NamingException e) {
458 throw new FaceletException(e);
462 this.allMobileNumbers().addAll(this.phoneBean.allMobileNumbers());
463 this.allFaxNumbers().addAll(this.phoneBean.allFaxNumbers());
464 this.allLandLineNumbers().addAll(this.phoneBean.allLandLineNumbers());
470 private void clear () {
475 * Uniquely add given fax number to this bean's list. First remove the old
476 * instance (by id number), then re-add it again.
478 * @param faxNumber number to add
480 private void uniqueAddFaxNumber (final DialableFaxNumber faxNumber) {
481 // Make sure the parameter is valid
482 if (null == faxNumber) {
484 throw new NullPointerException("faxNumber is null");
485 } else if (faxNumber.getPhoneId() == null) {
487 throw new NullPointerException("faxNumber.phoneId is null");
488 } else if (faxNumber.getPhoneId() < 1) {
490 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneId={0} is not valid.", faxNumber.getPhoneId()));
494 if (!this.allFaxNumbers().remove(faxNumber)) {
495 // Did not work, try by id number
496 for (final DialableFaxNumber fax : this.allFaxNumbers()) {
497 // Is id number the same?
498 if (Objects.equals(fax.getPhoneId(), faxNumber.getPhoneId())) {
500 this.allFaxNumbers().remove(fax);
507 this.allFaxNumbers().add(faxNumber);
511 * Uniquely add given land-line number to this bean's list. First remove the
512 * old instance (by id number), then re-add it again.
514 * @param landLineNumber Land-line number to add
516 private void uniqueAddLandLineNumber (final DialableLandLineNumber landLineNumber) {
517 // Make sure the parameter is valid
518 if (null == landLineNumber) {
520 throw new NullPointerException("landLineNumber is null");
521 } else if (landLineNumber.getPhoneId() == null) {
523 throw new NullPointerException("landLineNumber.phoneId is null");
524 } else if (landLineNumber.getPhoneId() < 1) {
526 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneId={0} is not valid.", landLineNumber.getPhoneId()));
530 if (!this.allLandLineNumbers().remove(landLineNumber)) {
531 // Did not work, try by id number
532 for (final DialableLandLineNumber landLine : this.allLandLineNumbers()) {
533 // Is id number the same?
534 if (Objects.equals(landLine.getPhoneId(), landLineNumber.getPhoneId())) {
536 this.allLandLineNumbers().remove(landLine);
543 this.allLandLineNumbers().add(landLineNumber);
547 * Uniquely add given mobile number to this bean's list. First remove the
548 * old instance (by id number), then re-add it again.
550 * @param mobileNumber Mobile number to add
552 private void uniqueAddMobileNumber (final DialableMobileNumber mobileNumber) {
553 // Make sure the parameter is valid
554 if (null == mobileNumber) {
556 throw new NullPointerException("mobileNumber is null");
557 } else if (mobileNumber.getPhoneId() == null) {
559 throw new NullPointerException("mobileNumber.phoneId is null");
560 } else if (mobileNumber.getPhoneId() < 1) {
562 throw new IllegalArgumentException(MessageFormat.format("mobileNumber.phoneId={0} is not valid.", mobileNumber.getPhoneId()));
565 // First remove it by object
566 if (!this.allMobileNumbers().remove(mobileNumber)) {
567 // Did not work, try by id number
568 for (final DialableMobileNumber cell : this.allMobileNumbers()) {
569 // Is id number the same?
570 if (Objects.equals(cell.getPhoneId(), mobileNumber.getPhoneId())) {
572 this.allMobileNumbers().remove(cell);
579 this.allMobileNumbers().add(mobileNumber);
583 * Updates given contact's mobile, land-line and fax number
585 * @param contact Contact instance
587 private void updateContactPhoneNumbers (final Contact contact) {
588 // Parameter must be valid
589 if (null == contact) {
591 throw new NullPointerException("contact is null");
592 } else if (contact.getContactId() == null) {
594 throw new NullPointerException("contact.contactId is null");
595 } else if (contact.getContactId() < 1) {
596 // Id number is not valid
600 if (contact.getContactMobileNumber() instanceof DialableMobileNumber) {
602 this.uniqueAddMobileNumber(contact.getContactMobileNumber());
606 if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
608 this.uniqueAddLandLineNumber(contact.getContactLandLineNumber());
612 if (contact.getContactFaxNumber() instanceof DialableFaxNumber) {
614 this.uniqueAddFaxNumber(contact.getContactFaxNumber());
619 * Returns given property key or throws an exception if not found.
621 * @param parameterKey Property key
623 * @return Property value
625 * @throws NullPointerException If given key is not found
626 * @throws NumberFormatException If no number is given in context parameter
628 protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
629 // Get context parameter
630 Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
636 * Returns given property key or throws an exception if not found.
638 * @param parameterKey Property key
640 * @return Property value
642 * @throws NullPointerException If given key is not found
644 protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
645 // Get context parameter
646 String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
648 if (null == contextValue) {
650 throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
657 * Checks whether debug mode is enabled for given controller
659 * @param controllerName Name of controller
661 * @return Whether debug mode is enabled
663 protected boolean isDebugModeEnabled (final String controllerName) {
664 // Parameters should be valid
665 if (null == controllerName) {
667 throw new NullPointerException("controllerName is null"); //NOI18N
668 } else if (controllerName.isEmpty()) {
670 throw new IllegalArgumentException("controllerName is empty"); //NOI18N
672 // Try to get context parameter
673 String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
674 // Is it set and true?
675 boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
681 * Loads resource bundle for given locale. This must be implemented per
682 * project so all projects can still customize their methods. Calling
683 * ResourceBundleloadBundle() in this class means that also the bundle files
684 * must be present here.
686 * @param locale Locale from e.g. FacesContext
688 * @return Initialized and loaded resource bundle
690 protected abstract ResourceBundle loadResourceBundle (final Locale locale);
693 * Shows a faces message for given causing exception. The message from the
694 * exception is being inserted into the message.
696 * @param clientId Client id to send message to
697 * @param cause Causing exception
699 protected void showFacesMessage (final String clientId, final Throwable cause) {
700 // Get context and add message
701 this.showFacesMessage(clientId, cause.getMessage());
705 * Shows a faces message with given message (i18n) key.
707 * @param clientId Client id to send message to
708 * @param i18nKey Message key
710 * @throws NullPointerException If clientId or i18nKey is null
711 * @throws IllegalArgumentException If clientId or i18nKey is empty
713 protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
714 // Both parameter must be valid
715 if (null == clientId) {
717 throw new NullPointerException("clientId is null"); //NOI18N
718 } else if (clientId.isEmpty()) {
720 throw new IllegalArgumentException("clientId is null"); //NOI18N
721 } else if (null == i18nKey) {
723 throw new NullPointerException("i18nKey is null"); //NOI18N
724 } else if (i18nKey.isEmpty()) {
726 throw new IllegalArgumentException("i18nKey is null"); //NOI18N
728 // Get current locale
729 Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
731 ResourceBundle bundle = this.loadResourceBundle(locale);
732 // Default is i18nKey
733 String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
737 message = bundle.getString(i18nKey);
738 } catch (final MissingResourceException ex) {
739 // Did not find it, ignored
741 // Get context and add message
742 FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));