import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Any;
+import javax.faces.FacesException;
import javax.faces.view.facelets.FaceletException;
import javax.inject.Inject;
import javax.inject.Named;
import javax.naming.NamingException;
import org.mxchange.jcontacts.contact.Contact;
import org.mxchange.jjobs.beans.BaseJobsController;
+import org.mxchange.jjobs.beans.contact.JobsAdminContactWebRequestController;
import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController;
-import org.mxchange.jjobs.beans.login.JobsUserLoginWebSessionController;
import org.mxchange.jusercore.container.login.UserLoginContainer;
import org.mxchange.jusercore.events.registration.UserRegisteredEvent;
import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
import org.mxchange.jusercore.events.user.update.AdminUserDataUpdatedEvent;
import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException;
import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException;
+import org.mxchange.jusercore.exceptions.UserNotFoundException;
import org.mxchange.jusercore.exceptions.UserPasswordRepeatMismatchException;
+import org.mxchange.jusercore.exceptions.UserStatusLockedException;
+import org.mxchange.jusercore.exceptions.UserStatusUnconfirmedException;
+import org.mxchange.jusercore.model.user.AdminUserSessionBeanRemote;
import org.mxchange.jusercore.model.user.LoginUser;
import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
import org.mxchange.jusercore.model.user.status.UserAccountStatus;
import org.mxchange.jjobs.beans.helper.JobsWebRequestController;
+import org.mxchange.jusercore.events.user.linked.AdminUserLinkedEvent;
/**
* A user bean (controller)
private Event<AdminAddedUserEvent> addedUserEvent;
/**
- * Bean helper instance
+ * Regular contact controller
+ */
+ @Inject
+ private JobsAdminContactWebRequestController adminContactController;
+
+ /**
+ * Administrative user EJB
+ */
+ private final AdminUserSessionBeanRemote adminUserBean;
+
+ /**
+ * Admin helper instance
*/
@Inject
private JobsWebRequestController beanHelper;
private Event<AdminUpdatedUserDataEvent> updatedUserDataEvent;
/**
- * Remote user bean
+ * General user EJB
*/
private final UserSessionBeanRemote userBean;
// Try to lookup
this.userBean = (UserSessionBeanRemote) context.lookup("java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote"); //NOI18N
+ this.adminUserBean = (AdminUserSessionBeanRemote) context.lookup("java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.AdminUserSessionBeanRemote"); //NOI18N
} catch (final NamingException e) {
// Throw again
throw new FaceletException(e);
throw new NullPointerException("contactController.firstName is null"); //NOI18N //NOI18N
} else if (this.contactController.getFirstName().isEmpty()) {
// ... and again
- throw new IllegalArgumentException("contactController.firstName is empty");
- } else if (this.contactController.getFamilyName() == null) {
+ throw new IllegalArgumentException("contactController.firstName is empty"); //NOI18N
+ } else if (this.adminContactController.getFamilyName() == null) {
// ... and again
throw new NullPointerException("contactController.familyName is null"); //NOI18N
} else if (this.contactController.getFamilyName().isEmpty()) {
throw new IllegalArgumentException("contactController.familyName is empty"); //NOI18N //NOI18N
} else if (this.contactController.getEmailAddress() == null) {
// ... and again
- throw new NullPointerException("contactController.emailAddress is null");
- } else if (this.contactController.getEmailAddress().isEmpty()) {
+ throw new NullPointerException("contactController.emailAddress is null"); //NOI18N
+ } else if (this.adminContactController.getEmailAddress().isEmpty()) {
// ... and again
throw new IllegalArgumentException("contactController.emailAddress is empty"); //NOI18N //NOI18N
} else if (this.contactController.getEmailAddressRepeat() == null) {
// Encrypt password and set it
user.setUserEncryptedPassword(UserUtils.encryptPassword(password));
- // Init updated user instance
- User updatedUser = null;
-
try {
// Now, that all is set, call EJB
if (this.beanHelper.getContact() instanceof Contact) {
// Link contact with this user
- updatedUser = this.userBean.linkUser(user);
+ User updatedUser = this.adminUserBean.linkUser(user);
+
+ // Fire event
+ this.userLinkedEvent.fire(new AdminUserLinkedEvent(updatedUser));
// Remove contact instance
this.beanHelper.setContact(null);
} else {
// Add new contact
- updatedUser = this.userBean.addUser(user);
+ User updatedUser = this.adminUserBean.addUser(user);
+
+ // Fire event
+ this.addedUserEvent.fire(new AdminUserAddedEvent(updatedUser));
}
} catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) {
// Throw again
// Clear helper
this.beanHelper.setContact(null);
- // Fire event
- this.addedUserEvent.fire(new AdminUserAddedEvent(updatedUser));
-
// Return to user list (for now)
return "admin_list_user"; //NOI18N
}
this.userPasswordRepeat = userPasswordRepeat;
}
+ @Override
+ public String lockUserAccount (final User user) {
+ // Is the user instance valid and CONFIRMED?
+ if (null == user) {
+ // Throw NPE
+ throw new NullPointerException("user is null"); //NOI18N
+ } else if (user.getUserId() == null) {
+ // Throw again
+ throw new NullPointerException("user.userId is null"); //NOI18N
+ } else if (user.getUserId() < 1) {
+ // Invalid id number
+ throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N
+ } else if (user.getUserAccountStatus() == UserAccountStatus.LOCKED) {
+ // User account is locked
+ throw new FacesException(new UserStatusLockedException(user));
+ } else if (user.getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) {
+ // User account is locked
+ throw new FaceletException(new UserStatusUnconfirmedException(user));
+ } else if (this.getUserLockReason() == null) {
+ // Throw NPE again
+ throw new NullPointerException("this.userLockReason is null"); //NOI18N
+ } else if (this.getUserLockReason().isEmpty()) {
+ // Empty lock reason
+ throw new IllegalArgumentException("this.userLockReason is empty"); //NOI18N
+ }
+
+ try {
+ // Call EJB to lock account
+ this.adminUserBean.lockUserAccount(user, this.getUserLockReason());
+ } catch (final UserStatusLockedException | UserStatusUnconfirmedException | UserNotFoundException ex) {
+ // Throw again
+ throw new FaceletException(ex);
+ }
+
+ // Should go fine at this point, redirect to user profile
+ return "admin_show_user?faces-redirect=true&includeViewParams=true"; //NOI18N
+ }
+
/**
* Clears this bean
*/