]> git.mxchange.org Git - pizzaservice-ejb.git/blob - src/java/org/mxchange/jusercore/model/user/PizzaUserSessionBean.java
Continued with logging: (please cherry-pick)
[pizzaservice-ejb.git] / src / java / org / mxchange / jusercore / model / user / PizzaUserSessionBean.java
1 /*
2  * Copyright (C) 2016 Roland Haeder
3  *
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.
8  *
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.
13  *
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/>.
16  */
17 package org.mxchange.jusercore.model.user;
18
19 import java.text.MessageFormat;
20 import java.util.GregorianCalendar;
21 import java.util.List;
22 import javax.ejb.EJB;
23 import javax.ejb.EJBException;
24 import javax.ejb.Stateless;
25 import javax.mail.Address;
26 import javax.mail.internet.AddressException;
27 import javax.mail.internet.InternetAddress;
28 import javax.persistence.NoResultException;
29 import javax.persistence.PersistenceException;
30 import javax.persistence.Query;
31 import org.mxchange.jcontacts.contact.Contact;
32 import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
33 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
34 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
35 import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException;
36 import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException;
37 import org.mxchange.jusercore.exceptions.UserNotFoundException;
38 import org.mxchange.jusercore.exceptions.UserStatusConfirmedException;
39 import org.mxchange.jusercore.exceptions.UserStatusLockedException;
40 import org.mxchange.jusercore.exceptions.UserStatusUnconfirmedException;
41 import org.mxchange.jusercore.model.register.UserRegistrationSessionBeanRemote;
42 import org.mxchange.jusercore.model.user.password_history.PasswordHistory;
43 import org.mxchange.jusercore.model.user.password_history.UserPasswordHistory;
44 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
45 import org.mxchange.jusercore.model.user.status.UserAccountStatus;
46 import org.mxchange.pizzaaplication.database.BasePizzaDatabaseBean;
47
48 /**
49  * A user EJB
50  * <p>
51  * @author Roland Haeder<roland@mxchange.org>
52  */
53 @Stateless (name = "user", description = "A bean handling the user data")
54 public class PizzaUserSessionBean extends BasePizzaDatabaseBean implements UserSessionBeanRemote {
55
56         /**
57          * Serial number
58          */
59         private static final long serialVersionUID = 542_145_347_916L;
60
61         /**
62          * Registration EJB
63          */
64         @EJB
65         private UserRegistrationSessionBeanRemote registerBean;
66
67         /**
68          * Default constructor
69          */
70         public PizzaUserSessionBean () {
71         }
72
73         @Override
74         public User addUser (final User user) throws UserNameAlreadyRegisteredException, EmailAddressAlreadyRegisteredException {
75                 // Trace message
76                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addUser: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
77
78                 // userId should not be null
79                 if (null == user) {
80                         // Abort here
81                         throw new NullPointerException("user is null"); //NOI18N
82                 } else if (user.getUserId() == null) {
83                         // Abort here
84                         throw new NullPointerException("user.userId is null"); //NOI18N
85                 } else if (user.getUserId() < 1) {
86                         // Invalid number
87                         throw new IllegalArgumentException(MessageFormat.format("userId is not valid: {0}", user.getUserId())); //NOI18N
88                 }
89
90                 // Check if user is registered
91                 if (this.registerBean.isUserNameRegistered(user)) {
92                         // Abort here
93                         throw new UserNameAlreadyRegisteredException(user);
94                 } else if (this.registerBean.isEmailAddressRegistered(user)) {
95                         // Abort here
96                         throw new EmailAddressAlreadyRegisteredException(user);
97                 }
98
99                 // Set created timestamp
100                 user.setUserCreated(new GregorianCalendar());
101                 user.getUserContact().setContactCreated(new GregorianCalendar());
102
103                 // Update cellphone, land-line and fax instance
104                 this.setAllContactPhoneEntriesCreated(user.getUserContact());
105
106                 // Persist it
107                 this.getEntityManager().persist(user);
108
109                 // Flush to get id back
110                 this.getEntityManager().flush();
111
112                 // Trace message
113                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addUser: user={1},user.userId={2} - EXIT!", this.getClass().getSimpleName(), user, user.getUserId())); //NOI18N
114
115                 // Return it
116                 return user;
117         }
118
119         @Override
120         @SuppressWarnings ("unchecked")
121         public List<User> allMemberPublicVisibleUsers () {
122                 // Trace message
123                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allMemberPublicVisibleUsers: CALLED!", this.getClass().getSimpleName())); //NOI18N
124
125                 // Get named query
126                 Query query = this.getEntityManager().createNamedQuery("AllMemberPublicUsers", LoginUser.class); //NOI18N
127
128                 // Set parameters
129                 query.setParameter("status", UserAccountStatus.CONFIRMED); //NOI18N
130                 query.setParameter("members", ProfileMode.MEMBERS); //NOI18N
131                 query.setParameter("public", ProfileMode.PUBLIC); //NOI18N
132
133                 // Get result
134                 List<User> users = query.getResultList();
135
136                 // Trace message
137                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allMemberPublicVisibleUsers: users.size()={1} - EXIT!", this.getClass().getSimpleName(), users.size())); //NOI18N
138
139                 // Return full list
140                 return users;
141         }
142
143         @Override
144         @SuppressWarnings ("unchecked")
145         public List<User> allPublicUsers () {
146                 // Trace message
147                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allPublicUsers: CALLED!", this.getClass().getSimpleName())); //NOI18N
148
149                 // Get named query
150                 Query query = this.getEntityManager().createNamedQuery("AllPublicUsers", LoginUser.class); //NOI18N
151
152                 // Set parameters
153                 query.setParameter("status", UserAccountStatus.CONFIRMED); //NOI18N
154                 query.setParameter("mode", ProfileMode.PUBLIC); //NOI18N
155
156                 // Get result
157                 List<User> users = query.getResultList();
158
159                 // Trace message
160                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allPublicUsers: users.size()={1} - EXIT!", this.getClass().getSimpleName(), users.size())); //NOI18N
161
162                 // Return full list
163                 return users;
164         }
165
166         @Override
167         @SuppressWarnings ("unchecked")
168         public List<User> allUsers () {
169                 // Trace message
170                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allUsers: CALLED!", this.getClass().getSimpleName())); //NOI18N
171
172                 // Get named query
173                 Query query = this.getEntityManager().createNamedQuery("AllUsers", LoginUser.class); //NOI18N
174
175                 // Get result
176                 List<User> users = query.getResultList();
177
178                 // Trace message
179                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allUsers: users.size()={1} - EXIT!", this.getClass().getSimpleName(), users.size())); //NOI18N
180
181                 // Return full list
182                 return users;
183         }
184
185         @Override
186         public User confirmAccount (final User user, final String baseUrl) throws UserStatusConfirmedException, UserStatusLockedException {
187                 // Trace message
188                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.confirmAccount: user={1},baseUrl={2} - CALLED!", this.getClass().getSimpleName(), user, baseUrl)); //NOI18N
189
190                 // Parameter must be valid
191                 if (null == user) {
192                         // Abort here
193                         throw new NullPointerException("user is null"); //NOI18N
194                 } else if (user.getUserId() == null) {
195                         // Abort here
196                         throw new NullPointerException("user.userId is null"); //NOI18N
197                 } else if (user.getUserId() < 1) {
198                         // Invalid number
199                         throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
200                 } else if (user.getUserAccountStatus() == UserAccountStatus.CONFIRMED) {
201                         // Account is already confirmed
202                         throw new UserStatusConfirmedException(user);
203                 } else if (user.getUserAccountStatus() == UserAccountStatus.LOCKED) {
204                         // Account is already confirmed
205                         throw new UserStatusLockedException(user);
206                 } else if (user.getUserConfirmKey() == null) {
207                         // Throw NPE
208                         throw new NullPointerException("user.userConfirmKey is null"); //NOI18N
209                 }
210
211                 // Update user status and remove confirmation key
212                 user.setUserAccountStatus(UserAccountStatus.CONFIRMED);
213                 user.setUserConfirmKey(null);
214                 user.setUserUpdated(new GregorianCalendar());
215
216                 // Update user account
217                 User updatedUser = this.updateUserData(user);
218
219                 // Init variable
220                 Address emailAddress;
221
222                 try {
223                         // Create email address and set
224                         emailAddress = new InternetAddress(updatedUser.getUserContact().getContactEmailAddress());
225                 } catch (final AddressException ex) {
226                         // Throw again
227                         throw new EJBException(ex);
228                 }
229
230                 // Send out email
231                 this.sendEmail("Account confirmed", "account_confirmed", emailAddress, updatedUser, baseUrl); //NOI18N
232
233                 // Trace message
234                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.confirmAccount: updatedUser={1} - EXIT!", this.getClass().getSimpleName(), updatedUser)); //NOI18N
235
236                 // Return updated instance
237                 return updatedUser;
238         }
239
240         @Override
241         public User fillUserData (final User user) {
242                 // Trace message
243                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.fillUserData: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
244
245                 // user should not be null
246                 if (null == user) {
247                         // Abort here
248                         throw new NullPointerException("user is null"); //NOI18N
249                 }
250
251                 // Try to locate it
252                 Query query = this.getEntityManager().createNamedQuery("SearchUserByName", LoginUser.class); //NOI18N
253
254                 // Set parameter
255                 query.setParameter("userName", user.getUserName()); //NOI18N
256
257                 // Initialize variable
258                 User foundUser = null;
259
260                 // Try it
261                 try {
262                         // Try to get single result
263                         foundUser = (User) query.getSingleResult();
264                 } catch (final NoResultException ex) {
265                         // Log it
266                         this.getLoggerBeanLocal().logException(ex);
267                 }
268
269                 // Trace message
270                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.fillUserData: foundUser={1} - EXIT!", this.getClass().getSimpleName(), foundUser)); //NOI18N
271
272                 // Return prepared instance
273                 return foundUser;
274         }
275
276         @Override
277         public User findUserById (final Long userId) throws UserNotFoundException {
278                 // Trace message
279                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findUserById: userId={1} - CALLED!", this.getClass().getSimpleName(), userId)); //NOI18N
280
281                 // Is the parameter valid?
282                 if (null == userId) {
283                         // Throw NPE
284                         throw new NullPointerException("userId is null"); //NOI18N
285                 } else if (userId < 1) {
286                         // Not valid
287                         throw new IllegalArgumentException(MessageFormat.format("userId={0} is not valid", userId)); //NOI18N
288                 } else if (!this.ifUserIdExists(userId)) {
289                         // Does not exist
290                         throw new UserNotFoundException(userId);
291                 }
292
293                 // Create query instance
294                 Query query = this.getEntityManager().createNamedQuery("SearchUserById", LoginUser.class); //NOI18N
295
296                 // Set user id
297                 query.setParameter("id", userId); //NOI18N
298
299                 // Fetch the result, it should be there by now
300                 User user = (User) query.getSingleResult();
301
302                 // Trace message
303                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findUserById: user={1} - EXIT!", this.getClass().getSimpleName(), user)); //NOI18N
304
305                 // Return found user
306                 return user;
307         }
308
309         @Override
310         public String generateRandomUserName () {
311                 // Trace message
312                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.generateRandomUserName - CALLED!", this.getClass().getSimpleName())); //NOI18N
313
314                 // Get full list
315                 List<String> userList = this.getUserNameList();
316
317                 // Init variable
318                 String userName = null;
319
320                 // Loop until a user name is found
321                 while ((userName == null) || (userList.contains(userName))) {
322                         // Generate random name
323                         userName = UserUtils.generateRandomUserName();
324                 }
325
326                 // Trace message
327                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.generateRandomUserName: userName={1} - EXIT!", this.getClass().getSimpleName(), userName)); //NOI18N
328
329                 // Found one, so return it
330                 return userName;
331         }
332
333         @Override
334         @SuppressWarnings ("unchecked")
335         public List<String> getEmailAddressList () {
336                 // Trace message
337                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.getEmailAddressList: CALLED!", this.getClass().getSimpleName())); //NOI18N
338
339                 // Get query
340                 Query query = this.getEntityManager().createNamedQuery("AllEmailAddresses", String.class); //NOI18N
341
342                 // Get result list
343                 List<String> emailAddressList = query.getResultList();
344
345                 // Trace message
346                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.getEmailAddressList: emailAddressList.size()={1} - EXIT!", this.getClass().getSimpleName(), emailAddressList.size())); //NOI18N
347
348                 // Return it
349                 return emailAddressList;
350         }
351
352         @Override
353         @SuppressWarnings ("unchecked")
354         public List<String> getUserNameList () {
355                 // Trace message
356                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.getUserNameList: CALLED!", this.getClass().getSimpleName())); //NOI18N
357
358                 // Get query
359                 Query query = this.getEntityManager().createNamedQuery("AllUserNames", String.class); //NOI18N
360
361                 // Get result list
362                 List<String> userNameList = query.getResultList();
363
364                 // Trace message
365                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.getUserNameList: userNameList.size()={1} - EXIT!", this.getClass().getSimpleName(), userNameList.size())); //NOI18N
366
367                 // Return it
368                 return userNameList;
369         }
370
371         @Override
372         public boolean ifUserExists (final User user) {
373                 // Trace message
374                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserExists: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
375
376                 // userId should not be null
377                 if (null == user) {
378                         // Abort here
379                         throw new NullPointerException("user is null"); //NOI18N
380                 } else if (user.getUserId() == null) {
381                         // Abort here
382                         throw new NullPointerException("user.userId is null"); //NOI18N
383                 } else if (user.getUserId() < 1) {
384                         // Invalid number
385                         throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
386                 }
387
388                 // Generate query
389                 Query query = this.getEntityManager().createNamedQuery("SearchUserById", LoginUser.class); //NOI18N
390
391                 // Set parameter
392                 query.setParameter("id", user.getUserId()); //NOI18N
393
394                 // Try this
395                 try {
396                         User dummy = (User) query.getSingleResult();
397
398                         // Debug message
399                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("ifUserExists: dummy.userId={0} found.", dummy.getUserId())); //NOI18N
400                 } catch (final NoResultException ex) {
401                         // Log it
402                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("ifUserExists: getSingleResult() returned no result: {0}", ex)); //NOI18N
403
404                         // User name does not exist
405                         return false;
406                 } catch (final PersistenceException ex) {
407                         // Something bad happened
408                         this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one user {0} found.", user, ex)); //NOI18N
409
410                         // Throw again
411                         throw ex;
412                 }
413
414                 // Trace message
415                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserExists: Found user {1} - EXIT!", this.getClass().getSimpleName(), user)); //NOI18N
416
417                 // Found it
418                 return true;
419         }
420
421         @Override
422         public boolean ifUserIdExists (final Long userId) {
423                 // Trace message
424                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserIdExists: userId={1} - CALLED!", this.getClass().getSimpleName(), userId)); //NOI18N
425
426                 // userId should not be null
427                 if (null == userId) {
428                         // Abort here
429                         throw new NullPointerException("userId is null"); //NOI18N
430                 } else if (userId < 1) {
431                         // Invalid number
432                         throw new IllegalArgumentException(MessageFormat.format("userId={0} is not valid", userId)); //NOI18N
433                 }
434
435                 // Generate query
436                 Query query = this.getEntityManager().createNamedQuery("SearchUserById", LoginUser.class); //NOI18N
437
438                 // Set parameter
439                 query.setParameter("id", userId); //NOI18N
440
441                 // Try this
442                 try {
443                         User dummy = (User) query.getSingleResult();
444
445                         // Debug message
446                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.ifUserIdExists: dummy.userId={1} found.", this.getClass().getSimpleName(), dummy.getUserId())); //NOI18N
447                 } catch (final NoResultException ex) {
448                         // Log it
449                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.ifUserIdExists: getSingleResult() returned no result: {1}", this.getClass().getSimpleName(), ex)); //NOI18N
450
451                         // User name does not exist
452                         return false;
453                 } catch (final PersistenceException ex) {
454                         // Something bad happened
455                         this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one user id {0} found.", userId, ex)); //NOI18N
456
457                         // Throw again
458                         throw ex;
459                 }
460
461                 // Trace message
462                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserIdExists: Found userId={1} - EXIT!", this.getClass().getSimpleName(), userId)); //NOI18N
463
464                 // Found it
465                 return true;
466         }
467
468         @Override
469         public boolean ifUserNameExists (final String userName) {
470                 // Trace message
471                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserNameExists: userName={1} - CALLED!", this.getClass().getSimpleName(), userName)); //NOI18N
472
473                 // userId should not be null
474                 if (null == userName) {
475                         // Abort here
476                         throw new NullPointerException("userName is null"); //NOI18N
477                 } else if (userName.isEmpty()) {
478                         // Abort here
479                         throw new NullPointerException("userName is empty"); //NOI18N
480                 }
481
482                 // Generate query
483                 Query query = this.getEntityManager().createNamedQuery("SearchUserByName", LoginUser.class); //NOI18N
484
485                 // Set parameter
486                 query.setParameter("userName", userName); //NOI18N
487
488                 // Try this
489                 try {
490                         User dummy = (User) query.getSingleResult();
491
492                         // Debug message
493                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.ifUserNameExists: dummy.userId={1} found.", this.getClass().getSimpleName(), dummy.getUserId())); //NOI18N
494                 } catch (final NoResultException ex) {
495                         // Log it
496                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.ifUserNameExists: getSingleResult() returned no result: {1}", this.getClass().getSimpleName(), ex)); //NOI18N
497
498                         // User name does not exist
499                         return false;
500                 }
501
502                 // Trace message
503                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.ifUserNameExists: Found userName={1} - EXIT!", this.getClass().getSimpleName(), userName)); //NOI18N
504
505                 // Found it
506                 return true;
507         }
508
509         @Override
510         public boolean isEmailAddressRegistered (final User user) {
511                 // Trace message
512                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isEmailAddressRegistered: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
513
514                 // user should not be null
515                 if (null == user) {
516                         // Abort here
517                         throw new NullPointerException("user is null"); //NOI18N
518                 }
519
520                 // Generate query
521                 Query query = this.getEntityManager().createNamedQuery("SearchUserByEmailAddress", LoginUser.class); //NOI18N
522
523                 // Set parameter
524                 query.setParameter("emailAddress", user.getUserContact().getContactEmailAddress()); //NOI18N
525
526                 // Search for it
527                 try {
528                         User dummy = (User) query.getSingleResult();
529
530                         // Debug message
531                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.isEmailAddressRegistered: dummy.userId={1} found.", this.getClass().getSimpleName(), dummy.getUserId())); //NOI18N
532                 } catch (final NoResultException ex) {
533                         // Log it
534                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.isEmailAddressRegistered: getSingleResult() returned no result: {1}", this.getClass().getSimpleName(), ex)); //NOI18N
535
536                         // Email address does not exist
537                         return false;
538                 } catch (final PersistenceException ex) {
539                         // Something bad happened
540                         this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one email address {0} found.", user.getUserContact().getContactEmailAddress()), ex); //NOI18N
541
542                         // Throw again
543                         throw ex;
544                 }
545
546                 // Trace message
547                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isEmailAddressRegistered: Returning true ... - EXIT!", this.getClass().getSimpleName())); //NOI18N
548
549                 // Found it
550                 return true;
551         }
552
553         @Override
554         public boolean isUserNameRegistered (final User user) {
555                 // Trace message
556                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isUserNameRegistered: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
557
558                 // user should not be null
559                 if (null == user) {
560                         // Abort here
561                         throw new NullPointerException("user is null"); //NOI18N
562                 }
563
564                 // Generate query
565                 Query query = this.getEntityManager().createNamedQuery("SearchUserByName", LoginUser.class); //NOI18N
566
567                 // Set parameter
568                 query.setParameter("userName", user.getUserName()); //NOI18N
569
570                 // Try this
571                 try {
572                         User dummy = (User) query.getSingleResult();
573
574                         // Debug message
575                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.isUserNameRegistered: dummy.userId={1} found.", this.getClass().getSimpleName(), dummy.getUserId())); //NOI18N
576                 } catch (final NoResultException ex) {
577                         // Log it
578                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.isUserNameRegistered: getSingleResult() returned no result: {1}", this.getClass().getSimpleName(), ex)); //NOI18N
579
580                         // User name does not exist
581                         return false;
582                 } catch (final PersistenceException ex) {
583                         // Something bad happened
584                         this.getLoggerBeanLocal().logWarning(MessageFormat.format("More than one email address {0} found.", user.getUserContact().getContactEmailAddress()), ex); //NOI18N
585
586                         // Throw again
587                         throw ex;
588                 }
589
590                 // Trace message
591                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isUserNameRegistered: Returning true ... - EXIT!", this.getClass().getSimpleName())); //NOI18N
592
593                 // Found it
594                 return true;
595         }
596
597         @Override
598         public User linkUser (final User user) throws UserNameAlreadyRegisteredException, EmailAddressAlreadyRegisteredException {
599                 // Trace message
600                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.linkUser: user={0} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
601
602                 // user should not be null
603                 if (null == user) {
604                         // Abort here
605                         throw new NullPointerException("user is null"); //NOI18N
606                 } else if (user.getUserId() instanceof Long) {
607                         // Id is set
608                         throw new IllegalArgumentException("user.userId is not null"); //NOI18N
609                 } else if (user.getUserContact() == null) {
610                         // Throw NPE again
611                         throw new NullPointerException("user.userContact is null"); //NOI18N
612                 } else if (user.getUserContact().getContactId() == null) {
613                         // Throw NPE again
614                         throw new NullPointerException("user.userContact.contactId is null"); //NOI18N
615                 } else if (user.getUserContact().getContactId() < 1) {
616                         // Not valid id number
617                         throw new IllegalArgumentException(MessageFormat.format("user.userContact.contactId={0} is not valid", user.getUserContact().getContactId())); //NOI18N
618                 } else if (user.getUserAccountStatus() == null) {
619                         // Throw NPE again
620                         throw new NullPointerException("user.userAccountStatus is null"); //NOI18N
621                 } else if (this.ifUserNameExists(user.getUserName())) {
622                         // Name already found
623                         throw new UserNameAlreadyRegisteredException(user.getUserName());
624                 }
625
626                 // Try to find the contact
627                 Contact foundContact = this.getEntityManager().find(user.getUserContact().getClass(), user.getUserContact().getContactId());
628
629                 // Set detached object in rexcruiter instance
630                 user.setUserContact(foundContact);
631
632                 // Set timestamp
633                 user.setUserCreated(new GregorianCalendar());
634
635                 // Perist it
636                 this.getEntityManager().persist(user);
637
638                 // Flush it to get updated instance back
639                 this.getEntityManager().flush();
640
641                 // Log trace message
642                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.linkUser: user={1} - EXIT!", this.getClass().getSimpleName(), user)); //NOI18N
643
644                 // Return updated instanc
645                 return user;
646         }
647
648         @Override
649         public User updateUserData (final User user) {
650                 // Trace message
651                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserData: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
652
653                 // user should not be null
654                 if (null == user) {
655                         // Abort here
656                         throw new NullPointerException("user is null"); //NOI18N
657                 } else if (user.getUserId() == null) {
658                         // Throw NPE again
659                         throw new NullPointerException("user.userId is null"); //NOI18N
660                 } else if (user.getUserId() < 1) {
661                         // Not valid
662                         throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
663                 } else if (user.getUserAccountStatus() == null) {
664                         // Throw NPE again
665                         throw new NullPointerException("user.userAccountStatus is null"); //NOI18N
666                 } else if (!this.ifUserExists(user)) {
667                         // User does not exist
668                         throw new EJBException(MessageFormat.format("User with id {0} does not exist.", user.getUserId())); //NOI18N
669                 }
670
671                 // Remove contact instance as this is not updated
672                 user.setUserContact(null);
673
674                 // Find the instance
675                 User foundUser = this.getEntityManager().find(user.getClass(), user.getUserId());
676
677                 // Should be found!
678                 assert (foundUser instanceof User) : MessageFormat.format("User with id {0} not found, but should be.", user.getUserId()); //NOI18N
679
680                 // Merge user
681                 User detachedUser = this.getEntityManager().merge(foundUser);
682
683                 // Should be found!
684                 assert (detachedUser instanceof User) : MessageFormat.format("User with id {0} not merged, but should be.", user.getUserId()); //NOI18N
685
686                 // Copy all data
687                 detachedUser.copyAll(user);
688
689                 // Set as updated
690                 detachedUser.setUserUpdated(new GregorianCalendar());
691
692                 // Trace message
693                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserData: detachedUser={1} - CALLED!", this.getClass().getSimpleName(), detachedUser)); //NOI18N
694
695                 // Return updated instance
696                 return detachedUser;
697         }
698
699         @Override
700         public PasswordHistory updateUserPassword (final User user) throws UserNotFoundException, UserStatusUnconfirmedException, UserStatusLockedException {
701                 // Trace message
702                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserPassword: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
703
704                 // user should not be null
705                 if (null == user) {
706                         // Abort here
707                         throw new NullPointerException("user is null"); //NOI18N
708                 } else if (user.getUserId() == null) {
709                         // Throw NPE again
710                         throw new NullPointerException("user.userId is null"); //NOI18N
711                 } else if (user.getUserId() < 1) {
712                         // Not valid
713                         throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
714                 } else if (user.getUserAccountStatus() == null) {
715                         // Throw NPE again
716                         throw new NullPointerException("user.userAccountStatus is null"); //NOI18N
717                 } else if (!this.ifUserExists(user)) {
718                         // User does not exist
719                         throw new EJBException(MessageFormat.format("User with id {0} does not exist.", user.getUserId())); //NOI18N
720                 }
721
722                 // Call other method
723                 User updatedUser = this.updateUserData(user);
724
725                 // Create history entry
726                 PasswordHistory entry = new UserPasswordHistory(user.getUserEncryptedPassword(), updatedUser);
727
728                 // Set created timestamp
729                 entry.setUserPasswordHistoryCreated(new GregorianCalendar());
730
731                 // Persist it
732                 this.getEntityManager().persist(entry);
733
734                 // Flush it to get id number back
735                 this.getEntityManager().flush();
736
737                 // Trace message
738                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserPassword: entry.userPasswordHistoryId={1} - EXIT!", this.getClass().getSimpleName(), entry.getUserPasswordHistoryId())); //NOI18N
739
740                 // Return it
741                 return entry;
742         }
743
744         @Override
745         public User updateUserPersonalData (final User user) {
746                 // Trace message
747                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserPersonalData: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
748
749                 // user should not be null
750                 if (null == user) {
751                         // Abort here
752                         throw new NullPointerException("user is null"); //NOI18N
753                 } else if (user.getUserId() == null) {
754                         // Throw NPE again
755                         throw new NullPointerException("user.userId is null"); //NOI18N
756                 } else if (user.getUserId() < 1) {
757                         // Not valid
758                         throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
759                 } else if (user.getUserAccountStatus() == null) {
760                         // Throw NPE again
761                         throw new NullPointerException("user.userAccountStatus is null"); //NOI18N
762                 } else if (!this.ifUserExists(user)) {
763                         // User does not exist
764                         throw new EJBException(MessageFormat.format("User with id {0} does not exist.", user.getUserId())); //NOI18N
765                 }
766
767                 // Find the instance
768                 User foundUser = this.getEntityManager().find(user.getClass(), user.getUserId());
769
770                 // Should be found!
771                 assert (foundUser instanceof User) : MessageFormat.format("User with id {0} not found, but should be.", user.getUserId()); //NOI18N
772
773                 // Merge user
774                 User detachedUser = this.getEntityManager().merge(foundUser);
775
776                 // Should be found!
777                 assert (detachedUser instanceof User) : MessageFormat.format("User with id {0} not merged, but should be.", user.getUserId()); //NOI18N
778
779                 // Copy all data
780                 detachedUser.copyAll(user);
781
782                 // Set as updated
783                 detachedUser.setUserUpdated(new GregorianCalendar());
784                 detachedUser.getUserContact().setContactUpdated(new GregorianCalendar());
785
786                 // Get contact from it and find it
787                 Contact foundContact = this.getEntityManager().find(user.getUserContact().getClass(), user.getUserContact().getContactId());
788
789                 // Should be found
790                 assert (foundContact instanceof Contact) : MessageFormat.format("Contact with id {0} not found, but should be.", user.getUserContact().getContactId()); //NOI18N
791
792                 // Debug message
793                 this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: contact.contactId={0}", foundContact.getContactId())); //NOI18N
794
795                 // Merge contact instance
796                 Contact detachedContact = this.getEntityManager().merge(foundContact);
797
798                 // Copy all
799                 detachedContact.copyAll(user.getUserContact());
800
801                 // Set it back in user
802                 user.setUserContact(detachedContact);
803
804                 // Should be found!
805                 assert (detachedContact instanceof Contact) : MessageFormat.format("Contact with id {0} not merged, but should be.", user.getUserContact().getContactId()); //NOI18N
806
807                 // Get cellphone instance
808                 DialableCellphoneNumber cellphone = detachedContact.getContactCellphoneNumber();
809
810                 // Is there a  cellphone instance set?
811                 if (cellphone instanceof DialableCellphoneNumber) {
812                         // Debug message
813                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: cellphone.phoneId={0} is being updated ...", cellphone.getPhoneId())); //NOI18N
814
815                         // Then find it, too
816                         DialableCellphoneNumber foundCellphone = this.getEntityManager().find(cellphone.getClass(), cellphone.getPhoneId());
817
818                         // Should be there
819                         assert (foundCellphone instanceof DialableCellphoneNumber) : MessageFormat.format("Cellphone number with id {0} not found but should be.", foundCellphone.getPhoneId()); //NOI18N
820
821                         // Then merge it, too
822                         DialableCellphoneNumber detachedCellphone = this.getEntityManager().merge(foundCellphone);
823
824                         // Should be there
825                         assert (detachedCellphone instanceof DialableCellphoneNumber) : MessageFormat.format("Cellphone number with id {0} not found but should be.", detachedCellphone.getPhoneId()); //NOI18N
826
827                         // Copy all
828                         detachedCellphone.copyAll(user.getUserContact().getContactCellphoneNumber());
829
830                         // Set it back
831                         detachedContact.setContactCellphoneNumber(detachedCellphone);
832                 }
833
834                 // Get cellphone instance
835                 DialableFaxNumber fax = detachedContact.getContactFaxNumber();
836
837                 // Is there a  fax instance set?
838                 if (fax instanceof DialableFaxNumber) {
839                         // Debug message
840                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: fax.phoneId={0} is being updated ...", fax.getPhoneId())); //NOI18N
841
842                         // Then find it, too
843                         DialableFaxNumber foundFax = this.getEntityManager().find(fax.getClass(), fax.getPhoneId());
844
845                         // Should be there
846                         assert (foundFax instanceof DialableFaxNumber) : MessageFormat.format("Fax number with id {0} not found but should be.", foundFax.getPhoneId()); //NOI18N
847
848                         // Then merge it, too
849                         DialableFaxNumber detachedFax = this.getEntityManager().merge(foundFax);
850
851                         // Should be there
852                         assert (detachedFax instanceof DialableFaxNumber) : MessageFormat.format("Fax number with id {0} not found but should be.", detachedFax.getPhoneId()); //NOI18N
853
854                         // Copy all
855                         detachedFax.copyAll(user.getUserContact().getContactFaxNumber());
856
857                         // Set it back
858                         detachedContact.setContactFaxNumber(detachedFax);
859                 }
860
861                 // Get cellphone instance
862                 DialableLandLineNumber landLine = detachedContact.getContactLandLineNumber();
863
864                 // Is there a  fax instance set?
865                 if (landLine instanceof DialableLandLineNumber) {
866                         // Debug message
867                         this.getLoggerBeanLocal().logDebug(MessageFormat.format("updateUserPersonalData: landLine.phoneId={0} is being updated ...", landLine.getPhoneId())); //NOI18N
868
869                         // Then find it, too
870                         DialableLandLineNumber foundLandLine = this.getEntityManager().find(landLine.getClass(), landLine.getPhoneId());
871
872                         // Should be there
873                         assert (foundLandLine instanceof DialableLandLineNumber) : MessageFormat.format("Land line number with id {0} not found but should be.", foundLandLine.getPhoneId()); //NOI18N
874
875                         // Then merge it, too
876                         DialableLandLineNumber detachedLandLine = this.getEntityManager().merge(foundLandLine);
877
878                         // Should be there
879                         assert (detachedLandLine instanceof DialableLandLineNumber) : MessageFormat.format("Land line number with id {0} not found but should be.", detachedLandLine.getPhoneId()); //NOI18N
880
881                         // Copy all
882                         detachedLandLine.copyAll(user.getUserContact().getContactLandLineNumber());
883
884                         // Set it back
885                         detachedContact.setContactLandLineNumber(detachedLandLine);
886                 }
887
888                 // Trace message
889                 this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.updateUserPersonalData: entry.detachedUser={1} - EXIT!", this.getClass().getSimpleName(), detachedUser)); //NOI18N
890
891                 // Return updated user instance
892                 return detachedUser;
893         }
894
895 }