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;