You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by le...@apache.org on 2008/12/01 07:51:15 UTC

svn commit: r721986 [12/13] - in /ofbiz/branches/typecheckcleanup200810: applications/accounting/script/org/ofbiz/accounting/olap/ applications/order/entitydef/ applications/order/script/org/ofbiz/order/order/ applications/order/script/org/ofbiz/order/...

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java Sun Nov 30 22:51:11 2008
@@ -88,13 +88,13 @@
         estimate.set("featurePercent", context.get("featurePercent"));
         estimate.set("featurePrice", context.get("featurePrice"));
         estimate.set("weightBreakId", context.get("weightBreakId"));
-        estimate.set("weightUnitPrice", (Double)context.get("wprice"));
+        estimate.set("weightUnitPrice", (BigDecimal)context.get("wprice"));
         estimate.set("weightUomId", context.get("wuom"));
         estimate.set("quantityBreakId", context.get("quantityBreakId"));
-        estimate.set("quantityUnitPrice", (Double)context.get("qprice"));
+        estimate.set("quantityUnitPrice", (BigDecimal)context.get("qprice"));
         estimate.set("quantityUomId", context.get("quom"));
         estimate.set("priceBreakId", context.get("priceBreakId"));
-        estimate.set("priceUnitPrice", (Double)context.get("pprice"));
+        estimate.set("priceUnitPrice", (BigDecimal)context.get("pprice"));
         estimate.set("priceUomId", context.get("puom"));
         storeAll.add(estimate);
 
@@ -162,11 +162,11 @@
 
     private static boolean applyQuantityBreak(Map context, Map result, List storeAll, GenericDelegator delegator,
                                               GenericValue estimate, String prefix, String breakType, String breakTypeString) {
-        Double min = (Double) context.get(prefix + "min");
-        Double max = (Double) context.get(prefix + "max");
+        BigDecimal min = (BigDecimal) context.get(prefix + "min");
+        BigDecimal max = (BigDecimal) context.get(prefix + "max");
         if (min != null || max != null) {
             if (min != null && max != null) {
-                if (min.doubleValue() <= max.doubleValue() || max.doubleValue() == 0) {
+                if (min.compareTo(max) <= 0 || max.compareTo(BigDecimal.ZERO) == 0) {
                     try {
                         String newSeqId = delegator.getNextSeqId("QuantityBreak");
                         GenericValue weightBreak = delegator.makeValue("QuantityBreak");
@@ -175,7 +175,7 @@
                         weightBreak.set("fromQuantity", min);
                         weightBreak.set("thruQuantity", max);
                         estimate.set(breakType + "BreakId", newSeqId);
-                        estimate.set(breakType + "UnitPrice", (Double) context.get(prefix + "price"));
+                        estimate.set(breakType + "UnitPrice", (BigDecimal) context.get(prefix + "price"));
                         if (context.containsKey(prefix + "uom")) {
                             estimate.set(breakType + "UomId", (String) context.get(prefix + "uom"));
                         }
@@ -218,22 +218,22 @@
         //Map shippableFeatureMap = (Map) context.get("shippableFeatureMap");
         //List shippableItemSizes = (List) context.get("shippableItemSizes");
 
-        Double shippableTotal = (Double) context.get("shippableTotal");
-        Double shippableQuantity = (Double) context.get("shippableQuantity");
-        Double shippableWeight = (Double) context.get("shippableWeight");
-        Double initialEstimateAmt = (Double) context.get("initialEstimateAmt");
+        BigDecimal shippableTotal = (BigDecimal) context.get("shippableTotal");
+        BigDecimal shippableQuantity = (BigDecimal) context.get("shippableQuantity");
+        BigDecimal shippableWeight = (BigDecimal) context.get("shippableWeight");
+        BigDecimal initialEstimateAmt = (BigDecimal) context.get("initialEstimateAmt");
 
         if (shippableTotal == null) {
-            shippableTotal = new Double(0.00);
+            shippableTotal = BigDecimal.ZERO;
         }
         if (shippableQuantity == null) {
-            shippableQuantity = new Double(0.00);
+            shippableQuantity = BigDecimal.ZERO;
         }
         if (shippableWeight == null) {
-            shippableWeight = new Double(0.00);
+            shippableWeight = BigDecimal.ZERO;
         }
         if (initialEstimateAmt == null) {
-            initialEstimateAmt = new Double(0.00);
+            initialEstimateAmt = BigDecimal.ZERO;
         }
 
         // get the ShipmentCostEstimate(s)
@@ -248,13 +248,13 @@
             return ServiceUtil.returnError("Unable to locate estimates from database");
         }
         if (estimates == null || estimates.size() < 1) {
-            if (initialEstimateAmt.doubleValue() == 0.00) {
+            if (initialEstimateAmt.compareTo(BigDecimal.ZERO) == 0) {
                 Debug.logWarning("Using the passed context : " + context, module);
                 Debug.logWarning("No shipping estimates found; the shipping amount returned is 0!", module);
             }
 
             Map respNow = ServiceUtil.returnSuccess();
-            respNow.put("shippingEstimateAmount", new Double(0.00));
+            respNow.put("shippingEstimateAmount", BigDecimal.ZERO);
             return respNow;
         }
 
@@ -331,41 +331,41 @@
 
                     if (wv != null) {
                         useWeight = true;
-                        double min = 0.0001;
-                        double max = 0.0001;
+                        BigDecimal min = BigDecimal.ONE.movePointLeft(4);
+                        BigDecimal max = BigDecimal.ONE.movePointLeft(4);
 
                         try {
-                            min = wv.getDouble("fromQuantity").doubleValue();
-                            max = wv.getDouble("thruQuantity").doubleValue();
+                            min = wv.getBigDecimal("fromQuantity");
+                            max = wv.getBigDecimal("thruQuantity");
                         } catch (Exception e) {
                         }
-                        if (shippableWeight.doubleValue() >= min && (max == 0 || shippableWeight.doubleValue() <= max))
+                        if (shippableWeight.compareTo(min) >= 0 && (max.compareTo(BigDecimal.ZERO) == 0 || shippableWeight.compareTo(max) <= 0))
                             weightValid = true;
                     }
                     if (qv != null) {
                         useQty = true;
-                        double min = 0.0001;
-                        double max = 0.0001;
+                        BigDecimal min = BigDecimal.ONE.movePointLeft(4);
+                        BigDecimal max = BigDecimal.ONE.movePointLeft(4);
 
                         try {
-                            min = qv.getDouble("fromQuantity").doubleValue();
-                            max = qv.getDouble("thruQuantity").doubleValue();
+                            min = qv.getBigDecimal("fromQuantity");
+                            max = qv.getBigDecimal("thruQuantity");
                         } catch (Exception e) {
                         }
-                        if (shippableQuantity.doubleValue() >= min && (max == 0 || shippableQuantity.doubleValue() <= max))
+                        if (shippableQuantity.compareTo(min) >= 0 && (max.compareTo(BigDecimal.ZERO) == 0 || shippableQuantity.compareTo(max) <= 0))
                             qtyValid = true;
                     }
                     if (pv != null) {
                         usePrice = true;
-                        double min = 0.0001;
-                        double max = 0.0001;
+                        BigDecimal min = BigDecimal.ONE.movePointLeft(4);
+                        BigDecimal max = BigDecimal.ONE.movePointLeft(4);
 
                         try {
-                            min = pv.getDouble("fromQuantity").doubleValue();
-                            max = pv.getDouble("thruQuantity").doubleValue();
+                            min = pv.getBigDecimal("fromQuantity");
+                            max = pv.getBigDecimal("thruQuantity");
                         } catch (Exception e) {
                         }
-                        if (shippableTotal.doubleValue() >= min && (max == 0 || shippableTotal.doubleValue() <= max))
+                        if (shippableTotal.compareTo(min) >= 0 && (max.compareTo(BigDecimal.ZERO) == 0 || shippableTotal.compareTo(max) <= 0))
                             priceValid = true;
                     }
                     // Now check the tests.
@@ -389,23 +389,23 @@
                 Map itemMap = (Map) sii.next();
 
                 // add the item sizes
-                Double itemSize = (Double) itemMap.get("size");
+                BigDecimal itemSize = (BigDecimal) itemMap.get("size");
                 if (itemSize != null) {
                     shippableItemSizes.add(itemSize);
                 }
 
                 // add the feature quantities
-                Double quantity = (Double) itemMap.get("quantity");
+                BigDecimal quantity = (BigDecimal) itemMap.get("quantity");
                 Set featureSet = (Set) itemMap.get("featureSet");
                 if (UtilValidate.isNotEmpty(featureSet)) {
                     Iterator fi = featureSet.iterator();
                     while (fi.hasNext()) {
                         String featureId = (String) fi.next();
-                        Double featureQuantity = (Double) shippableFeatureMap.get(featureId);
+                        BigDecimal featureQuantity = (BigDecimal) shippableFeatureMap.get(featureId);
                         if (featureQuantity == null) {
-                            featureQuantity = new Double(0.00);
+                            featureQuantity = BigDecimal.ZERO;
                         }
-                        featureQuantity = new Double(featureQuantity.doubleValue() + quantity.doubleValue());
+                        featureQuantity = featureQuantity.add(quantity);
                         shippableFeatureMap.put(featureId, featureQuantity);
                     }
                 }
@@ -459,61 +459,61 @@
         //Debug.log("[ShippingEvents.getShipEstimate] Working with estimate [" + estimateIndex + "]: " + estimate, module);
 
         // flat fees
-        double orderFlat = 0.00;
-        if (estimate.getDouble("orderFlatPrice") != null)
-            orderFlat = estimate.getDouble("orderFlatPrice").doubleValue();
-
-        double orderItemFlat = 0.00;
-        if (estimate.getDouble("orderItemFlatPrice") != null)
-            orderItemFlat = estimate.getDouble("orderItemFlatPrice").doubleValue();
-
-        double orderPercent = 0.00;
-        if (estimate.getDouble("orderPricePercent") != null)
-            orderPercent = estimate.getDouble("orderPricePercent").doubleValue();
+        BigDecimal orderFlat = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("orderFlatPrice") != null)
+            orderFlat = estimate.getBigDecimal("orderFlatPrice");
+
+        BigDecimal orderItemFlat = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("orderItemFlatPrice") != null)
+            orderItemFlat = estimate.getBigDecimal("orderItemFlatPrice");
+
+        BigDecimal orderPercent = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("orderPricePercent") != null)
+            orderPercent = estimate.getBigDecimal("orderPricePercent");
 
-        double itemFlatAmount = shippableQuantity.doubleValue() * orderItemFlat;
-        double orderPercentage = shippableTotal.doubleValue() * (orderPercent / 100);
+        BigDecimal itemFlatAmount = shippableQuantity.multiply(orderItemFlat);
+        BigDecimal orderPercentage = shippableTotal.multiply(orderPercent.movePointLeft(2));
 
         // flat total
-        double flatTotal = orderFlat + itemFlatAmount + orderPercentage;        
+        BigDecimal flatTotal = orderFlat.add(itemFlatAmount).add(orderPercentage);        
 
         // spans
-        double weightUnit = 0.00;
-        if (estimate.getDouble("weightUnitPrice") != null)
-            weightUnit = estimate.getDouble("weightUnitPrice").doubleValue();
-
-        double qtyUnit = 0.00;
-        if (estimate.getDouble("quantityUnitPrice") != null)
-            qtyUnit = estimate.getDouble("quantityUnitPrice").doubleValue();
-
-        double priceUnit = 0.00;
-        if (estimate.getDouble("priceUnitPrice") != null)
-            priceUnit = estimate.getDouble("priceUnitPrice").doubleValue();
-
-        double weightAmount = shippableWeight.doubleValue() * weightUnit;
-        double quantityAmount = shippableQuantity.doubleValue() * qtyUnit;
-        double priceAmount = shippableTotal.doubleValue() * priceUnit;
+        BigDecimal weightUnit = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("weightUnitPrice") != null)
+            weightUnit = estimate.getBigDecimal("weightUnitPrice");
+
+        BigDecimal qtyUnit = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("quantityUnitPrice") != null)
+            qtyUnit = estimate.getBigDecimal("quantityUnitPrice");
+
+        BigDecimal priceUnit = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("priceUnitPrice") != null)
+            priceUnit = estimate.getBigDecimal("priceUnitPrice");
+
+        BigDecimal weightAmount = shippableWeight.multiply(weightUnit);
+        BigDecimal quantityAmount = shippableQuantity.multiply(qtyUnit);
+        BigDecimal priceAmount = shippableTotal.multiply(priceUnit);
 
         // span total
