Package er.wopaypal

Source Code of er.wopaypal.PayPalSingleItemFormLink

//
// PayPalSingleItemHyperlink.java: Class file for WO Component 'PayPalSingleItemHyperlink'
// Project WOPayPal
//
// Created by travis on Sat Feb 09 2002
//
package er.wopaypal;

import java.text.DecimalFormat;
import java.util.Enumeration;

import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WORequest;
import com.webobjects.appserver.WOResponse;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;

/**
* PayPalSingleItemFormLink is a WOComponent that implements a form to submit a
* PayPal single item purchase.
*/
public class PayPalSingleItemFormLink extends
        PayPalSingleItemLinkBase {

    /**
     * Used in the WORepetition in the WOComponent
     */
    public NSDictionary aDict;
    /**
     * Used in the WOConditional on the WOComponent
     */
    public Boolean useImageButton;

    /**
     * Constructor.
     *
     * @param context
     *            WOContext
     */
    public PayPalSingleItemFormLink(WOContext context) {
        super(context);
    }

    /**
     * Makes the component stateless.
     *
     * @return boolean
     */
    @Override
    public boolean isStateless() {
        return true;
    }

    /**
     * NSArray of binding values presented in the way PayPal expects them. This
     * array will be used in the WOComponent (in a WORepetition) to pass values
     * to a series of hidden fields in the form that gets submitted to PayPal.
     *
     * @return NSArray of NSDIctionary objects
     */
    public NSArray encodedBindings() {
        DecimalFormat dollarFormatter = new DecimalFormat("##0.00");
        NSMutableArray boundValues = new NSMutableArray();
        NSMutableArray allBindings = new NSMutableArray();
        allBindings.addObjectsFromArray(baseBindingList());
        allBindings.addObjectsFromArray(additionalBindingList());

        Enumeration enumeration = allBindings.objectEnumerator();

        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            if (valueForKey(key) != null) {
                if (key.equals("payPalBusinessName")) {
                    boundValues.addObject(new NSDictionary(new Object[] { payPalBusinessName, "business"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("userDefinableQuantity")) {
                    boundValues.addObject(new NSDictionary(new Object[] {
                            (userDefinableQuantity.booleanValue() ? "1" : "0"), "undefined_quantity"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("itemName")) {
                    boundValues.addObject(new NSDictionary(new Object[] { itemName, "item_name"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("itemNumber")) {
                    boundValues.addObject(new NSDictionary(new Object[] { itemNumber, "item_number"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("custom")) {
                    boundValues.addObject(new NSDictionary(new Object[] { custom, "custom"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("amount")) {
                    boundValues.addObject(new NSDictionary(new Object[] {
                            dollarFormatter.format(Double.valueOf(amount)), "amount"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("currencyCode")) {
                    boundValues.addObject(new NSDictionary(new Object[] { currencyCode, "currency_code"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("collectShippingAddress")) {
                    boundValues.addObject(new NSDictionary(new Object[] {
                            (collectShippingAddress.booleanValue() ? "0" : "1"), "no_shipping"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("allowCustomerNote")) {
                    boundValues.addObject(new NSDictionary(new Object[] { (allowCustomerNote.booleanValue() ? "0" : "1"), "no_note"},
                            new Object[] { "value", "key"}));
                } else if (key.equals("logoURL")) {
                    boundValues.addObject(new NSDictionary(new Object[] { logoURL, "image_url"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("returnURL")) {
                    boundValues.addObject(new NSDictionary(new Object[] { returnURL, "return"},
                            new Object[] { "value", "key"}));
                } else if (key.equals("cancelURL")) {
                    boundValues.addObject(new NSDictionary(new Object[] { cancelURL, "cancel_return"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("notify_url") && useIPN.booleanValue()) {
                    boundValues.addObject(new NSDictionary(new Object[] { notifyURL, "notify_url"},
                            new Object[] {"value", "key"}));
                } else if (key.equals("tax_rate")) {
                    boundValues.addObject(new NSDictionary(new Object[] {
                            dollarFormatter.format(Double.valueOf(tax_rate)), "tax_rate"},
                            new Object[] {"value", "key"}));
                } else {
                    // received some other binding value somehow
                }

            }
        }

        return boundValues;
    }

    /**
     * Simple utility method that checks to see if the WOComponent should render
     * the image button or the submit button. Defaults to false, which means it
     * should show the submit button.
     *
     * @return boolean
     */
    public boolean useImageButtonAsSmallBBoolean() { // default to false
        return (useImageButton != null) ? useImageButton.booleanValue() : false;
    }

    /**
     * additionalBindingList is a NSArray of bindings to pull when we
     * synchronize our values with the WOComponent's binding settings. It's a
     * simple way to customize the bindings that should be pulled, in addition
     * to the superclass' base list of bindings that it cares about
     * (baseBindingList()).
     *
     * @return NSArray
     */
    @Override
    protected NSArray additionalBindingList() {
        NSMutableArray bindingsArray = new NSMutableArray();
        bindingsArray.addObjectsFromArray(new NSArray(new Object[] { "useImageButton"}));

        return bindingsArray;
    }

    /**
     * Manually synchronizes the values from the WOComponent. It does this by
     * enumerating first through the baseBindingList() and then the
     * additionalBindingList()
     */
    protected void pullBindings() {
        Enumeration enumeration = baseBindingList().objectEnumerator();

        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            takeValueForKey(valueForBinding(key), key);
        }

        enumeration = additionalBindingList().objectEnumerator();

        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            takeValueForKey(valueForBinding(key), key);
        }
    }

    /**
     * Resets the values pulled from the WOComponent to null.
     */
    @Override
    public void reset() {
        Enumeration enumeration = baseBindingList().objectEnumerator();

        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            takeValueForKey(null, key);
        }

        enumeration = additionalBindingList().objectEnumerator();

        while (enumeration.hasMoreElements()) {
            String key = (String) enumeration.nextElement();
            takeValueForKey(null, key);
        }
        super.reset();
    }

    /**
     * Overrides the default behavior and tells the Component to synchronize its
     * ivar values with those bound to the WOComponent's bindings by calling
     * pullBindings()
     *
     * @param r
     *            WOResponse
     * @param c
     *            WOContext
     */
    @Override
    public void appendToResponse(WOResponse r, WOContext c) {
        pullBindings();
        super.appendToResponse(r, c);
    }

    /**
     * Overrides the default behavior and tells the Component to synchronize its
     * ivar values with those bound to the WOComponent's bindings by calling
     * pullBindings()
     *
     * @param r
     *            WORequest
     * @param c
     *            WOContext
     */
    @Override
    public void takeValuesFromRequest(WORequest r, WOContext c) {
        pullBindings();
        super.takeValuesFromRequest(r, c);
    }

    /**
     * Overrides the default behavior and tells the Component to synchronize its
     * ivar values with those bound to the WOComponent's bindings by calling
     * pullBindings()
     *
     * @param r
     *            WOResponse
     * @param c
     *            WOContext
     * @return WOActionResults
     */
    @Override
    public WOActionResults invokeAction(WORequest r, WOContext c) {
        pullBindings();
        return super.invokeAction(r, c);
    }

}
TOP

Related Classes of er.wopaypal.PayPalSingleItemFormLink

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.