Package org.appfuse.webapp.pages

Source Code of org.appfuse.webapp.pages.Signup

package org.appfuse.webapp.pages;

import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationMessage;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.appfuse.Constants;
import org.appfuse.model.User;
import org.appfuse.service.MailEngine;
import org.appfuse.service.UserExistsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.security.access.AccessDeniedException;
import org.wicketstuff.annotation.mount.MountPath;

import javax.servlet.http.Cookie;

/**
* Page for a new user signup.
*
* @author Marcin ZajÄ…czkowski, 2010-09-03
*/
@MountPath("signup")
public class Signup extends AbstractUserEdit {

    private final static Logger log = LoggerFactory.getLogger(Signup.class);

    private static final String SIGNUP_PROPERTY_PREFIX = "signup";

    @SpringBean
    private MailEngine mailEngine;

    public Signup() {
        super(NO_RESPONSE_PAGE, SIGNUP_PROPERTY_PREFIX, new Model<User>(new User()));
    }

    @Override
    protected void onInitialize() {
        //TODO: MZA: quite odd, before super
        setUser(new User());
       
        super.onInitialize();
    }

    //TODO: MZA: Maybe use a visitor pattern?

    @Override
    protected void onSaveButtonSubmit() {
        User user = prepareNewUser();
        user = saveUser(user);
        prepareAndSendNewUserEmail(user);
        getSession().info(createDefaultInfoNotificationMessage(new ResourceModel("user.registered")));
        setUserNameCookieAndSetResponsePage(user.getUsername());
    }

    private User prepareNewUser() {
        User user = getUser();
        user.setEnabled(true);
        user.addRole(getRoleManager().getRole(Constants.USER_ROLE));
        return user;
    }

    private User saveUser(User user) {
        try {
            user = getUserManager().saveUser(user);
        } catch (AccessDeniedException ade) {
            // thrown by UserSecurityAdvice configured in aop:advisor
            log.warn(ade.getMessage());
            throw new SecurityException("AccessDenied on saving new user", ade);
        } catch (UserExistsException e) {
            error(new StringResourceModel("errors.existing.user", this, null, new Object[] {
                    user.getUsername(), user.getEmail()}).getString());
            throw new RestartResponseException(getPage());
        }
        return user;
    }

    private void prepareAndSendNewUserEmail(User user) {
        SimpleMailMessage messageToSend = prepareMailMessage(user);
        sendMessage(messageToSend);
    }

    //TODO: MZA: Should be moved to business layer
    private SimpleMailMessage prepareMailMessage(User user) {
        log.debug("Preparing message for user '{}' with an account information", user.getUsername());
        SimpleMailMessage message = new SimpleMailMessage();    //serviceFacade.getMailMessage();
        message.setTo(user.getFullName() + "<" + user.getEmail() + ">");

        StringBuilder msg = new StringBuilder();
        msg.append(getString("signup.email.message"));
        msg.append("\n\n").append(getString("user.username"));
        msg.append(": ").append(user.getUsername()).append("\n");
        msg.append(getString("user.password")).append(": ");
        msg.append(user.getPassword());
        msg.append("\n\nLogin at: ")
                .append(RequestCycle.get().getUrlRenderer().renderFullUrl(
                        Url.parse(urlFor(Login.class, null).toString())));
        message.setText(msg.toString());
        message.setSubject(getString("signup.email.subject"));

        return message;
    }

    private void sendMessage(SimpleMailMessage message) {
        try {
            mailEngine.send(message);
        } catch (MailException me) {
            log.error(me.getMostSpecificCause().getMessage(), me);
            getSession().warn(new NotificationMessage(new ResourceModel("errors.sending.email")));
        }
    }

    private void setUserNameCookieAndSetResponsePage(String userName) {
        ((WebResponse)getResponse()).addCookie(new Cookie("username", userName));
        setResponsePage(Login.class);
    }

    @Override
    protected void onDeleteButtonSubmit() {
        throw new IllegalStateException("Delete button should not be able to submit on signup");
    }

    @Override
    protected void onCancelButtonSubmit() {
        //MZA: getSignInPage would be better, but it has protected visibility modifier.
        //MZA: getHomePage should be ok - not authorized user should be redirected to login page
        setResponsePage(Login.class);
    }

    @Override
    protected boolean getDisplayRolesGroupVisibility() {
        return false;
    }

    @Override
    protected boolean getAccountSettingsGroupVisibility() {
        return false;
    }

    @Override
    protected boolean getDeleteButtonVisibility() {
        return false;
    }

    @Override
    protected boolean isCollapsedAddressTab() {
        return false;
    }
}
TOP

Related Classes of org.appfuse.webapp.pages.Signup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.