FileDocCategorySizeDatePackage
SaveRegistrationAction.javaAPI DocExample10185Sun Mar 07 19:48:42 GMT 2004org.apache.struts.webapp.example

SaveRegistrationAction

public final class SaveRegistrationAction extends org.apache.struts.action.Action
Implementation of Action that validates and creates or updates the user registration information entered by the user. If a new registration is created, the user is also implicitly logged on.
author
Craig R. McClanahan
version
$Revision: 1.14 $ $Date: 2003/01/11 03:08:23 $

Fields Summary
private Log
log
The Log instance for this application.
Constructors Summary
Methods Summary
public org.apache.struts.action.ActionForwardexecute(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

param
mapping The ActionMapping used to select this instance
param
actionForm The optional ActionForm bean for this request (if any)
param
request The HTTP request we are processing
param
response The HTTP response we are creating
exception
Exception if the application business logic throws an exception



    // --------------------------------------------------------- Public Methods


                                                                                                  
       
				  
				  
				  
	  

	// Extract attributes and parameters we will need
	Locale locale = getLocale(request);
	MessageResources messages = getResources(request);
	HttpSession session = request.getSession();
	RegistrationForm regform = (RegistrationForm) form;
	String action = regform.getAction();
	if (action == null) {
	    action = "Create";
        }
        UserDatabase database = (UserDatabase)
	  servlet.getServletContext().getAttribute(Constants.DATABASE_KEY);
        if (log.isDebugEnabled()) {
            log.debug("SaveRegistrationAction:  Processing " + action +
                      " action");
        }

	// Is there a currently logged on user (unless creating)?
	User user = (User) session.getAttribute(Constants.USER_KEY);
	if (!"Create".equals(action) && (user == null)) {
            if (log.isTraceEnabled()) {
                log.trace(" User is not logged on in session "
                          + session.getId());
            }
	    return (mapping.findForward("logon"));
        }

	// Was this transaction cancelled?
	if (isCancelled(request)) {
            if (log.isTraceEnabled()) {
                log.trace(" Transaction '" + action +
                          "' was cancelled");
            }
	    session.removeAttribute(Constants.SUBSCRIPTION_KEY);
	    return (mapping.findForward("success"));
	}

        // Validate the transactional control token
	ActionErrors errors = new ActionErrors();
        if (log.isTraceEnabled()) {
            log.trace(" Checking transactional control token");
        }
        if (!isTokenValid(request)) {
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("error.transaction.token"));
        }
        resetToken(request);

	// Validate the request parameters specified by the user
        if (log.isTraceEnabled()) {
            log.trace(" Performing extra validations");
        }
	String value = null;
	value = regform.getUsername();
	if (("Create".equals(action)) &&
            (database.findUser(value) != null)) {
            errors.add("username",
                       new ActionError("error.username.unique",
                                       regform.getUsername()));
        }
	if ("Create".equals(action)) {
	    value = regform.getPassword();
	    if ((value == null) || (value.length() <1)) {
                errors.add("password",
                           new ActionError("error.password.required"));
            }
	    value = regform.getPassword2();
	    if ((value == null) || (value.length() < 1)) {
                errors.add("password2",
                           new ActionError("error.password2.required"));
            }
	}

	// Report any errors we have discovered back to the original form
	if (!errors.isEmpty()) {
	    saveErrors(request, errors);
            saveToken(request);
            return (mapping.getInputForward());
	}

	// Update the user's persistent profile information
        try {
            if ("Create".equals(action)) {
                user = database.createUser(regform.getUsername());
            }
            String oldPassword = user.getPassword();
            PropertyUtils.copyProperties(user, regform);
            if ((regform.getPassword() == null) ||
                (regform.getPassword().length() < 1)) {
                user.setPassword(oldPassword);
            }
        } catch (InvocationTargetException e) {
            Throwable t = e.getTargetException();
            if (t == null) {
                t = e;
            }
            log.error("Registration.populate", t);
            throw new ServletException("Registration.populate", t);
        } catch (Throwable t) {
            log.error("Registration.populate", t);
            throw new ServletException("Subscription.populate", t);
        }

        try {
            database.save();
        } catch (Exception e) {
            log.error("Database save", e);
        }

        // Log the user in if appropriate
	if ("Create".equals(action)) {
	    session.setAttribute(Constants.USER_KEY, user);
            if (log.isTraceEnabled()) {
                log.trace(" User '" + user.getUsername() +
                          "' logged on in session " + session.getId());
            }
	}

	// Remove the obsolete form bean
	if (mapping.getAttribute() != null) {
            if ("request".equals(mapping.getScope()))
                request.removeAttribute(mapping.getAttribute());
            else
                session.removeAttribute(mapping.getAttribute());
        }

	// Forward control to the specified success URI
        if (log.isTraceEnabled()) {
            log.trace(" Forwarding to success page");
        }
	return (mapping.findForward("success"));