X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fmxchange%2Fjjobs%2Fbeans%2Fuser%2FJobsUserWebSessionBean.java;h=5c9c1a9ccd21e790e239618f9ec517e57efda0e1;hb=ccc4438c847e21768a805850625ba8f43e7d61cc;hp=1759cd86e8bdaf230ed1f105b6e2ba4dfb2e52ea;hpb=a3f25a789cc25b8ccb3863de6e2a274b49030a3c;p=jjobs-war.git diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java index 1759cd86..5c9c1a9c 100644 --- a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java +++ b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java @@ -1,5 +1,5 @@ /* - * 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 @@ -19,8 +19,10 @@ package org.mxchange.jjobs.beans.user; import java.text.MessageFormat; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Objects; import javax.annotation.PostConstruct; +import javax.ejb.EJB; import javax.enterprise.context.SessionScoped; import javax.enterprise.event.Event; import javax.enterprise.event.Observes; @@ -29,34 +31,36 @@ import javax.faces.context.FacesContext; 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.jcoreee.events.locale.ObservableLocaleChangeEvent; import org.mxchange.jjobs.beans.BaseJobsController; import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController; import org.mxchange.jjobs.beans.features.JobsFeaturesWebApplicationController; -import org.mxchange.jjobs.beans.login.user.JobsUserLoginWebSessionController; -import org.mxchange.jusercore.events.confirmation.ObservableUserConfirmedAccountEvent; -import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent; -import org.mxchange.jusercore.events.registration.ObservableUserRegisteredEvent; +import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController; +import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController; import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent; +import org.mxchange.jusercore.events.user.clear.password.ObservableClearUserPasswordEvent; +import org.mxchange.jusercore.events.user.clear.username.ObservableClearUserNameEvent; +import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent; import org.mxchange.jusercore.events.user.delete.ObservableAdminDeletedUserEvent; import org.mxchange.jusercore.events.user.linked.ObservableAdminLinkedUserEvent; import org.mxchange.jusercore.events.user.locked.ObservableAdminLockedUserEvent; -import org.mxchange.jusercore.events.user.password_change.ObservableUpdatedUserPasswordEvent; import org.mxchange.jusercore.events.user.unlocked.ObservableAdminUnlockedUserEvent; import org.mxchange.jusercore.events.user.update.ObservableAdminUpdatedUserDataEvent; import org.mxchange.jusercore.events.user.update.ObservableUpdatedUserPersonalDataEvent; import org.mxchange.jusercore.events.user.update.UpdatedUserPersonalDataEvent; import org.mxchange.jusercore.exceptions.UserEmailAddressNotFoundException; 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; +import org.mxchange.juserlogincore.events.confirmation.ObservableUserConfirmedAccountEvent; +import org.mxchange.juserlogincore.events.login.ObservableUserLoggedInEvent; +import org.mxchange.juserlogincore.events.registration.ObservableUserRegisteredEvent; +import org.mxchange.juserlogincore.events.user.password_change.ObservableUpdatedUserPasswordEvent; +import org.mxchange.juserlogincore.exceptions.UserPasswordMismatchException; +import org.mxchange.juserlogincore.login.UserLoginUtils; /** * A user controller (bean) @@ -84,6 +88,17 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs @Inject private JobsFeaturesWebApplicationController featureController; + /** + * Locale instance + */ + private Locale locale; + + /** + * Localization controller + */ + @Inject + private JobsLocalizationSessionController localizationController; + /** * Event being fired when user updated personal data */ @@ -94,6 +109,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs /** * Remote user bean */ + @EJB (lookup = "java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote") private UserSessionBeanRemote userBean; /** @@ -189,7 +205,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs *

* @param event Event being fired */ - public void afterAdminDeletedUserEvent (final ObservableAdminDeletedUserEvent event) { + public void afterAdminDeletedUserEvent (@Observes final ObservableAdminDeletedUserEvent event) { // event should not be null if (null == event) { // Throw NPE @@ -321,6 +337,56 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs this.clear(); } + /** + * Event observer for when a bean helper has successfully created a user + * instance, means the user exists. If the user does not exist, this event + * should not fire but instead a proper exception must be thrown. + *

+ * @param event User created event + */ + public void afterCreatedUserEvent (@Observes final ObservableCreatedUserEvent event) { + // Is the instance valid? + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getCreatedUser() == null) { + // Throw NPE again + throw new NullPointerException("event.createdUser is null"); //NOI18N + } else if (event.getCreatedUser().getUserId() == null) { + // Throw NPE again + throw new NullPointerException("event.createdUser.userId is null"); //NOI18N + } else if (event.getCreatedUser().getUserId() < 1) { + // Throw NPE again + throw new NullPointerException(MessageFormat.format("event.createdUser.userId={0} is not valid", event.getCreatedUser().getUserId())); //NOI18N + } + + // Get user instance + User user = event.getCreatedUser(); + + // Set all fields here + this.copyUser(user); + } + + /** + * Observer method for events being fired when the application's locale has + * been changed. + *

+ * @param event Event being fired + */ + public void afterLocaleChangeEvent (@Observes final ObservableLocaleChangeEvent event) { + // Is the parameter valid? + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); + } else if (event.getLocale() == null) { + // Throw NPE again + throw new NullPointerException("event.locale is null"); + } + + // Set it here + this.setLocale(event.getLocale()); + } + /** * Event observer when user confirmed account. *

@@ -380,6 +446,29 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs } } + /** + * Event observer for user password changes + *

+ * @param event Event being fired + */ + public void afterUserPasswordChangedEvent (@Observes final ObservableUpdatedUserPasswordEvent event) { + // Is it valid? + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getUserPassword() == null) { + // Throw NPE + throw new NullPointerException("event.userPassword is null"); //NOI18N + } else if (event.getUserPassword().isEmpty()) { + // Throw NPE + throw new IllegalArgumentException("event.userPassword is empty"); //NOI18N + } + + // Set it here + this.setUserPassword(event.getUserPassword()); + this.setUserPasswordRepeat(event.getUserPassword()); + } + /** * Event observer for new user registrations *

@@ -491,6 +580,38 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs return this.visibleUserList; } + /** + * Event observer for when a user name should be cleared + *

+ * @param event Event being fired + */ + public void clearUserNameEvent (@Observes final ObservableClearUserNameEvent event) { + // Is it valid? + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); + } + + // Clear it + this.clearUserName(); + } + + /** + * Event observer for when both user passwords should be cleared + *

+ * @param event Event being fired + */ + public void clearUserPasswordEvent (@Observes final ObservableClearUserPasswordEvent event) { + // Is it valid? + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); + } + + // Clear it + this.clearUserPasswords(); + } + @Override public User createUserInstance (final boolean createContactData) { // Trace message @@ -512,16 +633,17 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs this.setUserProfileMode(ProfileMode.INVISIBLE); // Generate random password - String randomPassword = UserUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH); + String randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH); // Set random password this.setUserPassword(randomPassword); this.setUserPasswordRepeat(randomPassword); } - // Set user name and mode + // Set user name profile mode and locale user.setUserName(this.getUserName()); user.setUserProfileMode(this.getUserProfileMode()); + user.setUserLocale(this.getLocale()); // Is multiple registration page if ((createContactData) || (!this.featureController.isFeatureEnabled("user_register_multiple_page"))) { //NOI18N @@ -530,14 +652,12 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs // Debug message //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("{0}.createUserInstance: contact={1}", this.getClass().getSimpleName(), contact)); - // Set contact in user user.setUserContact(contact); } // Trace message //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("{0}.createUserInstance: user={1} - EXIT!", this.getClass().getSimpleName(), user)); - // Return it return user; } @@ -564,7 +684,6 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs // Trace message //* NOISY-DEBUG */ System.out.println(MessageFormat.format("{0}.createUserLogin: user={1} - EXIT!", this.getClass().getSimpleName(), user)); - // Return the new instance return user; } @@ -581,7 +700,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs } else if (!this.userLoginController.ifCurrentPasswordMatches()) { // Password not matching throw new FaceletException(new UserPasswordMismatchException(this.userLoginController.getLoggedInUser())); - } else if (!this.featureController.isFeatureEnabled("change_user_personal_data")) { + } else if (!this.featureController.isFeatureEnabled("change_user_personal_data")) { //NOI18N // Editing is not allowed throw new IllegalStateException("User tried to edit personal data."); //NOI18N } @@ -613,22 +732,38 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs return "user_contact_data_saved"; //NOI18N } - @Override + /** + * Getter for user id + *

+ * @return User id + */ public Long getUserId () { return this.userId; } - @Override + /** + * Setter for user id + *

+ * @param userId User id + */ public void setUserId (final Long userId) { this.userId = userId; } - @Override + /** + * Getter for user name + *

+ * @return User name + */ public String getUserName () { return this.userName; } - @Override + /** + * Setter for user name + *

+ * @param userName User name + */ public void setUserName (final String userName) { this.userName = userName; } @@ -638,48 +773,64 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs return this.userPassword; } - @Override + /** + * Setter for clear-text user password + *

+ * @param userPassword Clear-text user password + */ public void setUserPassword (final String userPassword) { this.userPassword = userPassword; } - @Override + /** + * Getter for clear-text user password repeated + *

+ * @return Clear-text user password repeated + */ public String getUserPasswordRepeat () { return this.userPasswordRepeat; } - @Override + /** + * Setter for clear-text user password repeated + *

+ * @param userPasswordRepeat Clear-text user password repeated + */ public void setUserPasswordRepeat (final String userPasswordRepeat) { this.userPasswordRepeat = userPasswordRepeat; } - @Override + /** + * Getter for user profile mode + *

+ * @return User profile mode + */ public ProfileMode getUserProfileMode () { return this.userProfileMode; } - @Override + /** + * Setter for user profile mode + *

+ * @param userProfileMode User profile mode + */ public void setUserProfileMode (final ProfileMode userProfileMode) { this.userProfileMode = userProfileMode; } + @Override + public boolean ifBothPasswordsEmptyAllowed () { + // Check feature first + return ((this.featureController.isFeatureEnabled("allow_user_registration_empty_password")) && //NOI18N + ((this.getUserPassword() == null) || (this.getUserPassword().isEmpty())) && + ((this.getUserPasswordRepeat() == null) || (this.getUserPasswordRepeat().isEmpty()))); + } + /** * Post-initialization of this class */ @PostConstruct public void init () { - // Try it - try { - // Get initial context - Context context = new InitialContext(); - - // Try to lookup - this.userBean = (UserSessionBeanRemote) context.lookup("java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote"); //NOI18N - } catch (final NamingException e) { - // Throw again - throw new FaceletException(e); - } - // Initialize user list this.userList = this.userBean.allUsers(); @@ -791,7 +942,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs @Override public boolean isUserNameRequired () { // Get context parameter - String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_user_name_required"); //NOI18N + String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_user_login_require_user_name"); //NOI18N // Is it set? boolean isRequired = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N @@ -899,9 +1050,6 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs if (this.userNameList.contains(user.getUserName())) { // Abort here throw new IllegalArgumentException(MessageFormat.format("User name {0} already added.", user.getUserName())); //NOI18N - } else if (this.contactController.isEmailAddressRegistered(user.getUserContact())) { - // Already added - throw new IllegalArgumentException(MessageFormat.format("Email address {0} already added.", user.getUserContact().getContactEmailAddress())); //NOI18N } // Add user name @@ -918,7 +1066,24 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs this.setUserProfileMode(null); // - other data + this.clearUserName(); + this.clearUserPasswords(); + this.setLocale(null); + } + + /** + * Clears user name + */ + private void clearUserName () { + // Clear it this.setUserName(null); + } + + /** + * Clears both user passwords + */ + private void clearUserPasswords () { + // Clear both this.setUserPassword(null); this.setUserPasswordRepeat(null); } @@ -944,6 +1109,24 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs this.setUserProfileMode(user.getUserProfileMode()); } + /** + * Getter for locale instance + *

+ * @return Locale instance + */ + private Locale getLocale () { + return this.locale; + } + + /** + * Setter for locale instance + *

+ * @param locale Locale instance + */ + private void setLocale (final Locale locale) { + this.locale = locale; + } + /** * Removes user from all lists *