svn commit: r882103 [2/2] - in /ofbiz/trunk: ./ applications/accounting/ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/script/org/ofbiz/accounting/payment/ applications/accounti...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r882103 [2/2] - in /ofbiz/trunk: ./ applications/accounting/ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/script/org/ofbiz/accounting/payment/ applications/accounti...

jleroux@apache.org
Added: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java?rev=882103&view=auto
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java (added)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java Thu Nov 19 11:01:29 2009
@@ -0,0 +1,686 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.ofbiz.accounting.thirdparty.sagepay;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.http.HttpHost;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.ModelService;
+import org.ofbiz.service.ServiceUtil;
+
+public class SagePayServices
+{
+    public static final String module = SagePayServices.class.getName();
+
+    private static Map<String, String> buildSagePayProperties(Map<String, Object> context, Delegator delegator) {
+
+        Map<String, String> sagePayConfig = new HashMap<String, String>();
+
+        String paymentGatewayConfigId = (String) context.get("paymentGatewayConfigId");
+
+        if (UtilValidate.isNotEmpty(paymentGatewayConfigId)) {
+            try {
+                GenericValue sagePay = delegator.findOne("PaymentGatewaySagePay", UtilMisc.toMap("paymentGatewayConfigId", paymentGatewayConfigId), false);
+                if (UtilValidate.isNotEmpty(sagePay)) {
+                    Map<String, Object> tmp = sagePay.getAllFields();
+                    Set<String> keys = tmp.keySet();
+                    for (String key : keys) {
+                        String value = tmp.get(key).toString();
+                        sagePayConfig.put(key, value);
+                    }
+                }
+            } catch (GenericEntityException e) {
+                Debug.logError(e, module);
+            }
+        }
+
+        Debug.logInfo("SagePay Configuration : " + sagePayConfig.toString(), module);
+        return sagePayConfig;
+    }
+
+    public static Map<String, Object> paymentAuthentication(DispatchContext ctx, Map<String, Object> context)
+    {
+        Debug.logInfo("SagePay - Entered paymentAuthentication", module);
+        Debug.logInfo("SagePay paymentAuthentication context : " + context, module);
+        
+        Delegator delegator = ctx.getDelegator();
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+
+        Map<String, String> props = buildSagePayProperties(context, delegator);
+
+        String vendorTxCode = (String)context.get("vendorTxCode");
+        String cardHolder = (String) context.get("cardHolder");
+        String cardNumber = (String) context.get("cardNumber");
+        String expiryDate = (String) context.get("expiryDate");
+        String cardType = (String) context.get("cardType");
+        String cv2 = (String) context.get("cv2");
+        String amount = (String) context.get("amount");
+        String currency = (String) context.get("currency");
+        String description = (String) context.get("description");
+
+        String billingSurname = (String) context.get("billingSurname");
+        String billingFirstnames = (String) context.get("billingFirstnames");
+        String billingAddress = (String) context.get("billingAddress");
+        String billingAddress2 = (String) context.get("billingAddress2");
+        String billingCity = (String) context.get("billingCity");
+        String billingPostCode = (String) context.get("billingPostCode");
+        String billingCountry = (String) context.get("billingCountry");
+        String billingState = (String) context.get("billingState");
+        String billingPhone = (String) context.get("billingPhone");
+
+        Boolean isBillingSameAsDelivery = (Boolean) context.get("isBillingSameAsDelivery");
+    
+        String deliverySurname = (String) context.get("deliverySurname");
+        String deliveryFirstnames = (String) context.get("deliveryFirstnames");
+        String deliveryAddress = (String) context.get("deliveryAddress");
+        String deliveryAddress2 = (String) context.get("deliveryAddress2");
+        String deliveryCity = (String) context.get("deliveryCity");
+        String deliveryPostCode = (String) context.get("deliveryPostCode");
+        String deliveryCountry = (String) context.get("deliveryCountry");
+        String deliveryState = (String) context.get("deliveryState");
+        String deliveryPhone = (String) context.get("deliveryPhone");
+
+        String startDate = (String) context.get("startDate");
+        String issueNumber = (String) context.get("issueNumber");
+        String basket = (String) context.get("basket");
+        String clientIPAddress = (String) context.get("clientIPAddress");
+    
+        HttpClient httpClient = SagePayUtil.getHttpClient();
+        HttpHost host = SagePayUtil.getHost(props);
+
+        //start - authentication parameters
+        Map<String, String> parameters = new HashMap<String, String>();
+
+        String vpsProtocol = props.get("protocolVersion");
+        String vendor = props.get("vendor");
+        String txType = props.get("authenticationTransType");
+
+        //start - required parameters
+        parameters.put("VPSProtocol", vpsProtocol);
+        parameters.put("TxType", txType);
+        parameters.put("Vendor", vendor);
+
+        if (vendorTxCode != null) { parameters.put("VendorTxCode", vendorTxCode); }
+        if (amount != null) { parameters.put("Amount", amount); }
+        if (currency != null) { parameters.put("Currency", currency); } //GBP/USD
+        if (description != null) { parameters.put("Description", description); }
+        if (cardHolder != null) { parameters.put("CardHolder", cardHolder); }
+        if (cardNumber != null) { parameters.put("CardNumber", cardNumber); }
+        if (expiryDate != null) { parameters.put("ExpiryDate", expiryDate); }
+        if (cardType != null) { parameters.put("CardType", cardType); }
+
+        //start - billing details
+        if (billingSurname != null) { parameters.put("BillingSurname", billingSurname); }
+        if (billingFirstnames != null) { parameters.put("BillingFirstnames", billingFirstnames); }
+        if (billingAddress != null) { parameters.put("BillingAddress", billingAddress); }
+        if (billingAddress2 != null) { parameters.put("BillingAddress2", billingAddress2); }
+        if (billingCity != null) { parameters.put("BillingCity", billingCity); }
+        if (billingPostCode != null) { parameters.put("BillingPostCode", billingPostCode); }
+        if (billingCountry != null) { parameters.put("BillingCountry", billingCountry); }
+        if (billingState != null) { parameters.put("BillingState", billingState); }
+        if (billingPhone != null) { parameters.put("BillingPhone", billingPhone); }
+        //end - billing details
+    
+        //start - delivery details
+        if (isBillingSameAsDelivery != null && isBillingSameAsDelivery) {
+            if (billingSurname != null) { parameters.put("DeliverySurname", billingSurname); }
+            if (billingFirstnames != null) { parameters.put("DeliveryFirstnames", billingFirstnames); }
+            if (billingAddress != null) { parameters.put("DeliveryAddress", billingAddress); }
+            if (billingAddress2 != null) { parameters.put("DeliveryAddress2", billingAddress2); }
+            if (billingCity != null) { parameters.put("DeliveryCity", billingCity); }
+            if (billingPostCode != null) { parameters.put("DeliveryPostCode", billingPostCode); }
+            if (billingCountry != null) { parameters.put("DeliveryCountry", billingCountry); }
+            if (billingState != null) { parameters.put("DeliveryState", billingState); }
+            if (billingPhone != null) { parameters.put("DeliveryPhone", billingPhone); }
+        } else {
+            if (deliverySurname != null) { parameters.put("DeliverySurname", deliverySurname); }
+            if (deliveryFirstnames != null) { parameters.put("DeliveryFirstnames", deliveryFirstnames); }
+            if (deliveryAddress != null) { parameters.put("DeliveryAddress", deliveryAddress); }
+            if (deliveryAddress2 != null) { parameters.put("DeliveryAddress2", deliveryAddress2); }
+            if (deliveryCity != null) { parameters.put("DeliveryCity", deliveryCity); }
+            if (deliveryPostCode != null) { parameters.put("DeliveryPostCode", deliveryPostCode); }
+            if (deliveryCountry != null) { parameters.put("DeliveryCountry", deliveryCountry); }
+            if (deliveryState != null) { parameters.put("DeliveryState", deliveryState); }
+            if (deliveryPhone != null) {parameters.put("DeliveryPhone", deliveryPhone); }
+        }
+        //end - delivery details
+        //end - required parameters
+
+        //start - optional parameters
+        if (cv2 != null) { parameters.put("CV2", cv2); }
+        if (startDate != null) { parameters.put("StartDate", startDate); }
+        if (issueNumber != null) { parameters.put("IssueNumber", issueNumber); }
+        if (basket != null) { parameters.put("Basket", basket); }
+        if (clientIPAddress != null) { parameters.put("ClientIPAddress", clientIPAddress); }
+        //end - optional parameters
+        //end - authentication parameters
+
+        try {
+            
+            String successMessage = null;
+            HttpPost httpPost = SagePayUtil.getHttpPost(props.get("authenticationUrl"), parameters);
+            HttpResponse response = httpClient.execute(host, httpPost);
+            Map<String, String> responseData = SagePayUtil.getResponseData(response);
+
+            String status = responseData.get("Status");
+            String statusDetail = responseData.get("StatusDetail");
+        
+            resultMap.put("status", status);
+            resultMap.put("statusDetail", statusDetail);
+
+            //returning the below details back to the calling code, as it not returned back by the payment gateway
+            resultMap.put("vendorTxCode", vendorTxCode);
+            resultMap.put("amount", amount);
+            resultMap.put("transactionType", txType);
+
+            //start - transaction authorized
+            if ("OK".equals(status)) {
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("securityKey", responseData.get("SecurityKey"));
+                resultMap.put("txAuthNo", responseData.get("TxAuthNo"));
+                resultMap.put("avsCv2", responseData.get("AVSCV2"));
+                resultMap.put("addressResult", responseData.get("AddressResult"));
+                resultMap.put("postCodeResult", responseData.get("PostCodeResult"));
+                resultMap.put("cv2Result", responseData.get("CV2Result"));
+                successMessage = "Payment authorized";
+            }
+            //end - transaction authorized
+
+            if ("NOTAUTHED".equals(status)) {
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("securityKey", responseData.get("SecurityKey"));
+                resultMap.put("avsCv2", responseData.get("AVSCV2"));
+                resultMap.put("addressResult", responseData.get("AddressResult"));
+                resultMap.put("postCodeResult", responseData.get("PostCodeResult"));
+                resultMap.put("cv2Result", responseData.get("CV2Result"));
+                successMessage = "Payment not authorized";
+            }
+
+            if ("MALFORMED".equals(status)) {
+                //request not formed properly or parameters missing
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("securityKey", responseData.get("SecurityKey"));
+                resultMap.put("avsCv2", responseData.get("AVSCV2"));
+                resultMap.put("addressResult", responseData.get("AddressResult"));
+                resultMap.put("postCodeResult", responseData.get("PostCodeResult"));
+                resultMap.put("cv2Result", responseData.get("CV2Result"));
+            }
+
+            if ("INVALID".equals(status)) {
+                //invalid information in request
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("securityKey", responseData.get("SecurityKey"));
+                resultMap.put("avsCv2", responseData.get("AVSCV2"));
+                resultMap.put("addressResult", responseData.get("AddressResult"));
+                resultMap.put("postCodeResult", responseData.get("PostCodeResult"));
+                resultMap.put("cv2Result", responseData.get("CV2Result"));
+            }
+
+            if ("REJECTED".equals(status)) {
+                //invalid information in request
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("securityKey", responseData.get("SecurityKey"));
+                resultMap.put("avsCv2", responseData.get("AVSCV2"));
+                resultMap.put("addressResult", responseData.get("AddressResult"));
+                resultMap.put("postCodeResult", responseData.get("PostCodeResult"));
+                resultMap.put("cv2Result", responseData.get("CV2Result"));
+            }
+
+            resultMap.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
+            resultMap.put(ModelService.SUCCESS_MESSAGE, successMessage);
+
+        } catch(UnsupportedEncodingException uee) {
+            //exception in encoding parameters in httpPost
+            String errorMsg = "Error occured in encoding parameters for HttpPost (" + uee.getMessage() + ")";
+            Debug.logError(uee, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(ClientProtocolException cpe) {
+            //from httpClient execute
+            String errorMsg = "Error occured in HttpClient execute(" + cpe.getMessage() + ")";
+            Debug.logError(cpe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(IOException ioe) {
+            //from httpClient execute or getResponsedata
+            String errorMsg = "Error occured in HttpClient execute or getting response (" + ioe.getMessage() + ")";
+            Debug.logError(ioe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } finally {
+            httpClient.getConnectionManager().shutdown();        
+        }
+        return resultMap;
+    }
+
+    public static Map<String, Object> paymentAuthorisation(DispatchContext ctx, Map<String, Object> context)
+    {
+        Debug.logInfo("SagePay - Entered paymentAuthorisation", module);
+        Debug.logInfo("SagePay paymentAuthorisation context : " + context, module);
+        
+        Delegator delegator = ctx.getDelegator();
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+
+        Map<String, String> props = buildSagePayProperties(context, delegator);
+
+        String vendorTxCode = (String)context.get("vendorTxCode");
+        String vpsTxId = (String) context.get("vpsTxId");
+        String securityKey = (String) context.get("securityKey");
+        String txAuthNo = (String) context.get("txAuthNo");
+        String amount = (String) context.get("amount");
+
+        HttpClient httpClient = SagePayUtil.getHttpClient();
+        HttpHost host = SagePayUtil.getHost(props);
+    
+        //start - authorization parameters
+        Map<String, String> parameters = new HashMap<String, String>();
+
+        String vpsProtocol = props.get("protocolVersion");
+        String vendor = props.get("vendor");
+        String txType = props.get("authoriseTransType");
+
+        parameters.put("VPSProtocol", vpsProtocol);
+        parameters.put("TxType", txType);
+        parameters.put("Vendor", vendor);
+        parameters.put("VendorTxCode", vendorTxCode);
+        parameters.put("VPSTxId", vpsTxId);
+        parameters.put("SecurityKey", securityKey);
+        parameters.put("TxAuthNo", txAuthNo);
+        parameters.put("ReleaseAmount", amount);
+
+        Debug.logInfo("authorization parameters -> " + parameters, module);
+        //end - authorization parameters
+    
+        try {
+            String successMessage = null;
+            HttpPost httpPost = SagePayUtil.getHttpPost(props.get("authoriseUrl"), parameters);
+            HttpResponse response = httpClient.execute(host, httpPost);
+            
+            Map<String, String> responseData = SagePayUtil.getResponseData(response);
+            String status = responseData.get("Status");
+            String statusDetail = responseData.get("StatusDetail");
+      
+            resultMap.put("status", status);
+            resultMap.put("statusDetail", statusDetail);
+        
+            //start - payment refunded
+            if ("OK".equals(status)) {
+                successMessage = "Payment Released";
+            }
+            //end - payment refunded
+        
+            //start - refund request not formed properly or parameters missing
+            if ("MALFORMED".equals(status)) {
+                successMessage = "Released request not formed properly or parameters missing";
+            }
+            //end - refund request not formed properly or parameters missing
+        
+            //start - invalid information passed in parameters
+            if ("INVALID".equals(status)) {
+                successMessage = "Invalid information passed in parameters";
+            }
+            //end - invalid information passed in parameters
+
+            //start - problem at Sagepay
+            if ("ERROR".equals(status)) {
+                successMessage = "Problem at SagePay";
+            }
+            //end - problem at Sagepay
+        
+            resultMap.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
+            resultMap.put(ModelService.SUCCESS_MESSAGE, successMessage);
+
+        } catch(UnsupportedEncodingException uee) {
+            //exception in encoding parameters in httpPost
+            String errorMsg = "Error occured in encoding parameters for HttpPost (" + uee.getMessage() + ")";
+            Debug.logError(uee, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(ClientProtocolException cpe) {
+            //from httpClient execute
+            String errorMsg = "Error occured in HttpClient execute(" + cpe.getMessage() + ")";
+            Debug.logError(cpe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(IOException ioe) {
+            //from httpClient execute or getResponsedata
+            String errorMsg = "Error occured in HttpClient execute or getting response (" + ioe.getMessage() + ")";
+            Debug.logError(ioe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } finally {
+            httpClient.getConnectionManager().shutdown();        
+        }
+        return resultMap;
+    }
+
+    public static Map<String, Object> paymentRelease(DispatchContext ctx, Map<String, Object> context)
+    {
+        Debug.logInfo("SagePay - Entered paymentRelease", module);
+        Debug.logInfo("SagePay paymentRelease context : " + context, module);
+
+        Delegator delegator = ctx.getDelegator();
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+
+        Map<String, String> props = buildSagePayProperties(context, delegator);
+
+        String vendorTxCode = (String)context.get("vendorTxCode");
+        String vpsTxId = (String) context.get("vpsTxId");
+        String securityKey = (String) context.get("securityKey");
+        String txAuthNo = (String) context.get("txAuthNo");
+
+        HttpClient httpClient = SagePayUtil.getHttpClient();
+        HttpHost host = SagePayUtil.getHost(props);
+
+        //start - release parameters
+        Map<String, String> parameters = new HashMap<String, String>();
+
+        String vpsProtocol = props.get("protocolVersion");
+        String vendor = props.get("vendor");
+        String txType = props.get("releaseTransType");
+
+        parameters.put("VPSProtocol", vpsProtocol);
+        parameters.put("TxType", txType);
+        parameters.put("Vendor", vendor);
+        parameters.put("VendorTxCode", vendorTxCode);
+        parameters.put("VPSTxId", vpsTxId);
+        parameters.put("SecurityKey", securityKey);
+        parameters.put("TxAuthNo", txAuthNo);
+        //end - release parameters
+
+        try {
+
+            String successMessage = null;
+            HttpPost httpPost = SagePayUtil.getHttpPost(props.get("releaseUrl"), parameters);
+            HttpResponse response = httpClient.execute(host, httpPost);
+            
+            Map<String, String> responseData = SagePayUtil.getResponseData(response);
+
+            String status = responseData.get("Status");
+            String statusDetail = responseData.get("StatusDetail");
+
+            resultMap.put("status", status);
+            resultMap.put("statusDetail", statusDetail);
+
+            //start - payment released
+            if ("OK".equals(status)) {
+                successMessage = "Payment Released";
+            }
+            //end - payment released
+
+            //start - release request not formed properly or parameters missing
+            if ("MALFORMED".equals(status)) {
+                successMessage = "Release request not formed properly or parameters missing";
+            }
+            //end - release request not formed properly or parameters missing
+
+            //start - invalid information passed in parameters
+            if ("INVALID".equals(status)) {
+                successMessage = "Invalid information passed in parameters";
+            }
+            //end - invalid information passed in parameters
+
+            //start - problem at Sagepay
+            if ("ERROR".equals(status)) {
+                successMessage = "Problem at SagePay";
+            }
+            //end - problem at Sagepay
+
+            resultMap.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
+            resultMap.put(ModelService.SUCCESS_MESSAGE, successMessage);
+            
+        }  catch(UnsupportedEncodingException uee) {
+            //exception in encoding parameters in httpPost
+            String errorMsg = "Error occured in encoding parameters for HttpPost (" + uee.getMessage() + ")";
+            Debug.logError(uee, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(ClientProtocolException cpe) {
+            //from httpClient execute
+            String errorMsg = "Error occured in HttpClient execute(" + cpe.getMessage() + ")";
+            Debug.logError(cpe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(IOException ioe) {
+            //from httpClient execute or getResponsedata
+            String errorMsg = "Error occured in HttpClient execute or getting response (" + ioe.getMessage() + ")";
+            Debug.logError(ioe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } finally {
+            httpClient.getConnectionManager().shutdown();        
+        }
+        return resultMap;
+    }
+
+    public static Map<String, Object> paymentVoid(DispatchContext ctx, Map<String, Object> context)
+    {
+        Debug.logInfo("SagePay - Entered paymentVoid", module);
+        Debug.logInfo("SagePay paymentVoid context : " + context, module);
+        
+        Delegator delegator = ctx.getDelegator();
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+
+        Map<String, String> props = buildSagePayProperties(context, delegator);
+
+        String vendorTxCode = (String)context.get("vendorTxCode");
+        String vpsTxId = (String) context.get("vpsTxId");
+        String securityKey = (String) context.get("securityKey");
+        String txAuthNo = (String) context.get("txAuthNo");
+
+        HttpClient httpClient = SagePayUtil.getHttpClient();
+        HttpHost host = SagePayUtil.getHost(props);
+        
+        //start - void parameters
+        Map<String, String> parameters = new HashMap<String, String>();
+
+        String vpsProtocol = props.get("protocolVersion");
+        String vendor = props.get("vendor");
+
+        parameters.put("VPSProtocol", vpsProtocol);
+        parameters.put("TxType", "VOID");
+        parameters.put("Vendor", vendor);
+        parameters.put("VendorTxCode", vendorTxCode);
+        parameters.put("VPSTxId", vpsTxId);
+        parameters.put("SecurityKey", securityKey);
+        parameters.put("TxAuthNo", txAuthNo);
+        //end - void parameters
+
+        try {
+            String successMessage = null;
+
+            HttpPost httpPost = SagePayUtil.getHttpPost(props.get("voidUrl"), parameters);
+            HttpResponse response = httpClient.execute(host, httpPost);
+            Map<String, String> responseData = SagePayUtil.getResponseData(response);
+        
+            String status = responseData.get("Status");
+            String statusDetail = responseData.get("StatusDetail");
+
+            resultMap.put("status", status);
+            resultMap.put("statusDetail", statusDetail);
+
+            //start - payment void
+            if ("OK".equals(status)) {
+                successMessage = "Payment Voided";
+            }
+            //end - payment void
+
+            //start - void request not formed properly or parameters missing
+            if ("MALFORMED".equals(status)) {
+                successMessage = "Void request not formed properly or parameters missing";
+            }
+            //end - void request not formed properly or parameters missing
+
+            //start - invalid information passed in parameters
+            if ("INVALID".equals(status)) {
+                successMessage = "Invalid information passed in parameters";
+            }
+            //end - invalid information passed in parameters
+        
+            //start - problem at Sagepay
+            if ("ERROR".equals(status)) {
+                successMessage = "Problem at SagePay";
+            }
+            //end - problem at Sagepay
+
+            resultMap.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
+            resultMap.put(ModelService.SUCCESS_MESSAGE, successMessage);
+            
+        }  catch(UnsupportedEncodingException uee) {
+            //exception in encoding parameters in httpPost
+            String errorMsg = "Error occured in encoding parameters for HttpPost (" + uee.getMessage() + ")";
+            Debug.logError(uee, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(ClientProtocolException cpe) {
+            //from httpClient execute
+            String errorMsg = "Error occured in HttpClient execute(" + cpe.getMessage() + ")";
+            Debug.logError(cpe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(IOException ioe) {
+            //from httpClient execute or getResponsedata
+            String errorMsg = "Error occured in HttpClient execute or getting response (" + ioe.getMessage() + ")";
+            Debug.logError(ioe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } finally {
+            httpClient.getConnectionManager().shutdown();        
+        }
+        return resultMap;
+    }
+
+    public static Map<String, Object> paymentRefund(DispatchContext ctx, Map<String, Object> context)
+    {
+        Debug.logInfo("SagePay - Entered paymentRefund", module);
+        Debug.logInfo("SagePay paymentRefund context : " + context, module);
+
+        Delegator delegator = ctx.getDelegator();
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+
+        Map<String, String> props = buildSagePayProperties(context, delegator);
+    
+        String vendorTxCode = (String)context.get("vendorTxCode");
+        String amount = (String)context.get("amount");
+        String currency = (String)context.get("currency");
+        String description = (String)context.get("description");
+    
+        String relatedVPSTxId = (String) context.get("relatedVPSTxId");
+        String relatedVendorTxCode = (String) context.get("relatedVendorTxCode");
+        String relatedSecurityKey = (String) context.get("relatedSecurityKey");
+        String relatedTxAuthNo = (String) context.get("relatedTxAuthNo");
+
+        HttpClient httpClient = SagePayUtil.getHttpClient();
+        HttpHost host = SagePayUtil.getHost(props);
+
+        //start - refund parameters
+        Map<String, String> parameters = new HashMap<String, String>();
+
+        String vpsProtocol = props.get("protocolVersion");
+        String vendor = props.get("vendor");
+
+        parameters.put("VPSProtocol", vpsProtocol);
+        parameters.put("TxType", "REFUND");
+        parameters.put("Vendor", vendor);
+        parameters.put("VendorTxCode", vendorTxCode);
+        parameters.put("Amount", amount);
+        parameters.put("Currency", currency);
+        parameters.put("Description", description);
+        parameters.put("RelatedVPSTxId", relatedVPSTxId);
+        parameters.put("RelatedVendorTxCode", relatedVendorTxCode);
+        parameters.put("RelatedSecurityKey", relatedSecurityKey);
+        parameters.put("RelatedTxAuthNo", relatedTxAuthNo);
+        //end - refund parameters
+
+        try {
+            String successMessage = null;
+
+            HttpPost httpPost = SagePayUtil.getHttpPost(props.get("refundUrl"), parameters);
+            HttpResponse response = httpClient.execute(host, httpPost);
+            Map<String, String> responseData = SagePayUtil.getResponseData(response);
+            
+            Debug.logInfo("response data -> " + responseData, module);
+        
+            String status = responseData.get("Status");
+            String statusDetail = responseData.get("StatusDetail");
+      
+            resultMap.put("status", status);
+            resultMap.put("statusDetail", statusDetail);
+
+            //start - payment refunded
+            if ("OK".equals(status)) {
+                resultMap.put("vpsTxId", responseData.get("VPSTxId"));
+                resultMap.put("txAuthNo", responseData.get("TxAuthNo"));
+                successMessage = "Payment Refunded";
+            }
+            //end - payment refunded
+        
+            //start - refund not authorized by the acquiring bank
+            if ("NOTAUTHED".equals(status)) {
+                successMessage = "Refund not authorized by the acquiring bank";
+            }
+            //end - refund not authorized by the acquiring bank
+
+            //start - refund request not formed properly or parameters missing
+            if ("MALFORMED".equals(status)) {
+                successMessage = "Refund request not formed properly or parameters missing";
+            }
+            //end - refund request not formed properly or parameters missing
+
+            //start - invalid information passed in parameters
+            if ("INVALID".equals(status)) {
+                successMessage = "Invalid information passed in parameters";
+            }
+            //end - invalid information passed in parameters
+        
+            //start - problem at Sagepay
+            if ("ERROR".equals(status)) {
+                successMessage = "Problem at SagePay";
+            }
+            //end - problem at Sagepay
+        
+            resultMap.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
+            resultMap.put(ModelService.SUCCESS_MESSAGE, successMessage);
+
+        }  catch(UnsupportedEncodingException uee) {
+            //exception in encoding parameters in httpPost
+            String errorMsg = "Error occured in encoding parameters for HttpPost (" + uee.getMessage() + ")";
+            Debug.logError(uee, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(ClientProtocolException cpe) {
+            //from httpClient execute
+            String errorMsg = "Error occured in HttpClient execute(" + cpe.getMessage() + ")";
+            Debug.logError(cpe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } catch(IOException ioe) {
+            //from httpClient execute or getResponsedata
+            String errorMsg = "Error occured in HttpClient execute or getting response (" + ioe.getMessage() + ")";
+            Debug.logError(ioe, errorMsg, module);
+            resultMap = ServiceUtil.returnError(errorMsg);
+        } finally {
+            httpClient.getConnectionManager().shutdown();        
+        }
+
+        return resultMap;
+    }
+}

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayServices.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java?rev=882103&view=auto
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java (added)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java Thu Nov 19 11:01:29 2009
@@ -0,0 +1,187 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.ofbiz.accounting.thirdparty.sagepay;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javolution.util.FastMap;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+import org.ofbiz.base.util.Debug;
+
+
+public class SagePayUtil
+{
+    public static final String module = SagePayUtil.class.getName();
+
+    public static Map<String, Object> buildCardAuthorisationPaymentResponse
+    (Boolean authResult, String authCode, String authFlag, BigDecimal processAmount, String authRefNum, String authAltRefNum, String authMessage) {
+        
+        Map<String, Object> result = FastMap.newInstance();
+        if(authResult != null) { result.put("authResult", authResult); }
+        if(authCode != null) { result.put("authCode", authCode); }
+        if(authFlag != null) { result.put("authFlag", authFlag); }
+        if(processAmount != null) { result.put("processAmount", processAmount); }
+        if(authRefNum != null) { result.put("authRefNum", authRefNum); }
+        if(authAltRefNum != null) { result.put("authAltRefNum", authAltRefNum); }
+        if(authMessage != null) { result.put("authMessage", authMessage); }
+        return result;
+    }
+  
+    public static Map<String, Object> buildCardCapturePaymentResponse
+    (Boolean captureResult, String captureCode, String captureFlag, BigDecimal captureAmount, String captureRefNum, String captureAltRefNum, String captureMessage) {
+
+        Map<String, Object> result = FastMap.newInstance();
+        if(captureResult != null) { result.put("captureResult", captureResult); }
+        if(captureCode != null) { result.put("captureCode", captureCode); }
+        if(captureFlag != null) { result.put("captureFlag", captureFlag); }
+        if(captureAmount != null) { result.put("captureAmount", captureAmount); }
+        if(captureRefNum != null) { result.put("captureRefNum", captureRefNum); }
+        if(captureAltRefNum != null) { result.put("captureAltRefNum", captureAltRefNum); }
+        if(captureMessage != null) { result.put("captureMessage", captureMessage); }
+        return result;
+    }
+
+    public static Map<String, Object> buildCardReleasePaymentResponse
+    (Boolean releaseResult, String releaseCode, BigDecimal releaseAmount, String releaseRefNum, String releaseAltRefNum, String releaseMessage) {
+    
+        Map<String, Object> result = FastMap.newInstance();
+        if(releaseResult != null) { result.put("releaseResult", releaseResult); }
+        if(releaseCode != null) { result.put("releaseCode", releaseCode); }
+        if(releaseAmount != null) { result.put("releaseAmount", releaseAmount); }
+        if(releaseRefNum != null) { result.put("releaseRefNum", releaseRefNum); }
+        if(releaseAltRefNum != null) { result.put("releaseAltRefNum", releaseAltRefNum); }
+        if(releaseMessage != null) { result.put("releaseMessage", releaseMessage); }
+        return result;
+    }
+
+    public static Map<String, Object> buildCardVoidPaymentResponse
+    (Boolean refundResult, BigDecimal refundAmount, String refundRefNum, String refundAltRefNum, String refundMessage) {
+
+        Map<String, Object> result = FastMap.newInstance();
+        if(refundResult != null) { result.put("refundResult", refundResult); }
+        if(refundAmount != null) { result.put("refundAmount", refundAmount); }
+        if(refundRefNum != null) { result.put("refundRefNum", refundRefNum); }
+        if(refundAltRefNum != null) { result.put("refundAltRefNum", refundAltRefNum); }
+        if(refundMessage != null) { result.put("refundMessage", refundMessage); }
+        return result;
+    }
+    
+    public static Map<String, Object> buildCardRefundPaymentResponse
+    (Boolean refundResult, String refundCode, BigDecimal refundAmount, String refundRefNum, String refundAltRefNum, String refundMessage) {
+
+        Map<String, Object> result = FastMap.newInstance();
+        if(refundResult != null) { result.put("refundResult", refundResult); }
+        if(refundCode != null) { result.put("refundCode", refundCode); }
+        if(refundAmount != null) { result.put("refundAmount", refundAmount); }
+        if(refundRefNum != null) { result.put("refundRefNum", refundRefNum); }
+        if(refundAltRefNum != null) { result.put("refundAltRefNum", refundAltRefNum); }
+        if(refundMessage != null) { result.put("refundMessage", refundMessage); }
+        return result;
+    }
+
+    public static HttpHost getHost(Map<String, String> props) {
+        String hostUrl = null;
+        if("PRODUCTION".equals(props.get("mode"))) {
+            hostUrl = props.get("productionHost");
+        } else if("TEST".equals(props.get("mode"))) {
+            hostUrl = props.get("testingHost");
+        }
+        String scheme = hostUrl.substring(0, 5);
+        String host = hostUrl.substring(8, hostUrl.lastIndexOf(":"));
+        String port = hostUrl.substring(hostUrl.lastIndexOf(":")+1);
+        return getHost(host, Integer.parseInt(port), scheme);
+    }
+  
+    public static HttpHost getHost(String hostName, int port, String scheme) {
+        HttpHost host = new HttpHost(hostName, port, scheme);
+        return host;
+    }
+
+    public static Map<String, String> getResponseData(HttpResponse response) throws IOException {
+
+        Map<String, String> responseData = new HashMap<String, String>();
+        HttpEntity httpEntity = response.getEntity();
+        if (httpEntity != null) {
+            InputStream inputStream = httpEntity.getContent();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+
+            String data = null;
+            while( (data = reader.readLine()) != null ) {
+                if(data.indexOf("=") != -1) {
+                    String name = data.substring(0, data.indexOf("="));
+                    String value = data.substring(data.indexOf("=")+1);
+                    responseData.put(name, value);
+                }
+            }
+        }
+        Debug.log("SagePay Response Data : " + responseData);
+        return responseData;
+    }
+
+    public static HttpPost getHttpPost(String uri, Map<String, String> parameters) throws UnsupportedEncodingException {
+        
+        HttpPost httpPost = new HttpPost(uri);
+        httpPost.addHeader("User-Agent", "HTTP Client");
+        httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");
+        //postMethod.addHeader("Content-Length", "0");
+
+        HttpParams params = new BasicHttpParams();
+        httpPost.setParams(params);
+        
+        List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
+        Set<String> keys = parameters.keySet();
+        for (String key : keys) {
+            String value = parameters.get(key);
+            postParameters.add(new BasicNameValuePair(key, value));
+        }
+        
+        Debug.log("SagePay PostParameters - " + postParameters);
+
+        HttpEntity postEntity = new UrlEncodedFormEntity(postParameters);
+        httpPost.setEntity(postEntity);
+        return httpPost;
+    }
+
+    public static HttpClient getHttpClient() {
+        HttpClient  httpClient = new DefaultHttpClient();
+        return httpClient;
+    }
+}

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/sagepay/SagePayUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml?rev=882103&r1=882102&r2=882103&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml Thu Nov 19 11:01:29 2009
@@ -499,6 +499,12 @@
         <response name="success" type="view" value="EditPaymentGatewayConfig"/>
         <response name="error" type="view" value="EditPaymentGatewayConfig"/>
     </request-map>
+    <request-map uri="UpdatePaymentGatewayConfigSagePay">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updatePaymentGatewayConfigSagePay"/>
+        <response name="success" type="view" value="EditPaymentGatewayConfig"/>
+        <response name="error" type="view" value="EditPaymentGatewayConfig"/>
+    </request-map>
     <request-map uri="UpdatePaymentGatewayConfigAuthorizeNet">
         <security https="true" auth="true"/>
         <event type="service" invoke="updatePaymentGatewayConfigAuthorizeNet"/>

Modified: ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigForms.xml?rev=882103&r1=882102&r2=882103&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigForms.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigForms.xml Thu Nov 19 11:01:29 2009
@@ -68,6 +68,56 @@
         </field>
     </form>
     
+    <form name="EditPaymentGatewayConfigSagePay" type="single" target="UpdatePaymentGatewayConfigSagePay" default-map-name="paymentGatewaySagePay" header-row-style="header-row" default-table-style="basic-table">
+        <auto-fields-entity entity-name="PaymentGatewaySagePay" default-field-type="edit"/>
+        <field name="paymentGatewayConfigId"><hidden/></field>
+        <field name="vendor" title="${uiLabelMap.AccountingSagePayVendor}">
+            <text size="60" maxlength="60"/>
+        </field>
+        <field name="productionHost" title="${uiLabelMap.AccountingSagePayProductionHost}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="testingHost" title="${uiLabelMap.AccountingSagePayTestingHost}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="mode" title="${uiLabelMap.AccountingSagePayMode}">
+            <drop-down>
+                <option key="TEST" description="${uiLabelMap.AccountingSagePayTest}"/>
+                <option key="PRODUCTION" description="${uiLabelMap.AccountingSagePayProduction}"/>
+            </drop-down>
+        </field>
+        <field name="protocolVersion" title="${uiLabelMap.AccountingSagePayProtocolVersion}">
+            <text size="10" maxlength="10"/>
+        </field>
+        <field name="authenticationTransType" title="${uiLabelMap.AccountingSagePayAuthenticationTransType}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="authenticationUrl" title="${uiLabelMap.AccountingSagePayAuthenticationUrl}">
+            <text size="100" maxlength="100"/>
+        </field>        
+        <field name="authoriseTransType" title="${uiLabelMap.AccountingSagePayAuthorisationTransType}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="authoriseUrl" title="${uiLabelMap.AccountingSagePayAuthorisationUrl}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="releaseTransType" title="${uiLabelMap.AccountingSagePayReleaseTransType}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="releaseUrl" title="${uiLabelMap.AccountingSagePayReleaseUrl}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="voidUrl" title="${uiLabelMap.AccountingSagePayVoidUrl}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="refundUrl" title="${uiLabelMap.AccountingSagePayRefundUrl}">
+            <text size="100" maxlength="100"/>
+        </field>
+        <field name="submitButton" title="${uiLabelMap.CommonUpdate}" widget-style="smallSubmit">
+            <submit button-type="button"/>
+        </field>
+    </form>
+    
     <form name="EditPaymentGatewayConfigAuthorizeNet" type="single" target="UpdatePaymentGatewayConfigAuthorizeNet" default-map-name="paymentGatewayAuthorizeNet" header-row-style="header-row" default-table-style="basic-table">
         <auto-fields-entity entity-name="PaymentGatewayAuthorizeNet" default-field-type="edit"/>
         <field name="paymentGatewayConfigId"><hidden/></field>

Modified: ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigScreens.xml?rev=882103&r1=882102&r2=882103&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigScreens.xml (original)
+++ ofbiz/trunk/applications/accounting/widget/PaymentGatewayConfigScreens.xml Thu Nov 19 11:01:29 2009
@@ -85,6 +85,9 @@
                 
                 <set field="paymentGatewayConfigId" from-field="parameters.paymentGatewayConfigId"/>
                 <entity-one entity-name="PaymentGatewayConfig" value-field="paymentGatewayConfig"/>
+                <entity-one entity-name="PaymentGatewaySagePay" value-field="paymentGatewaySagePay">
+                    <field-map field-name="paymentGatewayConfigId" from-field="parameters.paymentGatewayConfigId"/>
+                </entity-one>
                 <entity-one entity-name="PaymentGatewayAuthorizeNet" value-field="paymentGatewayAuthorizeNet">
                     <field-map field-name="paymentGatewayConfigId" from-field="parameters.paymentGatewayConfigId"/>
                 </entity-one>
@@ -112,6 +115,27 @@
                         </screenlet>
                         <section>
                             <condition>
+                                <not><if-empty field="paymentGatewaySagePay"/></not>
+                            </condition>
+                            <widgets>
+                                <container style="screenlet">
+                                    <container style="screenlet-title-bar">
+                                        <container style="h3">
+                                            <label text="${uiLabelMap.PageTitleUpdatePaymentGatewayConfigSagePay}"/>
+                                        </container>
+                                    </container>
+                                    <container style="screenlet-body">
+                                        <section>
+                                            <widgets>
+                                                <include-form name="EditPaymentGatewayConfigSagePay" location="component://accounting/widget/PaymentGatewayConfigForms.xml"/>
+                                            </widgets>
+                                        </section>
+                                    </container>
+                                </container>
+                            </widgets>
+                        </section>
+                        <section>
+                            <condition>
                                 <not><if-empty field="paymentGatewayAuthorizeNet"/></not>
                             </condition>
                             <widgets>

Added: ofbiz/trunk/framework/base/lib/httpclient-4.0.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/httpclient-4.0.jar?rev=882103&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/base/lib/httpclient-4.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/trunk/framework/base/lib/httpcore-4.0.1.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/httpcore-4.0.1.jar?rev=882103&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/base/lib/httpcore-4.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/trunk/framework/base/lib/jcip-annotations-1.0.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/jcip-annotations-1.0.jar?rev=882103&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/base/lib/jcip-annotations-1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream