com.salesmanager.central.payment.PaymentModuleAction.java Source code

Java tutorial

Introduction

Here is the source code for com.salesmanager.central.payment.PaymentModuleAction.java

Source

/*
 * Provided by CSTI Consulting 
 * Following GNU LESSER GENERAL PUBLIC LICENSE
 * You may obtain more details at
 *
 * http://www.csticonsulting.com
 * Copyright (c) 2006-2010 Consultation CS-TI inc. 
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.salesmanager.central.payment;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.salesmanager.central.BaseAction;
import com.salesmanager.central.profile.Context;
import com.salesmanager.central.profile.ProfileConstants;
import com.salesmanager.central.util.PropertiesHelper;
import com.salesmanager.core.constants.PaymentConstants;
import com.salesmanager.core.entity.merchant.MerchantConfiguration;
import com.salesmanager.core.entity.reference.CoreModuleService;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.ConfigurationRequest;
import com.salesmanager.core.service.merchant.ConfigurationResponse;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.service.reference.ReferenceService;

public abstract class PaymentModuleAction extends BaseAction {

    private String currentModuleEnabled;// used in the jsp page as a checkbox
    private String currentModuleName;// paypal, moneris, linkpoint,
    // authorizenet, psigate, cod...
    private String moduleName;// module submited
    private String moduleEnabled;// module submited

    private ConfigurationResponse configurationVo;// expose to sub classes

    private Map<String, MerchantConfiguration> configurationModuleNames;
    private Map<String, MerchantConfiguration> configurationModuleGatewayNames;
    private Configuration conf = PropertiesHelper.getConfiguration();

    private String message;// special message

    private Logger log = Logger.getLogger(PaymentModuleAction.class);

    public void prepare() throws Exception {

        Context ctx = (Context) super.getServletRequest().getSession().getAttribute(ProfileConstants.context);
        Integer merchantid = ctx.getMerchantid();

        // Get everything related to payment
        ConfigurationRequest requestvo = new ConfigurationRequest(merchantid.intValue(), true, "MD_PAY_");
        MerchantService mservice = (MerchantService) ServiceFactory.getService(ServiceFactory.MerchantService);
        ConfigurationResponse responsevo = mservice.getConfiguration(requestvo);
        List config = responsevo.getMerchantConfigurationList();

        if (config != null) {
            this.setConfigurationVo(responsevo);
            Iterator it = config.iterator();
            while (it.hasNext()) {

                MerchantConfiguration m = (MerchantConfiguration) it.next();

                String key = m.getConfigurationKey();
                if (key.equals(PaymentConstants.MODULE_PAYMENT_INDICATOR_NAME)) {// module
                    // configured
                    if (configurationModuleNames == null)
                        configurationModuleNames = new HashMap();
                    configurationModuleNames.put(m.getConfigurationValue1(), m);
                }

                if (key.contains(PaymentConstants.MODULE_PAYMENT_GATEWAY)) {// gateway
                    // module configured
                    if (configurationModuleGatewayNames == null)
                        configurationModuleGatewayNames = new HashMap();
                    configurationModuleGatewayNames.put(m.getConfigurationModule(), m);
                }

            }
        }

        // get module name
        String pathnocontext = StringUtils.removeStart(super.getServletRequest().getRequestURI(),
                super.getServletRequest().getContextPath() + "/payment/");
        // pathnocontext is moduleid/dsiplay.action
        // retreive moduleid
        String moduleid = pathnocontext.substring(0, pathnocontext.indexOf("_"));
        this.setModuleName(moduleid);
        super.getServletRequest().setAttribute("paymentModule", moduleid);

        super.setPageTitle("module." + moduleid);

        if (this.getConfigurationModuleNames() != null
                && this.getConfigurationModuleNames().containsKey(moduleid)) {
            MerchantConfiguration conf = (MerchantConfiguration) this.getConfigurationModuleNames().get(moduleid);
            if (conf.getConfigurationValue1() != null && !conf.getConfigurationValue1().equals("")) {
                this.setCurrentModuleName(moduleid);
            }
            if (!StringUtils.isBlank(conf.getConfigurationValue()) && conf.getConfigurationValue().equals("true")) {
                this.setCurrentModuleEnabled("true");
            } else {
                this.setCurrentModuleEnabled("false");
            }
        }

        this.prepareModule();

    }

    public String display() throws Exception {

        this.prepare();
        this.setModuleEnabled(this.getCurrentModuleEnabled());
        displayModule();

        return SUCCESS;
    }

    public String save() throws Exception {

        this.prepare();
        Context ctx = (Context) super.getServletRequest().getSession().getAttribute(ProfileConstants.context);
        Integer merchantid = ctx.getMerchantid();

        if (configurationModuleNames == null) {
            configurationModuleNames = new HashMap();
        }

        MerchantService mservice = (MerchantService) ServiceFactory.getService(ServiceFactory.MerchantService);
        Date dt = new Date();

        MerchantConfiguration config = null;

        List updateableModules = new ArrayList();

        ReferenceService rservice = (ReferenceService) ServiceFactory.getService(ServiceFactory.ReferenceService);
        Map modules = rservice.getPaymentMethodsMap(ctx.getCountryid());
        CoreModuleService module = (CoreModuleService) modules.get(this.getModuleName());

        if (this.getConfigurationModuleNames() != null) {// RT is configured

            // ONE ONLY ALLOWED
            // if one module configured
            if (this.getConfigurationModuleNames().size() == 1) {

                if (this.getConfigurationModuleNames().containsKey(this.getCurrentModuleName())) {// this is the one
                    // configured
                    // Same module configured
                    MerchantConfiguration mconf = (MerchantConfiguration) this.getConfigurationModuleNames()
                            .get(this.getCurrentModuleName());
                    if (this.getModuleEnabled() != null && this.getModuleEnabled().equals("true")) {
                        mconf.setConfigurationValue("true");
                    } else {
                        mconf.setConfigurationValue("false");
                    }
                    updateableModules.add(mconf);
                } else {
                    // Get module, set flag to false
                    Collection coll = this.getConfigurationModuleNames().values();
                    Object[] obj = coll.toArray();

                    MerchantConfiguration conf = (MerchantConfiguration) obj[0];

                    // check if it is a gateway

                    if (module != null && module.getCoreModuleServiceSubtype() == 1
                            && this.getModuleEnabled().equals("true")) {

                        if (configurationModuleGatewayNames != null
                                && configurationModuleGatewayNames.containsKey(conf.getConfigurationValue1())) {

                            conf.setConfigurationValue("");

                        }

                    }
                    updateableModules.add(conf);

                    // create a new one
                    MerchantConfiguration newconfiguration = new MerchantConfiguration();
                    newconfiguration.setConfigurationKey(PaymentConstants.MODULE_PAYMENT_INDICATOR_NAME);
                    newconfiguration.setConfigurationModule("");
                    newconfiguration.setMerchantId(merchantid);
                    if (this.getModuleEnabled() != null && this.getModuleEnabled().equals("true")) {
                        newconfiguration.setConfigurationValue("true");
                    } else {
                        newconfiguration.setConfigurationValue("");
                    }
                    newconfiguration.setConfigurationValue1(this.getModuleName());
                    newconfiguration.setDateAdded(new Date(dt.getTime()));
                    config = newconfiguration;

                    updateableModules.add(newconfiguration);

                }
            } else {// keep the good one and set to false the others

                // if gateway submited
                if (module != null && module.getCoreModuleServiceSubtype() == 1
                        && this.getModuleEnabled().equals("true")

                        && this.getConfigurationModuleGatewayNames() != null) {

                    Map coll = this.getConfigurationModuleGatewayNames();

                    Iterator i = coll.keySet().iterator();
                    while (i.hasNext()) {

                        String key = (String) i.next();
                        if (configurationModuleNames != null) {

                            MerchantConfiguration conf = (MerchantConfiguration) configurationModuleNames.get(key);
                            if (conf != null) {
                                conf.setConfigurationValue("");
                                updateableModules.add(conf);
                            }

                        }

                    }

                }
                if (this.getConfigurationModuleNames().containsKey(this.getModuleName())) {
                    // contains submited module
                    MerchantConfiguration conf = this.getConfigurationModuleNames().get(this.getModuleName());
                    if (this.getModuleEnabled() != null && this.getModuleEnabled().equals("true")) {
                        conf.setConfigurationValue("true");
                    } else {
                        conf.setConfigurationValue("");
                    }
                    updateableModules.add(conf);
                    config = conf;
                } else {// create a new one

                    MerchantConfiguration newconfiguration = new MerchantConfiguration();
                    newconfiguration.setConfigurationKey(PaymentConstants.MODULE_PAYMENT_INDICATOR_NAME);
                    newconfiguration.setConfigurationModule("");
                    newconfiguration.setMerchantId(merchantid);
                    if (this.getModuleEnabled() != null && this.getModuleEnabled().equals("true")) {
                        newconfiguration.setConfigurationValue("true");
                    } else {
                        newconfiguration.setConfigurationValue("");
                    }
                    newconfiguration.setConfigurationValue1(this.getModuleName());
                    newconfiguration.setDateAdded(new Date(dt.getTime()));
                    config = newconfiguration;
                    this.getConfigurationModuleNames().put(this.getModuleName(), newconfiguration);
                    updateableModules.add(newconfiguration);
                }
            }

        } else {// Nothing configured

            MerchantConfiguration newconfiguration = new MerchantConfiguration();
            newconfiguration.setConfigurationKey(PaymentConstants.MODULE_PAYMENT_INDICATOR_NAME);
            newconfiguration.setConfigurationModule("");
            if (this.getModuleEnabled() != null && this.getModuleEnabled().equals("true")) {
                newconfiguration.setConfigurationValue("true");
            } else {
                newconfiguration.setConfigurationValue("");
            }
            newconfiguration.setConfigurationValue1(this.getModuleName());
            newconfiguration.setDateAdded(new Date(dt.getTime()));
            newconfiguration.setMerchantId(merchantid);
            config = newconfiguration;
            this.getConfigurationModuleNames().put(this.getModuleName(), newconfiguration);
            updateableModules.add(newconfiguration);
        }

        this.saveModule();
        mservice.saveOrUpdateMerchantConfigurations(updateableModules);
        super.setSuccessMessage();

        return SUCCESS;
    }

    public String delete() throws Exception {

        this.prepare();
        // delete module name and indicator
        Context ctx = (Context) super.getServletRequest().getSession().getAttribute(ProfileConstants.context);
        Integer merchantid = ctx.getMerchantid();
        MerchantService mservice = (MerchantService) ServiceFactory.getService(ServiceFactory.MerchantService);

        if (this.getConfigurationModuleNames().containsKey(this.getModuleName())) {
            MerchantConfiguration conf = (MerchantConfiguration) this.getConfigurationModuleNames()
                    .get(this.getModuleName());
            mservice.deleteMerchantConfiguration(conf);
        }

        if (this.getConfigurationModuleGatewayNames().containsKey(this.getModuleName())) {
            MerchantConfiguration conf = (MerchantConfiguration) this.getConfigurationModuleGatewayNames()
                    .get(this.getModuleName());
            mservice.deleteMerchantConfiguration(conf);
        }

        this.deleteModule();
        super.setSuccessMessage();

        return "deletecomplete";
    }

    public abstract void displayModule() throws Exception;

    public abstract void saveModule() throws Exception;

    public abstract void deleteModule() throws Exception;

    public abstract void prepareModule() throws Exception;

    public String getCurrentModuleName() {
        return currentModuleName;
    }

    public void setCurrentModuleName(String currentModuleName) {
        this.currentModuleName = currentModuleName;
    }

    public String getModuleName() {
        return moduleName;
    }

    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }

    public String getCurrentModuleEnabled() {
        return currentModuleEnabled;
    }

    public void setCurrentModuleEnabled(String currentModuleEnabled) {
        this.currentModuleEnabled = currentModuleEnabled;
    }

    public String getModuleEnabled() {
        return moduleEnabled;
    }

    public void setModuleEnabled(String moduleEnabled) {
        this.moduleEnabled = moduleEnabled;
    }

    public Map<String, MerchantConfiguration> getConfigurationModuleNames() {
        return configurationModuleNames;
    }

    protected ConfigurationResponse getConfigurationVo() {
        return configurationVo;
    }

    protected void setConfigurationVo(ConfigurationResponse configurationVo) {
        this.configurationVo = configurationVo;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, MerchantConfiguration> getConfigurationModuleGatewayNames() {
        return configurationModuleGatewayNames;
    }

    public void setConfigurationModuleGatewayNames(
            Map<String, MerchantConfiguration> configurationModuleGatewayNames) {
        this.configurationModuleGatewayNames = configurationModuleGatewayNames;
    }

}