public void handle(Context ctx) throws Exception { UserModel targetUser = (UserModel) getAndCheckFromUrl(UserModel.class); UserEmailForm form = new UserEmailForm( path + "/actions/SaveEmailAddresses/" + targetUser.getId(), requestParams); Message m = form.validate(); String primaryEmail = form.getParameter("Email"); UserModel userForEmail = UserModel.getUserForEmail(primaryEmail); if ((m == null) && (userForEmail != null) && (!userForEmail.equals(targetUser))) { if (userForEmail.getUsername().equals("")) { targetUser.mergeRolesWithMailAccount(userForEmail); } else { m = new ErrorMessage( "Primary email address is already linked to user " + userForEmail.getUsername()); form.setError("Email", "Please use a different email"); } } // No messages: changes are valid if (m != null) { // Display error and prompt user to fix throw getValidationException(form, m, path + "/chapter/MemberInfo/" + targetUser.getId()); } String emailText = form.getParameter("Emails"); String[] splitEmails = emailText.split("\n"); HashSet<String> emails = new HashSet<String>(); Vector<String> errors = new Vector<String>(); for (int i = 0; i < splitEmails.length; i++) { String email = splitEmails[i].trim(); if (!email.equals("")) { userForEmail = UserModel.getUserForEmail(email); if ((userForEmail != null) && (!userForEmail.equals(targetUser))) { if (userForEmail.getUsername().equals("")) { targetUser.mergeRolesWithMailAccount(userForEmail); emails.add(email); } else { errors.add(email + " is already linked to user " + userForEmail.getUsername()); } } else { emails.add(email); } } } emails.add(primaryEmail); targetUser.saveEmails(primaryEmail, emails); setSessionMessage((errors.isEmpty() ? "Basic info updated!" : getExceptionString(errors))); throw new RedirectionException(path + "/chapter/MemberInfo/" + targetUser.getId()); }