]> git.mxchange.org Git - jjobs-war.git/commitdiff
Rewrite continued:
authorRoland Häder <roland@mxchange.org>
Mon, 26 Jun 2017 21:43:27 +0000 (23:43 +0200)
committerRoland Häder <roland@mxchange.org>
Mon, 26 Jun 2017 21:43:27 +0000 (23:43 +0200)
- Now all project-specific abstract web beans (controllers) inherit from BaseFacesBean to have these nice showFacesMessage() methods.
- Also all project-specific abstract EJBs inherit now only BaseDataBean (one was missing in an old project)
- So, if you have a WAR project, inherit from BaseFacesBean, if you have an EJB project, inherit from BaseDatabaseBean

Signed-off-by: Roland Häder <roland@mxchange.org>
13 files changed:
src/java/org/mxchange/jjobs/beans/BaseJobsController.java
src/java/org/mxchange/jjobs/beans/businesscontact/JobsBusinessContactWebSessionBean.java
src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionBean.java
src/java/org/mxchange/jjobs/beans/contact/phone/JobsAdminContactPhoneWebRequestBean.java
src/java/org/mxchange/jjobs/beans/country/JobsAdminCountryWebRequestBean.java
src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationBean.java
src/java/org/mxchange/jjobs/beans/features/JobsFeatureWebApplicationBean.java
src/java/org/mxchange/jjobs/beans/mobileprovider/JobsAdminMobileProviderWebRequestBean.java
src/java/org/mxchange/jjobs/beans/phone/JobsAdminPhoneWebRequestBean.java
src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationBean.java
src/java/org/mxchange/jjobs/beans/profile/JobsUserProfileWebRequestBean.java
src/java/org/mxchange/jjobs/beans/profilemode/JobsProfileModeWebApplicationBean.java
src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationBean.java

index 16ba02af5bda6f3c7834affae00e41c38c364bdf..7484200666710736e4a4748018f0adb8994c5659 100644 (file)
  */
 package org.mxchange.jjobs.beans;
 
-import java.io.Serializable;
-import org.mxchange.jcoreee.bean.BaseBean;
-import org.mxchange.jusercore.model.user.UserUtils;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import org.mxchange.jcoreee.bean.faces.BaseFacesBean;
 
 /**
  * A general controller
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public abstract class BaseJobsController extends BaseBean implements Serializable {
+public abstract class BaseJobsController extends BaseFacesBean {
 
        /**
         * Serial number
@@ -38,28 +38,13 @@ public abstract class BaseJobsController extends BaseBean implements Serializabl
        protected BaseJobsController () {
        }
 
-       /**
-        * Checks if given password is to weak to be used
-        * <p>
-        * @param password Clear-text password
-        * <p>
-        * @return Whether the entered password is to weak
-        */
-       protected boolean isWeakPassword (final String password) {
-               // Is parameter set?
-               if (null == password) {
-                       // Throw NPE
-                       throw new NullPointerException("password is null"); //NOI18N
-               }
-
-               // Get score value
-               double passwordScore = UserUtils.calculatePasswordScore(password);
-
-               // Is the score within range?
-               boolean isWeak = (passwordScore <= this.getIntegerContextParameter("min_user_password_score")); //NOI18N
+       @Override
+       protected ResourceBundle loadResourceBundle (final Locale locale) {
+               // Load resource bundle
+               ResourceBundle bundle = ResourceBundle.getBundle("org.mxchange.localization.bundle", locale);
 
                // Return it
-               return isWeak;
+               return bundle;
        }
 
 }
index 12a1c7cc0c50346022c679689c1f5c9ddd34a22a..2073bf3a8a10fc5cc6018f7a53e68de0c0fbb663 100644 (file)
  */
 package org.mxchange.jjobs.beans.businesscontact;
 
+import java.text.MessageFormat;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.SessionScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -38,7 +44,7 @@ import org.mxchange.jjobs.beans.login.user.JobsUserLoginWebSessionController;
  */
 @Named ("businessContactController")
 @SessionScoped
