From 2df78299e45b9058fcb03ac6d5a27f63c18ae7a2 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Tue, 8 Mar 2016 22:04:32 +0100 Subject: [PATCH] addressbook-user-ejb has been merged into addressbook-ejb: - updated project files - added jcore.jar - updated jar(s) --- lib/jcontacts-business-core.jar | Bin 64576 -> 64576 bytes lib/jcontacts-core.jar | Bin 21279 -> 21291 bytes lib/jcore.jar | Bin 0 -> 13656 bytes lib/jphone-core.jar | Bin 25281 -> 26423 bytes nbproject/build-impl.xml | 24 +- nbproject/genfiles.properties | 4 +- nbproject/project.properties | 3 + nbproject/project.xml | 1 + .../model/login/UserLoginSessionBean.java | 141 ++++++++ .../register/UserRegistrationSessionBean.java | 115 ++++++ .../jusercore/model/user/UserSessionBean.java | 326 ++++++++++++++++++ 11 files changed, 602 insertions(+), 12 deletions(-) create mode 100644 lib/jcore.jar create mode 100644 src/java/org/mxchange/jusercore/model/login/UserLoginSessionBean.java create mode 100644 src/java/org/mxchange/jusercore/model/register/UserRegistrationSessionBean.java create mode 100644 src/java/org/mxchange/jusercore/model/user/UserSessionBean.java diff --git a/lib/jcontacts-business-core.jar b/lib/jcontacts-business-core.jar index 38f7bec9b70f927a6c77d80bf420e15e01e2b9eb..fcaadf8ccb43000591b17665bdb1e7b4d4824515 100644 GIT binary patch delta 520 zcmX@`gZaP@X5IjAW)?061`Y;>+VvR|c{P}8fRx32=H$)k6K~0bsXrPZYO*?`6_`$8 zbOF<=86Cm&dq!6>Aa@3DfV%ioE}ED~d20AXXWw7&q~<_(;i#6YHOPE{yi12b-@y^;bmjynE?h#d4# zlLL#qN?R@tW=yGj#|mb&wrDGW8Jm|J;{Y>i)*8ry8S78UvV$4tFE;al8KL)Dn81uX z51v67M<3hqF$2S8GTSE$P{2%f{A3SOF}eAZKA7GL6bJD?eDVU*wx2`5^pwwmVEV=9 zP%!QAB^XRk`w|YOKYR%T)1F`b!Sw8}@nHJz*Eld8_bnStpZS&rrY*lGgX#I-A$*=6 wIbeSEk5n-I_(ukq_WPL#rZ@d80n?hla>4Y>Ul8>izth3|qTdj8*M4UK056>3fB*mh delta 520 zcmX@`gZaP@X5IjAW)?061`Y-W_1?6Jyc*1EK+0l1n7Snorv88hC#y4Bfw+@X7+t{h zYDPye{hrYkOq(+~gXvl(cQAdN$qh^kFxv|P^?6vvzMgiDm4N|-O(q{)qBPkdi+}S( z=6kGQ>GF3XGK<6*7(mz zp7tdiOn>+i2Btl~`h)4&U*o~_->-3CI__IGm_G9@3rt&nPX^QTzeD&uKXSnQ>L00K p`tgqpFzxp<5lnCTSpudtf8~PdnZF?FIew>u`9;4W>aP9H0s!%>%SZqK diff --git a/lib/jcontacts-core.jar b/lib/jcontacts-core.jar index a9baa32fa6cfb062f87ed9a9ccba1ebe106e8244..e905316a232cc3f743e47c1d041b3c782fa666f1 100644 GIT binary patch delta 474 zcmbQgjB)icM&1B#W)?061`Y;>s`VKYc{P|Tft1C3<`N)vOCC)9(Ew4C)ftVzbPS^v zn4Zb#2&V5c+6n>XJ>He>`^v!yGzy4y7$z?WRGcj5#6CGMkZp4mQxL15M0#q8bADb) zVseR3VqS_*=Hy-Mfr1jnXrh}XIeeMH2L2K9ob*MLfdPaKKn5CZUd8=ZfCPhN88<7+ zHHw3rxp}GS7cMYkj>BwDFvH603=1>R*ONK@EkNF$?BZ_^_EDR^KA7GC6bJeIv%eFV zwg~V7)2#u4VESf&FE5JECmRR)%7a8uoz4IUOB$0V&kuyy@-R@EX^AN~oaBSRAwAhK zNSbN316Zg&NJRl;()`lW+H4jE1`u|Eo5R4cq|wrAvOs|3Wd1XJy?I7P-Nm{U;tqqhRKNmijyD6v2PAxieTjvO;0Ux&d)1JOfCt? z$e+AUCXi3G7+GkufUGRzW*bfeCa_t@)|q~Ir^&zo!UkZoHqYn&CqR@r^CUpd+Pu;9 z3m2HN!eKTinBnGihJ_jE%gLht79ej<4)C`J`(Tp4KA1iN6bJeAzrPchb_wtT(-Q*% z!SvGrUtScSPPPy9RRD>gx|abCmNdq2gF|9Ix8US^fjnSi-UdoD%`gQE7fAC?erL)y z*)9koB$O0|N-Vzzt_$SkkEL1yn3KInPUXvS_dX+b=(m FEC4oLmTmw5 diff --git a/lib/jcore.jar b/lib/jcore.jar new file mode 100644 index 0000000000000000000000000000000000000000..23ef19d3e26ecc03e092895707158a0296bb95bf GIT binary patch literal 13656 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 delta 5942 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 diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml index 12a05fd..a385450 100644 --- a/nbproject/build-impl.xml +++ b/nbproject/build-impl.xml @@ -826,6 +826,7 @@ exists or setup the property manually. For example like this: + @@ -837,6 +838,7 @@ exists or setup the property manually. For example like this: + @@ -847,19 +849,21 @@ exists or setup the property manually. For example like this: - - - - - - - - - - + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties index 8c01763..5217369 100644 --- a/nbproject/genfiles.properties +++ b/nbproject/genfiles.properties @@ -3,6 +3,6 @@ build.xml.script.CRC32=7d41e0fd build.xml.stylesheet.CRC32=5910fda3@1.51.1 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=67e811b4 -nbproject/build-impl.xml.script.CRC32=db1e22fc +nbproject/build-impl.xml.data.CRC32=73853deb +nbproject/build-impl.xml.script.CRC32=b9ae5896 nbproject/build-impl.xml.stylesheet.CRC32=6096d939@1.55.1 diff --git a/nbproject/project.properties b/nbproject/project.properties index 08b86a3..4e968a2 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -24,6 +24,7 @@ excludes= file.reference.jcontacts-business-core.jar=lib/jcontacts-business-core.jar file.reference.jcontacts-core.jar=lib/jcontacts-core.jar file.reference.jcore-logger-lib.jar=lib/jcore-logger-lib.jar +file.reference.jcore.jar=lib/jcore.jar file.reference.jcoreee.jar=lib/jcoreee.jar file.reference.jcountry-core.jar=lib/jcountry-core.jar file.reference.jphone-core.jar=lib/jphone-core.jar @@ -44,6 +45,7 @@ jar.compress=false jar.name=addressbook-ejb.jar jars.in.ejbjar=false javac.classpath=\ + ${file.reference.jcore.jar}:\ ${file.reference.jcoreee.jar}:\ ${file.reference.jcore-logger-lib.jar}:\ ${file.reference.jcountry-core.jar}:\ @@ -93,6 +95,7 @@ source.encoding=UTF-8 source.reference.jcontacts-business-core.jar=../jcontacts-business-core/src/ source.reference.jcontacts-core.jar=../jcontacts-core/src/ source.reference.jcore-logger-lib.jar=../jcore-logger-lib/src/ +source.reference.jcore.jar=../jcore/src/ source.reference.jcoreee.jar=../jcoreee/src/ source.reference.jcountry-core.jar=../jcountry-core/src/ source.reference.jphone-core.jar=../jphone-core/src/ diff --git a/nbproject/project.xml b/nbproject/project.xml index e8cc12d..7e85124 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -5,6 +5,7 @@ addressbook-ejb 1.6.5 + file.reference.jcore.jar file.reference.jcoreee.jar file.reference.jcore-logger-lib.jar file.reference.jcountry-core.jar diff --git a/src/java/org/mxchange/jusercore/model/login/UserLoginSessionBean.java b/src/java/org/mxchange/jusercore/model/login/UserLoginSessionBean.java new file mode 100644 index 0000000..9983247 --- /dev/null +++ b/src/java/org/mxchange/jusercore/model/login/UserLoginSessionBean.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016 Roland Haeder + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.mxchange.jusercore.model.login; + +import java.text.MessageFormat; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import org.mxchange.jcoreee.database.BaseDatabaseBean; +import org.mxchange.jusercore.container.login.LoginContainer; +import org.mxchange.jusercore.exceptions.UserNotFoundException; +import org.mxchange.jusercore.exceptions.UserPasswordMismatchException; +import org.mxchange.jusercore.exceptions.UserStatusLockedException; +import org.mxchange.jusercore.exceptions.UserStatusUnconfirmedException; +import org.mxchange.jusercore.model.register.UserRegistrationSessionBeanRemote; +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.status.UserAccountStatus; + +/** + * A session bean for user logins + *

+ * @author Roland Haeder + */ +@Stateless (name = "login", mappedName = "ejb/stateless-addressbook-login", description = "A bean handling the user login for Addressbook project") +public class UserLoginSessionBean extends BaseDatabaseBean implements UserLoginSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 21_785_978_127_581_965L; + + /** + * Registration bean + */ + @EJB + private UserRegistrationSessionBeanRemote registerBean; + + /** + * User bean + */ + @EJB + private UserSessionBeanRemote userBean; + + @Override + public User validateUserAccountStatus (final LoginContainer container) throws UserNotFoundException, UserStatusLockedException, UserStatusUnconfirmedException, UserPasswordMismatchException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("loginUser: container={0} - CALLED!", container)); //NOI18N + + // Check some beans + assert (this.userBean instanceof UserSessionBeanRemote) : "this.userBean is not set"; //NOI18N + assert (this.registerBean instanceof UserRegistrationSessionBeanRemote) : "this.registerBean is not set"; //NOI18N + + // user should not be null + if (null == container) { + // Abort here + throw new NullPointerException("container is null"); //NOI18N + } else if (container.getUser() == null) { + // NPE again + throw new NullPointerException("container.user is null"); //NOI18N + } else if (container.getUserPassword() == null) { + // And yet again NPE + throw new NullPointerException("container.userPassword is null"); //NOI18N + } else if (container.getUserPassword().isEmpty()) { + // Empty password is not allowed, hardcoded. + throw new IllegalArgumentException("container.userPassword is empty"); //NOI18N + } + + // Is the account there? + if (!this.registerBean.isUserNameRegistered(container.getUser())) { + // Not registered + throw new UserNotFoundException(container.getUser()); + } + + // Get user instance from persistance + User updatedUser = this.userBean.fillUserData(container.getUser()); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("loginUser: updatedUser={0}", updatedUser)); //NOI18N + + // Is the user account unconfirmed? + if (updatedUser.getUserAccountStatus().equals(UserAccountStatus.UNCONFIRMED)) { + // Is unconfirmed + throw new UserStatusUnconfirmedException(container.getUser()); + } else if (updatedUser.getUserAccountStatus().equals(UserAccountStatus.LOCKED)) { + // Is locked + throw new UserStatusLockedException(container.getUser()); + } else if (!this.isPasswordMatching(container, updatedUser)) { + // Not matcing passwords + throw new UserPasswordMismatchException(container.getUser()); + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("loginUser: updatedUser={0} - EXIT!", updatedUser)); //NOI18N + + // Return it + return updatedUser; + } + + /** + * Checks if password matches of both instances. Both user instances must + * not match, the first one is the one from the calling bean/controller, the + * second is the from database. + *

