From 7dcfcbcb6ae0547dd18d2f2382cb5025ba30aa00 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Tue, 12 Apr 2016 18:58:39 +0200 Subject: [PATCH] Continued with adding user by administrator: - added addUser() method - removed creation timestamp as the EJB takes care of it - renamed errorHandler -> exception as this will become a page for thrown exceptions (later better handling) - updated jar(s) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- nbproject/faces-config.NavData | 71 ++++---- .../user/JobsAdminUserWebSessionBean.java | 151 ++++++++++++++++++ .../JobsAdminUserWebSessionController.java | 7 + .../beans/user/JobsUserWebSessionBean.java | 12 +- .../user/JobsUserWebSessionController.java | 5 + .../country/JobsCountryConverter.java | 1 + .../smsprovider/JobsSmsProviderConverter.java | 1 + web/WEB-INF/faces-config.xml | 15 +- web/exception.xhtml | 20 +++ 9 files changed, 237 insertions(+), 46 deletions(-) create mode 100644 web/exception.xhtml diff --git a/nbproject/faces-config.NavData b/nbproject/faces-config.NavData index 7a5b9fb6..fde2036a 100644 --- a/nbproject/faces-config.NavData +++ b/nbproject/faces-config.NavData @@ -2,41 +2,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionBean.java index 38b05691..d78b32d1 100644 --- a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionBean.java +++ b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionBean.java @@ -24,16 +24,30 @@ import java.util.Objects; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.faces.view.facelets.FaceletException; +import javax.inject.Inject; 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.contact.UserContact; import org.mxchange.jcontacts.contact.gender.Gender; import org.mxchange.jcountry.data.Country; +import org.mxchange.jphone.phonenumbers.cellphone.CellphoneNumber; +import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber; +import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber; +import org.mxchange.jphone.phonenumbers.fax.FaxNumber; +import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber; +import org.mxchange.jphone.phonenumbers.landline.LandLineNumber; import org.mxchange.jphone.phonenumbers.smsprovider.SmsProvider; +import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException; +import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException; import org.mxchange.jusercore.exceptions.UserNotFoundException; +import org.mxchange.jusercore.exceptions.UserPasswordMismatchException; +import org.mxchange.jusercore.model.user.LoginUser; import org.mxchange.jusercore.model.user.User; import org.mxchange.jusercore.model.user.UserSessionBeanRemote; +import org.mxchange.jusercore.model.user.UserUtils; import org.mxchange.jusercore.model.user.profilemodes.ProfileMode; /** @@ -181,6 +195,12 @@ public class JobsAdminUserWebSessionBean implements JobsAdminUserWebSessionContr */ private Integer zipCode; + /** + * Regular user controller + */ + @Inject + private PizzaUserWebSessionController userController; + /** * Default constructor */ @@ -201,6 +221,128 @@ public class JobsAdminUserWebSessionBean implements JobsAdminUserWebSessionContr } } + @Override + public void addUser () { + // Create new user instance + User user = new LoginUser(); + user.setUserName(this.getUserName()); + user.setUserProfileMode(this.getUserProfileMode()); + + // Generate phone number + DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber()); + DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber()); + DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber()); + + // Create new contact + Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName()); + contact.setContactStreet(this.getStreet()); + contact.setContactHouseNumber(this.getHouseNumber()); + contact.setContactZipCode(this.getZipCode()); + contact.setContactCity(this.getCity()); + contact.setContactCountry(this.getCountry()); + contact.setContactEmailAddress(this.getEmailAddress()); + + // Don't set null or wrong references + if ((phone instanceof DialableLandLineNumber) && (phone.getPhoneCountry() instanceof Country) && (this.getPhoneAreaCode() != null) && (this.getPhoneNumber() != null) && (this.getPhoneAreaCode() > 0) && (this.getPhoneNumber() > 0)) { + // Now the number must be given + if (phone.getPhoneAreaCode() == null) { + // Is null + throw new NullPointerException("phone.phoneAreaCode is null"); //NOI18N + } else if (phone.getPhoneAreaCode() < 1) { + // Abort here + throw new IllegalArgumentException("phone.phoneAreaCode is zero or below."); //NOI18N + } else if (phone.getPhoneNumber() == null) { + // Is null + throw new NullPointerException("phone.phoneNumber is null"); //NOI18N + } else if (phone.getPhoneNumber() < 1) { + // Abort here + throw new IllegalArgumentException("phone.phoneNumber is zero or below."); //NOI18N + } + + // Set phone number + contact.setContactLandLineNumber(phone); + } + + // Don't set null or wrong references + if ((fax instanceof DialableFaxNumber) && (fax.getPhoneCountry() instanceof Country) && (this.getFaxAreaCode() != null) && (this.getFaxNumber() != null) && (this.getFaxAreaCode() > 0) && (this.getFaxNumber() > 0)) { + // Now the number must be given + if (fax.getPhoneAreaCode() == null) { + // Is null + throw new NullPointerException("fax.phoneAreaCode is null"); //NOI18N + } else if (fax.getPhoneAreaCode() < 1) { + // Abort here + throw new IllegalArgumentException("fax.phoneAreaCode is zero or below."); //NOI18N + } else if (fax.getPhoneNumber() == null) { + // Is null + throw new NullPointerException("fax.phoneNumber is null"); //NOI18N + } else if (fax.getPhoneNumber() < 1) { + // Abort here + throw new IllegalArgumentException("fax.phoneNumber is zero or below."); //NOI18N + } + + // Set fax number + contact.setContactFaxNumber(fax); + } + + // Is the provider set? + if ((cellphone instanceof DialableCellphoneNumber) && (this.getCellphoneCarrier() instanceof SmsProvider) && (this.getCellphoneNumber() != null) && (this.getCellphoneNumber() > 0)) { + // Is the number set? + if (cellphone.getPhoneNumber() == null) { + // Is null + throw new NullPointerException("cellphone.phoneNumber is null"); //NOI18N + } else if (cellphone.getPhoneNumber() < 1) { + // Abort here + throw new IllegalArgumentException("cellphone.phoneNumber is zero or below."); //NOI18N + } + + // Set cellphone number + contact.setContactCellphoneNumber(cellphone); + } + + contact.setContactBirthday(this.getBirthday()); + contact.setContactComment(this.getComment()); + + // Set contact in user + user.setUserContact(contact); + + // Init variable for password + String password = null; + + // Is the user name or email address used already? + // @TODO Add password length check + if (this.userController.isUserNameRegistered(user)) { + // User name is already used + throw new FaceletException(new UserNameAlreadyRegisteredException(user)); + } else if (this.userController.isEmailAddressRegistered(user)) { + // Email address is already used + throw new FaceletException(new EmailAddressAlreadyRegisteredException(user)); + } else if ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty())) { + // Empty password entered, then generate one + password = UserUtils.createRandomPassword(PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH); + } else if (!this.isSamePasswordEntered()) { + // Both passwords don't match + throw new FaceletException(new UserPasswordMismatchException(user)); + } else { + // Both match, so get it from this bean + password = this.getUserPassword(); + } + + // The password should not be null and at least 5 characters long + assert (password != null) : "password is null"; + assert (password.length() >= PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; + + // Encrypt password and set it + user.setUserEncryptedPassword(UserUtils.encryptPassword(password)); + + try { + // Now, that all is set, call EJB + this.userBean.addUser(user); + } catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) { + // Throw again + throw new FaceletException(ex); + } + } + @Override public List allUsers () { // Return it @@ -461,6 +603,15 @@ public class JobsAdminUserWebSessionBean implements JobsAdminUserWebSessionContr this.userList = this.userBean.allUsers(); } + /** + * Checks if same password is entered and that they are not empty. + *

+ * @return Whether the same password was entered + */ + private boolean isSamePasswordEntered () { + return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat()))); + } + @Override public User lookupUserById (final Long userId) throws UserNotFoundException { // Init variable diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionController.java index 24c2dca0..f14ccb9c 100644 --- a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionController.java +++ b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebSessionController.java @@ -59,6 +59,13 @@ public interface JobsAdminUserWebSessionController extends Serializable { */ boolean hasUsers (); + /** + * Adds user instance to database by preparing a complete user instance and + * sending it to the EJB. The data set in the controller is being verified, + * e.g. if the user name or email address is not used yet. + */ + void addUser (); + /** * Getter for birth day *

diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java index 1c143ea4..1c38fc42 100644 --- a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java +++ b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java @@ -19,7 +19,6 @@ package org.mxchange.jjobs.beans.user; import java.text.MessageFormat; import java.util.Collections; import java.util.Date; -import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import java.util.Objects; @@ -336,12 +335,11 @@ public class JobsUserWebSessionBean implements JobsUserWebSessionController { // Update all data ... user.setUserName(this.getUserName()); user.setUserProfileMode(this.getUserProfileMode()); - user.setUserCreated(new GregorianCalendar()); // Generate phone number - DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber(), new GregorianCalendar()); - DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber(), new GregorianCalendar()); - DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber(), new GregorianCalendar()); + DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber()); + DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber()); + DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber()); // Create new contact Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName()); @@ -413,7 +411,6 @@ public class JobsUserWebSessionBean implements JobsUserWebSessionController { contact.setContactComment(this.getComment()); // Created timestamp and ownContact - contact.setContactCreated(new GregorianCalendar()); contact.setContactOwnContact(Boolean.TRUE); // Set contact in user @@ -421,6 +418,7 @@ public class JobsUserWebSessionBean implements JobsUserWebSessionController { // Trace message //this.getLogger().logTrace(MessageFormat.format("createUserInstance: user={0} - EXIT!", user)); + // Return it return user; } @@ -810,7 +808,7 @@ public class JobsUserWebSessionBean implements JobsUserWebSessionController { @Override public boolean isSamePasswordEntered () { - return (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())); + return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat()))); } @Override diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java index d455ec6d..b29c3e22 100644 --- a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java +++ b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java @@ -35,6 +35,11 @@ import org.mxchange.jusercore.model.user.profilemodes.ProfileMode; */ public interface JobsUserWebSessionController extends Serializable { + /** + * Minimum password length + */ + public static final Integer MINIMUM_PASSWORD_LENGTH = 5; + /** * Tries to lookup user by given id number. If the user is not found or the * account status is not CONFIRMED proper exceptions are thrown. diff --git a/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java b/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java index 380624a9..4099c69f 100644 --- a/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java +++ b/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java @@ -136,4 +136,5 @@ public class JobsCountryConverter implements Converter { // Return category id return String.valueOf(((Country) value).getCountryId()); } + } diff --git a/src/java/org/mxchange/jjobs/converter/smsprovider/JobsSmsProviderConverter.java b/src/java/org/mxchange/jjobs/converter/smsprovider/JobsSmsProviderConverter.java index 250802d1..99feb4eb 100644 --- a/src/java/org/mxchange/jjobs/converter/smsprovider/JobsSmsProviderConverter.java +++ b/src/java/org/mxchange/jjobs/converter/smsprovider/JobsSmsProviderConverter.java @@ -136,4 +136,5 @@ public class JobsSmsProviderConverter implements Converter { // Return category id return String.valueOf(((SmsProvider) value).getProviderId()); } + } diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml index 6cb876af..e01330bf 100644 --- a/web/WEB-INF/faces-config.xml +++ b/web/WEB-INF/faces-config.xml @@ -43,6 +43,10 @@ * + + exception + /exception.xhtml + index /index.xhtml @@ -87,10 +91,6 @@ user_resend_link /user/resend_link.xhtml - - login_all_applications - /login/login_all_applications.xhtml - user_list /user/user_list.xhtml @@ -215,4 +215,11 @@ /admin/admin_country_edit.xhtml + diff --git a/web/exception.xhtml b/web/exception.xhtml new file mode 100644 index 00000000..cbb6ce54 --- /dev/null +++ b/web/exception.xhtml @@ -0,0 +1,20 @@ + + + + + + #{msg.PAGE_TITLE_EXCEPTION_THROWN} + + + #{msg.CONTENT_TITLE_EXCEPTION_THROWN} + + + + Unfortunately an unexpected error has occurred. + + + -- 2.39.2