-public class JobsBusinessContactWebSessionBean extends BaseJobsController implements JobsBusinessContactWebSessionController {
+public abstract class JobsBusinessContactWebSessionBean extends BaseJobsController implements JobsBusinessContactWebSessionController {
 
        /**
         * Serial number
@@ -95,4 +101,131 @@ public class JobsBusinessContactWebSessionBean extends BaseJobsController implem
                }
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 25102c5d14653b804685037419e36b4fb6db7ec3..db1ebb2325759c1afcf32d48e729c8ed13953aca 100644 (file)
@@ -22,10 +22,15 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.Objects;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.SessionScoped;
 import javax.enterprise.event.Observes;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -66,7 +71,7 @@ import org.mxchange.jusercore.model.user.User;
  */
 @Named ("contactController")
 @SessionScoped
-public class JobsContactWebSessionBean extends BaseJobsController implements JobsContactWebSessionController {
+public abstract class JobsContactWebSessionBean extends BaseJobsController implements JobsContactWebSessionController {
 
        /**
         * Serial number
@@ -1168,4 +1173,131 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
                this.contactList.add(contact);
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 2a35682928bdb87cb25607ab9027aaf08a392447..89e86a07b2f7e076d83c827383c1f7f005562843 100644 (file)
 package org.mxchange.jjobs.beans.contact.phone;
 
 import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Any;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -66,7 +71,7 @@ import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
  */
 @Named ("adminContactPhoneController")
 @RequestScoped
-public class JobsAdminContactPhoneWebRequestBean extends BaseJobsController implements JobsAdminContactPhoneWebRequestController {
+public abstract class JobsAdminContactPhoneWebRequestBean extends BaseJobsController implements JobsAdminContactPhoneWebRequestController {
 
        /**
         * Call-stack instance (5 may show BeanELResolver.getValue as caller)
@@ -584,4 +589,131 @@ public class JobsAdminContactPhoneWebRequestBean extends BaseJobsController impl
                // Clear all data
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index a66fe95b4894d867dfb6fcbfa19caeb8386d4070..b8db871a22731c48f0b0f4ea93cd36a71bba7d53 100644 (file)
  */
 package org.mxchange.jjobs.beans.country;
 
+import java.text.MessageFormat;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.Objects;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -44,7 +50,7 @@ import org.mxchange.jjobs.beans.BaseJobsController;
  */
 @Named ("adminCountryController")
 @RequestScoped
-public class JobsAdminCountryWebRequestBean extends BaseJobsController implements JobsAdminCountryWebRequestController {
+public abstract class JobsAdminCountryWebRequestBean extends BaseJobsController implements JobsAdminCountryWebRequestController {
 
        /**
         * Serial number
@@ -285,4 +291,131 @@ public class JobsAdminCountryWebRequestBean extends BaseJobsController implement
                return isAdded;
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index ceffa6bbd16df7344b9646b7b8b046df3f07f3fc..8a376d3e6df3d4a8a25ae06bd1d6dc6fec3d59d5 100644 (file)
@@ -18,9 +18,14 @@ package org.mxchange.jjobs.beans.country;
 
 import java.text.MessageFormat;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Observes;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Named;
 import javax.naming.Context;
@@ -38,7 +43,7 @@ import org.mxchange.jjobs.beans.BaseJobsController;
  */
 @Named ("countryController")
 @ApplicationScoped
-public class JobsCountryWebApplicationBean extends BaseJobsController implements JobsCountryWebApplicationController {
+public abstract class JobsCountryWebApplicationBean extends BaseJobsController implements JobsCountryWebApplicationController {
 
        /**
         * Serial number
@@ -117,4 +122,131 @@ public class JobsCountryWebApplicationBean extends BaseJobsController implements
                this.countryList = this.countryBean.allCountries();
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 5a1edceef1a87781af24d5891311a93ce8034e00..7baaa96e46b6be78740da99c6fed394f69b559d4 100644 (file)
  */
 package org.mxchange.jjobs.beans.features;
 
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.inject.Named;
 import org.mxchange.jjobs.beans.BaseJobsController;
 
@@ -28,7 +34,7 @@ import org.mxchange.jjobs.beans.BaseJobsController;
  */
 @Named ("featureController")
 @ApplicationScoped
-public class JobsFeatureWebApplicationBean extends BaseJobsController implements JobsFeaturesWebApplicationController {
+public abstract class JobsFeatureWebApplicationBean extends BaseJobsController implements JobsFeaturesWebApplicationController {
 
        /**
         * Serial number
@@ -78,4 +84,131 @@ public class JobsFeatureWebApplicationBean extends BaseJobsController implements
                return isEnabled;
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 4672ce8c8c5f499d700e2d728d6b0b5692d4e40a..77c9c8b675b5c3b1458ee0bf614479968af66656 100644 (file)
  */
 package org.mxchange.jjobs.beans.mobileprovider;
 
+import java.text.MessageFormat;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.Objects;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -45,7 +51,7 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
  */
 @Named ("adminMobileProviderController")
 @RequestScoped
-public class JobsAdminMobileProviderWebRequestBean extends BaseJobsController implements JobsAdminMobileProviderWebRequestController {
+public abstract class JobsAdminMobileProviderWebRequestBean extends BaseJobsController implements JobsAdminMobileProviderWebRequestController {
 
        /**
         * Serial number
@@ -221,4 +227,131 @@ public class JobsAdminMobileProviderWebRequestBean extends BaseJobsController im
                return isFound;
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 729296762115ee914c57823643a91b241f41e70b..bf7295f1da3a2e45f10aa01887aae0a54ed95289 100644 (file)
@@ -18,11 +18,16 @@ package org.mxchange.jjobs.beans.phone;
 
 import java.text.MessageFormat;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.Objects;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -63,7 +68,7 @@ import org.mxchange.jphone.phonenumbers.phone.AdminPhoneSessionBeanRemote;
  */
 @Named ("adminPhoneController")
 @RequestScoped
-public class JobsAdminPhoneWebRequestBean extends BaseJobsController implements JobsAdminPhoneWebRequestController {
+public abstract class JobsAdminPhoneWebRequestBean extends BaseJobsController implements JobsAdminPhoneWebRequestController {
 
        /**
         * Call-stack position
@@ -644,4 +649,131 @@ public class JobsAdminPhoneWebRequestBean extends BaseJobsController implements
                }
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 357d99322c7fd69d57e5c0109bd17980489668ff..fe68e3fafff6753c653045c8f94101a8b8d5f905 100644 (file)
@@ -19,10 +19,15 @@ package org.mxchange.jjobs.beans.phone;
 import java.text.MessageFormat;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.Objects;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Observes;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Named;
 import javax.naming.Context;
@@ -54,7 +59,7 @@ import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
  */
 @Named ("phoneController")
 @ApplicationScoped
-public class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
+public abstract class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
 
        /**
         * Serial number
@@ -610,4 +615,131 @@ public class JobsPhoneWebApplicationBean extends BaseJobsController implements J
                }
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index 25fe991e8bd76c10250f4e10565d300747c4f1db..c06aeaec43734f3e32a1f2183b28e40c1e3554f3 100644 (file)
 package org.mxchange.jjobs.beans.profile;
 
 import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -36,7 +41,7 @@ import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
  */
 @Named (value = "profileController")
 @RequestScoped
-public class JobsUserProfileWebRequestBean extends BaseJobsController implements JobsUserProfileWebRequestController {
+public abstract class JobsUserProfileWebRequestBean extends BaseJobsController implements JobsUserProfileWebRequestController {
 
        /**
         * Serial number
@@ -130,4 +135,131 @@ public class JobsUserProfileWebRequestBean extends BaseJobsController implements
                                (this.userLoginController.isUserLoggedIn()) && (profileMode.equals(ProfileMode.MEMBERS)));
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index e6b54844b0cfa66b76c31a15518339195979a59e..befcc5a1b71895bdb352a82140ebcc131ced004e 100644 (file)
  */
 package org.mxchange.jjobs.beans.profilemode;
 
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.inject.Named;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
@@ -29,7 +35,7 @@ import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
  */
 @Named ("profileModeController")
 @ApplicationScoped
-public class JobsProfileModeWebApplicationBean extends BaseJobsController implements JobsProfileModeWebApplicationController {
+public abstract class JobsProfileModeWebApplicationBean extends BaseJobsController implements JobsProfileModeWebApplicationController {
 
        /**
         * Serial number
@@ -57,4 +63,131 @@ public class JobsProfileModeWebApplicationBean extends BaseJobsController implem
        public void init () {
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }
index cbdfde30ac9257442e5f67e3ad2a593ab44785c4..5317d968da61a401205a2dece2a9aac11c5654c2 100644 (file)
@@ -22,10 +22,15 @@ import java.util.GregorianCalendar;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Observes;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -60,7 +65,7 @@ import org.mxchange.jjobs.beans.helper.JobsWebRequestHelperController;
  */
 @Named ("userActivityController")
 @ApplicationScoped
-public class JobsUserActivityWebApplicationBean extends BaseJobsController implements JobsUserActivityWebApplicationController {
+public abstract class JobsUserActivityWebApplicationBean extends BaseJobsController implements JobsUserActivityWebApplicationController {
 
        /**
         * Serial number
@@ -565,4 +570,131 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
                this.usersActivity.get(userActivity.getActivityUser()).add(userActivity);
        }
 
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        * @throws NumberFormatException If no number is given in context parameter
+        */
+       protected int getIntegerContextParameter (final String parameterKey) throws NullPointerException, NumberFormatException {
+               // Get context parameter
+               Integer contextValue = Integer.parseInt(this.getStringContextParameter(parameterKey));
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Returns given property key or throws an exception if not found.
+        * <p>
+        * @param parameterKey Property key
+        * <p>
+        * @return Property value
+        * <p>
+        * @throws NullPointerException If given key is not found
+        */
+       protected String getStringContextParameter (final String parameterKey) throws NullPointerException {
+               // Get context parameter
+               String contextValue = FacesContext.getCurrentInstance().getExternalContext().getInitParameter(parameterKey);
+               // Is it null?
+               if (null == contextValue) {
+                       // Throw NPE
+                       throw new NullPointerException(MessageFormat.format("parameterKey={0} is not set.", parameterKey)); //NOI18N
+               }
+               // Return it
+               return contextValue;
+       }
+
+       /**
+        * Checks whether debug mode is enabled for given controller
+        * <p>
+        * @param controllerName Name of controller
+        * <p>
+        * @return Whether debug mode is enabled
+        */
+       protected boolean isDebugModeEnabled (final String controllerName) {
+               // Parameters should be valid
+               if (null == controllerName) {
+                       // Throw NPE
+                       throw new NullPointerException("controllerName is null"); //NOI18N
+               } else if (controllerName.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("controllerName is empty"); //NOI18N
+               }
+               // Try to get context parameter
+               String contextParameter = this.getStringContextParameter(String.format("is_debug_%s_enabled", controllerName)); //NOI18N
+               // Is it set and true?
+               boolean isEnabled = Boolean.parseBoolean(contextParameter) == Boolean.TRUE;
+               // Return it
+               return isEnabled;
+       }
+
+       /**
+        * Loads resource bundle for given locale. This must be implemented per
+        * project so all projects can still customize their methods. Calling
+        * ResourceBundleloadBundle() in this class means that also the bundle files
+        * must be present here.
+        * <p>
+        * @param locale Locale from e.g. FacesContext
+        * <p>
+        * @return Initialized and loaded resource bundle
+        */
+       protected abstract ResourceBundle loadResourceBundle (final Locale locale);
+
+       /**
+        * Shows a faces message for given causing exception. The message from the
+        * exception is being inserted into the message.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param cause    Causing exception
+        */
+       protected void showFacesMessage (final String clientId, final Throwable cause) {
+               // Get context and add message
+               this.showFacesMessage(clientId, cause.getMessage());
+       }
+
+       /**
+        * Shows a faces message with given message (i18n) key.
+        * <p>
+        * @param clientId Client id to send message to
+        * @param i18nKey  Message key
+        * <p>
+        * @throws NullPointerException If clientId or i18nKey is null
+        * @throws IllegalArgumentException If clientId or i18nKey is empty
+        */
+       protected void showFacesMessage (final String clientId, final String i18nKey) throws NullPointerException, IllegalArgumentException {
+               // Both parameter must be valid
+               if (null == clientId) {
+                       // Throw NPE
+                       throw new NullPointerException("clientId is null"); //NOI18N
+               } else if (clientId.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("clientId is null"); //NOI18N
+               } else if (null == i18nKey) {
+                       // Throw NPE
+                       throw new NullPointerException("i18nKey is null"); //NOI18N
+               } else if (i18nKey.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("i18nKey is null"); //NOI18N
+               }
+               // Get current locale
+               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+               // Get bundle bundle
+               ResourceBundle bundle = this.loadResourceBundle(locale);
+               // Default is i18nKey
+               String message = MessageFormat.format("!{0}!", i18nKey); //NOI18N
+               // Try it
+               try {
+                       // Get message
+                       message = bundle.getString(i18nKey);
+               } catch (final MissingResourceException ex) {
+                       // Did not find it, ignored
+               }
+               // Get context and add message
+               FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message));
+       }
+
 }