com.softslate.commerce.customer.order
Class CheckoutUtilsImpl

java.lang.Object
  extended by com.softslate.commerce.customer.order.CheckoutUtilsImpl
All Implemented Interfaces:
CheckoutUtils

public class CheckoutUtilsImpl
extends java.lang.Object
implements CheckoutUtils

CheckoutUtilsImpl is the default implementation of the CheckoutUtils interface for the application.

Author:
David Tobey
See Also:
CheckoutUtils

Field Summary
(package private) static org.apache.commons.logging.Log log
           
 
Constructor Summary
CheckoutUtilsImpl()
           
 
Method Summary
 void addInventoryMessages(java.util.Map results, BaseForm baseForm)
           
 java.lang.String findCheckoutScreen(BaseForm baseForm)
          Determines what checkout screen to direct the user to based on the status of the session and the store's database configuration.
 java.util.Map findShippingOptionFromOrder(java.util.Collection options, Order order, BaseForm baseForm)
           
 java.util.Collection loadEstimatedShippingOptions(BaseForm baseForm)
           
 java.util.Collection loadShippingOptions(BaseForm baseForm)
          Loads the active shipping options for display to the user.
 void prepareCheckoutAddressesForm(CheckoutAddressesForm baseForm)
          Initializes an instance of CheckoutAddressesForm with address and shipping option information.
 void prepareCheckoutShippingForm(BaseForm baseForm)
          Initializes an instance of CheckoutAddressesForm with address and shipping option information.
 void prepareLoginForm(BaseForm baseForm, org.apache.struts.action.ActionServlet servlet)
          Initializes an instance of LoginForm and populates it from request parameters.
 void preparePaymentForm(org.apache.struts.action.ActionForm paymentForm, BaseForm baseForm, org.apache.struts.action.ActionServlet servlet)
          Prepares a given payment form by populating its properties from the request's parameters.
 void preparePaymentForms(BaseForm baseForm, org.apache.struts.action.ActionServlet servlet)
          Creates payment form instances and populates them from the request parameters.
 void prepareRegisterForm(BaseForm baseForm, org.apache.struts.action.ActionServlet servlet)
          Initializes an instance of RegisterForm and populates it from request parameters.
 java.lang.String processCartAddResults(java.util.Map results, BaseForm baseForm)
           
 org.apache.struts.action.ActionForward processCheckoutAddresses(BaseForm baseForm)
          Processes submissions to record addresses in the current user's cart.
 org.apache.struts.action.ActionForward processCheckoutAddresses(BaseForm baseForm, javax.servlet.http.HttpServletResponse response)
          Processes submissions to record addresses in the current user's cart.
 org.apache.struts.action.ActionForward processCheckoutConfirm(BaseForm baseForm)
          Processes a request to confirm an order.
 org.apache.struts.action.ActionForward processCheckoutLogin(BaseForm baseForm, javax.servlet.http.HttpServletResponse response)
          Processes a login request during the checkout process.
 org.apache.struts.action.ActionForward processCheckoutPayment(BaseForm baseForm, org.apache.struts.action.ActionServlet servlet)
          Processes submissions of payment information by the current user.
 org.apache.struts.action.ActionForward processCheckoutRegister(BaseForm baseForm)
          Processes a request to register a new customer account during the checkout process.
 org.apache.struts.action.ActionForward processCheckoutShipping(BaseForm baseForm)
          Processes submissions to record shipping options in the current user's cart.
 org.apache.struts.action.ActionForward processDeclineLogin(BaseForm baseForm)
          Processes a request to continue the checkout process without logging in or creating an account.
 java.util.Map processInventoryDiscountCheck(BaseForm baseForm)
          Performs a check on the inventory and processes discounting for the current user's cart.
 java.util.Map processOrderComplete(BaseForm baseForm)
          Invoked when a order has just been completed.
 int processPayment(PaymentProcessor paymentProcessor, org.apache.struts.action.ActionForm paymentForm, BaseForm baseForm)
          Processes payment information for a request with a given payment processor.
 void processSavedCartCookie(BaseForm baseForm, java.util.Map parameters, javax.servlet.http.HttpServletResponse response)
           
 java.util.Map processShipping(BaseForm baseForm)
          Processes shipping charges for the current user's cart.
 java.util.Map processTax(BaseForm baseForm)
          Processes tax charges for the current user's cart.
