From 649600c39b6944c967c2d59fcbde0fed62f01257 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 9 Jul 2017 12:46:02 +0200 Subject: [PATCH] Please cherry-pick: - renamed updatedUser -> managedUser, which is more accurate - always set values in managed instances to have the JPA noticed it MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../user/AddressbookUserSessionBean.java | 43 ++++++++++++------- .../AddressbookResendLinkSessionBean.java | 5 ++- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/java/org/mxchange/jusercore/model/user/AddressbookUserSessionBean.java b/src/java/org/mxchange/jusercore/model/user/AddressbookUserSessionBean.java index 9cdc6a7..6a0724b 100644 --- a/src/java/org/mxchange/jusercore/model/user/AddressbookUserSessionBean.java +++ b/src/java/org/mxchange/jusercore/model/user/AddressbookUserSessionBean.java @@ -169,22 +169,22 @@ public class AddressbookUserSessionBean extends BaseAddressbookDatabaseBean impl throw new IllegalArgumentException("baseUrl is empty"); //NOI18N } - // Update user status and remove confirmation key - user.setUserAccountStatus(UserAccountStatus.CONFIRMED); - user.setUserConfirmKey(null); - user.setUserUpdated(new GregorianCalendar()); - // Update user account - User updatedUser = this.updateUserData(user); + User managedUser = this.updateUserData(user); + + // Update user status and remove confirmation key + managedUser.setUserAccountStatus(UserAccountStatus.CONFIRMED); + managedUser.setUserConfirmKey(null); + managedUser.setUserUpdated(new GregorianCalendar()); // Send out email - this.sendEmail("User account confirmed", "user_account_confirmed", updatedUser, baseUrl, null); //NOI18N + this.sendEmail("User account confirmed", "user_account_confirmed", managedUser, baseUrl, null); //NOI18N // Trace message - this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.confirmAccount: updatedUser={1} - EXIT!", this.getClass().getSimpleName(), updatedUser)); //NOI18N + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.confirmAccount: managedUser={1} - EXIT!", this.getClass().getSimpleName(), managedUser)); //NOI18N // Return updated instance - return updatedUser; + return managedUser; } @Override @@ -596,14 +596,20 @@ public class AddressbookUserSessionBean extends BaseAddressbookDatabaseBean impl // user should not be null if (null == user) { - // Abort here + // Throw NPE throw new NullPointerException("user is null"); //NOI18N } else if (user.getUserId() == null) { // Throw NPE again throw new NullPointerException("user.userId is null"); //NOI18N } else if (user.getUserId() < 1) { - // Not valid - throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N + // Not valid number + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid.", user.getUserId())); //NOI18N + } else if (user.getUserName() == null) { + // Throw NPE again + throw new NullPointerException("user.userName is null"); //NOI18N + } else if (user.getUserName().isEmpty()) { + // Empty string + throw new IllegalArgumentException("user.userName is empty"); //NOI18N } else if (user.getUserAccountStatus() == null) { // Throw NPE throw new NullPointerException("user.userAccountStatus is null"); //NOI18N @@ -631,14 +637,21 @@ public class AddressbookUserSessionBean extends BaseAddressbookDatabaseBean impl } // Call other method - User updatedUser = this.updateUserData(user); + User managedUser = this.updateUserData(user); + + // Update user account + managedUser.setUserUpdated(new GregorianCalendar()); // Create history entry - PasswordHistory entry = new UserPasswordHistory(user.getUserEncryptedPassword(), updatedUser); + PasswordHistory entry = new UserPasswordHistory(user.getUserEncryptedPassword(), managedUser); // Set created timestamp entry.setUserPasswordHistoryCreated(new GregorianCalendar()); + // Merge user to make sure it is not re-persisted + User mergedUser = this.getEntityManager().merge(managedUser); + entry.setUserPasswordHistoryUser(mergedUser); + // Persist it this.getEntityManager().persist(entry); @@ -646,7 +659,7 @@ public class AddressbookUserSessionBean extends BaseAddressbookDatabaseBean impl this.getEntityManager().flush(); // Send email to user - this.sendEmail("User password change", "user_password_change", user, baseUrl, null); //NOI18N + this.sendEmail("User password change", "user_password_change", managedUser, baseUrl, null); //NOI18N // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserPassword: entry.userPasswordHistoryId={1} - EXIT!", this.getClass().getSimpleName(), entry.getUserPasswordHistoryId())); //NOI18N diff --git a/src/java/org/mxchange/jusercore/model/user/resendlink/AddressbookResendLinkSessionBean.java b/src/java/org/mxchange/jusercore/model/user/resendlink/AddressbookResendLinkSessionBean.java index 32c4352..e79147a 100644 --- a/src/java/org/mxchange/jusercore/model/user/resendlink/AddressbookResendLinkSessionBean.java +++ b/src/java/org/mxchange/jusercore/model/user/resendlink/AddressbookResendLinkSessionBean.java @@ -98,6 +98,9 @@ public class AddressbookResendLinkSessionBean extends BaseAddressbookDatabaseBea // Get new registration key String confirmationKey = this.registerBean.generateConfirmationKey(user); + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.resendConfirmationLink: confirmationKey={1}", this.getClass().getSimpleName(), confirmationKey)); //NOI18N + // Get managed instance User managedUser = this.getEntityManager().find(LoginUser.class, user.getUserId()); @@ -106,7 +109,7 @@ public class AddressbookResendLinkSessionBean extends BaseAddressbookDatabaseBea // Send email // @TODO: Internationlize the subject line somehow - this.sendEmail("Resend user confirmation link", "user_resend_confirmation_link", user, baseUrl, null); //NOI18N + this.sendEmail("Resend user confirmation link", "user_resend_confirmation_link", managedUser, baseUrl, null); //NOI18N // Log trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.resendConfirmationLink: managedUser={1} - EXIT!", this.getClass().getSimpleName(), managedUser)); //NOI18N -- 2.39.5