Author: ruppert
Date: Thu Apr  5 22:46:08 2007
New Revision: 526067

URL: http://svn.apache.org/viewvc?view=rev&rev=526067
Log:
Added refactored upsRateInquire

Modified:
    
ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java

Modified: 
ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java?view=diff&rev=526067&r1=526066&r2=526067
==============================================================================
--- 
ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java
 (original)
+++ 
ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java
 Thu Apr  5 22:46:08 2007
@@ -31,6 +31,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.velocity.test.MiscTestCase;
 import org.ofbiz.base.util.Base64;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
@@ -46,6 +47,8 @@
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.ServiceDispatcher;
 import org.ofbiz.service.ServiceUtil;
 import org.ofbiz.product.store.ProductStoreWorker;
 
@@ -1340,69 +1343,7 @@
     public static Map upsRateInquire(DispatchContext dctx, Map context) {
         GenericDelegator delegator = dctx.getDelegator();
         // prepare the data
-        String serviceConfigProps = (String) context.get("serviceConfigProps");
-        String upsRateInquireMode = (String) context.get("upsRateInquireMode");
-        String productStoreId = (String) context.get("productStoreId");
-        String carrierRoleTypeId = (String) context.get("carrierRoleTypeId");
-        String carrierPartyId = (String) context.get("carrierPartyId");
-        String shipmentMethodTypeId = (String) 
context.get("shipmentMethodTypeId");
         String shippingContactMechId = (String) 
context.get("shippingContactMechId");
-
-        List packageWeights = (List) context.get("packageWeights");
-        List shippableItemInfo = (List) context.get("shippableItemInfo");
-        Double shippableTotal = (Double) context.get("shippableTotal");
-        Double shippableQuantity = (Double) context.get("shippableQuantity");
-        Double shippableWeight = (Double) context.get("shippableWeight");
-
-        if (shippableTotal == null) {
-            shippableTotal = new Double(0.00);
-        }
-        if (shippableQuantity == null) {
-            shippableQuantity = new Double(0.00);
-        }
-        if (shippableWeight == null) {
-            shippableWeight = new Double(0.00);
-        }
-        if (serviceConfigProps == null) {
-            serviceConfigProps = "shipment.properties";
-        }
-        if (upsRateInquireMode == null || !"Shop".equals(upsRateInquireMode)) {
-            // can be either Rate || Shop
-            Debug.logWarning("No upsRateInquireMode set, defaulting to 
'Rate'", module);
-            upsRateInquireMode = "Rate";
-        }
-
-        // grab the pickup type; if none is defined we will assume daily pickup
-        String pickupType = 
UtilProperties.getPropertyValue(serviceConfigProps, 
"shipment.ups.shipper.pickup.type", "01");
-
-        // locate the ship-from address based on the product store's default 
facility
-        GenericValue productStore = 
ProductStoreWorker.getProductStore(productStoreId, delegator);
-        GenericValue shipFromAddress = null;
-        if (productStore != null && productStore.get("inventoryFacilityId") != 
null) {
-            List shipLocs = null;
-            try {
-                shipLocs = delegator.findByAnd("FacilityContactMechPurpose", 
UtilMisc.toMap("facilityId",
-                        productStore.getString("inventoryFacilityId"), 
"contactMechPurposeTypeId",
-                        "SHIP_ORIG_LOCATION"), UtilMisc.toList("-fromDate"));
-            } catch (GenericEntityException e) {
-                Debug.logError(e, module);
-            }
-            if (shipLocs != null) {
-                shipLocs = EntityUtil.filterByDate(shipLocs);
-                GenericValue purp =  EntityUtil.getFirst(shipLocs);
-                if (purp != null) {
-                    try {
-                        shipFromAddress = 
delegator.findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId", 
purp.getString("contactMechId")));
-                    } catch (GenericEntityException e) {
-                        Debug.logError(e, module);
-                    }
-                }
-            }
-        }
-        if (shipFromAddress == null) {
-            return ServiceUtil.returnError("Unable to determine ship-from 
address");
-        }
-
         // obtain the ship-to address
         GenericValue shipToAddress = null;
         if (shippingContactMechId != null) {
@@ -1416,165 +1357,35 @@
             return ServiceUtil.returnError("Unable to determine ship-to 
address");
         }
 
-        GenericValue originCountryGeo = null;
         GenericValue destCountryGeo = null;
         try {
-            originCountryGeo = shipFromAddress.getRelatedOne("CountryGeo");
             destCountryGeo = shipToAddress.getRelatedOne("CountryGeo");
         } catch( GenericEntityException e ) {
             Debug.logError(e, module);
             return ServiceUtil.returnError(e.getMessage());
         }
-        if (UtilValidate.isEmpty(originCountryGeo)) {
-            return ServiceUtil.returnError("Origin CountryGeo not found for 
ship-from address");
-        }
         if (UtilValidate.isEmpty(destCountryGeo)) {
             return ServiceUtil.returnError("Destination CountryGeo not found 
for ship-to address");
         }
-
-        // locate the service code
-        String serviceCode = null;
-        if (!"Shop".equals(upsRateInquireMode)) {
-            // locate the CarrierShipmentMethod record
-            GenericValue carrierShipmentMethod = null;
-            try {
-                carrierShipmentMethod = 
delegator.findByPrimaryKey("CarrierShipmentMethod", 
UtilMisc.toMap("shipmentMethodTypeId",
-                        shipmentMethodTypeId, "partyId", carrierPartyId, 
"roleTypeId", carrierRoleTypeId));
-            } catch (GenericEntityException e) {
-                Debug.logError(e, module);
-            }
-            if (carrierShipmentMethod == null) {
-                return ServiceUtil.returnError("Unable to locate the shipping 
method requested");
-            }
-
-            // service code is 'carrierServiceCode'
-            serviceCode = 
carrierShipmentMethod.getString("carrierServiceCode");
-        }
-
-        // prepare the XML Document
-        Document rateRequestDoc = 
UtilXml.makeEmptyXmlDocument("RatingServiceSelectionRequest");
-        Element rateRequestElement = rateRequestDoc.getDocumentElement();
-        rateRequestElement.setAttribute("xml:lang", "en-US");
-
-        // XML request header
-        Element requestElement = UtilXml.addChildElement(rateRequestElement, 
"Request", rateRequestDoc);
-        Element transactionReferenceElement = 
UtilXml.addChildElement(requestElement, "TransactionReference", rateRequestDoc);
-        UtilXml.addChildElementValue(transactionReferenceElement, 
"CustomerContext", "Rating and Service", rateRequestDoc);
-        UtilXml.addChildElementValue(transactionReferenceElement, 
"XpciVersion", "1.0001", rateRequestDoc);
-
-        // RequestAction is always Rate, but RequestOption can be Rate to get 
a single rate or Shop for all shipping methods
-        UtilXml.addChildElementValue(requestElement, "RequestAction", "Rate", 
rateRequestDoc);
-        UtilXml.addChildElementValue(requestElement, "RequestOption", 
upsRateInquireMode, rateRequestDoc);
-
-        // set the pickup type
-        Element pickupElement = UtilXml.addChildElement(rateRequestElement, 
"PickupType", rateRequestDoc);
-        UtilXml.addChildElementValue(pickupElement, "Code", pickupType, 
rateRequestDoc);
-
-        // shipment info
-        Element shipmentElement = UtilXml.addChildElement(rateRequestElement, 
"Shipment", rateRequestDoc);
-
-        // shipper info - (sub of shipment)
-        Element shipperElement = UtilXml.addChildElement(shipmentElement, 
"Shipper", rateRequestDoc);
-        Element shipperAddrElement = UtilXml.addChildElement(shipperElement, 
"Address", rateRequestDoc);
-        UtilXml.addChildElementValue(shipperAddrElement, "PostalCode", 
shipFromAddress.getString("postalCode"), rateRequestDoc);
-        UtilXml.addChildElementValue(shipperAddrElement, "CountryCode", 
originCountryGeo.getString("geoCode"), rateRequestDoc);
-
-        // ship-to info - (sub of shipment)
-        Element shiptoElement = UtilXml.addChildElement(shipmentElement, 
"ShipTo", rateRequestDoc);
-        Element shiptoAddrElement = UtilXml.addChildElement(shiptoElement, 
"Address", rateRequestDoc);
-        UtilXml.addChildElementValue(shiptoAddrElement, "PostalCode", 
shipToAddress.getString("postalCode"), rateRequestDoc);
-        UtilXml.addChildElementValue(shiptoAddrElement, "CountryCode", 
destCountryGeo.getString("geoCode"), rateRequestDoc);
-
-        // requested service (code) - not used when in Shop mode
-        if (serviceCode != null) {
-            Element serviceElement = UtilXml.addChildElement(shipmentElement, 
"Service", rateRequestDoc);
-            UtilXml.addChildElementValue(serviceElement, "Code", serviceCode, 
rateRequestDoc);
-        }
-
-        // package info
-        String maxWeightStr = 
UtilProperties.getPropertyValue(serviceConfigProps, 
"shipment.ups.max.estimate.weight", "99");
-        double maxWeight = 99;
-        try {
-            maxWeight = Double.parseDouble(maxWeightStr);
-        } catch (NumberFormatException e) {
-            maxWeight = 99;
-        }
-        String minWeightStr = 
UtilProperties.getPropertyValue(serviceConfigProps, 
"shipment.ups.min.estimate.weight", ".1");
-        double minWeight = .1;
-        try {
-            minWeight = Double.parseDouble(minWeightStr);
-        } catch (NumberFormatException e) {
-            minWeight = .1;
-        }
-
-        // Passing in a list of package weights overrides the calculation of 
same via shippableItemInfo
-        if (UtilValidate.isEmpty(packageWeights)) {
-            splitEstimatePackages(rateRequestDoc, shipmentElement, 
shippableItemInfo, maxWeight, minWeight);
-        } else {
-            Iterator i = packageWeights.iterator();
-            while (i.hasNext()) {
-                Double packageWeight = (Double) i.next();
-                addPackageElement(rateRequestDoc, shipmentElement, 
checkForDefaultPackageWeight(packageWeight.doubleValue(), minWeight));
-            }
-        }
-
-        // service options
-        UtilXml.addChildElement(shipmentElement, "ShipmentServiceOptions", 
rateRequestDoc);
-
-        String rateRequestString = null;
-        try {
-            rateRequestString = UtilXml.writeXmlDocument(rateRequestDoc);
-        } catch (IOException e) {
-            String ioeErrMsg = "Error writing the 
RatingServiceSelectionRequest XML Document to a String: " + e.toString();
-            Debug.logError(e, ioeErrMsg, module);
-            return ServiceUtil.returnError(ioeErrMsg);
-        }
-
-        // create AccessRequest XML doc
-        Document accessRequestDocument = 
createAccessRequestDocument(serviceConfigProps);
-        String accessRequestString = null;
-        try {
-            accessRequestString = 
UtilXml.writeXmlDocument(accessRequestDocument);
-        } catch (IOException e) {
-            String ioeErrMsg = "Error writing the AccessRequest XML Document 
to a String: " + e.toString();
-            Debug.logError(e, ioeErrMsg, module);
-            return ServiceUtil.returnError(ioeErrMsg);
-        }
-
-        // prepare the access/inquire request string
-        StringBuffer xmlString = new StringBuffer();
-        xmlString.append(accessRequestString);
-        xmlString.append(rateRequestString);
-
-        // send the request
-        String rateResponseString = null;
-        try {
-            rateResponseString = sendUpsRequest("Rate", xmlString.toString());
-        } catch (UpsConnectException e) {
-            String uceErrMsg = "Error sending UPS request for UPS Service 
Rate: " + e.toString();
-            Debug.logError(e, uceErrMsg, module);
-            return ServiceUtil.returnError(uceErrMsg);
-        }
-
-        Document rateResponseDocument = null;
-        try {
-            rateResponseDocument = UtilXml.readXmlDocument(rateResponseString, 
false);
-        } catch (SAXException e2) {
-            String excErrMsg = "Error parsing the 
RatingServiceSelectionResponse: " + e2.toString();
-            Debug.logError(e2, excErrMsg, module);
-            return ServiceUtil.returnError(excErrMsg);
-        } catch (ParserConfigurationException e2) {
-            String excErrMsg = "Error parsing the 
RatingServiceSelectionResponse: " + e2.toString();
-            Debug.logError(e2, excErrMsg, module);
-            return ServiceUtil.returnError(excErrMsg);
-        } catch (IOException e2) {
-            String excErrMsg = "Error parsing the 
RatingServiceSelectionResponse: " + e2.toString();
-            Debug.logError(e2, excErrMsg, module);
-            return ServiceUtil.returnError(excErrMsg);
+        Map cxt = UtilMisc.toMap("serviceConfigProps", 
context.get("serviceConfigProps"), "upsRateInquireMode", 
context.get("upsRateInquireMode"),
+                "productStoreId", context.get("productStoreId"), 
"carrierRoleTypeId", context.get("carrierRoleTypeId"));
+        cxt.put("carrierPartyId", context.get("carrierPartyId"));
+        cxt.put("shipmentMethodTypeId", context.get("shipmentMethodTypeId"));
+        cxt.put("shippingPostalCode", shipToAddress.getString("postalCode"));
+        cxt.put("shippingCountryCode",destCountryGeo.getString("geoCode") );
+        cxt.put("packageWeights", context.get("packageWeights"));
+        cxt.put("shippableItemInfo", context.get("shippableItemInfo"));
+        cxt.put("shippableTotal", context.get("shippableTotal"));
+        cxt.put("shippableQuantity", context.get("shippableQuantity"));
+        cxt.put("shippableWeight", context.get("shippableWeight"));
+        cxt.put("isResidentialAddress", context.get("isResidentialAddress"));
+        try{
+            return dctx.getDispatcher().runSync("upsRateEstimateByPostalCode", 
cxt);
+            
+        }catch(GenericServiceException e) {
+            Debug.logError(e, module);
+            return ServiceUtil.returnError(e.getMessage());
         }
-
-        return handleUpsRateInquireResponse(rateResponseDocument);
-
     }
 
     private static void splitEstimatePackages(Document requestDoc, Element 
shipmentElement, List shippableItemInfo, double maxWeight, double minWeight) {


Reply via email to