+ /**
+ * 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));
+ }
+