+ * @param container Container instance holding the user instance and + * unencrypted password + * @param updatedUser User instance found for given user name + *

+ * @return Whether the password matches + */ + private boolean isPasswordMatching (final LoginContainer container, final User updatedUser) { + // First math both instances + if (null == container) { + // Throw NPE + throw new NullPointerException("container is null"); //NOI18N + } else if (null == updatedUser) { + // Throw NPE + throw new NullPointerException("updatedUser is null"); //NOI18N + } else if (container.getUser().equals(updatedUser)) { + // Both same instance! + throw new IllegalArgumentException(MessageFormat.format("container.user matches updatedUser: {0}", container.getUser())); //NOI18N + } + + // Is it the same same password? + return UserUtils.ifPasswordMatches(container, updatedUser); + } +} diff --git a/src/java/org/mxchange/jusercore/model/register/UserRegistrationSessionBean.java b/src/java/org/mxchange/jusercore/model/register/UserRegistrationSessionBean.java new file mode 100644 index 0000000..5eb8c7e --- /dev/null +++ b/src/java/org/mxchange/jusercore/model/register/UserRegistrationSessionBean.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2016 Roland Haeder + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.mxchange.jusercore.model.register; + +import java.text.MessageFormat; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import org.mxchange.jcoreee.database.BaseDatabaseBean; +import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException; +import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException; +import org.mxchange.jusercore.model.user.User; +import org.mxchange.jusercore.model.user.UserSessionBeanRemote; + +/** + * A session bean for user registration + *

+ * @author Roland Haeder + */ +@Stateless (name = "register", mappedName = "ejb/stateless-addressbook-register", description = "A bean handling the user registration") +public class UserRegistrationSessionBean extends BaseDatabaseBean implements UserRegistrationSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 12_348_958_986_818_627L; + + /** + * User bean + */ + @EJB + private UserSessionBeanRemote userBean; + + @Override + public boolean isEmailAddressRegistered (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("isEmailAddressRegistered: user={0} - CALLED!", user)); //NOI18N + + // Check bean + assert(this.userBean instanceof UserSessionBeanRemote) : "this.userBean is not set"; //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Call other bean + return this.userBean.isEmailAddressReqistered(user); + } + + @Override + public boolean isUserNameRegistered (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("isUserNameRegistered: user={0} - CALLED!", user)); //NOI18N + + // Check bean + assert(this.userBean instanceof UserSessionBeanRemote) : "this.userBean is not set"; //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Call other bean + return this.userBean.isUserNameReqistered(user); + } + + @Override + public User registerUser (final User user) throws UserNameAlreadyRegisteredException, EmailAddressAlreadyRegisteredException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("registerUser: user={0} - CALLED!", user)); //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Check if user is registered + if (this.isUserNameRegistered(user)) { + // Abort here + throw new UserNameAlreadyRegisteredException(user); + } else if (this.isEmailAddressRegistered(user)) { + // Abort here + throw new EmailAddressAlreadyRegisteredException(user); + } + + // Persist it + this.getEntityManager().persist(user); + + // Flush to get id back + this.getEntityManager().flush(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("registerUser: user={0},user.id={1} - EXIT!", user, user.getUserId())); //NOI18N + + // Return it + return user; + } +} diff --git a/src/java/org/mxchange/jusercore/model/user/UserSessionBean.java b/src/java/org/mxchange/jusercore/model/user/UserSessionBean.java new file mode 100644 index 0000000..af59b8e --- /dev/null +++ b/src/java/org/mxchange/jusercore/model/user/UserSessionBean.java @@ -0,0 +1,326 @@ +/* + * Copyright (C) 2016 Roland Haeder + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.mxchange.jusercore.model.user; + +import java.text.MessageFormat; +import java.util.GregorianCalendar; +import java.util.List; +import javax.ejb.Stateless; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceException; +import javax.persistence.Query; +import org.mxchange.jcoreee.database.BaseDatabaseBean; +import org.mxchange.jusercore.model.user.profilemodes.ProfileMode; +import org.mxchange.jusercore.model.user.status.UserAccountStatus; + +/** + * A user bean + *

+ * @author Roland Haeder + */ +@Stateless (name = "user", mappedName = "ejb/stateless-addressbook-user", description = "A bean handling the user data") +public class UserSessionBean extends BaseDatabaseBean implements UserSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 542_145_347_916L; + + /** + * Default constructor + */ + public UserSessionBean () { + } + + @Override + @SuppressWarnings ("unchecked") + public List allMemberPublicVisibleUsers () { + // Trace message + this.getLoggerBeanLocal().logTrace("allMemberPublicVisibleUsers: CALLED!"); //NOI18N + + // Get named query + Query query = this.getEntityManager().createNamedQuery("AllMemberPublicUsers", List.class); //NOI18N + + // Set parameters + query.setParameter("status", UserAccountStatus.CONFIRMED); //NOI18N + query.setParameter("members", ProfileMode.MEMBERS); //NOI18N + query.setParameter("public", ProfileMode.PUBLIC); //NOI18N + + // Get result + List users = query.getResultList(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("allMemberPublicVisibleUsers: users.size()={0} - EXIT!", users.size())); //NOI18N + + // Return full list + return users; + } + + @Override + @SuppressWarnings ("unchecked") + public List allPublicUsers () { + // Trace message + this.getLoggerBeanLocal().logTrace("allPublicUsers: CALLED!"); //NOI18N + + // Get named query + Query query = this.getEntityManager().createNamedQuery("AllPublicUsers", List.class); //NOI18N + + // Set parameters + query.setParameter("status", UserAccountStatus.CONFIRMED); //NOI18N + query.setParameter("mode", ProfileMode.PUBLIC); //NOI18N + + // Get result + List users = query.getResultList(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("allPublicUsers: users.size()={0} - EXIT!", users.size())); //NOI18N + + // Return full list + return users; + } + + @Override + public User fillUserData (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("fillUserData: user={0} - CALLED!", user)); //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Try to locate it + Query query = this.getEntityManager().createNamedQuery("SearchUserName", LoginUser.class); //NOI18N + + // Set parameter + query.setParameter("param", user.getUserName()); //NOI18N + + // Initialize variable + User foundUser = null; + + // Try it + try { + // Try to get single result + foundUser = (User) query.getSingleResult(); + } catch (final NoResultException ex) { + // Log it + this.getLoggerBeanLocal().logException(ex); + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("fillUserData: foundUser={0} - EXIT!", foundUser)); //NOI18N + + // Return prepared instance + return foundUser; + } + + @Override + @SuppressWarnings ("unchecked") + public List getEmailAddressList () { + // Get query + Query query = this.getEntityManager().createNamedQuery("AllEmailAddresses", String.class); //NOI18N + + // Get result list + List emailAddressList = query.getResultList(); + + // Return it + return emailAddressList; + } + + @Override + @SuppressWarnings ("unchecked") + public List getUserNameList () { + // Get query + Query query = this.getEntityManager().createNamedQuery("AllUserNames", String.class); //NOI18N + + // Get result list + List userNameList = query.getResultList(); + + // Return it + return userNameList; + } + + @Override + public boolean ifUserIdExists (final Long userId) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("ifUserIdExists: userId={0} - CALLED!", userId)); //NOI18N + + // userId should not be null + if (null == userId) { + // Abort here + throw new NullPointerException("userId is null"); //NOI18N + } else if (userId < 1) { + // Invalid number + throw new IllegalArgumentException(MessageFormat.format("userId is not valid: {0}", userId)); //NOI18N + } + + // Generate query + Query query = this.getEntityManager().createNamedQuery("SearchUserId", LoginUser.class); //NOI18N + + // Set parameter + query.setParameter("id", userId); //NOI18N + + // Try this + try { + User dummy = (User) query.getSingleResult(); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("ifUserIdExists: dummy.id={0} found.", dummy.getUserId())); //NOI18N + } catch (final NoResultException ex) { + // Log it + this.getLoggerBeanLocal().logDebug(MessageFormat.format("ifUserIdExists: getSingleResult() returned no result: {0}", ex)); //NOI18N + + // User name does not exist + return false; + } catch (final PersistenceException ex) { + // Something bad happened + this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one user id {0} found.", userId, ex)); //NOI18N + + // Throw again + throw ex; + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("ifUserIdExists: Found user id {0} - EXIT!", userId)); //NOI18N + + // Found it + return true; + } + + @Override + public boolean isEmailAddressReqistered (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("isEmailAddressReqistered: user={0} - CALLED!", user)); //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Generate query + Query query = this.getEntityManager().createNamedQuery("SearchEmailAddress", LoginUser.class); //NOI18N + + // Set parameter + query.setParameter("param", user.getUserContact().getContactEmailAddress()); //NOI18N + + // Search for it + try { + User dummy = (User) query.getSingleResult(); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("isEmailAddressReqistered: dummy.id={0} found.", dummy.getUserId())); //NOI18N + } catch (final NoResultException ex) { + // Log it + this.getLoggerBeanLocal().logDebug(MessageFormat.format("isEmailAddressReqistered: getSingleResult() returned no result: {0}", ex)); //NOI18N + + // Email address does not exist + return false; + } catch (final PersistenceException ex) { + // Something bad happened + this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one email address {0} found.", user.getUserContact().getContactEmailAddress()), ex); //NOI18N + + // Throw again + throw ex; + } + + // Found it + return true; + } + + @Override + public boolean isUserNameReqistered (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("isUserNameReqistered: user={0} - CALLED!", user)); //NOI18N + + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } + + // Generate query + Query query = this.getEntityManager().createNamedQuery("SearchUserName", LoginUser.class); //NOI18N + + // Set parameter + query.setParameter("param", user.getUserName()); //NOI18N + + // Try this + try { + User dummy = (User) query.getSingleResult(); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("isUserNameReqistered: dummy.id={0} found.", dummy.getUserId())); //NOI18N + } catch (final NoResultException ex) { + // Log it + this.getLoggerBeanLocal().logDebug(MessageFormat.format("isUserNameReqistered: getSingleResult() returned no result: {0}", ex)); //NOI18N + + // User name does not exist + return false; + } catch (final PersistenceException ex) { + // Something bad happened + this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one email address {0} found.", user.getUserContact().getContactEmailAddress()), ex); //NOI18N + + // Throw again + throw ex; + } + + // Found it + return true; + } + + @Override + public void updateUserPersonalData (final User user) { + // user should not be null + if (null == user) { + // Abort here + throw new NullPointerException("user is null"); //NOI18N + } else if (user.getUserId() == null) { + // Throw NPE again + throw new NullPointerException("user.userId is null"); + } else if (user.getUserId() < 1) { + // Not valid + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid.", user.getUserId())); + } else if (!this.ifUserIdExists(user.getUserId())) { + // User does not exist + throw new PersistenceException(MessageFormat.format("User with id {0} does not exist.", user.getUserId())); + } + + // Find the instance + User foundUser = this.getEntityManager().find(user.getClass(), user.getUserId()); + + // Should be found! + assert (foundUser instanceof User) : MessageFormat.format("User with id {0} not found, but should be.", user.getUserId()); //NOI18N + + // Merge user + User detachedUser = this.getEntityManager().merge(foundUser); + + // Should be found! + assert (detachedUser instanceof User) : MessageFormat.format("User with id {0} not merged, but should be.", user.getUserId()); //NOI18N + + // Strange things needs to be logged + this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: user.userAccountStatus={0},foundUser.userAccountStatus={1},user.userContact.phoneId={2},detachedUser.userContact.phoneId={3}", user.getUserAccountStatus(), detachedUser.getUserAccountStatus(), user.getUserContact().getContactLandLineNumber().getPhoneId(), detachedUser.getUserContact().getContactLandLineNumber().getPhoneId())); //NOI18N + + // Copy all data + detachedUser.copyAll(user); + + // Set as updated + detachedUser.setUserUpdated(new GregorianCalendar()); + detachedUser.getUserContact().setContactUpdated(new GregorianCalendar()); + } +} -- 2.39.5