001: /*
002: * $Id: EditRegistrationAction.java 471754 2006-11-06 14:55:09Z husted $
003: *
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: package org.apache.struts.webapp.example;
023:
024: import java.lang.reflect.InvocationTargetException;
025: import javax.servlet.ServletException;
026: import javax.servlet.http.HttpServletRequest;
027: import javax.servlet.http.HttpSession;
028: import javax.servlet.http.HttpServletResponse;
029: import org.apache.commons.beanutils.PropertyUtils;
030: import org.apache.commons.logging.Log;
031: import org.apache.commons.logging.LogFactory;
032: import org.apache.struts.action.Action;
033: import org.apache.struts.action.ActionForm;
034: import org.apache.struts.action.ActionForward;
035: import org.apache.struts.action.ActionMapping;
036:
037: /**
038: * Implementation of <strong>Action</strong> that populates an instance of
039: * <code>RegistrationForm</code> from the profile of the currently logged on
040: * User (if any).
041: *
042: * @author Craig R. McClanahan
043: * @version $Rev: 471754 $ $Date: 2006-11-06 08:55:09 -0600 (Mon, 06 Nov 2006) $
044: */
045:
046: public final class EditRegistrationAction extends Action {
047:
048: // ----------------------------------------------------- Instance Variables
049:
050: /**
051: * The <code>Log</code> instance for this application.
052: */
053: private Log log = LogFactory
054: .getLog("org.apache.struts.webapp.Example");
055:
056: // --------------------------------------------------------- Public Methods
057:
058: /**
059: * Process the specified HTTP request, and create the corresponding HTTP
060: * response (or forward to another web component that will create it).
061: * Return an <code>ActionForward</code> instance describing where and how
062: * control should be forwarded, or <code>null</code> if the response has
063: * already been completed.
064: *
065: * @param mapping The ActionMapping used to select this instance
066: * @param form The optional ActionForm bean for this request (if any)
067: * @param request The HTTP request we are processing
068: * @param response The HTTP response we are creating
069: *
070: * @exception Exception if the application business logic throws
071: * an exception
072: */
073: public ActionForward execute(ActionMapping mapping,
074: ActionForm form, HttpServletRequest request,
075: HttpServletResponse response) throws Exception {
076:
077: // Extract attributes we will need
078: HttpSession session = request.getSession();
079: String action = request.getParameter("action");
080: if (action == null)
081: action = "Create";
082: if (log.isDebugEnabled()) {
083: log.debug("EditRegistrationAction: Processing " + action
084: + " action");
085: }
086:
087: // Is there a currently logged on user?
088: User user = null;
089: if (!"Create".equals(action)) {
090: user = (User) session.getAttribute(Constants.USER_KEY);
091: if (user == null) {
092: if (log.isDebugEnabled()) {
093: log.debug(" User is not logged on in session "
094: + session.getId());
095: }
096: return (mapping.findForward("logon"));
097: }
098: }
099:
100: // Populate the user registration form
101: if (form == null) {
102: if (log.isTraceEnabled()) {
103: log
104: .trace(" Creating new RegistrationForm bean under key "
105: + mapping.getAttribute());
106: }
107: form = new RegistrationForm();
108: if ("request".equals(mapping.getScope()))
109: request.setAttribute(mapping.getAttribute(), form);
110: else
111: session.setAttribute(mapping.getAttribute(), form);
112: }
113: RegistrationForm regform = (RegistrationForm) form;
114: if (user != null) {
115: if (log.isTraceEnabled()) {
116: log.trace(" Populating form from " + user);
117: }
118: try {
119: PropertyUtils.copyProperties(regform, user);
120: regform.setAction(action);
121: regform.setPassword(null);
122: regform.setPassword2(null);
123: } catch (InvocationTargetException e) {
124: Throwable t = e.getTargetException();
125: if (t == null)
126: t = e;
127: log.error("RegistrationForm.populate", t);
128: throw new ServletException("RegistrationForm.populate",
129: t);
130: } catch (Throwable t) {
131: log.error("RegistrationForm.populate", t);
132: throw new ServletException("RegistrationForm.populate",
133: t);
134: }
135: }
136:
137: // Set a transactional control token to prevent double posting
138: if (log.isTraceEnabled()) {
139: log.trace(" Setting transactional control token");
140: }
141: saveToken(request);
142:
143: // Forward control to the edit user registration page
144: if (log.isTraceEnabled()) {
145: log.trace(" Forwarding to 'success' page");
146: }
147: return (mapping.findForward("success"));
148:
149: }
150:
151: }
|