X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fmxchange%2Fjjobs%2Fbeans%2Fresendlink%2FJobsResendLinkWebSessionBean.java;h=d06de530ddf9a0a55a3dc23d65bc786f3f7cc24c;hb=d5fda2ab63061743d025611b5751a8346e11c698;hp=c394217a85f267243d035d9d6301aa9a53d096c3;hpb=771963bb3fc743e50a0c96030e0174113f682d29;p=jjobs-war.git diff --git a/src/java/org/mxchange/jjobs/beans/resendlink/JobsResendLinkWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/resendlink/JobsResendLinkWebSessionBean.java index c394217a..d06de530 100644 --- a/src/java/org/mxchange/jjobs/beans/resendlink/JobsResendLinkWebSessionBean.java +++ b/src/java/org/mxchange/jjobs/beans/resendlink/JobsResendLinkWebSessionBean.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Roland Haeder + * Copyright (C) 2016 Roland Häder * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -17,17 +17,31 @@ package org.mxchange.jjobs.beans.resendlink; import javax.enterprise.context.SessionScoped; +import javax.enterprise.event.Event; +import javax.enterprise.inject.Any; import javax.faces.view.facelets.FaceletException; +import javax.inject.Inject; import javax.inject.Named; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; +import org.mxchange.jcoreee.utils.FacesUtils; import org.mxchange.jjobs.beans.BaseJobsController; +import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController; +import org.mxchange.jjobs.beans.user.JobsUserWebSessionController; +import org.mxchange.jusercore.events.resendlink.UserResendLinkAccountEvent; +import org.mxchange.jusercore.exceptions.UserEmailAddressNotFoundException; +import org.mxchange.jusercore.exceptions.UserNotFoundException; +import org.mxchange.jusercore.exceptions.UserStatusConfirmedException; +import org.mxchange.jusercore.exceptions.UserStatusLockedException; +import org.mxchange.jusercore.model.user.User; +import org.mxchange.jusercore.model.user.status.UserAccountStatus; +import org.mxchange.jusercore.events.resendlink.ObservableUserResendLinkAccountEvent; /** * A web session bean for resending confirmation link *

- * @author Roland Haeder + * @author Roland Häder */ @Named ("resendController") @SessionScoped @@ -39,7 +53,7 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements private static final long serialVersionUID = 186_078_724_659_153L; /** - * Email address 1 (changing) + * Email address */ private String emailAddress; @@ -48,6 +62,25 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements */ private ResendLinkSessionBeanRemote emailBean; + /** + * Localization controller + */ + @Inject + private JobsLocalizationSessionController localizationController; + + /** + * Regular user controller + */ + @Inject + private JobsUserWebSessionController userController; + + /** + * Event being fired after confirmation link is being sent + */ + @Inject + @Any + private Event userResendLinkEvent; + /** * Default constructor */ @@ -67,7 +100,71 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements @Override public String doResendLink () { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // The email address should not be empty as the JSF validates this + if (this.getEmailAddress() == null) { + // Throw NPE + throw new NullPointerException("this.emailAddress is null"); //NOI18N + } + + // Init user instance + User user; + + try { + // Is the email address really not used? + user = this.userController.lookupUserByEmailAddress(this.getEmailAddress()); + } catch (final UserEmailAddressNotFoundException ex) { + // Always clear bean + this.clear(); + + // Not found, should not happen as the registered validator should find it + this.showFacesMessage("form_resend_link:", "ERROR_USER_EMAIL_ADDRESS_NOT_FOUND"); //NOI18N + return ""; //NOI18N + } + + // Is the user account already confirmed? + if (user.getUserAccountStatus() == UserAccountStatus.CONFIRMED) { + // Always clear bean + this.clear(); + + // Then abort here + this.showFacesMessage("form_resend_link:resendEmailAddress", "ERROR_USER_STATUS_ALREADY_CONFIRMED"); //NOI18N + return ""; //NOI18N + } else if (user.getUserAccountStatus() == UserAccountStatus.LOCKED) { + // Always clear bean + this.clear(); + + // User account is locked + this.showFacesMessage("form_resend_link:resendEmailAddress", "ERROR_USER_STATUS_LOCKED"); //NOI18N + return ""; //NOI18N + } else if (user.getUserConfirmKey() == null) { + // Status is UNCONFIRMED but confirmation key is NULL + throw new NullPointerException("user.userConfirmKey is null"); //NOI18N + } + + try { + // Get base URL + String baseUrl = FacesUtils.generateBaseUrl(); + + // Call EJB and return redirect target + this.emailBean.resendConfirmationLink(user, this.localizationController.getLocale(), baseUrl); + } catch (final UserNotFoundException ex) { + // User not found + this.showFacesMessage("form_resend_link:resendEmailAddress", "ERROR_USER_NOT_FOUND"); //NOI18N + return ""; //NOI18N + } catch (final UserStatusLockedException | UserStatusConfirmedException ex) { + // Output message, this should not happen as the confirmation key is being removed + this.showFacesMessage("form_resend_link:resendEmailAddress", ex); //NOI18N + return ""; //NOI18N + } + + // Fire event + this.userResendLinkEvent.fire(new UserResendLinkAccountEvent(user)); + + // Clear this bean + this.clear(); + + // Return redirect target + return "user_resend_done"; //NOI18N } @Override