husted      02/01/24 07:24:50

  Added:       contrib/scaffold/src/framework/main/org/apache/scaffold/http
                        SuperForm.java SuperAction.java SetHelper.java
  Log:
  Add base Action and base Form with enhanced functionality.
  Need to review in context of latest ActionServlet before proposing
  for core Action package. Could/should extend ValidatorForm.
  
  Revision  Changes    Path
  1.1                  
jakarta-struts/contrib/scaffold/src/framework/main/org/apache/scaffold/http/SuperForm.java
  
  Index: SuperForm.java
  ===================================================================
  package org.apache.scaffold.http;
  
  
  import java.util.Locale;
  import java.util.Map;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpSession;
  
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionMapping;
  
  
  /**
   * Standard base ActionForm with enhanced functionality.
   * @author Ted Husted
   * @version $Revision: 1.1 $ $Date: 2002/01/24 15:24:50 $
   */
  // public class ScaffoldForm extends ValidatorForm {
  public class SuperForm extends ActionForm {
  
  // --------------------------------------------------- Instance Variables
  
  
  // ----------------------------------------------------------- Properties
  
  
      /**
       * The locale property.
       */
      private Locale locale = null;
  
  
      /**
       * Set the locale.
       */
      public void setLocale(Locale locale) {
          this.locale = locale;
      }
  
  
      /**
       * Retrieve the mutable.
       */
      public Locale getLocal() {
          return this.locale;
      }
  
  
  
      /**
       * The map for field properties.
       * Can be used since 1.1 as an alternative
       * to individual properties for each field.
       */
      private Map properties = null;
  
  
      /**
       * Set the properties map.
       */
      public void setProperties(Map properties) {
          this.properties = properties;
      }
  
  
      /**
       * Get the properties map.
       */
      public Map getProperties() {
          return this.properties;
      }
  
  
      /**
       * Reset the locale to the current session.
       */
      protected void resetLocale(HttpServletRequest request) {
  
          this.locale = null;
  
          HttpSession session = request.getSession();
          if (session!=null) {
              this.locale = (Locale)
                  session.getAttribute(Action.LOCALE_KEY);
          }
  
          if (this.locale==null) {
              this.locale= Locale.getDefault();
          }
      }
  
  
      /**
       * The mutable property for properites
       * subject to autopopulation.
       */
      private boolean mutable = true;
  
  
      /**
       * Set the mutable.
       */
      public void setMutable(boolean mutable) {
          this.mutable = mutable;
      }
  
  
      /**
       * Retrieve the mutable.
       */
      public boolean isMutable() {
          return this.mutable;
      }
  
  
      /**
       * The action task property.
       */
      public String actionTask = null;
  
  
      /**
       * Set the action task.
       */
      public void setActionTask(String actionTask) {
          if (isMutable()) this.actionTask = actionTask;
      }
  
  
      /**
       * Get the action task.
       */
      public String getActionTask() {
          return this.actionTask;
      }
  
  
  // --------------------------------------------------------- Public Methods
  
  
      /**
       */
      public void setProperty(String key, Object value) {
          if (isMutable()) getProperties().put(key,value);
      }
  
  
      /**
       */
      public Object getProperty(String key) {
          return getProperties().get(key);
      }
  
  
  
      /**
       * @param mapping The mapping used to select this instance
       * @param request The servlet request we are processing
       */
      public void reset(ActionMapping mapping, HttpServletRequest request) {
  
          resetLocale(request);
  
          // if (isMutable()) ...
  
      }
  
  
  
  // ----- end SuperForm -----
  
  }
  
  
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  
  
  1.1                  
