2 * Copyright (C) 2016 Roland Häder
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation, either version 3 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
14 * You should have received a copy of the GNU Affero General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.pizzaapplication.beans.user;
19 import java.text.MessageFormat;
20 import java.util.Iterator;
21 import java.util.List;
22 import java.util.Objects;
23 import javax.annotation.PostConstruct;
24 import javax.enterprise.context.SessionScoped;
25 import javax.enterprise.event.Event;
26 import javax.enterprise.event.Observes;
27 import javax.enterprise.inject.Any;
28 import javax.faces.context.FacesContext;
29 import javax.faces.view.facelets.FaceletException;
30 import javax.inject.Inject;
31 import javax.inject.Named;
32 import javax.naming.Context;
33 import javax.naming.InitialContext;
34 import javax.naming.NamingException;
35 import org.mxchange.jcontacts.contact.Contact;
36 import org.mxchange.jusercore.events.confirmation.ObservableUserConfirmedAccountEvent;
37 import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
38 import org.mxchange.jusercore.events.registration.ObservableUserRegisteredEvent;
39 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
40 import org.mxchange.jusercore.events.user.delete.ObservableAdminDeletedUserEvent;
41 import org.mxchange.jusercore.events.user.linked.ObservableAdminLinkedUserEvent;
42 import org.mxchange.jusercore.events.user.locked.ObservableAdminLockedUserEvent;
43 import org.mxchange.jusercore.events.user.password_change.ObservableUpdatedUserPasswordEvent;
44 import org.mxchange.jusercore.events.user.unlocked.ObservableAdminUnlockedUserEvent;
45 import org.mxchange.jusercore.events.user.update.ObservableAdminUpdatedUserDataEvent;
46 import org.mxchange.jusercore.events.user.update.ObservableUpdatedUserPersonalDataEvent;
47 import org.mxchange.jusercore.events.user.update.UpdatedUserPersonalDataEvent;
48 import org.mxchange.jusercore.exceptions.UserEmailAddressNotFoundException;
49 import org.mxchange.jusercore.exceptions.UserNotFoundException;
50 import org.mxchange.jusercore.exceptions.UserPasswordMismatchException;
51 import org.mxchange.jusercore.model.user.LoginUser;
52 import org.mxchange.jusercore.model.user.User;
53 import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
54 import org.mxchange.jusercore.model.user.UserUtils;
55 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
56 import org.mxchange.pizzaapplication.beans.BasePizzaController;
57 import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebSessionController;
58 import org.mxchange.pizzaapplication.beans.features.PizzaFeaturesWebApplicationController;
59 import org.mxchange.pizzaapplication.beans.login.PizzaUserLoginWebSessionController;
62 * A user bean (controller)
64 * @author Roland Häder<roland@mxchange.org>
66 @Named ("userController")
68 public class PizzaUserWebSessionBean extends BasePizzaController implements PizzaUserWebSessionController {
73 private static final long serialVersionUID = 542_145_347_916L;
76 * General contact controller
79 private PizzaContactWebSessionController contactController;
85 private PizzaFeaturesWebApplicationController featureController;
88 * Event being fired when user updated personal data
92 private Event<ObservableUpdatedUserPersonalDataEvent> updatedPersonalDataEvent;
97 private final UserSessionBeanRemote userBean;
105 * A list of all user profiles
107 private List<User> userList;
110 * Login controller (bean)
113 private PizzaUserLoginWebSessionController userLoginController;
118 private String userName;
123 private List<String> userNameList;
126 * User password (clear-text from web form)
128 private String userPassword;
131 * User password repeated (clear-text from web form)
133 private String userPasswordRepeat;
136 * Whether the user wants a public profile
138 private ProfileMode userProfileMode;
141 * A list of all public user profiles
143 * @TODO Hmm, makes that sense? Having visible user list in current
144 * (session-scoped) user's visible user list?
146 private List<User> visibleUserList;
149 * Default constructor
151 public PizzaUserWebSessionBean () {
154 // Get initial context
155 Context context = new InitialContext();
158 this.userBean = (UserSessionBeanRemote) context.lookup("java:global/jrecruiter-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote"); //NOI18N
159 } catch (final NamingException e) {
161 throw new FaceletException(e);
166 * Event observer for newly added users by administrator
168 * @param event Event being fired
170 public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
171 // event should not be null
174 throw new NullPointerException("event is null"); //NOI18N
175 } else if (event.getAddedUser() == null) {
177 throw new NullPointerException("event.addedUser is null"); //NOI18N
178 } else if (event.getAddedUser().getUserId() == null) {
180 throw new NullPointerException("event.addedUser.userId is null"); //NOI18N
181 } else if (event.getAddedUser().getUserId() < 1) {
183 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N
187 this.updateList(event.getAddedUser());
193 this.setUserId(event.getAddedUser().getUserId());
197 * Event observer for deleted user accounts (by administrator)
199 * @param event Event being fired
201 public void afterAdminDeletedUserEvent (final ObservableAdminDeletedUserEvent event) {
202 // event should not be null
205 throw new NullPointerException("event is null"); //NOI18N
206 } else if (event.getDeletedUser() == null) {
208 throw new NullPointerException("event.deletedUser is null"); //NOI18N
209 } else if (event.getDeletedUser().getUserId() == null) {
211 throw new NullPointerException("event.deletedUser.userId is null"); //NOI18N
212 } else if (event.getDeletedUser().getUserId() < 1) {
214 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getDeletedUser(), event.getDeletedUser().getUserId())); //NOI18N
218 this.removeFromList(event.getDeletedUser());
225 * Event observer for linked users with existing contact data
227 * @param event Event being fired
229 public void afterAdminLinkedUserEvent (@Observes final ObservableAdminLinkedUserEvent event) {
230 // event should not be null
233 throw new NullPointerException("event is null"); //NOI18N
234 } else if (event.getLinkedUser() == null) {
236 throw new NullPointerException("event.linkedUser is null"); //NOI18N
237 } else if (event.getLinkedUser().getUserId() == null) {
239 throw new NullPointerException("event.linkedUser.userId is null"); //NOI18N
240 } else if (event.getLinkedUser().getUserId() < 1) {
242 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getLinkedUser(), event.getLinkedUser().getUserId())); //NOI18N
246 this.updateList(event.getLinkedUser());
252 this.setUserId(event.getLinkedUser().getUserId());
256 * Event observer for locked users
258 * @param event Event being fired
260 public void afterAdminLockedUserEvent (@Observes final ObservableAdminLockedUserEvent event) {
261 // event should not be null
264 throw new NullPointerException("event is null"); //NOI18N
265 } else if (event.getLockedUser() == null) {
267 throw new NullPointerException("event.lockedUser is null"); //NOI18N
268 } else if (event.getLockedUser().getUserId() == null) {
270 throw new NullPointerException("event.lockedUser.userId is null"); //NOI18N
271 } else if (event.getLockedUser().getUserId() < 1) {
273 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getLockedUser(), event.getLockedUser().getUserId())); //NOI18N
277 this.updateList(event.getLockedUser());
281 * Event observer for unlocked users
283 * @param event Event being fired
285 public void afterAdminUnlockedUserEvent (@Observes final ObservableAdminUnlockedUserEvent event) {
286 // event should not be null
289 throw new NullPointerException("event is null"); //NOI18N
290 } else if (event.getUnlockedUser() == null) {
292 throw new NullPointerException("event.unlockedUser is null"); //NOI18N
293 } else if (event.getUnlockedUser().getUserId() == null) {
295 throw new NullPointerException("event.unlockedUser.userId is null"); //NOI18N
296 } else if (event.getUnlockedUser().getUserId() < 1) {
298 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUnlockedUser(), event.getUnlockedUser().getUserId())); //NOI18N
302 this.updateList(event.getUnlockedUser());
306 * Event observer for updated user data by administrator
308 * @param event Event being updated
310 public void afterAdminUpdatedUserDataEvent (@Observes final ObservableAdminUpdatedUserDataEvent event) {
311 // event should not be null
314 throw new NullPointerException("event is null"); //NOI18N
315 } else if (event.getUpdatedUser() == null) {
317 throw new NullPointerException("event.updatedUser is null"); //NOI18N
318 } else if (event.getUpdatedUser().getUserId() == null) {
320 throw new NullPointerException("event.updatedUser.userId is null"); //NOI18N
321 } else if (event.getUpdatedUser().getUserId() < 1) {
323 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUpdatedUser(), event.getUpdatedUser().getUserId())); //NOI18N
327 this.updateList(event.getUpdatedUser());
334 * Event observer when user confirmed account.
336 * @param event Event being fired
338 public void afterUserConfirmedAccountEvent (@Observes final ObservableUserConfirmedAccountEvent event) {
339 // event should not be null
342 throw new NullPointerException("event is null"); //NOI18N
343 } else if (event.getConfirmedUser() == null) {
345 throw new NullPointerException("event.confirmedUser is null"); //NOI18N
346 } else if (event.getConfirmedUser().getUserId() == null) {
348 throw new NullPointerException("event.confirmedUser.userId is null"); //NOI18N
349 } else if (event.getConfirmedUser().getUserId() < 1) {
351 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getConfirmedUser(), event.getConfirmedUser().getUserId())); //NOI18N
355 this.updateList(event.getConfirmedUser());
359 * Event observer for logged-in user
361 * @param event Event instance
363 public void afterUserLoginEvent (@Observes final ObservableUserLoggedInEvent event) {
364 // event should not be null
367 throw new NullPointerException("event is null"); //NOI18N
368 } else if (event.getLoggedInUser() == null) {
370 throw new NullPointerException("event.registeredUser is null"); //NOI18N
371 } else if (event.getLoggedInUser().getUserId() == null) {
373 throw new NullPointerException("event.registeredUser.userId is null"); //NOI18N
374 } else if (event.getLoggedInUser().getUserId() < 1) {
376 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getLoggedInUser(), event.getLoggedInUser().getUserId())); //NOI18N
379 // "Cache" user instance
380 User loggedInUser = event.getLoggedInUser();
382 // Copy all data to this bean
383 this.copyUser(loggedInUser);
385 // Is the user visible?
386 if (Objects.equals(loggedInUser.getUserProfileMode(), ProfileMode.PUBLIC)) {
387 // Yes, then add user
388 this.visibleUserList.add(loggedInUser);
393 * Event observer for new user registrations
395 * @param event User registration event
397 public void afterUserRegistrationEvent (@Observes final ObservableUserRegisteredEvent event) {
398 // event should not be null
401 throw new NullPointerException("event is null"); //NOI18N
402 } else if (event.getRegisteredUser() == null) {
404 throw new NullPointerException("event.registeredUser is null"); //NOI18N
405 } else if (event.getRegisteredUser().getUserId() == null) {
407 throw new NullPointerException("event.registeredUser.userId is null"); //NOI18N
408 } else if (event.getRegisteredUser().getUserId() < 1) {
410 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getRegisteredUser(), event.getRegisteredUser().getUserId())); //NOI18N
414 User registeredUser = event.getRegisteredUser();
416 // Copy all data from registered->user
417 this.copyUser(registeredUser);
423 this.updateList(registeredUser);
426 this.addUserName(registeredUser);
428 // Is the account public?
429 if (Objects.equals(registeredUser.getUserProfileMode(), ProfileMode.PUBLIC)) {
430 // Also add it to this list
431 this.visibleUserList.add(registeredUser);
435 this.setUserId(registeredUser.getUserId());
439 * Method being call after user's password has been updated (and history
440 * entry has been created).
442 * @param event Event being observed
444 public void afterUserUpdatedPasswordEvent (@Observes final ObservableUpdatedUserPasswordEvent event) {
448 throw new NullPointerException("event is null"); //NOI18N
449 } else if (event.getPasswordHistory() == null) {
451 throw new NullPointerException("event.passwordHistory is null"); //NOI18N
452 } else if (event.getPasswordHistory().getUserPasswordHistoryId() == null) {
454 throw new NullPointerException("event.passwordHistory.userPasswordHistoryId is null"); //NOI18N
455 } else if (event.getPasswordHistory().getUserPasswordHistoryId() < 1) {
457 throw new IllegalArgumentException(MessageFormat.format("event.passwordHistory.userPasswordHistoryId={0} is in valid", event.getPasswordHistory().getUserPasswordHistoryId())); //NOI18N
461 this.updateList(event.getPasswordHistory().getUserPasswordHistoryUser());
465 * Listens to fired event when user updated personal data
467 * @param event Event being fired
469 public void afterUserUpdatedPersonalDataEvent (@Observes final ObservableUpdatedUserPersonalDataEvent event) {
473 throw new NullPointerException("event is null"); //NOI18N
474 } else if (event.getUpdatedUser() == null) {
476 throw new NullPointerException("event.updatedUser is null"); //NOI18N
477 } else if (event.getUpdatedUser().getUserId() == null) {
479 throw new NullPointerException("event.updatedUser.userId is null"); //NOI18N
480 } else if (event.getUpdatedUser().getUserId() < 1) {
482 throw new IllegalArgumentException(MessageFormat.format("event.updatedUser.userId={0} is in valid", event.getUpdatedUser().getUserId())); //NOI18N
486 this.updateList(event.getUpdatedUser());
490 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
491 public List<User> allUsers () {
493 return this.userList;
497 @SuppressWarnings ("ReturnOfCollectionOrArrayField")
498 public List<User> allVisibleUsers () {
500 return this.visibleUserList;
504 public User createUserInstance (final boolean createContactData) {
506 //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("{0}.createUserInstance: CALLED!", this.getClass().getSimpleName()));
508 // Required personal data must be set
509 assert (this.isRequiredPersonalDataSet()) : "not all personal data is set"; //NOI18N
511 // Create new user instance
512 User user = new LoginUser();
514 // Is user name required?
515 if (!this.isUserNameRequired()) {
516 // Generate pseudo-random user name
517 String randomName = this.userBean.generateRandomUserName();
519 // Set it and inivisible profile
520 this.setUserName(randomName);
521 this.setUserProfileMode(ProfileMode.INVISIBLE);
523 // Generate random password
524 String randomPassword = UserUtils.createRandomPassword(PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
526 // Set random password
527 this.setUserPassword(randomPassword);
528 this.setUserPasswordRepeat(randomPassword);
531 // Set user name and mode
532 user.setUserName(this.getUserName());
533 user.setUserProfileMode(this.getUserProfileMode());
535 // Is multiple registration page
536 if ((createContactData) || (!this.featureController.isFeatureEnabled("user_register_multiple_page"))) { //NOI18N
537 // Create contact instance
538 Contact contact = this.contactController.createContactInstance();
541 //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("{0}.createUserInstance: contact={1}", this.getClass().getSimpleName(), contact));
543 // Set contact in user
544 user.setUserContact(contact);
548 //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("{0}.createUserInstance: user={1} - EXIT!", this.getClass().getSimpleName(), user));
555 public User createUserLogin () {
557 //* NOISY-DEBUG */ System.out.println(MessageFormat.format("{0}.createUserLogin: CALLED!", this.getClass().getSimpleName()));
560 if (this.getUserName() == null) {
562 throw new NullPointerException("recruiterName is null"); //NOI18N
563 } else if (this.getUserName().isEmpty()) {
565 throw new IllegalStateException("recruiterName is empty."); //NOI18N
568 // Create new recruiter instance
569 User recruiter = new LoginUser();
571 // Update all data ...
572 recruiter.setUserName(this.getUserName());
575 //* NOISY-DEBUG */ System.out.println(MessageFormat.format("{0}.createUserLogin: recruiter={1} - EXIT!", this.getClass().getSimpleName(), recruiter));
577 // Return the new instance
582 public String doChangePersonalData () {
583 // This method shall only be called if the user is logged-in
584 if (!this.userLoginController.isUserLoggedIn()) {
586 throw new IllegalStateException("User is not logged-in"); //NOI18N
587 } else if (!this.isRequiredChangePersonalDataSet()) {
588 // Not all required fields are set
589 throw new FaceletException("Not all required fields are set."); //NOI18N
590 } else if (!this.userLoginController.ifCurrentPasswordMatches()) {
591 // Password not matching
592 throw new FaceletException(new UserPasswordMismatchException(this.userLoginController.getLoggedInUser()));
593 } else if (!this.featureController.isFeatureEnabled("change_user_personal_data")) {
594 // Editing is not allowed
595 throw new IllegalStateException("User tried to edit personal data."); //NOI18N
599 User user = this.userLoginController.getLoggedInUser();
601 // Copy contact data to contact instance
602 this.contactController.updateContactDataFromController(user.getUserContact());
604 // It should be there, so run some tests on it
605 assert (user instanceof User) : "Instance userLoginController.loggedInUser is null"; //NOI18N
606 assert (user.getUserId() instanceof Long) : "Instance userLoginController.loggedInUser.userId is null"; //NOI18N
607 assert (user.getUserId() > 0) : MessageFormat.format("userLoginController.loggedInUser.userId={0} is invalid", user.getUserId()); //NOI18N
608 assert (user.getUserContact() instanceof Contact) : "Instance userLoginController.loggedInUser.userContact is null"; //NOI18N
609 assert (user.getUserContact().getContactId() instanceof Long) : "Instance userLoginController.userContact.contactId is null"; //NOI18N
610 assert (user.getUserContact().getContactId() > 0) : MessageFormat.format("Instance userLoginController.userContact.contactId={0} is invalid", user.getUserContact().getContactId()); //NOI18N
613 user.setUserProfileMode(this.getUserProfileMode());
615 // Send it to the EJB
616 User updatedUser = this.userBean.updateUserPersonalData(user);
619 this.updatedPersonalDataEvent.fire(new UpdatedUserPersonalDataEvent(updatedUser));
622 return "user_contact_data_saved"; //NOI18N
626 public Long getUserId () {
631 public void setUserId (final Long userId) {
632 this.userId = userId;
636 public String getUserName () {
637 return this.userName;
641 public void setUserName (final String userName) {
642 this.userName = userName;
646 public String getUserPassword () {
647 return this.userPassword;
651 public void setUserPassword (final String userPassword) {
652 this.userPassword = userPassword;
656 public String getUserPasswordRepeat () {
657 return this.userPasswordRepeat;
661 public void setUserPasswordRepeat (final String userPasswordRepeat) {
662 this.userPasswordRepeat = userPasswordRepeat;
666 public ProfileMode getUserProfileMode () {
667 return this.userProfileMode;
671 public void setUserProfileMode (final ProfileMode userProfileMode) {
672 this.userProfileMode = userProfileMode;
676 * Post-initialization of this class
679 public void init () {
680 // Initialize user list
681 this.userList = this.userBean.allUsers();
683 // Get full user name list for reducing EJB calls
684 this.userNameList = this.userBean.getUserNameList();
686 // Is the user logged-in?
687 if (this.userLoginController.isUserLoggedIn()) {
688 // Is logged-in, so load also users visible to memebers
689 this.visibleUserList = this.userBean.allMemberPublicVisibleUsers();
691 // Initialize user list
692 this.visibleUserList = this.userBean.allPublicUsers();
697 public boolean isContactFound (final Contact contact) {
698 // The contact must be valid
699 if (null == contact) {
701 throw new NullPointerException("contact is null"); //NOI18N
702 } else if (contact.getContactId() == null) {
704 throw new NullPointerException("contact.contactId is null"); //NOI18N
705 } else if (contact.getContactId() < 1) {
707 throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
710 // Default is not found
711 boolean isFound = false;
714 Iterator<User> iterator = this.allUsers().iterator();
716 // Loop through all entries
717 while (iterator.hasNext()) {
719 User next = iterator.next();
721 // Compare both objects
722 if (Objects.equals(contact, next.getUserContact())) {
734 public boolean isPublicUserProfileEnabled () {
735 // Get context parameter
736 String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_public_profile_enabled"); //NOI18N
739 boolean isEnabled = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
741 // This requires user names being enabled, too.
742 if ((isEnabled) && (!this.isUserNameRequired())) {
743 // Not valid state, users must be able to modify their profile, especially when it is public
744 throw new IllegalStateException("Public user profiles are enabled but user name requirement is disabled, this is not possible."); //NOI18N
752 public boolean isRequiredChangePersonalDataSet () {
753 return ((this.getUserProfileMode() != null) &&
754 (this.getUserName() != null) && (!this.getUserName().isEmpty()) &&
755 (this.contactController.isRequiredChangePersonalDataSet()));
759 public boolean isRequiredPersonalDataSet () {
760 if (this.featureController.isFeatureEnabled("user_register_multiple_page")) { //NOI18N
761 // Multiple registration page
762 return this.contactController.isRequiredPersonalDataSet();
764 // Single registration page
765 return (((this.getUserName() != null) || (!this.isUserNameRequired())) &&
766 (this.getUserProfileMode() != null) &&
767 (this.contactController.isRequiredPersonalDataSet()) &&
768 (this.getUserPassword() != null) &&
769 (this.getUserPasswordRepeat() != null));
774 public boolean isSamePasswordEntered () {
775 return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())));
779 public boolean isUserIdEmpty () {
780 return ((this.getUserId() == null) || (this.getUserId() == 0));
784 public boolean isUserNameRegistered (final User user) {
785 return ((this.userNameList instanceof List) && (this.userNameList.contains(user.getUserName())));
789 public boolean isUserNameRequired () {
790 // Get context parameter
791 String contextParameter = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("is_user_name_required"); //NOI18N
794 boolean isRequired = ((contextParameter instanceof String) && (contextParameter.toLowerCase().equals("true"))); //NOI18N
801 public boolean isVisibleUserFound () {
802 return ((this.visibleUserList instanceof List) && (this.visibleUserList.size() > 0));
806 public User lookupUserByEmailAddress (final String emailAddress) throws UserEmailAddressNotFoundException {
807 // Parameter must be valid
808 if (null == emailAddress) {
810 throw new NullPointerException("emailAddress is null"); //NOI18N
811 } else if (emailAddress.isEmpty()) {
813 throw new IllegalArgumentException("emailAddress is empty"); //NOI18N
819 // Try to lookup it in visible user list
820 for (final Iterator<User> iterator = this.userList.iterator(); iterator.hasNext();) {
822 User next = iterator.next();
824 // Contact should be set
825 if (next.getUserContact() == null) {
827 throw new NullPointerException(MessageFormat.format("next.userContact is null for user id {0}", next.getUserId())); //NOI18N
828 } else if (next.getUserContact().getContactEmailAddress() == null) {
829 // Email address should be set
830 throw new NullPointerException(MessageFormat.format("next.userContact.contactEmailAddress is null for user id {0}", next.getUserId())); //NOI18N
833 // Is the email address found?
834 if (Objects.equals(next.getUserContact().getContactEmailAddress(), emailAddress)) {
835 // Copy to other variable
843 // Not visible for the current user
844 throw new UserEmailAddressNotFoundException(emailAddress);
852 public User lookupUserById (final Long userId) throws UserNotFoundException {
853 // Parameter must be valid
854 if (null == userId) {
856 throw new NullPointerException("userId is null"); //NOI18N
857 } else if (userId < 1) {
859 throw new IllegalArgumentException(MessageFormat.format("userId={0} is not valid.", userId)); //NOI18N
865 // Try to lookup it in visible user list
866 for (final Iterator<User> iterator = this.userList.iterator(); iterator.hasNext();) {
868 User next = iterator.next();
870 // Is the user id found?
871 if (Objects.equals(next.getUserId(), userId)) {
872 // Copy to other variable
880 // Not visible for the current user
881 throw new UserNotFoundException(userId);
889 * Adds user's name to bean's internal list. It also updates the public user
890 * list if the user has decided to have a public account,
892 * @param user User instance
894 private void addUserName (final User user) {
895 // Make sure the entry is not added yet
896 if (this.userNameList.contains(user.getUserName())) {
898 throw new IllegalArgumentException(MessageFormat.format("User name {0} already added.", user.getUserName())); //NOI18N
899 } else if (this.contactController.isEmailAddressRegistered(user.getUserContact())) {
901 throw new IllegalArgumentException(MessageFormat.format("Email address {0} already added.", user.getUserContact().getContactEmailAddress())); //NOI18N
905 this.userNameList.add(user.getUserName());
911 private void clear () {
914 this.setUserId(null);
915 this.setUserProfileMode(null);
918 this.setUserName(null);
919 this.setUserPassword(null);
920 this.setUserPasswordRepeat(null);
924 * Copies given user into the controller
926 * @param user User instance
928 private void copyUser (final User user) {
929 // Make sure the instance is valid
932 throw new NullPointerException("user is null"); //NOI18N
933 } else if (user.getUserContact() == null) {
935 throw new NullPointerException("user.userContact is null"); //NOI18N
940 this.setUserId(user.getUserId());
941 this.setUserProfileMode(user.getUserProfileMode());
945 * Removes user from all lists
947 * @param user User to remove
949 private void removeFromList (final User user) {
950 // The user should be valid
953 throw new NullPointerException("user is null"); //NOI18N
954 } else if (user.getUserId() == null) {
956 throw new NullPointerException("user.userId is null"); //NOI18N
957 } else if (user.getUserId() < 1) {
959 throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is invalid", user.getUserId())); //NOI18N
962 // Remove it from lists
963 this.userList.remove(user);
964 this.visibleUserList.remove(user);
966 // Remove name from list
967 this.userNameList.remove(user.getUserName());
971 * Updates list with given user instance
973 * @param user User instance
975 private void updateList (final User user) {
976 // The user should be valid
979 throw new NullPointerException("user is null"); //NOI18N
980 } else if (user.getUserId() == null) {
982 throw new NullPointerException("user.userId is null"); //NOI18N
983 } else if (user.getUserId() < 1) {
985 throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is invalid", user.getUserId())); //NOI18N
986 } else if (user.getUserContact() == null) {
988 throw new NullPointerException("user.userContact is null"); //NOI18N
989 } else if (user.getUserContact().getContactId() == null) {
991 throw new NullPointerException("user.userContact.contactId is null"); //NOI18N
992 } else if (user.getUserContact().getContactId() < 1) {
994 throw new NullPointerException(MessageFormat.format("user.userContact.contactId={0} is invalid.", user.getUserContact().getContactId())); //NOI18N
997 // Get iterator from list
998 Iterator<User> iterator = this.userList.iterator();
1000 // "Walk" through all entries
1001 while (iterator.hasNext()) {
1003 User next = iterator.next();
1005 // Is user id number the same?
1006 if (Objects.equals(user.getUserId(), next.getUserId())) {
1007 // Found entry, so remove it and abort
1008 this.userList.remove(next);
1014 this.userList.add(user);