-        double spanTotal = weightAmount + quantityAmount + priceAmount;
+        BigDecimal spanTotal = weightAmount.add(quantityAmount).add(priceAmount);
 
         // feature surcharges
-        double featureSurcharge = 0.00;
+        BigDecimal featureSurcharge = BigDecimal.ZERO;
         String featureGroupId = estimate.getString("productFeatureGroupId");
-        Double featurePercent = estimate.getDouble("featurePercent");
-        Double featurePrice = estimate.getDouble("featurePrice");
+        BigDecimal featurePercent = estimate.getBigDecimal("featurePercent");
+        BigDecimal featurePrice = estimate.getBigDecimal("featurePrice");
         if (featurePercent == null) {
-            featurePercent = new Double(0);
+            featurePercent = BigDecimal.ZERO;
         }
         if (featurePrice == null) {
-            featurePrice = new Double(0.00);
+            featurePrice = BigDecimal.ZERO;
         }
 
         if (featureGroupId != null && featureGroupId.length() > 0 && shippableFeatureMap != null) {
             Iterator fii = shippableFeatureMap.keySet().iterator();
             while (fii.hasNext()) {
                 String featureId = (String) fii.next();
-                Double quantity = (Double) shippableFeatureMap.get(featureId);
+                BigDecimal quantity = (BigDecimal) shippableFeatureMap.get(featureId);
                 GenericValue appl = null;
                 Map fields = UtilMisc.toMap("productFeatureGroupId", featureGroupId, "productFeatureId", featureId);
                 try {
@@ -524,45 +524,45 @@
                     Debug.logError(e, "Unable to lookup feature/group" + fields, module);
                 }
                 if (appl != null) {
-                    featureSurcharge += (shippableTotal.doubleValue() * (featurePercent.doubleValue() / 100) * quantity.doubleValue());
-                    featureSurcharge += featurePrice.doubleValue() * quantity.doubleValue();
+                    featureSurcharge = featureSurcharge.add( shippableTotal.multiply( featurePercent.movePointLeft(2) ).multiply(quantity) );
+                    featureSurcharge = featureSurcharge.add(featurePrice.multiply(quantity));
                 }
             }
         }
 
         // size surcharges
-        double sizeSurcharge = 0.00;
-        Double sizeUnit = estimate.getDouble("oversizeUnit");
-        Double sizePrice = estimate.getDouble("oversizePrice");
-        if (sizeUnit != null && sizeUnit.doubleValue() > 0) {
+        BigDecimal sizeSurcharge = BigDecimal.ZERO;
+        BigDecimal sizeUnit = estimate.getBigDecimal("oversizeUnit");
+        BigDecimal sizePrice = estimate.getBigDecimal("oversizePrice");
+        if (sizeUnit != null && sizeUnit.compareTo(BigDecimal.ZERO) > 0) {
             if (shippableItemSizes != null) {
                 Iterator isi = shippableItemSizes.iterator();
                 while (isi.hasNext()) {
-                    Double size = (Double) isi.next();
-                    if (size != null && size.doubleValue() >= sizeUnit.doubleValue()) {
-                        sizeSurcharge += sizePrice.doubleValue();
+                	BigDecimal size = (BigDecimal) isi.next();
+                    if (size != null && size.compareTo(sizeUnit) >= 0) {
+                        sizeSurcharge = sizeSurcharge.add(sizePrice);
                     }
                 }
             }
         }
 
         // surcharges total
-        double surchargeTotal = featureSurcharge + sizeSurcharge;
+        BigDecimal surchargeTotal = featureSurcharge.add(sizeSurcharge);
 
         // shipping subtotal
-        double subTotal = spanTotal + flatTotal + surchargeTotal;
+        BigDecimal subTotal = spanTotal.add(flatTotal).add(surchargeTotal);
 
         // percent add-on
-        double shippingPricePercent = 0.00;
-        if (estimate.getDouble("shippingPricePercent") != null)
-            shippingPricePercent = estimate.getDouble("shippingPricePercent").doubleValue();
+        BigDecimal shippingPricePercent = BigDecimal.ZERO;
+        if (estimate.getBigDecimal("shippingPricePercent") != null)
+            shippingPricePercent = estimate.getBigDecimal("shippingPricePercent");
 
         // shipping total
-        double shippingTotal = subTotal + ((subTotal + initialEstimateAmt.doubleValue()) * (shippingPricePercent / 100));
+        BigDecimal shippingTotal = subTotal.add((subTotal.add(initialEstimateAmt)).multiply(shippingPricePercent.movePointLeft(2)));
 
         // prepare the return result
         Map responseResult = ServiceUtil.returnSuccess();
-        responseResult.put("shippingEstimateAmount", new Double(shippingTotal));
+        responseResult.put("shippingEstimateAmount", shippingTotal);
         return responseResult;
     }
 
@@ -880,9 +880,9 @@
             Iterator iter = shipmentAndItems.iterator();
             while (iter.hasNext()) {
                 GenericValue item = (GenericValue) iter.next();
-                double shippedQuantity = item.getDouble("quantity").doubleValue();
-                Double quantity = (Double) shippedCountMap.get(item.getString("productId"));
-                quantity = new Double(quantity == null ? shippedQuantity : shippedQuantity + quantity.doubleValue());
+                BigDecimal shippedQuantity = item.getBigDecimal("quantity");
+                BigDecimal quantity = (BigDecimal) shippedCountMap.get(item.getString("productId"));
+                quantity = quantity == null ? shippedQuantity : shippedQuantity.add(quantity);
                 shippedCountMap.put(item.getString("productId"), quantity);
             }
 
@@ -891,9 +891,9 @@
             iter = shipmentReceipts.iterator();
             while (iter.hasNext()) {
                 GenericValue item = (GenericValue) iter.next();
-                double receivedQuantity = item.getDouble("quantityAccepted").doubleValue();
-                Double quantity = (Double) receivedCountMap.get(item.getString("productId"));
-                quantity = new Double(quantity == null ? receivedQuantity : receivedQuantity + quantity.doubleValue());
+                BigDecimal receivedQuantity = item.getBigDecimal("quantityAccepted");
+                BigDecimal quantity = (BigDecimal) receivedCountMap.get(item.getString("productId"));
+                quantity = quantity == null ? receivedQuantity : receivedQuantity.add(quantity);
                 receivedCountMap.put(item.getString("productId"), quantity);
             }
 
@@ -1054,10 +1054,10 @@
             
                 // Convert the value to the shipment currency, if necessary
                 GenericValue orderHeader = packageContent.getRelatedOne("OrderHeader");
-                Map convertUomResult = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", orderHeader.getString("currencyUom"), "uomIdTo", currencyUomId, "originalValue", new Double(packageContentValue.doubleValue())));
+                Map convertUomResult = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", orderHeader.getString("currencyUom"), "uomIdTo", currencyUomId, "originalValue", packageContentValue));
                 if (ServiceUtil.isError(convertUomResult)) return convertUomResult;
                 if (convertUomResult.containsKey("convertedValue")) {
-                    packageContentValue = new BigDecimal(((Double) convertUomResult.get("convertedValue")).doubleValue()).setScale(decimals, rounding);
+                    packageContentValue = ((BigDecimal) convertUomResult.get("convertedValue")).setScale(decimals, rounding);
                 }
                 
                 // Add the value of the packed item to the package's total value

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/dhl/DhlServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/dhl/DhlServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/dhl/DhlServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/dhl/DhlServices.java Sun Nov 30 22:51:11 2008
@@ -20,6 +20,7 @@
 
 import java.io.IOException;
 import java.io.StringWriter;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -157,9 +158,9 @@
         String shipmentMethodTypeId = (String) context.get("shipmentMethodTypeId");
         String shippingContactMechId = (String) context.get("shippingContactMechId");
         List shippableItemInfo = (List) context.get("shippableItemInfo");
-        Double shippableTotal = (Double) context.get("shippableTotal");
-        Double shippableQuantity = (Double) context.get("shippableQuantity");
-        Double shippableWeight = (Double) context.get("shippableWeight");
+        BigDecimal shippableTotal = (BigDecimal) context.get("shippableTotal");
+        BigDecimal shippableQuantity = (BigDecimal) context.get("shippableQuantity");
+        BigDecimal shippableWeight = (BigDecimal) context.get("shippableWeight");
         
         if (shipmentMethodTypeId.equals("NO_SHIPPING")) {
             Map result = ServiceUtil.returnSuccess();
@@ -203,11 +204,11 @@
             }
         }
 
