FileDocCategorySizeDatePackage
SaveSubscriptionAction.javaAPI DocExample9815Sun Mar 21 19:57:36 GMT 2004org.apache.struts.webapp.example

SaveSubscriptionAction

public final class SaveSubscriptionAction extends org.apache.struts.action.Action
Implementation of Action that validates and creates or updates the mail subscription entered by the user.
struts.action
path="/saveSubscription" type="org.apache.struts.webapp.example.SaveSubscriptionAction" name="subscriptionForm" scope="request" input="subscription"
struts.action-forward
name="subscription" path="/subscription.jsp"
struts.action-forward
name="success" path="/editRegistration.do?action=Edit"
author
Craig R. McClanahan
version
$Revision: 1.13 $ $Date: 2003/01/18 19:48:56 $

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();
	SubscriptionForm subform = (SubscriptionForm) form;
	String action = subform.getAction();
	if (action == null) {
	    action = "?";
        }
        if (log.isDebugEnabled()) {
            log.debug("SaveSubscriptionAction:  Processing " + action +
                      " action");
        }

	// Is there a currently logged on user?
	User user = (User) session.getAttribute(Constants.USER_KEY);
	if (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"));
	}

	// Is there a related Subscription object?
	Subscription subscription =
	  (Subscription) session.getAttribute(Constants.SUBSCRIPTION_KEY);
        if ("Create".equals(action)) {
            subscription =
                user.createSubscription(request.getParameter("host"));
        }
	if (subscription == null) {
            if (log.isTraceEnabled()) {
                log.trace(" Missing subscription for user '" +
                          user.getUsername() + "'");
            }
	    response.sendError(HttpServletResponse.SC_BAD_REQUEST,
	                       messages.getMessage("error.noSubscription"));
	    return (null);
	}

	// Was this transaction a Delete?
	if (action.equals("Delete")) {
            if (log.isTraceEnabled()) {
                log.trace(" Deleting mail server '" +
                          subscription.getHost() + "' for user '" +
                          user.getUsername() + "'");
            }
            user.removeSubscription(subscription);
	    session.removeAttribute(Constants.SUBSCRIPTION_KEY);
            try {
                UserDatabase database = (UserDatabase)
                    servlet.getServletContext().
                    getAttribute(Constants.DATABASE_KEY);
                database.save();
            } catch (Exception e) {
                log.error("Database save", e);
            }
	    return (mapping.findForward("success"));
	}

	// All required validations were done by the form itself

	// Update the persistent subscription information
        if (log.isTraceEnabled()) {
            log.trace(" Populating database from form bean");
        }
        try {
            PropertyUtils.copyProperties(subscription, subform);
        } catch (InvocationTargetException e) {
            Throwable t = e.getTargetException();
            if (t == null)
                t = e;
            log.error("Subscription.populate", t);
            throw new ServletException("Subscription.populate", t);
        } catch (Throwable t) {
            log.error("Subscription.populate", t);
            throw new ServletException("Subscription.populate", t);
        }

        try {
            UserDatabase database = (UserDatabase)
                servlet.getServletContext().
                getAttribute(Constants.DATABASE_KEY);
            database.save();
        } catch (Exception e) {
            log.error("Database save", e);
        }

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

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