Package org.g4studio.core.mvc.xstruts.chain.commands

Source Code of org.g4studio.core.mvc.xstruts.chain.commands.AbstractValidateActionForm

package org.g4studio.core.mvc.xstruts.chain.commands;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.g4studio.core.mvc.xstruts.action.ActionErrors;
import org.g4studio.core.mvc.xstruts.action.ActionForm;
import org.g4studio.core.mvc.xstruts.action.InvalidCancelException;
import org.g4studio.core.mvc.xstruts.chain.contexts.ActionContext;
import org.g4studio.core.mvc.xstruts.config.ActionConfig;

/**
* <p>
* Validate the properties of the form bean for this request. If there are any
* validation errors, execute the specified command; otherwise, proceed
* normally.
* </p>
*
* @version $Rev: 421119 $ $Date: 2005-06-04 10:58:46 -0400 (Sat, 04 Jun 2005) $
*/
public abstract class AbstractValidateActionForm extends ActionCommandBase {
  // ------------------------------------------------------ Instance Variables

  /**
   * <p>
   * Provide Commons Logging instance for this class.
   * </p>
   */
  private static final Log LOG = LogFactory.getLog(AbstractSelectForward.class);

  // ------------------------------------------------------ Protected Methods

  /**
   * <p>
   * Helper method to verify the Cancel state.
   * </p>
   *
   * <p>
   * If the state is invalid, Cancel is unset and an InvalidCancelException is
   * thrown.
   * </p>
   *
   * @param actionCtx
   *            Our ActionContext
   * @param actionConfig
   *            Our ActionConfig
   * @return true if cancel is set, false otherwise.
   * @throws InvalidCancelException
   */
  private boolean isCancelled(ActionContext actionCtx, ActionConfig actionConfig) throws InvalidCancelException {
    Boolean cancel = actionCtx.getCancelled();
    boolean cancelled = ((cancel != null) && cancel.booleanValue());
    boolean cancellable = actionConfig.getCancellable();

    boolean invalidState = (cancelled && !cancellable);

    if (invalidState) {
      actionCtx.setCancelled(Boolean.FALSE);
      actionCtx.setFormValid(Boolean.FALSE);
      throw new InvalidCancelException();
    }

    return cancelled;
  }

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

  /**
   * <p>
   * Validate the properties of the form bean for this request. If there are
   * any validation errors, execute the child commands in our chain;
   * otherwise, proceed normally.
   * </p>
   *
   * @param actionCtx
   *            The <code>Context</code> for the current request
   * @return <code>false</code> so that processing continues, if there are no
   *         validation errors; otherwise <code>true</code>
   * @throws Exception
   *             if thrown by the Action class
   */
  public boolean execute(ActionContext actionCtx) throws Exception {
    // Set form valid until found otherwise
    actionCtx.setFormValid(Boolean.TRUE);

    // Is there a form bean for this request?
    ActionForm actionForm = actionCtx.getActionForm();

    if (actionForm == null) {
      return false;
    }

    // Is validation disabled on this request?
    ActionConfig actionConfig = actionCtx.getActionConfig();

    if (!actionConfig.getValidate()) {
      return false;
    }

    // Was this request cancelled?
    if (isCancelled(actionCtx, actionConfig)) {
      if (LOG.isDebugEnabled()) {
        LOG.debug(" Cancelled transaction, skipping validation");
      }

      return false;
    }

    // Call the validate() method of this form bean
    ActionErrors errors = validate(actionCtx, actionConfig, actionForm);

    // If there were no errors, proceed normally
    if ((errors == null) || (errors.isEmpty())) {
      return false;
    }

    // Flag the validation failure and proceed
    /*
     * NOTE: Is there any concern that there might have already been errors,
     * or that other errors might be coming?
     */
    actionCtx.saveErrors(errors);
    actionCtx.setFormValid(Boolean.FALSE);

    return false;
  }

  // ------------------------------------------------------- Protected Methods

  /**
   * <p>
   * Call the <code>validate()</code> method of the specified form bean, and
   * return the resulting <code>ActionErrors</code> object.
   * </p>
   *
   * @param context
   *            The context for this request
   * @param actionConfig
   *            The <code>ActionConfig</code> for this request
   * @param actionForm
   *            The form bean for this request
   * @return ActionErrors object, if any
   */
  protected abstract ActionErrors validate(ActionContext context, ActionConfig actionConfig, ActionForm actionForm);
}
TOP

Related Classes of org.g4studio.core.mvc.xstruts.chain.commands.AbstractValidateActionForm

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.