You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2010/06/01 23:58:06 UTC
svn commit: r950271 - in
/ofbiz/trunk/applications/product/src/org/ofbiz/product/category:
CategoryServices.java CategoryWorker.java
Author: doogie
Date: Tue Jun 1 21:58:06 2010
New Revision: 950271
URL: http://svn.apache.org/viewvc?rev=950271&view=rev
Log:
Revert wrongly committed 950264
Modified:
ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java
ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryWorker.java
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java?rev=950271&r1=950270&r2=950271&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java Tue Jun 1 21:58:06 2010
@@ -264,7 +264,10 @@ public class CategoryServices {
if (productCategory != null) {
try {
if (useCacheForMembers) {
- EntityCondition lookupCondition = EntityCondition.makeCondition(UtilMisc.toMap("productCategoryId", productCategoryId));
+ productCategoryMembers = delegator.findByAndCache(entityName, UtilMisc.toMap("productCategoryId", productCategoryId), orderByFields);
+ if (activeOnly) {
+ productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true);
+ }
List<EntityCondition> filterConditions = FastList.newInstance();
if (introductionDateLimit != null) {
EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("introductionDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("introductionDate", EntityOperator.LESS_THAN_EQUAL_TO, introductionDateLimit));
@@ -274,19 +277,14 @@ public class CategoryServices {
EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("releaseDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("releaseDate", EntityOperator.LESS_THAN_EQUAL_TO, releaseDateLimit));
filterConditions.add(condition);
}
+ if (!filterConditions.isEmpty()) {
+ productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, EntityCondition.makeCondition(filterConditions, EntityOperator.AND));
+ }
// filter out the view allow before getting the sublist
if (UtilValidate.isNotEmpty(viewProductCategoryId)) {
- productCategoryMembers = CategoryWorker.filterProductsInCategory(delegator, lookupCondition, orderByFields, activeOnly, filterConditions, viewProductCategoryId);
+ productCategoryMembers = CategoryWorker.filterProductsInCategory(delegator, productCategoryMembers, viewProductCategoryId);
listSize = productCategoryMembers.size();
- } else {
- productCategoryMembers = delegator.findList(entityName, lookupCondition, null, orderByFields, null, true);
- if (activeOnly) {
- productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true);
- }
- if (!filterConditions.isEmpty()) {
- productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, EntityCondition.makeCondition(filterConditions, EntityOperator.AND));
- }
}
// set the index and size
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryWorker.java?rev=950271&r1=950270&r2=950271&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryWorker.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryWorker.java Tue Jun 1 21:58:06 2010
@@ -18,20 +18,15 @@
*******************************************************************************/
package org.ofbiz.product.category;
-import java.sql.Timestamp;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javolution.util.FastList;
-import javolution.util.FastMap;
-import javolution.util.FastSet;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilDateTime;
@@ -379,171 +374,20 @@ public class CategoryWorker {
}
public static List<GenericValue> filterProductsInCategory(Delegator delegator, List<GenericValue> valueObjects, String productCategoryId, String productIdFieldName) throws GenericEntityException {
- if (valueObjects == null) return null;
- if (productCategoryId == null) return FastList.newInstance();
-
- EntityCondition productCategoryIdCondition = EntityCondition.makeCondition("productCategoryId", EntityOperator.EQUALS, productCategoryId);
- Iterator<GenericValue> it = valueObjects.iterator();
- Set<String> allowedProductIds = FastSet.newInstance();
- Map<String, Set<String>> variants = FastMap.newInstance();
- Timestamp now = UtilDateTime.nowTimestamp();
- while (it.hasNext()) {
- Set<String> lookupProductIds = FastSet.newInstance();
- while (lookupProductIds.size() < 100 && it.hasNext()) {
- GenericValue value = it.next();
- lookupProductIds.add(value.getString("productId"));
- }
- EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("productId", EntityOperator.IN, lookupProductIds), EntityOperator.AND, productCategoryIdCondition);
- //Debug.logInfo("query(ProductAndCategoryMember)->" + condition, module);
- List<GenericValue> subProducts = delegator.findList("ProductAndCategoryMember", condition, null, null, null, true);
- for (GenericValue subProduct: subProducts) {
- String productId = subProduct.getString("productId");
- if (EntityUtil.isValueActive(subProduct, now)) {
- allowedProductIds.add(productId);
- variants.remove(productId);
- } else if ("Y".equals(subProduct.get("isVariant"))) {
- variants.put(productId, null);
- }
- }
- }
+ List<GenericValue> newList = FastList.newInstance();
- return filterVariantsInCategory(delegator, now, productCategoryIdCondition, valueObjects, allowedProductIds, variants, productIdFieldName);
- }
+ if (productCategoryId == null) return newList;
+ if (valueObjects == null) return null;
- private static List<GenericValue> filterVariantsInCategory(Delegator delegator, Timestamp now, EntityCondition productCategoryIdCondition, List<GenericValue> valueObjects, Set<String> allowedProductIds, Map<String, Set<String>> variants, String productIdFieldName) throws GenericEntityException {
- List<GenericValue> newList = FastList.newInstance();
- EntityCondition assocTypeIdCondition = EntityCondition.makeCondition("productAssocTypeId", EntityOperator.EQUALS, "PRODUCT_VARIANT");
- Map<String, Set<String>> revVariantMap = FastMap.newInstance();
- Map<String, Set<String>> revParentMap = FastMap.newInstance();
- // there may have been multiple rows with a variant's productId,
- // with some of those rows not being active by date, with later
- // rows being active. This would cause the earlier rows to get
- // added to variants, and the later ones to be added to
- // allowed products. Since we only care about finding allowed
- // products, once something is allowed, we no longer need to be
- // concerned about it.
- variants.keySet().removeAll(allowedProductIds);
- while (!variants.isEmpty()) {
- Iterator<Map.Entry<String, Set<String>>> variantIt = variants.entrySet().iterator();
- // this maps from possible variant child id, to original id,
- // from the first loop above; this is so we can finally mark
- // the original product as allowed
- while (variantIt.hasNext()) {
- Map.Entry<String, Set<String>> entry = variantIt.next();
- Set<String> assocParents = entry.getValue();
- if (assocParents == null) {
- // this only happens the first time thru the outer
- // loop.
- UtilMisc.addToSetInMap(entry.getKey(), revVariantMap, entry.getKey());
- entry.setValue(FastSet.<String>newInstance());
- } else if (assocParents.isEmpty()) {
- variantIt.remove();
- } else {
- for (String assocParent: assocParents) {
- UtilMisc.addToSetInMap(entry.getKey(), revVariantMap, assocParent);
- }
- assocParents.clear();
- }
- }
- Iterator<String> variantIdIt = revVariantMap.keySet().iterator();
- while (variantIdIt.hasNext()) {
- Set<String> lookupProductIds = FastSet.newInstance();
- while (variantIdIt.hasNext() && lookupProductIds.size() < 100) {
- lookupProductIds.add(variantIdIt.next());
- }
- // FIXME: use correct productAssocTypeId
- EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("productIdTo", EntityOperator.IN, lookupProductIds), EntityOperator.AND, assocTypeIdCondition);
- Debug.logInfo("query(ProductAndAssoc)->" + condition, module);
- List<GenericValue> assocValues = delegator.findList("ProductAndAssoc", condition, null, null, null, true);
- for (GenericValue assocValue: assocValues) {
- if (!EntityUtil.isValueActive(assocValue, now)) {
- continue;
- }
- String productIdTo = assocValue.getString("productIdTo");
- String parentProductId = assocValue.getString("productId");
- for (String originalProductId: revVariantMap.get(productIdTo)) {
- variants.get(originalProductId).add(parentProductId);
- //allParentProductIds.add(parentProductId);
- UtilMisc.addToSetInMap(originalProductId, revParentMap, parentProductId);
- }
- }
- }
- revVariantMap.clear();
- // at this point, the values in variants contain all the
- // parent productIds. Now do another membership test in
- // the requested productCategory.
- Iterator<String> parentIdIt = revParentMap.keySet().iterator();
- while (parentIdIt.hasNext()) {
- Set<String> lookupProductIds = FastSet.newInstance();
- while (parentIdIt.hasNext() && lookupProductIds.size() < 100) {
- lookupProductIds.add(parentIdIt.next());
- }
- EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("productId", EntityOperator.IN, lookupProductIds), EntityOperator.AND, productCategoryIdCondition);
- Debug.logInfo("query(ProductAndCategoryMember)->" + condition, module);
- List<GenericValue> subProducts = delegator.findList("ProductAndCategoryMember", condition, null, null, null, true);
- for (GenericValue subProduct: subProducts) {
- String productId = subProduct.getString("productId");
- if (EntityUtil.isValueActive(subProduct, now)) {
- // yay, found a membership
- for (String originalProductId: revParentMap.get(productId)) {
- allowedProductIds.add(originalProductId);
- variants.remove(originalProductId);
- }
- } else if ("Y".equals(subProduct.get("isVariant"))) {
- for (String originalProductId: revParentMap.get(productId)) {
- UtilMisc.addToSetInMap(productId, variants, originalProductId);
- }
- }
- }
- }
- revParentMap.clear();
- }
for (GenericValue curValue: valueObjects) {
String productId = curValue.getString(productIdFieldName);
- if (allowedProductIds.contains(productId)) {
+ if (isProductInCategory(delegator, productId, productCategoryId)) {
newList.add(curValue);
}
}
return newList;
}
- public static List<GenericValue> filterProductsInCategory(Delegator delegator, EntityCondition lookupCondition, List<String> orderByFields, boolean activeOnly, List<EntityCondition> filterConditions, String productCategoryId) throws GenericEntityException {
- List<GenericValue> newList = FastList.newInstance();
- if (productCategoryId == null) return newList;
-
- EntityCondition productCategoryIdCondition = EntityCondition.makeCondition("productCategoryId", EntityOperator.EQUALS, productCategoryId);
- EntityCondition assocTypeIdCondition = EntityCondition.makeCondition("productAssocTypeId", EntityOperator.EQUALS, "PRODUCT_VARIANT");
- Set<String> allowedProductIds = FastSet.newInstance();
- Map<String, Set<String>> variants = FastMap.newInstance();
- Map<String, Set<String>> revVariantMap = FastMap.newInstance();
- Map<String, Set<String>> revParentMap = FastMap.newInstance();
- Timestamp now = UtilDateTime.nowTimestamp();
-
- EntityCondition valueCondition = EntityCondition.makeCondition(lookupCondition, EntityOperator.AND, EntityCondition.makeCondition("secondaryProductCategoryId", EntityOperator.EQUALS, productCategoryId));
- //Debug.logInfo("findList(ProductAndCategoryMember, " + valueCondition + ", " + orderByFields + ")", module);
- List<GenericValue> valueObjects = delegator.findList("ProductAndCategoryMemberDouble", valueCondition, null, orderByFields, null, true);
- //Debug.logInfo("valueObjects.size()=" + valueObjects.size(), module);
- if (filterConditions.isEmpty()) {
- valueObjects = EntityUtil.filterByAnd(valueObjects, filterConditions);
- }
- if (activeOnly) {
- valueObjects = EntityUtil.filterByDate(valueObjects, now);
- }
- //Debug.logInfo("valueObjects.size()=" + valueObjects.size(), module);
- Iterator<GenericValue> it = valueObjects.iterator();
- while (it.hasNext()) {
- GenericValue row = it.next();
- String productId = row.getString("productId");
- if (EntityUtil.isValueActive(row, now, "secondaryFromDate", "secondaryThruDate")) {
- allowedProductIds.add(productId);
- } else if ("Y".equals(row.get("isVariant"))) {
- variants.put(productId, null);
- }
- }
- //Debug.logInfo("allowedProductIds.size()=" + allowedProductIds.size(), module);
- return filterVariantsInCategory(delegator, now, productCategoryIdCondition, valueObjects, allowedProductIds, variants, "productId");
- }
-
public static void getCategoryContentWrappers(Map<String, CategoryContentWrapper> catContentWrappers, List<GenericValue> categoryList, HttpServletRequest request) throws GenericEntityException {
if (catContentWrappers == null || categoryList == null) {
return;