protected  void saveErrors(javax.servlet.http.HttpServletRequest request, org.apache.struts.action.ActionMessages errors)
           
protected  void saveMessages(javax.servlet.http.HttpServletRequest request, org.apache.struts.action.ActionMessages messages)
           
 void sendLowStockEmails(java.util.Collection lowStockEmails, BaseForm baseForm)
           
 boolean validateBillingFields(BaseForm baseForm)
          Validates the required billing address fields in the user's cart.
 boolean validateDeliveryFields(BaseForm baseForm)
          Validates the required delivery address fields in the user's cart.
 boolean validatePaymentForm(org.apache.struts.action.ActionForm paymentForm, BaseForm baseForm)
          Validates a given payment form for a given request.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

static org.apache.commons.logging.Log log
Constructor Detail

CheckoutUtilsImpl

public CheckoutUtilsImpl()
Method Detail

findCheckoutScreen

public java.lang.String findCheckoutScreen(BaseForm baseForm)
                                    throws java.lang.Exception
Description copied from interface: CheckoutUtils
Determines what checkout screen to direct the user to based on the status of the session and the store's database configuration. The possible screen names returned are:

The above screen names correspond to ActionForwards defined in the "/WEB-INF/conf/order/struts-config-order.xml" file.

Specified by:
findCheckoutScreen in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
A string identifying the name of the checkout screen to direct the user to.
Throws:
java.lang.Exception

validateBillingFields

public boolean validateBillingFields(BaseForm baseForm)
                              throws java.lang.Exception
Description copied from interface: CheckoutUtils
Validates the required billing address fields in the user's cart. Loops through the "billingRequired" database setting to check which fields are required.

Specified by:
validateBillingFields in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
true if all the required billing fields are present in the user's cart. false if not.
Throws:
java.lang.Exception

validateDeliveryFields

public boolean validateDeliveryFields(BaseForm baseForm)
                               throws java.lang.Exception
Description copied from interface: CheckoutUtils
Validates the required delivery address fields in the user's cart. Loops through the "deliveryRequired" database setting to check which fields are required.

Specified by:
validateDeliveryFields in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
true if all the required billing fields are present in the user's cart. false if not.
Throws:
java.lang.Exception

prepareLoginForm

public void prepareLoginForm(BaseForm baseForm,
                             org.apache.struts.action.ActionServlet servlet)
                      throws java.lang.Exception
Description copied from interface: CheckoutUtils
Initializes an instance of LoginForm and populates it from request parameters. Used on the invite login screen and the force login screen.

Specified by:
prepareLoginForm in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

prepareRegisterForm

public void prepareRegisterForm(BaseForm baseForm,
                                org.apache.struts.action.ActionServlet servlet)
                         throws java.lang.Exception
Description copied from interface: CheckoutUtils
Initializes an instance of RegisterForm and populates it from request parameters. Used on the checkout register screen.

Specified by:
prepareRegisterForm in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

processCheckoutLogin

public org.apache.struts.action.ActionForward processCheckoutLogin(BaseForm baseForm,
                                                                   javax.servlet.http.HttpServletResponse response)
                                                            throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes a login request during the checkout process. Used when a user logs in from the invite login screen or the force login screen.

The method runs CustomerProcessor.processLogin(Map) to process the login request.

Specified by:
processCheckoutLogin in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureInvalidLogin" or "success".
Throws:
java.lang.Exception

processCheckoutRegister

