]> git.mxchange.org Git - jjobs-war.git/blobdiff - src/java/org/mxchange/jjobs/beans/resendlink/JobsResendLinkWebSessionBean.java
renamed to better names
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / resendlink / JobsResendLinkWebSessionBean.java
index e3c35700169345305a0d708317932430c7b11b23..d06de530ddf9a0a55a3dc23d65bc786f3f7cc24c 100644 (file)
@@ -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
  */
 package org.mxchange.jjobs.beans.resendlink;
 
-import java.text.MessageFormat;
-import java.util.Locale;
 import javax.enterprise.context.SessionScoped;
-import javax.faces.context.FacesContext;
+import javax.enterprise.event.Event;
+import javax.enterprise.inject.Any;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -28,14 +27,21 @@ 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
  * <p>
- * @author Roland Haeder<roland@mxchange.org>
+ * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("resendController")
 @SessionScoped
@@ -47,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;
 
@@ -57,11 +63,24 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements
        private ResendLinkSessionBeanRemote emailBean;
 
        /**
-        * User controller
+        * 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<ObservableUserResendLinkAccountEvent> userResendLinkEvent;
+
        /**
         * Default constructor
         */
@@ -94,24 +113,58 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements
                        // Is the email address really not used?
                        user = this.userController.lookupUserByEmailAddress(this.getEmailAddress());
                } catch (final UserEmailAddressNotFoundException ex) {
-                       // Not found, should not happen as the registeredvalidator should find it
-                       throw new FaceletException(MessageFormat.format("this.emailAddress={0} should be resolveable into User instance.", this.getEmailAddress()), ex); //NOI18N
+                       // 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
                }
 
-               // Get locale from faces context
-               Locale locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
+               // 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
+               }
 
-               // Get base URL
-               String baseUrl = FacesUtils.generateBaseUrl();
+               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
+               }
 
-               // Call EJB and return redirect target
-               this.emailBean.resendConfirmationLink(user, locale, baseUrl);
+               // Fire event
+               this.userResendLinkEvent.fire(new UserResendLinkAccountEvent(user));
 
                // Clear this bean
                this.clear();
 
                // Return redirect target
-               return "resend_done"; //NOI18N
+               return "user_resend_done"; //NOI18N
        }
 
        @Override