]> git.mxchange.org Git - jjobs-war.git/blobdiff - src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebRequestBean.java
Please cherry-pick:
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / user / JobsAdminUserWebRequestBean.java
index eb78c032afee0465c24532d706ec65f27dc8d3c9..5c4486e512229f54297913b699bbe6aa3bf56cce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016, 2017 Roland Häder
+ * Copyright (C) 2016 - 2020 Free Software Foundation
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as
@@ -25,16 +25,17 @@ import javax.enterprise.event.Event;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Any;
 import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
 import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
-import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcontacts.model.contact.Contact;
 import org.mxchange.jcoreee.utils.FacesUtils;
-import org.mxchange.jjobs.beans.BaseJobsController;
+import org.mxchange.jjobs.beans.BaseJobsBean;
 import org.mxchange.jjobs.beans.contact.JobsAdminContactWebRequestController;
 import org.mxchange.jjobs.beans.contact.JobsContactWebRequestController;
-import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController;
+import org.mxchange.jjobs.beans.features.JobsFeaturesWebApplicationController;
+import org.mxchange.jjobs.beans.user.list.JobsUserListWebViewController;
 import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
 import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent;
@@ -46,8 +47,8 @@ import org.mxchange.jusercore.events.user.locked.AdminLockedUserEvent;
 import org.mxchange.jusercore.events.user.locked.ObservableAdminLockedUserEvent;
 import org.mxchange.jusercore.events.user.unlocked.AdminUnlockedUserEvent;
 import org.mxchange.jusercore.events.user.unlocked.ObservableAdminUnlockedUserEvent;
-import org.mxchange.jusercore.events.user.update.AdminUpdatedUserDataEvent;
-import org.mxchange.jusercore.events.user.update.ObservableAdminUpdatedUserDataEvent;
+import org.mxchange.jusercore.events.user.update.post.AdminPostUserDataUpdatedEvent;
+import org.mxchange.jusercore.events.user.update.post.ObservableAdminPostUserDataUpdatedEvent;
 import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException;
 import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException;
 import org.mxchange.jusercore.exceptions.UserNotFoundException;
@@ -72,7 +73,7 @@ import org.mxchange.juserlogincore.login.UserLoginUtils;
  */
 @Named ("adminUserController")
 @RequestScoped