jakarta-struts/contrib/scaffold/src/framework/main/org/apache/scaffold/http/SuperAction.java
  
  Index: SuperAction.java
  ===================================================================
  package org.apache.scaffold.http;
  
  
  import java.io.IOException;
  import java.util.Map;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionError;
  import org.apache.struts.action.ActionErrors;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.action.ActionServlet;
  
  import org.apache.scaffold.lang.Tokens;
  import org.apache.scaffold.lang.ChainedException;
  
  
  /**
   * Standard Base Action.
   * @author Ted Husted
   * @version $Revision: 1.1 $ $Date: 2002/01/24 15:24:50 $
   */
  public class SuperAction extends Action {
  
  
      /**
       * Create and return an ActionErrors object.
       * The default method returns a new, empty object.
       * A subclass may examine the parameters and prepopulated
       * the object if circumstances warrant (e.g. user is not
       * authorized).
       * The appropriate forwarding can then be returned by
       * checkErrors (override this too).
       *
       * @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 resonse we are creating
       */
      protected ActionErrors getActionErrors(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request) {
  
          return new ActionErrors();
  
      }
  
  
       /**
        * Return the appropriate ActionForward for an
        * error condition.
        * The default method returns a forward to input,
        * when there is one, or "error" when not.
        * The application must provide an "error" forward.
        * An advanced implementation could check the errors
        * and provide different forwardings for different
        * @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 resonse we are creating
        */
       protected ActionForward findError(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request,
              HttpServletResponse response,
              ActionErrors errors) {
  
          if (errors.empty())
              return null;
  
          saveErrors(request, errors);
  
          // If input page, use that
          if (mapping.getInput()!=null)
              return (new ActionForward(mapping.getInput()));
  
          // If no input page, use error forwarding
          return mapping.findForward(Tokens.ERROR);
  
      }
  
  
      /**
       * Execute the business logic for this Action.
       * @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 resonse we are creating
       * @param errors Our ActionErrors collection
       */
      public void executeLogic(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request,
              HttpServletResponse response,
              ActionErrors errors)
          throws Exception {
  
          // override to provide functionality, like
          // myBusinessObject.execute(form);
  
     }
  
  
       /**
        * Process the exception handling for this Action.
        * Requires that exception thrown be subclass of
        * ChainedException. Otherwise override.
        * error.general and error.detail need to be
        * defined in ApplicationResources.
        * error.general = An unexpected error has occurred.
        * error.detail = {0}
        * @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
        */
       protected void catchException(
                      ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response,
                      ActionErrors errors,
                      Exception exception) {
  
              // Cast as our subclass base type
          ChainedException e = (ChainedException) exception;
  
              // Log and print to error console
          servlet.log("Action Exception: ", e );
          e.printStackTrace();
  
              // General error message
          errors.add(ActionErrors.GLOBAL_ERROR,
              new ActionError("error.general"));
  
              // Generate error messages from exceptions
          errors.add(ActionErrors.GLOBAL_ERROR,
              new ActionError("error.detail",e.getMessage()));
          if (e.isCause()) {
              errors.add(ActionErrors.GLOBAL_ERROR,
                  new ActionError("error.detail",e.getCauseMessage()));
          }
      }
  
  
      /**
       * Save to the appropriate context any helper objects that
       * may be expected by another component when this Action
       * completes.
       * The default method does nothing.
       *
       * @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 resonse we are creating
       */
      protected void saveHelpers(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request) {
  
          // override to provide funcionality, like
          // request.setAttribute("yourKey",yourBusinessObject);
  
      }
  
  
       /**
        * Return the appropriate ActionForward for the nominal,
        * non-error state.
        * The default returns mapping.findForward("continue");
        * @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 response we are creating
        * @param errors Our ActionErrors collection
        */
       protected ActionForward findNominal(
           ActionMapping mapping,
           ActionForm form,
           HttpServletRequest request,
           HttpServletResponse response,
           ActionErrors errors
           ) {
  
          return mapping.findForward(Tokens.CONTINUE);
  
      }
  
  
      /**
       * Skeleton perform that calls the other "hotspot" methods in
       * this class in turn. Typically, you can override the other
       * methods and leave this one as is.
       * @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
       * @param helper The helper object
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(ActionMapping mapping,
                   ActionForm form,
                   HttpServletRequest request,
                   HttpServletResponse response)
      throws IOException, ServletException {
  
          ActionErrors errors = getActionErrors(mapping,form,request);
  
          if (!errors.empty())
              return findError(mapping,form,request,response,errors);
  
          try {
  
              executeLogic(mapping,form,request,response,errors);
  
          }
          catch (Exception e) {
              catchException(mapping,form,request,response,errors,e);
          }
  
          if (!errors.empty())
              return findError(mapping,form,request,response,errors);
  
          saveHelpers(mapping,form,request);
  
          return findNominal(mapping,form,request,response,errors);
  
      }
  
  } // end SuperAction
  
  
  /*
   * $Header: 
/home/cvs/jakarta-struts/contrib/scaffold/src/framework/main/org/apache/scaffold/http/SuperAction.java,v
 1.1 2002/01/24 15:24:50 husted Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/24 15:24:50 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
  **/
  
  
  
  
  
  
  
  1.1                  
jakarta-struts/contrib/scaffold/src/framework/main/org/apache/scaffold/http/SetHelper.java
  
  Index: SetHelper.java
  ===================================================================
  package org.apache.scaffold.http;
  
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  
  import org.apache.scaffold.http.ModelHelper;
  import org.apache.scaffold.model.ModelException;
  import org.apache.scaffold.model.ModelResult;
  
  
  /**
   * Standard Action to manage helper objects.
   * @author Ted Husted
   * @version $Revision: 1.1 $ $Date: 2002/01/24 15:24:50 $
   */
  public class SetHelper extends ModelHelper {
  
  
      /**
       * @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 helper The helper object
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       * :FIXME: is there any valid use of the response here?
       */
      public ModelResult getResult(ActionMapping mapping,
                   ActionForm form,
                   HttpServletRequest request,
                   HttpServletResponse response,
                   Object[] helpers) throws ModelException {
  
         request.getSession().setAttribute(mapping.getParameter(),helpers[0]);
         return super.getResult(mapping,form,request,response,helpers);
  
      }
  
  } // end SessionModelHelper
  
  
  /*
   * $Header: 
/home/cvs/jakarta-struts/contrib/scaffold/src/framework/main/org/apache/scaffold/http/SetHelper.java,v
 1.1 2002/01/24 15:24:50 husted Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/24 15:24:50 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  
  
  
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to