public org.apache.struts.action.ActionForward processCheckoutRegister(BaseForm baseForm)
                                                               throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes a request to register a new customer account during the checkout process. Used when a user registers from the checkout register screen.

This method runs CustomerProcessor.processRegister(Map) to process the register request.

Specified by:
processCheckoutRegister in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureUserName" if the user name is already taken, or "success".
Throws:
java.lang.Exception

processDeclineLogin

public org.apache.struts.action.ActionForward processDeclineLogin(BaseForm baseForm)
                                                           throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes a request to continue the checkout process without logging in or creating an account. Used when a user declines to log in from the invite login screen.

This method places an attribute in the user's session named "declinedLoginBeforeCheckout".

Specified by:
processDeclineLogin in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. Always returns the "success" ActionForward.
Throws:
java.lang.Exception

loadShippingOptions

public java.util.Collection loadShippingOptions(BaseForm baseForm)
                                         throws java.lang.Exception
Description copied from interface: CheckoutUtils
Loads the active shipping options for display to the user. Used on the checkout addresses screen. Loops through the classes in the "activeShippingProcessors" database setting and invokes the loadShippingOptions method in each to get the available options.

Specified by:
loadShippingOptions in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
A Collection containing each of the shipping option available for the user to select.
Throws:
java.lang.Exception
See Also:
ShippingProcessor.loadShippingOptions(Map)

findShippingOptionFromOrder

public java.util.Map findShippingOptionFromOrder(java.util.Collection options,
                                                 Order order,
                                                 BaseForm baseForm)

prepareCheckoutAddressesForm

public void prepareCheckoutAddressesForm(CheckoutAddressesForm baseForm)
                                  throws java.lang.Exception
Description copied from interface: CheckoutUtils
Initializes an instance of CheckoutAddressesForm with address and shipping option information. Used on the checkout addresses screen. If the current user is a logged in customer, populates the form with the account's address information.

Specified by:
prepareCheckoutAddressesForm in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

prepareCheckoutShippingForm

public void prepareCheckoutShippingForm(BaseForm baseForm)
                                 throws java.lang.Exception
Description copied from interface: CheckoutUtils
Initializes an instance of CheckoutAddressesForm with address and shipping option information. Used on the checkout addresses screen. If the current user is a logged in customer, populates the form with the account's address information.

Specified by:
prepareCheckoutShippingForm in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

processCheckoutAddresses

public org.apache.struts.action.ActionForward processCheckoutAddresses(BaseForm baseForm)
                                                                throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes submissions to record addresses in the current user's cart. Used for requests to "/CheckoutAddresses.do".

Invokes CartProcessor.processCheckoutAddresses(Map) to process the submitted address information. Then invokes CheckoutUtils.processInventoryDiscountCheck(BaseForm) to perform a check on inventory and discounts for items in the cart.

Specified by:
processCheckoutAddresses in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureItemsAdjusted", "failureAllItemsRemoved", or "success".
Throws:
java.lang.Exception

processCheckoutAddresses

public org.apache.struts.action.ActionForward processCheckoutAddresses(BaseForm baseForm,
                                                                       javax.servlet.http.HttpServletResponse response)
                                                                throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes submissions to record addresses in the current user's cart. Used for requests to "/CheckoutAddresses.do".

Invokes CartProcessor.processCheckoutAddresses(Map) to process the submitted address information. Then invokes CheckoutUtils.processInventoryDiscountCheck(BaseForm) to perform a check on inventory and discounts for items in the cart.

Specified by:
processCheckoutAddresses in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
response - The HttpServletResponse object associated with the request. If present and the "autoSavedCartToken" cookie is present, that cookie will be removed so no personal information is retrievable through the cookie.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureItemsAdjusted", "failureAllItemsRemoved", or "success".
Throws:
java.lang.Exception

processInventoryDiscountCheck

public java.util.Map processInventoryDiscountCheck(BaseForm baseForm)
                                            throws java.lang.Exception
