Author: mbrohl
Date: Sat Dec 9 17:29:12 2017
New Revision: 1817636
URL: http://svn.apache.org/viewvc?rev=1817636&view=rev
Log:
Improved: Fixing defects reported by FindBugs, package
org.apache.ofbiz.order.shoppingcart.product.
(OFBIZ-9781)
Additionally removed the private method findAdjustment which was not
used anywhere in the code.
Thanks Julian Leichert for reporting and providing the patch.
Modified:
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductDisplayWorker.java
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
Modified:
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductDisplayWorker.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductDisplayWorker.java?rev=1817636&r1=1817635&r2=1817636&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductDisplayWorker.java
(original)
+++
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductDisplayWorker.java
Sat Dec 9 17:29:12 2017
@@ -325,6 +325,15 @@ public final class ProductDisplayWorker
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (descending ? 1231 : 1237);
+ result = prime * result + ((orderByMap == null) ? 0 :
orderByMap.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(java.lang.Object obj) {
if ((obj != null) && (obj instanceof ProductByMapComparator)) {
ProductByMapComparator that = (ProductByMapComparator) obj;
Modified:
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java?rev=1817636&r1=1817635&r2=1817636&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
(original)
+++
ofbiz/ofbiz-framework/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
Sat Dec 9 17:29:12 2017
@@ -31,6 +31,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletRequest;
@@ -115,45 +116,43 @@ public final class ProductPromoWorker {
return productPromos;
}
- if (productStore != null) {
- Iterator<GenericValue> productStorePromoAppls =
UtilMisc.toIterator(EntityUtil.filterByDate(productStore.getRelated("ProductStorePromoAppl",
UtilMisc.toMap("productStoreId", productStoreId),
UtilMisc.toList("sequenceNum"), true), true));
- while (productStorePromoAppls != null &&
productStorePromoAppls.hasNext()) {
- GenericValue productStorePromoAppl =
productStorePromoAppls.next();
- if
(UtilValidate.isNotEmpty(productStorePromoAppl.getString("manualOnly")) &&
"Y".equals(productStorePromoAppl.getString("manualOnly"))) {
- // manual only promotions are not automatically
evaluated (they must be explicitly selected by the user)
- if (Debug.verboseOn()) Debug.logVerbose("Skipping
promotion with id [" + productStorePromoAppl.getString("productPromoId") + "]
because it is applied to the store with ID " + productStoreId + " as a manual
only promotion.", module);
- continue;
- }
- GenericValue productPromo =
productStorePromoAppl.getRelatedOne("ProductPromo", true);
- List<GenericValue> productPromoRules =
productPromo.getRelated("ProductPromoRule", null, null, true);
+ Iterator<GenericValue> productStorePromoAppls =
UtilMisc.toIterator(EntityUtil.filterByDate(productStore.getRelated("ProductStorePromoAppl",
UtilMisc.toMap("productStoreId", productStoreId),
UtilMisc.toList("sequenceNum"), true), true));
+ while (productStorePromoAppls != null &&
productStorePromoAppls.hasNext()) {
+ GenericValue productStorePromoAppl =
productStorePromoAppls.next();
+ if
(UtilValidate.isNotEmpty(productStorePromoAppl.getString("manualOnly")) &&
"Y".equals(productStorePromoAppl.getString("manualOnly"))) {
+ // manual only promotions are not automatically evaluated
(they must be explicitly selected by the user)
+ if (Debug.verboseOn()) Debug.logVerbose("Skipping
promotion with id [" + productStorePromoAppl.getString("productPromoId") + "]
because it is applied to the store with ID " + productStoreId + " as a manual
only promotion.", module);
+ continue;
+ }
+ GenericValue productPromo =
productStorePromoAppl.getRelatedOne("ProductPromo", true);
+ List<GenericValue> productPromoRules =
productPromo.getRelated("ProductPromoRule", null, null, true);
- if (productPromoRules != null) {
- Iterator<GenericValue> promoRulesItr =
productPromoRules.iterator();
+ if (productPromoRules != null) {
+ Iterator<GenericValue> promoRulesItr =
productPromoRules.iterator();
- while (condResult && promoRulesItr != null &&
promoRulesItr.hasNext()) {
- GenericValue promoRule = promoRulesItr.next();
- Iterator<GenericValue> productPromoConds =
UtilMisc.toIterator(promoRule.getRelated("ProductPromoCond", null,
UtilMisc.toList("productPromoCondSeqId"), true));
-
- while (condResult && productPromoConds != null &&
productPromoConds.hasNext()) {
- GenericValue productPromoCond =
productPromoConds.next();
-
- // evaluate the party related conditions; so
we don't show the promo if it doesn't apply.
- if
("PPIP_PARTY_ID".equals(productPromoCond.getString("inputParamEnumId"))) {
- condResult =
checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
- } else if
("PPIP_PARTY_GRP_MEM".equals(productPromoCond.getString("inputParamEnumId"))) {
- condResult =
checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
- } else if
("PPIP_PARTY_CLASS".equals(productPromoCond.getString("inputParamEnumId"))) {
- condResult =
checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
- } else if
("PPIP_ROLE_TYPE".equals(productPromoCond.getString("inputParamEnumId"))) {
- condResult =
checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
- }
+ while (condResult && promoRulesItr != null &&
promoRulesItr.hasNext()) {
+ GenericValue promoRule = promoRulesItr.next();
+ Iterator<GenericValue> productPromoConds =
UtilMisc.toIterator(promoRule.getRelated("ProductPromoCond", null,
UtilMisc.toList("productPromoCondSeqId"), true));
+
+ while (condResult && productPromoConds != null &&
productPromoConds.hasNext()) {
+ GenericValue productPromoCond =
productPromoConds.next();
+
+ // evaluate the party related conditions; so we
don't show the promo if it doesn't apply.
+ if
("PPIP_PARTY_ID".equals(productPromoCond.getString("inputParamEnumId"))) {
+ condResult = checkCondition(productPromoCond,
cart, delegator, dispatcher, nowTimestamp);
+ } else if
("PPIP_PARTY_GRP_MEM".equals(productPromoCond.getString("inputParamEnumId"))) {
+ condResult = checkCondition(productPromoCond,
cart, delegator, dispatcher, nowTimestamp);
+ } else if
("PPIP_PARTY_CLASS".equals(productPromoCond.getString("inputParamEnumId"))) {
+ condResult = checkCondition(productPromoCond,
cart, delegator, dispatcher, nowTimestamp);
+ } else if
("PPIP_ROLE_TYPE".equals(productPromoCond.getString("inputParamEnumId"))) {
+ condResult = checkCondition(productPromoCond,
cart, delegator, dispatcher, nowTimestamp);
}
}
- if (!condResult) productPromo = null;
}
- if (productPromo != null) productPromos.add(productPromo);
+ if (!condResult) productPromo = null;
}
+ if (productPromo != null) productPromos.add(productPromo);
}
} catch (GenericEntityException e) {
Debug.logError(e, module);
@@ -380,7 +379,7 @@ public final class ProductPromoWorker {
Debug.logError(e, "Number not formatted correctly in promotion
rules, not completed...", module);
} catch (GenericEntityException e) {
Debug.logError(e, "Error looking up promotion data while doing
promotions", module);
- } catch (Exception e) {
+ } catch (GeneralException e) {
Debug.logError(e, "Error running promotions, will ignore: " +
e.toString(), module);
}
}
@@ -505,9 +504,7 @@ public final class ProductPromoWorker {
Long useLimitPerOrder = productPromo.getLong("useLimitPerOrder");
if (useLimitPerOrder != null) {
- if (candidateUseLimit == null || candidateUseLimit.longValue() >
useLimitPerOrder.longValue()) {
- candidateUseLimit = useLimitPerOrder;
- }
+ candidateUseLimit = useLimitPerOrder;
}
Long useLimitPerCustomer = productPromo.getLong("useLimitPerCustomer");
@@ -565,9 +562,7 @@ public final class ProductPromoWorker {
productPromoCustomerUseSize =
EntityQuery.use(delegator).from("ProductPromoUseCheck").where(checkCondition).queryCount();
}
long perCustomerThisOrder = codeUseLimitPerCustomer.longValue() -
productPromoCustomerUseSize;
- if (codeUseLimit == null || codeUseLimit.longValue() >
perCustomerThisOrder) {
- codeUseLimit = Long.valueOf(perCustomerThisOrder);
- }
+ codeUseLimit = Long.valueOf(perCustomerThisOrder);
}
Long codeUseLimitPerCode = productPromoCode.getLong("useLimitPerCode");
@@ -877,15 +872,15 @@ public final class ProductPromoWorker {
private static Map<ShoppingCartItem,BigDecimal>
prepareDeltaProductUsageInfoMap(Map<ShoppingCartItem,BigDecimal> oldMap,
Map<ShoppingCartItem,BigDecimal> newMap) {
Map<ShoppingCartItem,BigDecimal> deltaUsageInfoMap = new
HashMap<ShoppingCartItem, BigDecimal>(newMap);
- Iterator<ShoppingCartItem> cartLines = oldMap.keySet().iterator();
- while (cartLines.hasNext()) {
- ShoppingCartItem cartLine = cartLines.next();
- BigDecimal oldUsed = oldMap.get(cartLine);
- BigDecimal newUsed = newMap.get(cartLine);
+
+ for (Entry<ShoppingCartItem, BigDecimal> entry : oldMap.entrySet()) {
+ ShoppingCartItem key = entry.getKey();
+ BigDecimal oldUsed = entry.getValue();
+ BigDecimal newUsed = entry.getValue();
if (newUsed.compareTo(oldUsed) > 0) {
- deltaUsageInfoMap.put(cartLine, newUsed.add(oldUsed.negate()));
+ deltaUsageInfoMap.put(key, newUsed.add(oldUsed.negate()));
} else {
- deltaUsageInfoMap.remove(cartLine);
+ deltaUsageInfoMap.remove(key);
}
}
return deltaUsageInfoMap;
@@ -899,8 +894,8 @@ public final class ProductPromoWorker {
String shippingMethod = "";
String carrierPartyId = "";
if (otherValue != null && otherValue.contains("@")) {
- carrierPartyId = otherValue.substring(0, otherValue.indexOf("@"));
- shippingMethod = otherValue.substring(otherValue.indexOf("@")+1);
+ carrierPartyId = otherValue.substring(0, otherValue.indexOf('@'));
+ shippingMethod = otherValue.substring(otherValue.indexOf('@') + 1);
otherValue = "";
}
String partyId = cart.getPartyId();
@@ -1462,11 +1457,9 @@ public final class ProductPromoWorker {
try {
// get the quantity in cart for inventory check
BigDecimal quantityAlreadyInCart = BigDecimal.ZERO;
- if (cart != null) {
- List<ShoppingCartItem> matchingItems =
cart.findAllCartItems(productId);
- for (ShoppingCartItem item : matchingItems) {
- quantityAlreadyInCart =
quantityAlreadyInCart.add(item.getQuantity());
- }
+ List<ShoppingCartItem> matchingItems =
cart.findAllCartItems(productId);
+ for (ShoppingCartItem item : matchingItems) {
+ quantityAlreadyInCart =
quantityAlreadyInCart.add(item.getQuantity());
}
Map<String, Object> invReqResult =
dispatcher.runSync("isStoreInventoryAvailable", UtilMisc.<String,
Object>toMap("productStoreId", productStoreId, "productId", productId,
"product", product, "quantity", quantity.add(quantityAlreadyInCart)));
if (ServiceUtil.isError(invReqResult)) {
@@ -1487,9 +1480,7 @@ public final class ProductPromoWorker {
// support multiple gift options if products are attached to
the action, or if the productId on the action is a virtual product
Set<String> productIds =
ProductPromoWorker.getPromoRuleActionProductIds(productPromoAction, delegator,
nowTimestamp);
- if (productIds != null) {
- optionProductIds.addAll(productIds);
- }
+ optionProductIds.addAll(productIds);
// make sure these optionProducts have inventory...
Iterator<String> optionProductIdIter =
optionProductIds.iterator();
@@ -1499,12 +1490,11 @@ public final class ProductPromoWorker {
try {
// get the quantity in cart for inventory check
BigDecimal quantityAlreadyInCart = BigDecimal.ZERO;
- if (cart != null) {
- List<ShoppingCartItem> matchingItems =
cart.findAllCartItems(optionProductId);
- for (ShoppingCartItem item : matchingItems) {
- quantityAlreadyInCart =
quantityAlreadyInCart.add(item.getQuantity());
- }
+ List<ShoppingCartItem> matchingItems =
cart.findAllCartItems(optionProductId);
+ for (ShoppingCartItem item : matchingItems) {
+ quantityAlreadyInCart =
quantityAlreadyInCart.add(item.getQuantity());
}
+
Map<String, Object> invReqResult =
dispatcher.runSync("isStoreInventoryAvailable", UtilMisc.<String,
Object>toMap("productStoreId", productStoreId, "productId", optionProductId,
"product", product, "quantity", quantity.add(quantityAlreadyInCart)));
if (ServiceUtil.isError(invReqResult)) {
Debug.logError("Error calling
isStoreInventoryAvailable service, result is: " + invReqResult, module);
@@ -1553,16 +1543,14 @@ public final class ProductPromoWorker {
ShoppingCartItem gwpItem = null;
try {
// just leave the prodCatalogId null, this line won't be
associated with a catalog
- String prodCatalogId = null;
- gwpItem = ShoppingCartItem.makeItem(null, product, null,
quantity, null, null, null, null, null, null, null, null, prodCatalogId, null,
null, null, dispatcher, cart, Boolean.FALSE, Boolean.TRUE, null, Boolean.FALSE,
Boolean.FALSE);
+ gwpItem = ShoppingCartItem.makeItem(null, product, null,
quantity, null, null, null, null, null, null, null, null, null, null, null,
null, dispatcher, cart, Boolean.FALSE, Boolean.TRUE, null, Boolean.FALSE,
Boolean.FALSE);
if (optionProductIds.size() > 0) {
gwpItem.setAlternativeOptionProductIds(optionProductIds);
} else {
gwpItem.setAlternativeOptionProductIds(null);
}
} catch (CartItemModifyException e) {
- int gwpItemIndex = cart.getItemIndex(gwpItem);
- cart.removeCartItem(gwpItemIndex, dispatcher);
+ Debug.logError(e.getMessage(), module);
throw e;
}
@@ -1948,19 +1936,6 @@ public final class ProductPromoWorker {
return null;
}
- private static Integer findAdjustment(GenericValue productPromoAction,
List<GenericValue> adjustments) {
- for (int i = 0; i < adjustments.size(); i++) {
- GenericValue checkOrderAdjustment = adjustments.get(i);
-
- if
(productPromoAction.getString("productPromoId").equals(checkOrderAdjustment.get("productPromoId"))
&&
-
productPromoAction.getString("productPromoRuleId").equals(checkOrderAdjustment.get("productPromoRuleId"))
&&
-
productPromoAction.getString("productPromoActionSeqId").equals(checkOrderAdjustment.get("productPromoActionSeqId")))
{
- return Integer.valueOf(i);
- }
- }
- return null;
- }
-
public static Set<String> getPromoRuleCondProductIds(GenericValue
productPromoCond, Delegator delegator, Timestamp nowTimestamp) throws
GenericEntityException {
// get a cached list for the whole promo and filter it as needed, this
for better efficiency in caching
List<GenericValue> productPromoCategoriesAll =
EntityQuery.use(delegator).from("ProductPromoCategory").where("productPromoId",
productPromoCond.get("productPromoId")).cache(true).queryList();
@@ -2089,12 +2064,6 @@ public final class ProductPromoWorker {
String andGroupId =
productPromoCategory.getString("andGroupId");
if ("_NA_".equals(andGroupId)) {
productCategoryIds.addAll(tempCatIdSet);
- } else {
- List<Set<String>> catIdSetList =
productCategoryGroupSetListMap.get(andGroupId);
- if (catIdSetList == null) {
- catIdSetList = new LinkedList<Set<String>>();
- }
- catIdSetList.add(tempCatIdSet);
}
}
}
@@ -2144,7 +2113,7 @@ public final class ProductPromoWorker {
firstProductIdSet.retainAll(productIdSet);
}
- if (firstProductIdSet.size() >= 0) {
+ if (!firstProductIdSet.isEmpty()) {
if (include) {
productIds.addAll(firstProductIdSet);
} else {