/*
- * Copyright (C) 2016 Roland Häder
+ * Copyright (C) 2016, 2017 Roland Häder
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
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;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent;
-import org.mxchange.jcontacts.events.contact.update.AdminUpdatedContactEvent;
-import org.mxchange.jcontacts.events.fax.linked.AdminLinkedFaxNumberEvent;
-import org.mxchange.jcontacts.events.landline.linked.AdminLinkedLandLineNumberEvent;
-import org.mxchange.jcontacts.events.mobile.linked.AdminLinkedMobileNumberEvent;
+import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
+import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
+import org.mxchange.jcontacts.events.fax.linked.ObservableAdminLinkedFaxNumberEvent;
+import org.mxchange.jcontacts.events.landline.linked.ObservableAdminLinkedLandLineNumberEvent;
+import org.mxchange.jcontacts.events.mobile.linked.ObservableAdminLinkedMobileNumberEvent;
import org.mxchange.jjobs.beans.BaseJobsController;
import org.mxchange.jphone.events.fax.deleted.AdminDeletedFaxNumberEvent;
import org.mxchange.jphone.events.fax.updated.AdminUpdatedFaxNumberEvent;
import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
import org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote;
-import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
+import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
/**
* Regular controller (bean) for phone numbers
*/
@Named ("phoneController")
@ApplicationScoped
-public class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
+public abstract class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
/**
* Serial number
* Default constructor
*/
public JobsPhoneWebApplicationBean () {
- // Try it
- try {
- // Get initial context
- Context context = new InitialContext();
-
- // Try to lookup the beans
- this.phoneBean = (PhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote"); //NOI18N
- } catch (final NamingException e) {
- // Throw it again
- throw new FaceletException(e);
- }
+ // Call super constructor
+ super();
// Init all lists
this.mobileNumbers = new LinkedList<>();
this.landLineNumbers = new LinkedList<>();
}
- @Override
- public void afterAdminAddedContactEvent (@Observes final AdminAddedContactEvent event) {
+ /**
+ * Observes events being fired when an administrator has added a new
+ * contact.
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminAddedContactEvent (@Observes final ObservableAdminAddedContactEvent event) {
// The event must be valid
if (null == event) {
// Throw NPE
this.clear();
}
- @Override
- public void afterAdminAddedUserEvent (@Observes final AdminAddedUserEvent event) {
+ /**
+ * Event observer for newly added users by administrator
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has deleted a fax
+ * number
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminDeletedFaxNumberEvent (@Observes final AdminDeletedFaxNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getDeletedFaxNumber()== null) {
+ } else if (event.getDeletedFaxNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.deletedFaxNumber is null"); //NOI18N
} else if (event.getDeletedFaxNumber().getPhoneId() == null) {
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has deleted a land-line
+ * number
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminDeletedLandLineNumberEvent (@Observes final AdminDeletedLandLineNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getDeletedLandLineNumber()== null) {
+ } else if (event.getDeletedLandLineNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.deletedLandLineNumber is null"); //NOI18N
} else if (event.getDeletedLandLineNumber().getPhoneId() == null) {
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has deleted a mobile
+ * number
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminDeletedMobileNumberEvent (@Observes final AdminDeletedMobileNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getDeletedMobileNumber()== null) {
+ } else if (event.getDeletedMobileNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.deletedMobileNumber is null"); //NOI18N
} else if (event.getDeletedMobileNumber().getPhoneId() == null) {
this.clear();
}
- @Override
- public void afterAdminLinkedFaxNumberEvent (@Observes final AdminLinkedFaxNumberEvent event) {
+ /**
+ * Observes events being fired when an administrator has a linked a fax
+ * number
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminLinkedFaxNumberEvent (@Observes final ObservableAdminLinkedFaxNumberEvent event) {
// Is the event fine?
if (event == null) {
// Throw NPE
throw new NullPointerException("event.contact.contactId is null");
} else if (event.getContact().getContactId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactId="+ event.getContact().getContactId() + " is invalid");
+ throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
} else if (event.getContact().getContactFaxNumber() == null) {
// Throw again ...
throw new NullPointerException("event.contact.contactFaxNumber is null");
throw new NullPointerException("event.contact.contactFaxNumber.phoneId is null");
} else if (event.getContact().getContactFaxNumber().getPhoneId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactFaxNumber.phoneId="+event.getContact().getContactFaxNumber().getPhoneId() + " is invalid");
+ throw new NullPointerException("event.contact.contactFaxNumber.phoneId=" + event.getContact().getContactFaxNumber().getPhoneId() + " is invalid");
} else if (event.getLinkedFaxNumber() == null) {
// Throw again ...
throw new NullPointerException("event.linkedFaxNumer is null");
}
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedFaxNumberEvent: event.linkedFaxNumber.phoneId=" + event.getLinkedFaxNumber().getPhoneId());
-
// Is the id number in linked number not set?
if (event.getLinkedFaxNumber().getPhoneId() == null) {
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedFaxNumberEvent: Adding to list: "+event.getContact().getContactFaxNumber());
-
// Then it is a new number, so add it from contact as there the id number has been set
this.uniqueAddFaxNumber(event.getContact().getContactFaxNumber());
}
}
- @Override
- public void afterAdminLinkedLandLineNumberEvent (@Observes final AdminLinkedLandLineNumberEvent event) {
+ /**
+ * Observes events being fired when an administrator has a linked a
+ * land-line number
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminLinkedLandLineNumberEvent (@Observes final ObservableAdminLinkedLandLineNumberEvent event) {
// Is the event fine?
if (event == null) {
// Throw NPE
throw new NullPointerException("event.contact.contactId is null");
} else if (event.getContact().getContactId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactId="+ event.getContact().getContactId() + " is invalid");
+ throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
} else if (event.getContact().getContactLandLineNumber() == null) {
// Throw again ...
throw new NullPointerException("event.contact.contactLandLineNumber is null");
throw new NullPointerException("event.contact.contactLandLineNumber.phoneId is null");
} else if (event.getContact().getContactLandLineNumber().getPhoneId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactLandLineNumber.phoneId="+event.getContact().getContactLandLineNumber().getPhoneId() + " is invalid");
+ throw new NullPointerException("event.contact.contactLandLineNumber.phoneId=" + event.getContact().getContactLandLineNumber().getPhoneId() + " is invalid");
} else if (event.getLinkedLandLineNumber() == null) {
// Throw again ...
throw new NullPointerException("event.linkedLandLineNumer is null");
}
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedLandLineNumberEvent: event.linkedLandLineNumber.phoneId=" + event.getLinkedLandLineNumber().getPhoneId());
-
// Is the id number in linked number not set?
if (event.getLinkedLandLineNumber().getPhoneId() == null) {
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedLandLineNumberEvent: Adding to list: "+event.getContact().getContactLandLineNumber());
-
// Then it is a new number, so add it from contact as there the id number has been set
this.uniqueAddLandLineNumber(event.getContact().getContactLandLineNumber());
}
}
- @Override
- public void afterAdminLinkedMobileNumberEvent (@Observes final AdminLinkedMobileNumberEvent event) {
+ /**
+ * Observes events being fired when an administrator has a linked a mobile
+ * number
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminLinkedMobileNumberEvent (@Observes final ObservableAdminLinkedMobileNumberEvent event) {
// Is the event fine?
if (event == null) {
// Throw NPE
throw new NullPointerException("event.contact.contactId is null");
} else if (event.getContact().getContactId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactId="+ event.getContact().getContactId() + " is invalid");
+ throw new NullPointerException("event.contact.contactId=" + event.getContact().getContactId() + " is invalid");
} else if (event.getContact().getContactMobileNumber() == null) {
// Throw again ...
throw new NullPointerException("event.contact.contactMobileNumber is null");
throw new NullPointerException("event.contact.contactMobileNumber.phoneId is null");
} else if (event.getContact().getContactMobileNumber().getPhoneId() < 1) {
// Throw again ...
- throw new NullPointerException("event.contact.contactMobileNumber.phoneId="+event.getContact().getContactMobileNumber().getPhoneId() + " is invalid");
+ throw new NullPointerException("event.contact.contactMobileNumber.phoneId=" + event.getContact().getContactMobileNumber().getPhoneId() + " is invalid");
} else if (event.getLinkedMobileNumber() == null) {
// Throw again ...
throw new NullPointerException("event.linkedMobileNumer is null");
}
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedMobileNumberEvent: event.linkedMobileNumber.phoneId=" + event.getLinkedMobileNumber().getPhoneId());
-
// Is the id number in linked number not set?
if (event.getLinkedMobileNumber().getPhoneId() == null) {
- // Log message
- System.out.println(this.getClass().getSimpleName()+".afterAdminLinkedMobileNumberEvent: Adding to list: "+event.getContact().getContactMobileNumber());
-
// Then it is a new number, so add it from contact as there the id number has been set
this.uniqueAddMobileNumber(event.getContact().getContactMobileNumber());
}
}
- @Override
- public void afterAdminUpdatedContactDataEvent (@Observes final AdminUpdatedContactEvent event) {
+ /**
+ * Observes events being fired when an administrator has updated contact
+ * data.
+ * <p>
+ * @param event Event being fired
+ */
+ public void afterAdminUpdatedContactDataEvent (@Observes final ObservableAdminUpdatedContactEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has updated a fax
+ * number.
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminUpdatedFaxNumberEvent (@Observes final AdminUpdatedFaxNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getUpdatedFaxNumber()== null) {
+ } else if (event.getUpdatedFaxNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.updatedFaxNumber is null"); //NOI18N
} else if (event.getUpdatedFaxNumber().getPhoneId() == null) {
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has updated a land-line
+ * number.
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminUpdatedLandLineNumberEvent (@Observes final AdminUpdatedLandLineNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getUpdatedLandLineNumber()== null) {
+ } else if (event.getUpdatedLandLineNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.updatedLandLineNumber is null"); //NOI18N
} else if (event.getUpdatedLandLineNumber().getPhoneId() == null) {
this.clear();
}
- @Override
+ /**
+ * Observes events being fired when an administrator has updated a mobile
+ * number.
+ * <p>
+ * @param event Event being fired
+ */
public void afterAdminUpdatedMobileNumberEvent (@Observes final AdminUpdatedMobileNumberEvent event) {
// event should not be null
if (null == event) {
// Throw NPE
throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getUpdatedMobileNumber()== null) {
+ } else if (event.getUpdatedMobileNumber() == null) {
// Throw NPE again
throw new NullPointerException("event.updatedMobileNumber is null"); //NOI18N
} else if (event.getUpdatedMobileNumber().getPhoneId() == null) {
*/
@PostConstruct
public void init () {
+ // Try it
+ try {
+ // Get initial context
+ Context context = new InitialContext();
+
+ // Try to lookup the beans
+ this.phoneBean = (PhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote"); //NOI18N
+ } catch (final NamingException e) {
+ // Throw it again
+ throw new FaceletException(e);
+ }
+
// All phone numbers
this.allMobileNumbers().addAll(this.phoneBean.allMobileNumbers());
this.allFaxNumbers().addAll(this.phoneBean.allFaxNumbers());
}
}
+ /**
+ * 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));
+ }
+
}