Description copied from interface: CheckoutUtils
Performs a check on the inventory and processes discounting for the current user's cart. Makes sure that if products are to be decremented on checkout, no skus are out of stock.

Specified by:
processInventoryDiscountCheck in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
A Map containing a key named resultCode: 0 indicates no changes, 1 indicates the cart was adjusted, 2 indicates all order items were removed (due to inventory being out of stock).
Throws:
java.lang.Exception

processCheckoutShipping

public org.apache.struts.action.ActionForward processCheckoutShipping(BaseForm baseForm)
                                                               throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes submissions to record shipping options in the current user's cart. Used for requests to "/CheckoutShipping.do".

Invokes CheckoutUtils.processShipping(BaseForm) to process shipping charges and CheckoutUtils.processTax(BaseForm) to process tax charges.

Specified by:
processCheckoutShipping in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureShippingProcess", "failureTaxProcess", "success", "successNoPaymentRequired", or "successNoPaymentRequiredConfirm".
Throws:
java.lang.Exception

processShipping

public java.util.Map processShipping(BaseForm baseForm)
                              throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes shipping charges for the current user's cart. Called when the checkout addresses form is processed.

Goes through the classes in the "activeShippingProcessors" database setting and invokes the processShipping(Map) method in each to process the charges. The incoming baseForm should have a property named shippingOption containing the shipping option selected by the user.

Specified by:
processShipping in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
A Map with a key named resultCode, which is 0, if the processing was successful. A non-zero integer indicates there was a problem and further processing should stop.
Throws:
java.lang.Exception
See Also:
ShippingProcessor.processShipping(Map)

processTax

public java.util.Map processTax(BaseForm baseForm)
                         throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes tax charges for the current user's cart. Called when the checkout addresses form is processed.

Goes through the classes in the "activeTaxProcessors" database setting and invokes the processTax(Map) method in each to process the charges.

Specified by:
processTax in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
A Map with a key named resultCode, which is 0, if the processing was successful. A non-zero integer indicates there was a problem and further processing should stop.
Throws:
java.lang.Exception

preparePaymentForms

public void preparePaymentForms(BaseForm baseForm,
                                org.apache.struts.action.ActionServlet servlet)
                         throws java.lang.Exception
Description copied from interface: CheckoutUtils
Creates payment form instances and populates them from the request parameters. Used on the checkout payment screen so each of the active payment forms can be displayed. Loops through the "activePaymentForms" database setting to find the class names of the payment forms to create.

Specified by:
preparePaymentForms in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

preparePaymentForm

public void preparePaymentForm(org.apache.struts.action.ActionForm paymentForm,
                               BaseForm baseForm,
                               org.apache.struts.action.ActionServlet servlet)
                        throws java.lang.Exception
Description copied from interface: CheckoutUtils
Prepares a given payment form by populating its properties from the request's parameters.

Specified by:
preparePaymentForm in interface CheckoutUtils
Parameters:
paymentForm - The payment form being populated from the request.
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

processCheckoutPayment

public org.apache.struts.action.ActionForward processCheckoutPayment(BaseForm baseForm,
                                                                     org.apache.struts.action.ActionServlet servlet)
                                                              throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes submissions of payment information by the current user. Used for requests to "/CheckoutPayment.do".

Loops through each of the classes in the "activePaymentForms" and "activePaymentProcessors" database settings to find the payment form that was used to submit payment information, and its corresponding PaymentProcessor. Uses the "paymentFormCount" request parameter to determine which form was submitted.

Invokes CheckoutUtils.validatePaymentForm(ActionForm, BaseForm) to validate the submission, and if valid, CheckoutUtils.processPayment(PaymentProcessor, ActionForm, BaseForm) to process it.

If a confirmation screen must be displayed, this method places the payment form and the name of the payment processor in the customer's session, so that the processCheckoutConfirm method can retrieve them.