-public class JobsAdminUserWebRequestBean extends BaseJobsController implements JobsAdminUserWebRequestController {
+public class JobsAdminUserWebRequestBean extends BaseJobsBean implements JobsAdminUserWebRequestController {
 
        /**
         * Serial number
@@ -117,17 +118,17 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
        private Event<ObservableAdminDeletedUserEvent> deleteUserEvent;
 
        /**
-        * Localization controller
+        * Features controller
         */
        @Inject
-       private JobsLocalizationSessionController localizationController;
+       private JobsFeaturesWebApplicationController featureController;
 
        /**
         * An event fired when the administrator has updated a new user
         */
        @Inject
        @Any
-       private Event<ObservableAdminUpdatedUserDataEvent> updatedUserDataEvent;
+       private Event<ObservableAdminPostUserDataUpdatedEvent> updatedUserDataEvent;
 
        /**
         * User instance
@@ -159,6 +160,12 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
        @Any
        private Event<ObservableAdminLinkedUserEvent> userLinkedEvent;
 
+       /**
+        * Regular user controller
+        */
+       @Inject
+       private JobsUserListWebViewController userListController;
+
        /**
         * User lock reason
         */
@@ -191,6 +198,11 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
         */
        private String userPasswordRepeat;
 
+       /**
+        * Whether the user wants a public profile
+        */
+       private ProfileMode userProfileMode;
+
        /**
         * Event being fired when administrator unlocks an account
         */
@@ -211,9 +223,8 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
         * 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.
         * <p>
-        * @return Redirect outcome
         */
-       public String addUser () {
+       public void addUser () {
                // As the form cannot validate the data (required="true"), check it here
                if (this.getUserName() == null) {
                        // Throw NPE
@@ -227,99 +238,55 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                }
 
                // Create new user instance
-               User newUser = new LoginUser();
-
-               // Set user name, CONFIRMED and INVISIBLE
-               newUser.setUserName(this.getUserName());
-               newUser.setUserMustChangePassword(this.getUserMustChangePassword());
-               newUser.setUserAccountStatus(UserAccountStatus.CONFIRMED);
-               newUser.setUserProfileMode(ProfileMode.INVISIBLE);
-
-               // Get locale from view-root
-               Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
-
-               // Copy user locale
-               newUser.setUserLocale(locale);
-
-               // Init instance
-               Contact userContact;
-
-               // Is a contact instance in helper set?
-               if (this.getContact() instanceof Contact) {
-                       // Then use it for contact linking
-                       userContact = this.getContact();
-               } else {
-                       // Create contact instance
-                       userContact = this.contactController.createContactInstance();
-               }
-
-               // Set contact in user
-               newUser.setUserContact(userContact);
-
-               // Init variable for password
-               String password = null;
+               final User newUser = this.createUserInstance();
 
                // Is the user name or email address used already?
                // @TODO Add password length check
-               if (this.userController.isUserNameRegistered(newUser)) {
+               if ((this.featureController.isFeatureEnabled("user_login_require_user_name")) && (this.userListController.isUserNameRegistered(newUser))) {
                        // User name is already used
-                       throw new FaceletException(new UserNameAlreadyRegisteredException(newUser));
+                       throw new FacesException(new UserNameAlreadyRegisteredException(newUser));
                } else if ((this.getContact() == null) && (this.contactController.isEmailAddressRegistered(newUser.getUserContact()))) {
                        // Email address is already used
-                       this.showFacesMessage("admin_add_user:emailAddress", "ERROR_EMAIL_ADDRESS_ALREADY_USED"); //NOI18N
+                       this.showFacesMessage("admin_add_user:emailAddress", "ERROR_EMAIL_ADDRESS_ALREADY_USED", FacesMessage.SEVERITY_WARN); //NOI18N
 
                        // Always clear password
                        this.setUserPassword(null);
                        this.setUserPasswordRepeat(null);
 
                        // Skip it
-                       return ""; //NOI18N
-               } else if ((this.getUserPassword() == null && (this.getUserPasswordRepeat() == null)) || ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty()))) {
-                       // Empty password entered, then generate one
-                       password = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
-               } else if (!this.isSamePasswordEntered()) {
-                       // Both passwords don't match
-                       throw new FaceletException(new UserPasswordRepeatMismatchException(newUser));
-               } else {
-                       // Both match, so get it from this bean
-                       password = this.getUserPassword();
+                       return;
                }
 
-               // The password should not be null and at least 5 characters long
-               assert (password != null) : "password is null"; //NOI18N
-               assert (password.length() >= JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; //NOI18N
-
-               // Encrypt password and set it
-               newUser.setUserEncryptedPassword(UserLoginUtils.encryptPassword(password));
+               // Init variable
+               final User updatedUser;
 
                try {
                        // Now, that all is set, call EJB
                        if (this.getContact() instanceof Contact) {
                                // Link contact with this user
-                               User updatedUser = this.adminUserBean.linkUser(newUser);
-
-                               // Fire event
-                               this.userLinkedEvent.fire(new AdminLinkedUserEvent(updatedUser));
+                               updatedUser = this.adminUserBean.linkUser(newUser);
                        } else {
-                               // Add new contact
-                               User updatedUser = this.adminUserBean.addUser(newUser);
-
-                               // Fire event
-                               this.addedUserEvent.fire(new AdminAddedUserEvent(updatedUser));
+                               // Add new user
+                               updatedUser = this.adminUserBean.addUser(newUser);
                        }
                } catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) {
                        // Throw again
-                       throw new FaceletException(ex);
+                       throw new FacesException(ex);
                }
 
+               // Now, that all is set, call EJB
+               if (this.getContact() instanceof Contact) {
+                       // Fire event
+                       this.userLinkedEvent.fire(new AdminLinkedUserEvent(updatedUser));
+               } else {
+                       // Fire event
+                       this.addedUserEvent.fire(new AdminAddedUserEvent(updatedUser));
+               }
                // Clear helper
                this.setContact(null);
 
                // Clear this bean
                this.clear();
-
-               // Return to user list (for now)
-               return "admin_list_user"; //NOI18N
        }
 
        /**
@@ -355,7 +322,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
         * @param event User registration event
         */
        public void afterUserRegistrationEvent (@Observes final ObservableUserRegisteredEvent event) {
-               // event should not be null
+               // Event and contained entity instance should not be null
                if (null == event) {
                        // Throw NPE
                        throw new NullPointerException("event is null"); //NOI18N
@@ -371,7 +338,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                }
 
                // Get user instance
-               User registeredUser = event.getRegisteredUser();
+               final User registeredUser = event.getRegisteredUser();
 
                // @TODO Nothing to do with the user here?
                // Clear all data
@@ -380,10 +347,8 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 
        /**
         * Deletes given user account
-        * <p>
-        * @return Redirect outcome
         */
-       public String deleteUserData () {
+       public void deleteUserData () {
                // Is the user instance valid and CONFIRMED?
                if (this.getUser() == null) {
                        // Throw NPE
@@ -401,22 +366,17 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                        this.adminUserBean.deleteUser(this.getUser(), this.getUserDeleteReason());
                } catch (final UserNotFoundException ex) {
                        // Should not happen, so throw again
-                       throw new FaceletException(ex);
+                       throw new FacesException(ex);
                }
 
                // Fire event
                this.deleteUserEvent.fire(new AdminDeletedUserEvent(this.getUser(), this.getUserDeleteReason()));
-
-               // Redirect
-               return "admin_list_user"; //NOI18N
        }
 
        /**
         * Edits currently loaded user's data in database.
-        * <p>
-        * @return Redirect outcome
         */
-       public String editUserData () {
+       public void editUserData () {
                // Null password means not setting it
                String encryptedPassword = null;
 
@@ -442,15 +402,15 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                        this.setUserPasswordRepeat(null);
 
                        // Not same password entered
-                       this.showFacesMessage("form_edit_user:userPassword", "ADMIN_USER_PASSWORD_REPEAT_DIFFERENT"); //NOI18N
-                       return ""; //NOI18N
+                       this.showFacesMessage("form_edit_user:userPassword", "ADMIN_USER_PASSWORD_REPEAT_DIFFERENT", FacesMessage.SEVERITY_INFO); //NOI18N
+                       return;
                } else if ((!Objects.equals(this.getUser().getUserName(), this.getUserName())) && (this.userBean.ifUserNameExists(this.getUserName()))) {
                        // Clear all fields
                        this.clear();
 
                        // User name already exists
-                       this.showFacesMessage("form_edit_user:userName", "ADMIN_USER_NAME_ALREADY_EXISTS"); //NOI18N
-                       return ""; //NOI18N
+                       this.showFacesMessage("form_edit_user:userName", "ADMIN_USER_NAME_ALREADY_EXISTS", FacesMessage.SEVERITY_WARN); //NOI18N
+                       return;
                } else if (this.isSamePasswordEntered()) {
                        // Same password entered, create container
                        if ((Objects.equals(this.getUser().getUserMustChangePassword(), this.getUserMustChangePassword())) && (UserLoginUtils.ifPasswordMatches(new UserLoginContainer(this.getUser(), this.getUserPassword())))) {
@@ -459,8 +419,8 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                                this.setUserPasswordRepeat(null);
 
                                // Same password entered
-                               this.showFacesMessage("form_edit_user:userPassword", "ADMIN_USER_ENTERED_SAME_AS_OLD_PASSWORD"); //NOI18N
-                               return ""; //NOI18N
+                               this.showFacesMessage("form_edit_user:userPassword", "ADMIN_USER_ENTERED_SAME_AS_OLD_PASSWORD", FacesMessage.SEVERITY_WARN); //NOI18N
+                               return;
                        }
 
                        // Encrypt password
@@ -478,13 +438,10 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                }
 
                // Call EJB for updating user data
-               User updatedUser = this.userBean.updateUserData(this.getUser());
+               final User updatedUser = this.userBean.updateUserData(this.getUser());
 
                // Fire event
-               this.updatedUserDataEvent.fire(new AdminUpdatedUserDataEvent(updatedUser));
-
-               // Return to user list (for now)
-               return "admin_list_user"; //NOI18N
+               this.updatedUserDataEvent.fire(new AdminPostUserDataUpdatedEvent(updatedUser));
        }
 
        /**
@@ -631,6 +588,24 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                this.userPasswordRepeat = userPasswordRepeat;
        }
 
+       /**
+        * Getter for user profile mode
+        * <p>
+        * @return User profile mode
+        */
+       public ProfileMode getUserProfileMode () {
+               return this.userProfileMode;
+       }
+
+       /**
+        * Setter for user profile mode
+        * <p>
+        * @param userProfileMode User profile mode
+        */
+       public void setUserProfileMode (final ProfileMode userProfileMode) {
+               this.userProfileMode = userProfileMode;
+       }
+
        /**
         * Locks selected user's account. This method makes sure that a lock reason
         * is provided that th user later can read on login attempts.
@@ -653,7 +628,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                        throw new FacesException(new UserStatusLockedException(this.getUser()));
                } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) {
                        // User account is locked
-                       throw new FaceletException(new UserStatusUnconfirmedException(this.getUser()));
+                       throw new FacesException(new UserStatusUnconfirmedException(this.getUser()));
                } else if (this.getUserLockReason() == null) {
                        // Throw NPE again
                        throw new NullPointerException("this.userLockReason is null"); //NOI18N
@@ -663,17 +638,17 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                }
 
                // Init updated user instance
-               User updatedUser;
+               final User updatedUser;
 
                try {
                        // Get base URL
-                       String baseUrl = FacesUtils.generateBaseUrl();
+                       final String baseUrl = FacesUtils.generateBaseUrl();
 
                        // Call EJB to lock account
                        updatedUser = this.adminUserBean.lockUserAccount(this.getUser(), this.getUserLockReason(), baseUrl);
                } catch (final UserStatusLockedException | UserStatusUnconfirmedException | UserNotFoundException ex) {
                        // Throw again
-                       throw new FaceletException(ex);
+                       throw new FacesException(ex);
                }
 
                // Fire event
@@ -708,21 +683,21 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
                        throw new FacesException(new UserStatusConfirmedException(this.getUser()));
                } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) {
                        // User account is locked
-                       throw new FaceletException(new UserStatusUnconfirmedException(this.getUser()));
+                       throw new FacesException(new UserStatusUnconfirmedException(this.getUser()));
                }
 
                // Init updated user instance
-               User updatedUser;
+               final User updatedUser;
 
                try {
                        // Get base URL
-                       String baseUrl = FacesUtils.generateBaseUrl();
+                       final String baseUrl = FacesUtils.generateBaseUrl();
 
                        // Call EJB to unlock account
                        updatedUser = this.adminUserBean.unlockUserAccount(this.getUser(), baseUrl);
                } catch (final UserStatusConfirmedException | UserStatusUnconfirmedException | UserNotFoundException ex) {
                        // Throw again
-                       throw new FaceletException(ex);
+                       throw new FacesException(ex);
                }
 
                // Fire event
@@ -741,9 +716,72 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
        private void clear () {
                // Clear all data
                this.setContact(null);
+               this.setUserDeleteReason(null);
+               this.setUser(null);
                this.setUserLockReason(null);
                this.setUserMustChangePassword(null);
                this.setUserName(null);
+               this.setUserPassword(null);
+               this.setUserPasswordRepeat(null);
+               this.setUserProfileMode(null);
+
+       }
+
+       /**
+        * Creates a new user instance from all currently saved data from this bean
+        * <p>
+        * @return New user instance
+        */
+       private User createUserInstance () {
+               // Init variable for password
+               String password = null;
+
+               // Init instance
+               final Contact userContact;
+
+               // Is a contact instance in helper set?
+               if ((this.getUserPassword() == null && (this.getUserPasswordRepeat() == null)) || ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty()))) {
+                       // Empty password entered, then generate one
+                       password = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
+               } else if (!this.isSamePasswordEntered()) {
+                       // Both passwords don't match
+                       throw new FacesException(new UserPasswordRepeatMismatchException());
+               } 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"; //NOI18N
+               assert (password.length() >= JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; //NOI18N
+
+               // Is contact instance given? Else create one
+               if (this.getContact() instanceof Contact) {
+                       // Then use it for contact linking
+                       userContact = this.getContact();
+               } else {
+                       // Create contact instance
+                       userContact = this.contactController.createContactInstance();
+               }
+
+               // Create new instance
+               final User newUser = new LoginUser(
+                                  this.getUserName(),
+                                  this.getUserProfileMode(),
+                                  this.getUserMustChangePassword(),
+                                  UserLoginUtils.encryptPassword(password),
+                                  UserAccountStatus.CONFIRMED,
+                                  userContact
+                  );
+
+               // Get locale from view-root
+               final Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
+
+               // Copy user locale
+               newUser.setUserLocale(locale);
+
+               // Return it
+               return newUser;
        }
 
        /**