package net.sourceforge.solexatools.webapp.controller; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sourceforge.seqware.common.business.RegistrationService; import net.sourceforge.seqware.common.invitation.InvitationParams; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.solexatools.Security; import net.sourceforge.solexatools.validation.LoginValidator; import org.springframework.mail.MailSender; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.BaseCommandController; /** * <p> * InviteNewUserController class. * </p> * * @author boconnor * @version $Id: $Id */ public class InviteNewUserController extends BaseCommandController { private RegistrationService registrationService; private MailSender sender; /** * <p> * Getter for the field <code>sender</code>. * </p> * * @return a {@link org.springframework.mail.MailSender} object. */ public MailSender getSender() { return sender; } /** * <p> * Setter for the field <code>sender</code>. * </p> * * @param sender * a {@link org.springframework.mail.MailSender} object. */ public void setSender(MailSender sender) { this.sender = sender; } /** * <p> * Constructor for InviteNewUserController. * </p> */ public InviteNewUserController() { super(); setSupportedMethods(new String[] { METHOD_GET, METHOD_POST }); } /** * {@inheritDoc} * * @return * @throws java.lang.Exception */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = null; HashMap<String, Object> model = new HashMap<>(); Registration registration = Security.getRegistration(request); if (registration == null || !registration.isLIMSAdmin()) return new ModelAndView("redirect:/login.htm"); // Log.info("Do invite = " + request.getParameter("submitlink")); // Log.info("Do cancel = " + request.getParameter("cancel")); String doCancel = request.getParameter("cancel"); if ("submit".equals(doCancel)) { modelAndView = new ModelAndView("redirect:/myStudyList.htm", model); } Boolean isHasError = false; List<String> errorMessages = new LinkedList<>(); List<String> emailsHasError = new LinkedList<>(); String[] emails = getRequestedEmails(request); if (emails == null || (emails.length == 1 && emails[0].trim().isEmpty())) { isHasError = true; errorMessages.add(this.getMessageSourceAccessor().getMessage("error.list.emails.empty")); } // Check is correct emails format if (!isHasError) { for (String email : emails) { if (!LoginValidator.isCheckEmail(email)) { isHasError = true; emailsHasError.add(email); } } if (isHasError) { errorMessages.add(this.getMessageSourceAccessor().getMessage("error.format.list.emails", new Object[] { getEmailsToString(emailsHasError) })); } } // emails already exists? if (!isHasError) { for (String email : emails) { if (getRegistrationService().findByEmailAddress(email) != null) { isHasError = true; emailsHasError.add(email); } } if (isHasError) { errorMessages.add(this.getMessageSourceAccessor().getMessage("error.list.emails.exists", new Object[] { getEmailsToString(emailsHasError) })); } } if (isHasError) { model.put("isHasError", isHasError); model.put("errorMessages", errorMessages); modelAndView = new ModelAndView("InviteNewUser", model); } else { ServletContext context = this.getServletContext(); boolean isInvitationCode = Boolean.parseBoolean(context.getInitParameter("invitation.code")); String subjectEmail = context.getInitParameter("subject.invite.email"); String templateEmail = context.getInitParameter("template.invite.email"); InvitationParams invParams = new InvitationParams(isInvitationCode, subjectEmail, templateEmail); getRegistrationService().insert(emails, invParams, getSender()); modelAndView = new ModelAndView("redirect:/myStudyList.htm", model); } return modelAndView; } private String[] getRequestedEmails(HttpServletRequest request) { String[] emails = (String[]) request.getParameterValues("emails[]"); return emails; } private String getEmailsToString(List<String> emails) { String str = ""; if (emails != null && emails.size() > 0) { for (String email : emails) { str = str + email + ", "; } str = str.substring(0, str.length() - 2); } return str; } /** * <p> * Getter for the field <code>registrationService</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.business.RegistrationService} object. */ public RegistrationService getRegistrationService() { return registrationService; } /** * <p> * Setter for the field <code>registrationService</code>. * </p> * * @param registrationService * a {@link net.sourceforge.seqware.common.business.RegistrationService} object. */ public void setRegistrationService(RegistrationService registrationService) { this.registrationService = registrationService; } }