Specified by:
processCheckoutPayment in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
An ActionForward corresponding to the results of the processing. The ActionForward will be named "failureFormValidation", "failurePaymentProcess", "success", or "successCheckoutConfirm".
Throws:
java.lang.Exception

validatePaymentForm

public boolean validatePaymentForm(org.apache.struts.action.ActionForm paymentForm,
                                   BaseForm baseForm)
                            throws java.lang.Exception
Description copied from interface: CheckoutUtils
Validates a given payment form for a given request. Used when a submission is made from the checkout payment screen to validate the submission of payment information. The method simply runs the validate method of the payment form, saving any validation errors to the request.

Specified by:
validatePaymentForm in interface CheckoutUtils
Parameters:
paymentForm - The payment form that was used by the user to submit payment information.
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
true if the submission passes validation. false if not.
Throws:
java.lang.Exception

processPayment

public int processPayment(PaymentProcessor paymentProcessor,
                          org.apache.struts.action.ActionForm paymentForm,
                          BaseForm baseForm)
                   throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes payment information for a request with a given payment processor. Used when a submission is made from the checkout payment screen to process payment information.

This method runs the processPayment(Map) method of the incoming PaymentProcessor, which returns a Map that includes a key named resultCode. This method returns the int value of that resultCode.

If the resultCode is not equal to zero, it indicates an error in the processing of the payment. This method will look up an error message in the "/WEB-INF/classes/resources/payment/application.properties" file corresponding to the resultCode and the name of the payment processor. For example, the error message for the message key payment.errorPayflowProProcessor10000 will be placed in the request, if the payment processor was PayflowProProcessor and the resultCode was 10000. Additional error messages that follow the same naming pattern can be placed in the "/WEB-INF/classes/resources/payment/application.properties" file.

Specified by:
processPayment in interface CheckoutUtils
Parameters:
paymentProcessor - The PaymentProcessor corresponding to the payment form used by the user to submit payment information.
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Returns:
true if the submission passes validation. false if not.
Throws:
java.lang.Exception

processCheckoutConfirm

public org.apache.struts.action.ActionForward processCheckoutConfirm(BaseForm baseForm)
                                                              throws java.lang.Exception
Description copied from interface: CheckoutUtils
Processes a request to confirm an order. Processes the payment form stored in the session with the session's payment processor. If processing fails, a failure is returned. Otherwise, the processOrderComplete method is run.

Specified by:
processCheckoutConfirm in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

processOrderComplete

public java.util.Map processOrderComplete(BaseForm baseForm)
                                   throws java.lang.Exception
Description copied from interface: CheckoutUtils
Invoked when a order has just been completed. Decrements inventory if called for, and places the current User object, as well as the baseForm object in the request scope, for use by the JSP templates that display the invoice and send out the notification and confirmation emails.

Specified by:
processOrderComplete in interface CheckoutUtils
Parameters:
baseForm - The form class corresponding to the current request. Holds various properties of the request to help action classes communicate with the rest of the application.
Throws:
java.lang.Exception

processSavedCartCookie

public void processSavedCartCookie(BaseForm baseForm,
                                   java.util.Map parameters,
                                   javax.servlet.http.HttpServletResponse response)

processCartAddResults

public java.lang.String processCartAddResults(java.util.Map results,
                                              BaseForm baseForm)

addInventoryMessages

public void addInventoryMessages(java.util.Map results,
                                 BaseForm baseForm)

sendLowStockEmails

public void sendLowStockEmails(java.util.Collection lowStockEmails,
                               BaseForm baseForm)

loadEstimatedShippingOptions

public java.util.Collection loadEstimatedShippingOptions(BaseForm baseForm)

saveErrors

protected void saveErrors(javax.servlet.http.HttpServletRequest request,
                          org.apache.struts.action.ActionMessages errors)

saveMessages

protected void saveMessages(javax.servlet.http.HttpServletRequest request,
                            org.apache.struts.action.ActionMessages messages)


Copyright © SoftSlate, LLC 2003–2005