Merge pull request #9 from santiago-a-vidal/BandagoRefactorings

Refactoring complex methods of class Register
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
index f3b906c..baadc5e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
@@ -211,26 +211,7 @@
                     // Create & save the activation data
                     String inActivationCode = UUID.randomUUID().toString();
 
-                    if (mgr.getUserByActivationCode(inActivationCode) != null) {
-                        // In the *extremely* unlikely event that we generate an
-                        // activation code that is already use, we'll retry 3 times.
-                        int numOfRetries = 3;
-                        if (numOfRetries < 1) {
-                            numOfRetries = 1;
-                        }
-                        for (int i = 0; i < numOfRetries; i++) {
-                            inActivationCode = UUID.randomUUID().toString();
-                            if (mgr.getUserByActivationCode(inActivationCode) == null) {
-                                break;
-                            } else {
-                                inActivationCode = null;
-                            }
-                        }
-                        // In more unlikely event that three retries isn't enough
-                        if (inActivationCode == null){
-                            throw new WebloggerException("error.add.user.activationCodeInUse");
-                        }
-                    }
+                    inActivationCode = retryActivationCode(mgr, inActivationCode);
                     ud.setActivationCode(inActivationCode);
                 }
 
@@ -248,16 +229,7 @@
                 WebloggerFactory.getWeblogger().flush();
 
                 // now send activation email if necessary
-                if (activationEnabled && ud.getActivationCode() != null) {
-                    try {
-                        // send activation mail to the user
-                        MailUtil.sendUserActivationEmail(ud);
-                    } catch (WebloggerException ex) {
-                        log.error("Error sending activation email to - " + ud.getEmailAddress(), ex);
-                    }
-
-                    setActivationStatus("pending");
-                }
+                sendActivationMailIfNeeded(ud, activationEnabled);
 
                 // Invalidate session, otherwise new user who was originally
                 // authenticated via LDAP/SSO will remain logged in but
@@ -278,6 +250,43 @@
         
         return INPUT;
     }
+
+	private String retryActivationCode(UserManager mgr, String inActivationCode) throws WebloggerException {
+		if (mgr.getUserByActivationCode(inActivationCode) != null) {
+		    // In the *extremely* unlikely event that we generate an
+		    // activation code that is already use, we'll retry 3 times.
+		    int numOfRetries = 3;
+		    if (numOfRetries < 1) {
+		        numOfRetries = 1;
+		    }
+		    for (int i = 0; i < numOfRetries; i++) {
+		        inActivationCode = UUID.randomUUID().toString();
+		        if (mgr.getUserByActivationCode(inActivationCode) == null) {
+		            break;
+		        } else {
+		            inActivationCode = null;
+		        }
+		    }
+		    // In more unlikely event that three retries isn't enough
+		    if (inActivationCode == null){
+		        throw new WebloggerException("error.add.user.activationCodeInUse");
+		    }
+		}
+		return inActivationCode;
+	}
+
+	private void sendActivationMailIfNeeded(User ud, boolean activationEnabled) {
+		if (activationEnabled && ud.getActivationCode() != null) {
+		    try {
+		        // send activation mail to the user
+		        MailUtil.sendUserActivationEmail(ud);
+		    } catch (WebloggerException ex) {
+		        log.error("Error sending activation email to - " + ud.getEmailAddress(), ex);
+		    }
+
+		    setActivationStatus("pending");
+		}
+	}
     
     
     @SkipValidation
@@ -331,19 +340,7 @@
             String unusedPassword = WebloggerConfig.getProperty("users.passwords.externalAuthValue", "<externalAuth>");
             
             // Preserve username and password, Spring Security case
-            User fromSSOUser = CustomUserRegistry.getUserDetailsFromAuthentication(getServletRequest());
-            if (fromSSOUser != null) {
-                getBean().setPasswordText(unusedPassword);
-                getBean().setPasswordConfirm(unusedPassword);
-                getBean().setUserName(fromSSOUser.getUserName());
-            }
-
-            // Preserve username and password, CMA case             
-            else if (getServletRequest().getUserPrincipal() != null) {
-                getBean().setUserName(getServletRequest().getUserPrincipal().getName());
-                getBean().setPasswordText(unusedPassword);
-                getBean().setPasswordConfirm(unusedPassword);
-            }
+            preserveUsernameAndPassword(unusedPassword);
         }
         
         String allowed = WebloggerConfig.getProperty("username.allowedChars");
@@ -378,7 +375,30 @@
         }
         
         // check that username is not taken
-        if (!StringUtils.isEmpty(getBean().getUserName())) {
+        checkUsername();
+
+        // check that OpenID, if provided, is not taken
+        checkOpenID();
+    }
+
+	private void preserveUsernameAndPassword(String unusedPassword) {
+		User fromSSOUser = CustomUserRegistry.getUserDetailsFromAuthentication(getServletRequest());
+		if (fromSSOUser != null) {
+		    getBean().setPasswordText(unusedPassword);
+		    getBean().setPasswordConfirm(unusedPassword);
+		    getBean().setUserName(fromSSOUser.getUserName());
+		}
+
+		// Preserve username and password, CMA case             
+		else if (getServletRequest().getUserPrincipal() != null) {
+		    getBean().setUserName(getServletRequest().getUserPrincipal().getName());
+		    getBean().setPasswordText(unusedPassword);
+		    getBean().setPasswordConfirm(unusedPassword);
+		}
+	}
+
+	private void checkUsername() {
+		if (!StringUtils.isEmpty(getBean().getUserName())) {
             try {
                 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
                 if (mgr.getUserByUserName(getBean().getUserName(), null) != null) {
@@ -391,9 +411,10 @@
                 addError("generic.error.check.logs");
             }
         }
+	}
 
-        // check that OpenID, if provided, is not taken
-        if (!StringUtils.isEmpty(getBean().getOpenIdUrl())) {
+	private void checkOpenID() {
+		if (!StringUtils.isEmpty(getBean().getOpenIdUrl())) {
             try {
                 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
                 if (mgr.getUserByOpenIdUrl(getBean().getOpenIdUrl()) != null) {
@@ -406,7 +427,7 @@
                 addError("generic.error.check.logs");
             }
         }
-    }
+	}
     
     
     public HttpServletRequest getServletRequest() {