-        if ((shippableWeight == null) || (shippableWeight.doubleValue() <= 0.0)) {
+        if ((shippableWeight == null) || (shippableWeight.compareTo(BigDecimal.ZERO) <= 0)) {
             String tmpValue = UtilProperties.getPropertyValue(shipmentPropertiesFile, "shipment.default.weight.value");
             if (tmpValue != null) {
                 try {
-                    shippableWeight = new Double(tmpValue);
+                    shippableWeight = new BigDecimal(tmpValue);
                 } catch (Exception e) {
                     return ServiceUtil.returnError("Cannot get DHL Estimate: Default shippable weight not configured (shipment.default.weight.value)");
                 }
@@ -215,11 +216,11 @@
         }
 
         // TODO: if a weight UOM is passed in, use convertUom service to convert it here
-        if (shippableWeight.doubleValue() < 1.0) {
+        if (shippableWeight.compareTo(BigDecimal.ONE) < 0) {
             Debug.logWarning("DHL Estimate: Weight is less than 1 lb, submitting DHL minimum of 1 lb for estimate.", module);
-            shippableWeight = new Double(1.0);
+            shippableWeight = BigDecimal.ONE;
         }
-        if ((dhlShipmentDetailCode.equals("G") && shippableWeight.doubleValue() > 999) || (shippableWeight.doubleValue() > 150)) {
+        if ((dhlShipmentDetailCode.equals("G") && shippableWeight.compareTo(new BigDecimal("999")) > 0) || (shippableWeight.compareTo(new BigDecimal("150")) > 0)) {
             return ServiceUtil.returnError("Cannot get DHL Estimate: Shippable weight cannot be greater than 999 lbs for ground or 150 lbs for all other services.");
         }
         String weight = (new Integer((int) shippableWeight.longValue())).toString();
@@ -363,7 +364,7 @@
                 chargeList.add(charge);
             }
         }
-        Double shippingEstimateAmount = new Double(responseTotalChargeEstimate);
+        BigDecimal shippingEstimateAmount = new BigDecimal(responseTotalChargeEstimate);
         dhlRateCodeMap.put("dateGenerated", dateGenerated);
         dhlRateCodeMap.put("serviceLevelCommitment",
                 responseServiceLevelCommitmentDescription);
@@ -587,9 +588,9 @@
 
             // get the weight from the ShipmentRouteSegment first, which overrides all later weight computations
             boolean hasBillingWeight = false;  // for later overrides
-            Double billingWeight = shipmentRouteSegment.getDouble("billingWeight");
+            BigDecimal billingWeight = shipmentRouteSegment.getBigDecimal("billingWeight");
             String billingWeightUomId = shipmentRouteSegment.getString("billingWeightUomId");
-            if ((billingWeight != null) && (billingWeight.doubleValue() > 0)) {
+            if ((billingWeight != null) && (billingWeight.compareTo(BigDecimal.ZERO) > 0)) {
                 hasBillingWeight = true;
                 if (billingWeightUomId == null) {
                     Debug.logWarning("Shipment Route Segment missing billingWeightUomId in shipmentId " + shipmentId,  module);
@@ -602,7 +603,7 @@
                     // try getting the weight from package instead
                     hasBillingWeight = false;
                 } else {
-                    billingWeight = (Double) results.get("convertedValue");
+                    billingWeight = (BigDecimal) results.get("convertedValue");
                 }
             }
 
@@ -610,7 +611,7 @@
             String length = null;
             String width = null;
             String height = null;
-            Double packageWeight = null;
+            BigDecimal packageWeight = null;
             Iterator shipmentPackageRouteSegIter = shipmentPackageRouteSegs.iterator();
             while (shipmentPackageRouteSegIter.hasNext()) {
                 GenericValue shipmentPackageRouteSeg = (GenericValue) shipmentPackageRouteSegIter.next();
@@ -635,14 +636,14 @@
 
                 // compute total packageWeight (for now, just one package)
                 if (shipmentPackage.getString("weight") != null) {
-                    packageWeight = Double.valueOf(shipmentPackage.getString("weight"));
+                    packageWeight = new BigDecimal(shipmentPackage.getString("weight"));
                 } else {
                     // use default weight if available
                     try {
-                        packageWeight = Double.valueOf(UtilProperties.getPropertyValue(shipmentPropertiesFile, "shipment.default.weight.value"));
+                        packageWeight = new BigDecimal(UtilProperties.getPropertyValue(shipmentPropertiesFile, "shipment.default.weight.value"));
                     } catch (NumberFormatException ne) {
                         Debug.logWarning("Default shippable weight not configured (shipment.default.weight.value)", module);
-                        packageWeight = new Double(1.0);
+                        packageWeight = BigDecimal.ONE;
                     }
                 }
                 // convert weight
@@ -654,21 +655,21 @@
                 results = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", weightUomId, "uomIdTo", DHL_WEIGHT_UOM_ID, "originalValue", packageWeight));
                 if ((results == null) || (results.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) || (results.get("convertedValue") == null)) {
                     Debug.logWarning("Unable to convert weights for shipmentId " + shipmentId , module);
-                    packageWeight = new Double(1.0);
+                    packageWeight = BigDecimal.ONE;
                 } else {
-                    packageWeight = (Double) results.get("convertedValue");
+                    packageWeight = (BigDecimal) results.get("convertedValue");
                 }
             }
 
             // pick which weight to use and round it
-            Double weight = null;
+            BigDecimal weight = null;
             if (hasBillingWeight) { 
                 weight = billingWeight;
             } else {
                 weight = packageWeight;
             }
             // want the rounded weight as a string, so we use the "" + int shortcut
-            String roundedWeight = "" + Math.round(weight.doubleValue());
+            String roundedWeight = weight.setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString();
             
             // translate shipmentMethodTypeId to DHL service code
             String shipmentMethodTypeId = shipmentRouteSegment.getString("shipmentMethodTypeId");
@@ -841,14 +842,14 @@
         return ServiceUtil.returnSuccess("DHL Shipment Confirmed.");
     }
 
-    private static double getWeight(List shippableItemInfo) {
-        double totalWeight = 0;
+    private static BigDecimal getWeight(List shippableItemInfo) {
+        BigDecimal totalWeight = BigDecimal.ZERO;
         if (shippableItemInfo != null) {
             Iterator sii = shippableItemInfo.iterator();
             while (sii.hasNext()) {
                 Map itemInfo = (Map) sii.next();
-                double weight = ((Double) itemInfo.get("weight")).doubleValue();
-                totalWeight = totalWeight + weight;
+                BigDecimal weight = ((BigDecimal) itemInfo.get("weight"));
+                totalWeight = totalWeight.add(weight);
             }
         }
         return totalWeight;

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/fedex/FedexServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/fedex/FedexServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/fedex/FedexServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/fedex/FedexServices.java Sun Nov 30 22:51:11 2008
@@ -661,9 +661,9 @@
 
             // Get the weight from the ShipmentRouteSegment first, which overrides all later weight computations
             boolean hasBillingWeight = false;
-            Double billingWeight = shipmentRouteSegment.getDouble("billingWeight");
+            BigDecimal billingWeight = shipmentRouteSegment.getBigDecimal("billingWeight");
             String billingWeightUomId = shipmentRouteSegment.getString("billingWeightUomId");
-            if ((billingWeight != null) && (billingWeight.doubleValue() > 0)) {
+            if ((billingWeight != null) && (billingWeight.compareTo(BigDecimal.ZERO) > 0)) {
                 hasBillingWeight = true;
                 if (billingWeightUomId == null) {
                     Debug.logWarning("Shipment Route Segment missing billingWeightUomId in shipmentId " + shipmentId + ", assuming default shipment.fedex.weightUomId of " + weightUomId + " from " + shipmentPropertiesFile,  module);
@@ -679,7 +679,7 @@
                         // Try getting the weight from package instead
                         hasBillingWeight = false;
                     } else {
-                        billingWeight = (Double) results.get("convertedValue");
+                        billingWeight = (BigDecimal) results.get("convertedValue");
                     }
                 }
             }
@@ -716,13 +716,13 @@
                 packaging = carrierShipmentBoxType.getString("packagingTypeCode");
                  
                 // Determine the dimensions of the package
-                Double dimensionsLength = null;
-                Double dimensionsWidth = null;
-                Double dimensionsHeight = null;
+                BigDecimal dimensionsLength = null;
+                BigDecimal dimensionsWidth = null;
+                BigDecimal dimensionsHeight = null;
                 if (shipmentBoxType != null) {
-                    dimensionsLength = shipmentBoxType.getDouble("boxLength");
-                    dimensionsWidth = shipmentBoxType.getDouble("boxWidth");
-                    dimensionsHeight = shipmentBoxType.getDouble("boxHeight");
+                    dimensionsLength = shipmentBoxType.getBigDecimal("boxLength");
+                    dimensionsWidth = shipmentBoxType.getBigDecimal("boxWidth");
+                    dimensionsHeight = shipmentBoxType.getBigDecimal("boxHeight");
 
                     String boxDimensionsUomId = null;
                     GenericValue boxDimensionsUom = shipmentBoxType.getRelatedOne("DimensionUom");
@@ -732,38 +732,38 @@
                         Debug.logWarning("Packaging type for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId + " is missing dimensionUomId, assuming default shipment.default.dimension.uom of " + dimensionsUomId + " from " + shipmentPropertiesFile,  module);
                         boxDimensionsUomId = dimensionsUomId;
                     }
-                    if (dimensionsLength != null && dimensionsLength.doubleValue() > 0) {
+                    if (dimensionsLength != null && dimensionsLength.compareTo(BigDecimal.ZERO) > 0) {
                         if (! boxDimensionsUomId.equals(dimensionsUomId)) {
                             Map results = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", boxDimensionsUomId, "uomIdTo", dimensionsUomId, "originalValue", dimensionsLength));
                             if (ServiceUtil.isError(results) || (results.get("convertedValue") == null)) {
                                 Debug.logWarning("Unable to convert length for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId , module);
                                 dimensionsLength = null;
                             } else {
-                                dimensionsLength = (Double) results.get("convertedValue");
+                                dimensionsLength = (BigDecimal) results.get("convertedValue");
                             }
                         }
                         
                     }
-                    if (dimensionsWidth != null && dimensionsWidth.doubleValue() > 0) {
+                    if (dimensionsWidth != null && dimensionsWidth.compareTo(BigDecimal.ZERO) > 0) {
                         if (! boxDimensionsUomId.equals(dimensionsUomId)) {
                             Map results = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", boxDimensionsUomId, "uomIdTo", dimensionsUomId, "originalValue", dimensionsWidth));
                             if (ServiceUtil.isError(results) || (results.get("convertedValue") == null)) {
                                 Debug.logWarning("Unable to convert width for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId , module);
                                 dimensionsWidth = null;
                             } else {
-                                dimensionsWidth = (Double) results.get("convertedValue");
+                                dimensionsWidth = (BigDecimal) results.get("convertedValue");
                             }
                         }
                         
                     }
-                    if (dimensionsHeight != null && dimensionsHeight.doubleValue() > 0) {
+                    if (dimensionsHeight != null && dimensionsHeight.compareTo(BigDecimal.ZERO) > 0) {
                         if (! boxDimensionsUomId.equals(dimensionsUomId)) {
                             Map results = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", boxDimensionsUomId, "uomIdTo", dimensionsUomId, "originalValue", dimensionsHeight));
                             if (ServiceUtil.isError(results) || (results.get("convertedValue") == null)) {
                                 Debug.logWarning("Unable to convert height for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId , module);
                                 dimensionsHeight = null;
                             } else {
-                                dimensionsHeight = (Double) results.get("convertedValue");
+                                dimensionsHeight = (BigDecimal) results.get("convertedValue");
                             }
                         }
                         
@@ -771,18 +771,18 @@
                 }
 
                 // Determine the package weight (possibly overriden by route segment billing weight)
-                Double packageWeight = null;
+                BigDecimal packageWeight = null;
                 if (! hasBillingWeight) {
                     if (UtilValidate.isNotEmpty(shipmentPackage.getString("weight"))) {
-                        packageWeight = shipmentPackage.getDouble("weight");
+                        packageWeight = shipmentPackage.getBigDecimal("weight");
                     } else {
 
                         // Use default weight if available
                         try {
-                            packageWeight = Double.valueOf(UtilProperties.getPropertyValue(shipmentPropertiesFile, "shipment.default.weight.value"));
+                            packageWeight = new BigDecimal(UtilProperties.getPropertyValue(shipmentPropertiesFile, "shipment.default.weight.value"));
                         } catch (NumberFormatException ne) {
                             Debug.logWarning("Default shippable weight not configured (shipment.default.weight.value), assuming 1.0" + weightUomId , module);
-                            packageWeight = new Double(1.0);
+                            packageWeight = BigDecimal.ONE;
                         }
                     }
                     
@@ -797,12 +797,12 @@
                         if (ServiceUtil.isError(results) || (results.get("convertedValue") == null)) {
                             ServiceUtil.returnError("Unable to convert weight for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId);
                         } else {
-                            packageWeight = (Double) results.get("convertedValue");
+                            packageWeight = (BigDecimal) results.get("convertedValue");
                         }
                     }
                 }
-                Double weight = hasBillingWeight ? billingWeight : packageWeight;
-                if (weight == null || weight.doubleValue() < 0) {
+                BigDecimal weight = hasBillingWeight ? billingWeight : packageWeight;
+                if (weight == null || weight.compareTo(BigDecimal.ZERO) < 0) {
                     ServiceUtil.returnError("Unable to determine weight for package " + shipmentPackage.getString("shipmentPackageSeqId") + " of shipmentRouteSegment " + shipmentRouteSegmentId + " of shipment " + shipmentId);
                 }
                 
@@ -811,15 +811,15 @@
                 shipRequestContext.put("DropoffType", dropoffType);
                 shipRequestContext.put("Packaging", packaging);
                 if (UtilValidate.isNotEmpty(dimensionsUomId) &&
-                    dimensionsLength != null && Math.round(dimensionsLength.doubleValue()) > 0 &&
-                    dimensionsWidth != null && Math.round(dimensionsWidth.doubleValue()) > 0   &&
-                    dimensionsHeight != null && Math.round(dimensionsHeight.doubleValue()) > 0 ) {
+                    dimensionsLength != null && dimensionsLength.setScale(0, BigDecimal.ROUND_HALF_UP).compareTo(BigDecimal.ZERO) > 0 &&
+                    dimensionsWidth != null && dimensionsWidth.setScale(0, BigDecimal.ROUND_HALF_UP).compareTo(BigDecimal.ZERO) > 0   &&
+                    dimensionsHeight != null && dimensionsHeight.setScale(0, BigDecimal.ROUND_HALF_UP).compareTo(BigDecimal.ZERO) > 0 ) {
                         shipRequestContext.put("DimensionsUnits", dimensionsUomId.equals("LEN_in") ? "IN" : "CM");
-                        shipRequestContext.put("DimensionsLength", "" + Math.round(dimensionsLength.doubleValue()));
-                        shipRequestContext.put("DimensionsWidth", "" + Math.round(dimensionsWidth.doubleValue()));
-                        shipRequestContext.put("DimensionsHeight", "" + Math.round(dimensionsHeight.doubleValue()));
+                        shipRequestContext.put("DimensionsLength", dimensionsLength.setScale(0, BigDecimal.ROUND_HALF_UP).toString());
+                        shipRequestContext.put("DimensionsWidth", dimensionsWidth.setScale(0, BigDecimal.ROUND_HALF_UP).toString());
+                        shipRequestContext.put("DimensionsHeight", dimensionsHeight.setScale(0, BigDecimal.ROUND_HALF_UP).toString());
                 }
-                shipRequestContext.put("Weight", new BigDecimal(weight.doubleValue()).setScale(1, BigDecimal.ROUND_UP).toString());
+                shipRequestContext.put("Weight", weight.setScale(1, BigDecimal.ROUND_UP).toString());
             }
          
             StringWriter outWriter = new StringWriter();

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java Sun Nov 30 22:51:11 2008
@@ -22,6 +22,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -82,6 +83,7 @@
     }
     public static final int decimals = UtilNumber.getBigDecimalScale("order.decimals");
     public static final int rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding");
+    public static final MathContext generalRounding = new MathContext(10);
 
     public static Map upsShipmentConfirm(DispatchContext dctx, Map context) {
         Map result = new HashMap();
@@ -430,9 +432,9 @@
                         // I guess we'll default to inches...
                         UtilXml.addChildElementValue(unitOfMeasurementElement, "Code", "IN", shipmentConfirmRequestDoc);
                     }
-                    Double boxLength = shipmentBoxType.getDouble("boxLength");
-                    Double boxWidth = shipmentBoxType.getDouble("boxWidth");
-                    Double boxHeight = shipmentBoxType.getDouble("boxHeight");
+                    BigDecimal boxLength = shipmentBoxType.getBigDecimal("boxLength");
+                    BigDecimal boxWidth = shipmentBoxType.getBigDecimal("boxWidth");
+                    BigDecimal boxHeight = shipmentBoxType.getBigDecimal("boxHeight");
                     UtilXml.addChildElementValue(dimensionsElement, "Length", UtilValidate.isNotEmpty(boxLength) ? ""+boxLength.intValue() : "", shipmentConfirmRequestDoc);
                     UtilXml.addChildElementValue(dimensionsElement, "Width", UtilValidate.isNotEmpty(boxWidth) ? ""+boxWidth.intValue() : "", shipmentConfirmRequestDoc);
                     UtilXml.addChildElementValue(dimensionsElement, "Height", UtilValidate.isNotEmpty(boxHeight) ? ""+boxHeight.intValue() : "", shipmentConfirmRequestDoc);
@@ -451,7 +453,7 @@
                 if (shipmentPackage.getString("weight") == null) {
                     return ServiceUtil.returnError("Weight value not found for ShipmentRouteSegment with shipmentId " + shipmentId + ", shipmentRouteSegmentId " + shipmentRouteSegmentId + ", and shipmentPackageSeqId " + shipmentPackage.getString("shipmentPackageSeqId"));
                 }
-                Double boxWeight = shipmentPackage.getDouble("weight");
+                BigDecimal boxWeight = shipmentPackage.getBigDecimal("weight");
                 UtilXml.addChildElementValue(packageWeightElement, "Weight", UtilValidate.isNotEmpty(boxWeight) ? ""+boxWeight.intValue() : "", shipmentConfirmRequestDoc);
                 
                 Element referenceNumberElement = UtilXml.addChildElement(packageElement, "ReferenceNumber", shipmentConfirmRequestDoc);
@@ -496,10 +498,10 @@
                     BigDecimal packageValue = (BigDecimal) getPackageValueResult.get("packageValue");
                     
                     // Convert the value of the COD surcharge to the shipment currency, if necessary
-                    Map convertUomResult = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", codSurchargeCurrencyUomId, "uomIdTo", currencyCode, "originalValue", new Double(codSurchargePackageAmount.doubleValue())));
+                    Map convertUomResult = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", codSurchargeCurrencyUomId, "uomIdTo", currencyCode, "originalValue", codSurchargePackageAmount));
                     if (ServiceUtil.isError(convertUomResult)) return convertUomResult;
                     if (convertUomResult.containsKey("convertedValue")) {
-                        codSurchargePackageAmount = new BigDecimal(((Double) convertUomResult.get("convertedValue")).doubleValue()).setScale(decimals, rounding);
+                        codSurchargePackageAmount = ((BigDecimal) convertUomResult.get("convertedValue")).setScale(decimals, rounding);
                     }
                     
                     // Add the amount of the surcharge for the package, if the surcharge should be on all packages or the first and this is the first package
@@ -646,21 +648,21 @@
             }
             
             try {
-                shipmentRouteSegment.set("actualTransportCost", Double.valueOf(transportationMonetaryValue));
+                shipmentRouteSegment.set("actualTransportCost", new BigDecimal(transportationMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the transportationMonetaryValue [" + transportationMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
                 errorList.add(excErrMsg);
             }
             try {
-                shipmentRouteSegment.set("actualServiceCost", Double.valueOf(serviceOptionsMonetaryValue));
+                shipmentRouteSegment.set("actualServiceCost", new BigDecimal(serviceOptionsMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the serviceOptionsMonetaryValue [" + serviceOptionsMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
                 errorList.add(excErrMsg);
             }
             try {
-                shipmentRouteSegment.set("actualCost", Double.valueOf(totalMonetaryValue));
+                shipmentRouteSegment.set("actualCost", new BigDecimal(totalMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the totalMonetaryValue [" + totalMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
@@ -673,7 +675,7 @@
             String billingWeightUnitOfMeasurement = UtilXml.childElementValue(billingWeightUnitOfMeasurementElement, "Code");
             String billingWeight = UtilXml.childElementValue(billingWeightElement, "Weight");
             try {
-                shipmentRouteSegment.set("billingWeight", Double.valueOf(billingWeight));
+                shipmentRouteSegment.set("billingWeight", new BigDecimal(billingWeight));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the billingWeight [" + billingWeight + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
@@ -914,21 +916,21 @@
             }
             
             try {
-                shipmentRouteSegment.set("actualTransportCost", Double.valueOf(transportationMonetaryValue));
+                shipmentRouteSegment.set("actualTransportCost", new BigDecimal(transportationMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the transportationMonetaryValue [" + transportationMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
                 errorList.add(excErrMsg);
             }
             try {
-                shipmentRouteSegment.set("actualServiceCost", Double.valueOf(serviceOptionsMonetaryValue));
+                shipmentRouteSegment.set("actualServiceCost", new BigDecimal(serviceOptionsMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the serviceOptionsMonetaryValue [" + serviceOptionsMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
                 errorList.add(excErrMsg);
             }
             try {
-                shipmentRouteSegment.set("actualCost", Double.valueOf(totalMonetaryValue));
+                shipmentRouteSegment.set("actualCost", new BigDecimal(totalMonetaryValue));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the totalMonetaryValue [" + totalMonetaryValue + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
@@ -941,7 +943,7 @@
             String billingWeightUnitOfMeasurement = UtilXml.childElementValue(billingWeightUnitOfMeasurementElement, "Code");
             String billingWeight = UtilXml.childElementValue(billingWeightElement, "Weight");
             try {
-                shipmentRouteSegment.set("billingWeight", Double.valueOf(billingWeight));
+                shipmentRouteSegment.set("billingWeight", new BigDecimal(billingWeight));
             } catch (NumberFormatException e) {
                 String excErrMsg = "Error parsing the billingWeight [" + billingWeight + "]: " + e.toString();
                 Debug.logError(e, excErrMsg, module);
@@ -994,7 +996,7 @@
                 shipmentPackageRouteSeg.set("boxNumber", "");
                 shipmentPackageRouteSeg.set("currencyUomId", packageServiceOptionsCurrencyCode);
                 try {
-                    shipmentPackageRouteSeg.set("packageServiceCost", Double.valueOf(packageServiceOptionsMonetaryValue));
+                    shipmentPackageRouteSeg.set("packageServiceCost", new BigDecimal(packageServiceOptionsMonetaryValue));
                 } catch (NumberFormatException e) {
                     String excErrMsg = "Error parsing the packageServiceOptionsMonetaryValue [" + packageServiceOptionsMonetaryValue + "] for Package [" + shipmentPackageRouteSeg.getString("shipmentPackageSeqId") + "]: " + e.toString();
                     Debug.logError(e, excErrMsg, module);
@@ -1561,7 +1563,7 @@
         }
     }
 
-    private static void splitEstimatePackages(Document requestDoc, Element shipmentElement, List shippableItemInfo, double maxWeight, double minWeight) {
+    private static void splitEstimatePackages(Document requestDoc, Element shipmentElement, List shippableItemInfo, BigDecimal maxWeight, BigDecimal minWeight) {
         List packages = getPackageSplit(shippableItemInfo, maxWeight);
         if (UtilValidate.isNotEmpty(packages)) {
             Iterator i = packages.iterator();
@@ -1573,9 +1575,9 @@
             
             // Add a dummy package
             String totalWeightStr = UtilProperties.getPropertyValue("shipment", "shipment.ups.min.estimate.weight", "1");
-            double packageWeight = 1;
+            BigDecimal packageWeight = BigDecimal.ONE;
             try {
-                packageWeight = Double.parseDouble(totalWeightStr);
+                packageWeight = new BigDecimal(totalWeightStr);
             } catch (NumberFormatException e) {
                 Debug.logError(e, module);
             }
@@ -1587,15 +1589,15 @@
         }
     }
 
-    private static void addPackageElement(Document requestDoc, Element shipmentElement, List shippableItemInfo, Map packageMap, double minWeight) {
-        double packageWeight = checkForDefaultPackageWeight(calcPackageWeight(packageMap, shippableItemInfo, 0),minWeight);
+    private static void addPackageElement(Document requestDoc, Element shipmentElement, List shippableItemInfo, Map packageMap, BigDecimal minWeight) {
+        BigDecimal packageWeight = checkForDefaultPackageWeight(calcPackageWeight(packageMap, shippableItemInfo, BigDecimal.ZERO), minWeight);
         Element packageElement = UtilXml.addChildElement(shipmentElement, "Package", requestDoc);
         Element packagingTypeElement = UtilXml.addChildElement(packageElement, "PackagingType", requestDoc);
         UtilXml.addChildElementValue(packagingTypeElement, "Code", "00", requestDoc);
         UtilXml.addChildElementValue(packagingTypeElement, "Description", "Unknown PackagingType", requestDoc);
         UtilXml.addChildElementValue(packageElement, "Description", "Package Description", requestDoc);
         Element packageWeightElement = UtilXml.addChildElement(packageElement, "PackageWeight", requestDoc);
-        UtilXml.addChildElementValue(packageWeightElement, "Weight", Double.toString(packageWeight), requestDoc);
+        UtilXml.addChildElementValue(packageWeightElement, "Weight", packageWeight.toPlainString(), requestDoc);
         //If product is in shippable Package then it we should have one product per packagemap
         if (packageMap.size() ==1) {
             Iterator i = packageMap.keySet().iterator();
@@ -1612,7 +1614,7 @@
         
     }
 
-    private static void addPackageElement(Document requestDoc, Element shipmentElement, Double packageWeight) {        
+    private static void addPackageElement(Document requestDoc, Element shipmentElement, BigDecimal packageWeight) {        
         Element packageElement = UtilXml.addChildElement(shipmentElement, "Package", requestDoc);
         Element packagingTypeElement = UtilXml.addChildElement(packageElement, "PackagingType", requestDoc);
         UtilXml.addChildElementValue(packagingTypeElement, "Code", "00", requestDoc);
@@ -1623,11 +1625,11 @@
     }
     
     
-    private static double checkForDefaultPackageWeight(double weight, double minWeight) {
-        return (weight > 0 && weight > minWeight ? weight : minWeight);
+    private static BigDecimal checkForDefaultPackageWeight(BigDecimal weight, BigDecimal minWeight) {
+        return (weight.compareTo(BigDecimal.ZERO) > 0 && weight.compareTo(minWeight) > 0 ? weight : minWeight);
     }
     
-    private static List getPackageSplit(List shippableItemInfo, double maxWeight) {
+    private static List getPackageSplit(List shippableItemInfo, BigDecimal maxWeight) {
         // create the package list w/ the first package
         List packages = new LinkedList();
 
@@ -1636,28 +1638,28 @@
             while (sii.hasNext()) {
                 Map itemInfo = (Map) sii.next();
                 long pieces = ((Long) itemInfo.get("piecesIncluded")).longValue();
-                double totalQuantity = ((Double) itemInfo.get("quantity")).doubleValue();
-                double totalWeight = ((Double) itemInfo.get("weight")).doubleValue();
+                BigDecimal totalQuantity = (BigDecimal) itemInfo.get("quantity");
+                BigDecimal totalWeight = (BigDecimal) itemInfo.get("weight");
                 String productId = (String) itemInfo.get("productId");
 
                 // sanity check
                 if (pieces < 1) {
                     pieces = 1; // can NEVER be less than one
                 }
-                double weight = totalWeight / pieces;
+                BigDecimal weight = totalWeight.divide(BigDecimal.valueOf(pieces), generalRounding);
 
-                for (int z = 1; z <= totalQuantity; z++) {
-                    double partialQty = pieces > 1 ? 1.000 / pieces : 1;
+                for (int z = 1; z <= totalQuantity.intValue(); z++) {
+                	BigDecimal partialQty = pieces > 1 ? BigDecimal.ONE.divide(BigDecimal.valueOf(pieces), generalRounding) : BigDecimal.ONE;
                     for (long x = 0; x < pieces; x++) {
                         if(itemInfo.get("inShippingBox") != null &&  ((String) itemInfo.get("inShippingBox")).equalsIgnoreCase("Y")) {
                             Map newPackage = new HashMap();
-                            newPackage.put(productId, new Double(partialQty));
+                            newPackage.put(productId, partialQty);
                             packages.add(newPackage);
-                        } else if (weight >= maxWeight) {
+                        } else if (weight.compareTo(maxWeight) >= 0) {
                             Map newPackage = new HashMap();
-                            newPackage.put(productId, new Double(partialQty));
+                            newPackage.put(productId, partialQty);
                             packages.add(newPackage);
-                        } else if (totalWeight > 0) {
+                        } else if (totalWeight.compareTo(BigDecimal.ZERO) > 0) {
                             // create the first package
                             if (packages.size() == 0) {
                                 packages.add(new HashMap());
@@ -1669,18 +1671,18 @@
                             for (int pi = 0; pi < packageSize; pi++) {
                                 if (!addedToPackage) {
                                     Map packageMap = (Map) packages.get(pi);
-                                    double packageWeight = calcPackageWeight(packageMap, shippableItemInfo, weight);
-                                    if (packageWeight <= maxWeight) {
-                                        Double qtyD = (Double) packageMap.get(productId);
-                                        double qty = qtyD == null ? 0 : qtyD.doubleValue();
-                                        packageMap.put(productId, new Double(qty + partialQty));
+                                    BigDecimal packageWeight = calcPackageWeight(packageMap, shippableItemInfo, weight);
+                                    if (packageWeight.compareTo(maxWeight) <= 0) {
+                                    	BigDecimal qty = (BigDecimal) packageMap.get(productId);
+                                        qty = qty == null ? BigDecimal.ZERO : qty;
+                                        packageMap.put(productId, qty.add(partialQty));
                                         addedToPackage = true;
                                     }
                                 }
                             }
                             if (!addedToPackage) {
                                 Map packageMap = new HashMap();
-                                packageMap.put(productId, new Double(partialQty));
+                                packageMap.put(productId, partialQty);
                                 packages.add(packageMap);
                             }
                         }
@@ -1691,17 +1693,17 @@
         return packages;
     }
 
-    private static double calcPackageWeight(Map packageMap, List shippableItemInfo, double additionalWeight) {
-        double totalWeight = 0.00;
+    private static BigDecimal calcPackageWeight(Map packageMap, List shippableItemInfo, BigDecimal additionalWeight) {
+        BigDecimal totalWeight = BigDecimal.ZERO;
         Iterator i = packageMap.keySet().iterator();
         while (i.hasNext()) {
             String productId = (String) i.next();
             Map productInfo = getProductItemInfo(shippableItemInfo, productId);
-            double productWeight = ((Double) productInfo.get("weight")).doubleValue();
-            double quantity = ((Double) packageMap.get(productId)).doubleValue();
-            totalWeight += (productWeight * quantity);
+            BigDecimal productWeight = (BigDecimal) productInfo.get("weight");
+            BigDecimal quantity = (BigDecimal) packageMap.get(productId);
+            totalWeight = totalWeight.add(productWeight.multiply(quantity));
         }
-        return totalWeight + additionalWeight;
+        return totalWeight.add(additionalWeight);
     }
 
     private static Map getProductItemInfo(List shippableItemInfo, String productId) {
@@ -1736,7 +1738,7 @@
         if ("1".equals(responseStatusCode)) {
             List rates = UtilXml.childElementList(rateResponseElement, "RatedShipment");
             Map rateMap = new HashMap();
-            Double firstRate = null;
+            BigDecimal firstRate = null;
             if (rates == null || rates.size() == 0) {
                 return ServiceUtil.returnError("No rates available at this time");
             } else {
@@ -1752,9 +1754,9 @@
                     Element totalCharges = UtilXml.firstChildElement(element, "TotalCharges");
                     String totalString = UtilXml.childElementValue(totalCharges, "MonetaryValue");
 
-                    rateMap.put(serviceCode, new Double(totalString));
+                    rateMap.put(serviceCode, new BigDecimal(totalString));
                     if (firstRate == null) {
-                        firstRate = (Double) rateMap.get(serviceCode);
+                        firstRate = (BigDecimal) rateMap.get(serviceCode);
                     }
                 }
             }
@@ -1918,9 +1920,9 @@
         String shippingCountryCode = (String) context.get("shippingCountryCode");
         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");
+        BigDecimal shippableTotal = (BigDecimal) context.get("shippableTotal");
+        BigDecimal shippableQuantity = (BigDecimal) context.get("shippableQuantity");
+        BigDecimal shippableWeight = (BigDecimal) context.get("shippableWeight");
         String isResidentialAddress = (String)context.get("isResidentialAddress");
 
         // Important: DO NOT returnError here or you could trigger a transaction rollback and break other services.
@@ -1929,13 +1931,13 @@
         }
 
         if (shippableTotal == null) {
-            shippableTotal = new Double(0.00);
+            shippableTotal = BigDecimal.ZERO;
         }
         if (shippableQuantity == null) {
-            shippableQuantity = new Double(0.00);
+            shippableQuantity = BigDecimal.ZERO;
         }
         if (shippableWeight == null) {
-            shippableWeight = new Double(0.00);
+            shippableWeight = BigDecimal.ZERO;
         }
         if (serviceConfigProps == null) {
             serviceConfigProps = "shipment.properties";
@@ -2036,18 +2038,18 @@
 
         // package info
         String maxWeightStr = UtilProperties.getPropertyValue(serviceConfigProps, "shipment.ups.max.estimate.weight", "99");
-        double maxWeight = 99;
+        BigDecimal maxWeight = new BigDecimal("99");
         try {
-            maxWeight = Double.parseDouble(maxWeightStr);
+            maxWeight = new BigDecimal(maxWeightStr);
         } catch (NumberFormatException e) {
-            maxWeight = 99;
+            maxWeight = new BigDecimal("99");
         }
         String minWeightStr = UtilProperties.getPropertyValue(serviceConfigProps, "shipment.ups.min.estimate.weight", ".1");
-        double minWeight = .1;
+        BigDecimal minWeight = new BigDecimal("0.1");
         try {
-            minWeight = Double.parseDouble(minWeightStr);
+            minWeight = new BigDecimal(minWeightStr);
         } catch (NumberFormatException e) {
-            minWeight = .1;
+            minWeight = new BigDecimal("0.1");
         }
         
         // Passing in a list of package weights overrides the calculation of same via shippableItemInfo
@@ -2057,7 +2059,7 @@
         } else {
             Iterator i = packageWeights.iterator();
             while (i.hasNext()) {
-                Double packageWeight = (Double) i.next();
+                BigDecimal packageWeight = (BigDecimal) i.next();
                 addPackageElement(rateRequestDoc,  shipmentElement, packageWeight);
             }
         }

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/usps/UspsServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/usps/UspsServices.java?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/usps/UspsServices.java (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/src/org/ofbiz/shipment/thirdparty/usps/UspsServices.java Sun Nov 30 22:51:11 2008
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.text.DecimalFormat;
 import java.util.*;
 
@@ -58,13 +59,15 @@
     public final static String module = UspsServices.class.getName();
     public final static String errorResource = "ProductErrorUiLabels";
 
+    public static final MathContext generalRounding = new MathContext(10);
+
     public static Map uspsRateInquire(DispatchContext dctx, Map context) {
 
         GenericDelegator delegator = dctx.getDelegator();
 
         // check for 0 weight
-        Double shippableWeight = (Double) context.get("shippableWeight");
-        if (shippableWeight.doubleValue() == 0) {
+        BigDecimal shippableWeight = (BigDecimal) context.get("shippableWeight");
+        if (shippableWeight.compareTo(BigDecimal.ZERO) == 0) {
             // TODO: should we return an error, or $0.00 ?
             return ServiceUtil.returnFailure("shippableWeight must be greater than 0");
         }
@@ -127,14 +130,14 @@
         Document requestDocument = createUspsRequestDocument("RateV2Request");
 
         // TODO: 70 lb max is valid for Express, Priority and Parcel only - handle other methods
-        double maxWeight = 70;
+        BigDecimal maxWeight = new BigDecimal("70");
         String maxWeightStr = UtilProperties.getPropertyValue((String) context.get("serviceConfigProps"),
                 "shipment.usps.max.estimate.weight", "70");
         try {
-            maxWeight = Double.parseDouble(maxWeightStr);
+            maxWeight = new BigDecimal(maxWeightStr);
         } catch (NumberFormatException e) {
             Debug.logWarning("Error parsing max estimate weight string [" + maxWeightStr + "], using default instead", module);
-            maxWeight = 70;
+            maxWeight = new BigDecimal("70");
         }
 
         List shippableItemInfo = (List) context.get("shippableItemInfo");
@@ -144,8 +147,8 @@
         for (ListIterator li = packages.listIterator(); li.hasNext();) {
             Map packageMap = (Map) li.next();
 
-            double packageWeight = isOnePackage ? shippableWeight.doubleValue() : calcPackageWeight(dctx, packageMap, shippableItemInfo, 0);
-            if (packageWeight == 0) {
+            BigDecimal packageWeight = isOnePackage ? shippableWeight : calcPackageWeight(dctx, packageMap, shippableItemInfo, BigDecimal.ZERO);
+            if (packageWeight.compareTo(BigDecimal.ZERO) == 0) {
                 continue;
             }
 
@@ -156,13 +159,13 @@
             UtilXml.addChildElementValue(packageElement, "ZipOrigination", originationZip.substring(0,5), requestDocument);
             UtilXml.addChildElementValue(packageElement, "ZipDestination", destinationZip.substring(0,5), requestDocument);
 
-            double weightPounds = Math.floor(packageWeight);
+            BigDecimal weightPounds = packageWeight.setScale(0, BigDecimal.ROUND_FLOOR);
             // for Parcel post, the weight must be at least 1 lb
-            if ("PARCEL".equals(serviceCode.toUpperCase()) && (weightPounds < 1.0)) {
-                weightPounds = 1.0;
-                packageWeight = 0.0;
+            if ("PARCEL".equals(serviceCode.toUpperCase()) && (weightPounds.compareTo(BigDecimal.ONE) < 0)) {
+                weightPounds = BigDecimal.ONE;
+                packageWeight = BigDecimal.ZERO;
             }
-            double weightOunces = Math.ceil(packageWeight * 16 % 16);
+            BigDecimal weightOunces = packageWeight.multiply(new BigDecimal("16")).remainder(new BigDecimal("16")).setScale(0, BigDecimal.ROUND_CEILING);
             DecimalFormat df = new DecimalFormat("#");  // USPS only accepts whole numbers like 1 and not 1.0
             UtilXml.addChildElementValue(packageElement, "Pounds", df.format(weightPounds), requestDocument);
             UtilXml.addChildElementValue(packageElement, "Ounces", df.format(weightOunces), requestDocument);
@@ -199,24 +202,24 @@
             return ServiceUtil.returnError("No rate available at this time");
         }
 
-        double estimateAmount = 0.00;
+        BigDecimal estimateAmount = BigDecimal.ZERO;
         for (Iterator i = rates.iterator(); i.hasNext();) {
             Element packageElement = (Element) i.next();
             try {
                 Element postageElement = UtilXml.firstChildElement(packageElement, "Postage");
-                double packageAmount = Double.parseDouble(UtilXml.childElementValue(postageElement, "Rate"));
-                estimateAmount += packageAmount;
+                BigDecimal packageAmount = new BigDecimal(UtilXml.childElementValue(postageElement, "Rate"));
+                estimateAmount = estimateAmount.add(packageAmount);
             } catch (NumberFormatException e) {
                 Debug.log(e, module);
             }
         }
 
         Map result = ServiceUtil.returnSuccess();
-        result.put("shippingEstimateAmount", new Double(estimateAmount));
+        result.put("shippingEstimateAmount", estimateAmount);
         return result;
     }
 
-    private static List getPackageSplit(DispatchContext dctx, List shippableItemInfo, double maxWeight) {
+    private static List getPackageSplit(DispatchContext dctx, List shippableItemInfo, BigDecimal maxWeight) {
         // create the package list w/ the first pacakge
         List packages = FastList.newInstance();
 
@@ -225,24 +228,24 @@
             while (sii.hasNext()) {
                 Map itemInfo = (Map) sii.next();
                 long pieces = ((Long) itemInfo.get("piecesIncluded")).longValue();
-                double totalQuantity = ((Double) itemInfo.get("quantity")).doubleValue();
-                double totalWeight = ((Double) itemInfo.get("weight")).doubleValue();
+                BigDecimal totalQuantity = (BigDecimal) itemInfo.get("quantity");
+                BigDecimal totalWeight = (BigDecimal) itemInfo.get("weight");
                 String productId = (String) itemInfo.get("productId");
 
                 // sanity check
                 if (pieces < 1) {
                     pieces = 1; // can NEVER be less than one
                 }
-                double weight = totalWeight / pieces;
+                BigDecimal weight = totalWeight.divide(BigDecimal.valueOf(pieces), generalRounding);
 
-                for (int z = 1; z <= totalQuantity; z++) {
-                    double partialQty = pieces > 1 ? 1.000 / pieces : 1;
+                for (int z = 1; z <= totalQuantity.intValue(); z++) {
+                	BigDecimal partialQty = pieces > 1 ? BigDecimal.ONE.divide(BigDecimal.valueOf(pieces), generalRounding) : BigDecimal.ONE;
                     for (long x = 0; x < pieces; x++) {
-                        if (weight >= maxWeight) {
+                        if (weight.compareTo(maxWeight) >= 0) {
                             Map newPackage = new HashMap();
-                            newPackage.put(productId, new Double(partialQty));
+                            newPackage.put(productId, partialQty);
                             packages.add(newPackage);
-                        } else if (totalWeight > 0) {
+                        } else if (totalWeight.compareTo(BigDecimal.ZERO) > 0) {
                             // create the first package
                             if (packages.size() == 0) {
                                 packages.add(new HashMap());
@@ -254,18 +257,18 @@
                             for (int pi = 0; pi < packageSize; pi++) {
                                 if (!addedToPackage) {
                                     Map packageMap = (Map) packages.get(pi);
-                                    double packageWeight = calcPackageWeight(dctx, packageMap, shippableItemInfo, weight);
-                                    if (packageWeight <= maxWeight) {
-                                        Double qtyD = (Double) packageMap.get(productId);
-                                        double qty = qtyD == null ? 0 : qtyD.doubleValue();
-                                        packageMap.put(productId, new Double(qty + partialQty));
+                                    BigDecimal packageWeight = calcPackageWeight(dctx, packageMap, shippableItemInfo, weight);
+                                    if (packageWeight.compareTo(maxWeight) <= 0) {
+                                    	BigDecimal qty = (BigDecimal) packageMap.get(productId);
+                                        qty = qty == null ? BigDecimal.ZERO : qty;
+                                        packageMap.put(productId, qty.add(partialQty));
                                         addedToPackage = true;
                                     }
                                 }
                             }
                             if (!addedToPackage) {
                                 Map packageMap = new HashMap();
-                                packageMap.put(productId, new Double(partialQty));
+                                packageMap.put(productId, partialQty);
                                 packages.add(packageMap);
                             }
                         }
@@ -276,10 +279,10 @@
         return packages;
     }
 
-    private static double calcPackageWeight(DispatchContext dctx, Map packageMap, List shippableItemInfo, double additionalWeight) {
+    private static BigDecimal calcPackageWeight(DispatchContext dctx, Map packageMap, List shippableItemInfo, BigDecimal additionalWeight) {
 
         LocalDispatcher dispatcher = dctx.getDispatcher();
-        double totalWeight = 0.00;
+        BigDecimal totalWeight = BigDecimal.ZERO;
         String defaultWeightUomId = UtilProperties.getPropertyValue("shipment.properties", "shipment.default.weight.uom");
         if (UtilValidate.isEmpty(defaultWeightUomId)) {
             Debug.logWarning("No shipment.default.weight.uom set in shipment.properties, setting it to WT_oz for USPS", module);
@@ -290,8 +293,8 @@
         while (i.hasNext()) {
             String productId = (String) i.next();
             Map productInfo = getProductItemInfo(shippableItemInfo, productId);
-            double productWeight = ((Double) productInfo.get("weight")).doubleValue();
-            double quantity = ((Double) packageMap.get(productId)).doubleValue();
+            BigDecimal productWeight = (BigDecimal) productInfo.get("weight");
+            BigDecimal quantity = (BigDecimal) packageMap.get(productId);
 
             // DLK - I'm not sure if this line is working. shipment_package seems to leave this value null so???
             String weightUomId = (String) productInfo.get("weight_uom_id");
@@ -306,23 +309,23 @@
                 // attempt a conversion to pounds
                 Map result = new HashMap();
                 try {
-                    result = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", weightUomId, "uomIdTo", "WT_lb", "originalValue", new Double(productWeight)));
+                    result = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", weightUomId, "uomIdTo", "WT_lb", "originalValue", productWeight));
                 } catch (GenericServiceException ex) {
                     Debug.logError(ex, module);
                 }
                     
                 if (result.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_SUCCESS) && result.get("convertedValue") != null) {
-                    productWeight = ((Double) result.get("convertedValue")).doubleValue();
+                    productWeight = (BigDecimal) result.get("convertedValue");
                 } else {
                     Debug.logError("Unsupported weightUom [" + weightUomId + "] for calcPackageWeight running productId " + productId + ", could not find a conversion factor to WT_lb",module);
                 }
                     
             }
 
-            totalWeight += (productWeight * quantity);
+            totalWeight = totalWeight.add(productWeight.multiply(quantity));
         }
         Debug.logInfo("Package Weight : " + String.valueOf(totalWeight) + " lbs.", module);
-        return totalWeight + additionalWeight;
+        return totalWeight.add(additionalWeight);
     }
 
     // lifted from UpsServices with no changes - 2004.09.06 JFE
@@ -866,7 +869,7 @@
                 return ServiceUtil.returnError("No packages found for ShipmentRouteSegment " + srsKeyString);
             }
 
-            double actualTransportCost = 0;
+            BigDecimal actualTransportCost = BigDecimal.ZERO;
 
             String carrierDeliveryZone = null;
             String carrierRestrictionCodes = null;
@@ -901,9 +904,9 @@
                     return ServiceUtil.returnError("weight not found for ShipmentPackage " + spKeyString);
                 }
 
-                double weight = 0;
+                BigDecimal weight = BigDecimal.ZERO;
                 try {
-                    weight = Double.parseDouble(weightStr);
+                    weight = new BigDecimal(weightStr);
                 } catch (NumberFormatException nfe) {
                     nfe.printStackTrace(); // TODO: handle exception
                 }
@@ -916,13 +919,13 @@
                     // attempt a conversion to pounds
                     Map result = new HashMap();
                     try {
-                        result = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", weightUomId, "uomIdTo", "WT_lb", "originalValue", new Double(weight)));
+                        result = dispatcher.runSync("convertUom", UtilMisc.<String, Object>toMap("uomId", weightUomId, "uomIdTo", "WT_lb", "originalValue", weight));
                     } catch (GenericServiceException ex) {
                         return ServiceUtil.returnError(ex.getMessage());
                     }
                     
                     if (result.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_SUCCESS) && result.get("convertedValue") != null) {
-                        weight *= ((Double) result.get("convertedValue")).doubleValue();
+                        weight = weight.multiply((BigDecimal) result.get("convertedValue"));
                     } else {
                         return ServiceUtil.returnError("Unsupported weightUom [" + weightUomId + "] for ShipmentPackage " +
                                 spKeyString + ", could not find a conversion factor for WT_lb");
@@ -930,8 +933,8 @@
                     
                 }
 
-                double weightPounds = Math.floor(weight);
-                double weightOunces = Math.ceil(weight * 16 % 16);
+                BigDecimal weightPounds = weight.setScale(0, BigDecimal.ROUND_FLOOR);
+                BigDecimal weightOunces = weight.multiply(new BigDecimal("16")).remainder(new BigDecimal("16")).setScale(0, BigDecimal.ROUND_CEILING);
 
                 DecimalFormat df = new DecimalFormat("#");
                 UtilXml.addChildElementValue(packageElement, "Pounds", df.format(weightPounds), requestDocument);
@@ -997,13 +1000,13 @@
                             "missing or empty Postage element");
                 }
 
-                double postage = 0;
+                BigDecimal postage = BigDecimal.ZERO;
                 try {
-                    postage = Double.parseDouble(postageString);
+                    postage = new BigDecimal(postageString);
                 } catch (NumberFormatException nfe) {
                     nfe.printStackTrace(); // TODO: handle exception
                 }
-                actualTransportCost += postage;
+                actualTransportCost = actualTransportCost.add(postage);
 
                 shipmentPackageRouteSeg.setString("packageTransportCost", postageString);
                 shipmentPackageRouteSeg.store();
@@ -1187,9 +1190,9 @@
                     return ServiceUtil.returnError("weight not found for ShipmentPackage " + spKeyString);
                 }
 
-                double weight = 0;
+                BigDecimal weight = BigDecimal.ZERO;
                 try {
-                    weight = Double.parseDouble(weightStr);
+                    weight = new BigDecimal(weightStr);
                 } catch (NumberFormatException nfe) {
                     nfe.printStackTrace(); // TODO: handle exception
                 }
@@ -1207,11 +1210,11 @@
                         return ServiceUtil.returnError("Unsupported weightUom [" + weightUomId + "] for ShipmentPackage " +
                                 spKeyString + ", could not find a conversion factor for WT_oz");
                     }
-                    weight *= uomConversion.getDouble("conversionFactor").doubleValue();
+                    weight = weight.multiply(uomConversion.getBigDecimal("conversionFactor"));
                 }
 
                 DecimalFormat df = new DecimalFormat("#");
-                UtilXml.addChildElementValue(requestElement, "WeightInOunces", df.format(Math.ceil(weight)), requestDocument);
+                UtilXml.addChildElementValue(requestElement, "WeightInOunces", df.format(weight.setScale(0, BigDecimal.ROUND_CEILING)), requestDocument);
 
                 UtilXml.addChildElementValue(requestElement, "ServiceType", serviceType, requestDocument);
                 UtilXml.addChildElementValue(requestElement, "ImageType", "TIF", requestDocument);

Modified: ofbiz/branches/typecheckcleanup200810/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductQuickAdmin.groovy
URL: http://svn.apache.org/viewvc/ofbiz/branches/typecheckcleanup200810/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductQuickAdmin.groovy?rev=721986&r1=721985&r2=721986&view=diff
==============================================================================
--- ofbiz/branches/typecheckcleanup200810/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductQuickAdmin.groovy (original)
+++ ofbiz/branches/typecheckcleanup200810/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductQuickAdmin.groovy Sun Nov 30 22:51:11 2008
@@ -93,10 +93,10 @@
 featureSalesThru = [:];
 featureThruDate = [:];
 selFeatureDesc = [:];
-Double floz = null;
-Double ml = null;
-Double ntwt = null;
-Double grams = null;
+BigDecimal floz = null;
+BigDecimal ml = null;
+BigDecimal ntwt = null;
+BigDecimal grams = null;
 String hazmat = "nbsp;";
 String salesthru = null;
 String thrudate = null;
@@ -169,7 +169,7 @@
     prodFeaturesFiltered = EntityUtil.filterByAnd(productFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'VLIQ_ozUS']);
     if (prodFeaturesFiltered) {
         try {
-            floz = ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified");
+            floz = ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified");
         } catch (Exception e) {
             floz = null;
         }
@@ -178,7 +178,7 @@
     prodFeaturesFiltered = EntityUtil.filterByAnd(productFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'VLIQ_ml']);
     if (prodFeaturesFiltered) {
         try {
-            ml = ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified");
+            ml = ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified");
         } catch (Exception e) {
             ml = null;
         }
@@ -187,7 +187,7 @@
     prodFeaturesFiltered = EntityUtil.filterByAnd(productFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'WT_g']);
     if (prodFeaturesFiltered) {
         try {
-            grams = ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified");
+            grams = ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified");
         } catch (Exception e) {
             grams = null;
         }
@@ -196,7 +196,7 @@
     prodFeaturesFiltered = EntityUtil.filterByAnd(productFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'WT_oz']);
     if (prodFeaturesFiltered) {
         try {
-            ntwt = ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified");
+            ntwt = ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified");
         } catch (Exception e) {
             ntwt = null;
         }
@@ -239,19 +239,19 @@
             assocProductFeatureAndAppls = assocProduct.getRelated("ProductFeatureAndAppl");
             prodFeaturesFiltered = EntityUtil.filterByAnd(assocProductFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'VLIQ_ozUS']);
             if (prodFeaturesFiltered) {
-                featureFloz.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified"));
+                featureFloz.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified"));
             }
             prodFeaturesFiltered = EntityUtil.filterByAnd(assocProductFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'VLIQ_ml']);
             if (prodFeaturesFiltered) {
-                featureMl.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified"));
+                featureMl.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified"));
             }
             prodFeaturesFiltered = EntityUtil.filterByAnd(assocProductFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'WT_g']);
             if (prodFeaturesFiltered) {
-                featureGrams.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified"));
+                featureGrams.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified"));
             }
             prodFeaturesFiltered = EntityUtil.filterByAnd(assocProductFeatureAndAppls, [productFeatureTypeId : 'AMOUNT', uomId : 'WT_oz']);
             if (prodFeaturesFiltered) {
-                featureNtwt.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getDouble("numberSpecified"));
+                featureNtwt.put(assocProduct.productId, ((GenericValue)prodFeaturesFiltered.get(0)).getBigDecimal("numberSpecified"));
             }
             prodFeaturesFiltered = EntityUtil.filterByAnd(assocProductFeatureAndAppls, [productFeatureTypeId : 'HAZMAT']);
             if (prodFeaturesFiltered) {