Author: jonesde
Date: Fri Jan 19 12:32:58 2007 New Revision: 497944 URL: http://svn.apache.org/viewvc?view=rev&rev=497944 Log: Added orderByFields feature to the getProductCategoryAndLimitedMembers entity, which also intelligently supports using the ProductCategoryAndMember view entity when needed rather than just the ProductCategoryMember entity Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/categorydetail.bsh ofbiz/trunk/applications/product/servicedef/services_view.xml ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/categorydetail.bsh URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/categorydetail.bsh?view=diff&rev=497944&r1=497943&r2=497944 ============================================================================== --- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/categorydetail.bsh (original) +++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/categorydetail.bsh Fri Jan 19 12:32:58 2007 @@ -1,7 +1,4 @@ /* - * - * Copyright 2001-2006 The Apache Software Foundation - * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at @@ -16,7 +13,7 @@ */ /* - * This script is also referenced by the ecommerce's screens and + * NOTE: This script is also referenced by the ecommerce's screens and * should not contain order component's specific code. */ @@ -51,6 +48,7 @@ "defaultViewSize", defaultViewSize, "limitView", limitView); andMap.put("prodCatalogId", currentCatalogId); andMap.put("checkViewAllow", Boolean.TRUE); +andMap.put("orderByFields", UtilMisc.toList("sequenceNum", "productId")); catResult = dispatcher.runSync("getProductCategoryAndLimitedMembers", andMap); productCategory = catResult.get("productCategory"); Modified: ofbiz/trunk/applications/product/servicedef/services_view.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_view.xml?view=diff&rev=497944&r1=497943&r2=497944 ============================================================================== --- ofbiz/trunk/applications/product/servicedef/services_view.xml (original) +++ ofbiz/trunk/applications/product/servicedef/services_view.xml Fri Jan 19 12:32:58 2007 @@ -126,6 +126,7 @@ <attribute name="viewSizeString" type="String" mode="IN" optional="true"/> <attribute name="useCacheForMembers" type="Boolean" mode="IN" optional="true"/> <attribute name="activeOnly" type="Boolean" mode="IN" optional="true"/> + <attribute name="orderByFields" type="List" mode="IN" optional="true"/> <attribute name="productCategory" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/> <attribute name="productCategoryMembers" type="java.util.Collection" mode="OUT" optional="true"/> <!-- this list will only contain the limited members if limitView=true --> <attribute name="viewIndex" type="Integer" mode="OUT" optional="false"/> <!-- this is a 1 based index, ie the first results are in index 1 --> 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?view=diff&rev=497944&r1=497943&r2=497944 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java Fri Jan 19 12:32:58 2007 @@ -38,6 +38,7 @@ import org.ofbiz.entity.condition.EntityConditionList; import org.ofbiz.entity.condition.EntityExpr; import org.ofbiz.entity.condition.EntityOperator; +import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.util.EntityFindOptions; import org.ofbiz.entity.util.EntityListIterator; import org.ofbiz.entity.util.EntityUtil; @@ -146,6 +147,32 @@ String productCategoryId = (String) context.get("productCategoryId"); boolean limitView = ((Boolean) context.get("limitView")).booleanValue(); int defaultViewSize = ((Integer) context.get("defaultViewSize")).intValue(); + + List orderByFields = (List) context.get("orderByFields"); + if (orderByFields == null || orderByFields.size() == 0) { + orderByFields = FastList.newInstance(); + orderByFields.add("sequenceNum"); + orderByFields.add("productId"); + } + + // allow orderByFields to contain fields from the Product entity, if there are such fields + String entityName = "ProductCategoryMember"; + ModelEntity productModel = delegator.getModelEntity("Product"); + ModelEntity productCategoryMemberModel = delegator.getModelEntity("ProductCategoryMember"); + Iterator orderByFieldIter = orderByFields.iterator(); + while (orderByFieldIter.hasNext()) { + String orderByField = (String) orderByFieldIter.next(); + if (!productCategoryMemberModel.isField(orderByField)) { + if (productModel.isField(orderByField)) { + entityName = "ProductCategoryAndMember"; + // that's what we wanted to find out, so we can quit now + break; + } else { + // ahh!! bad field name, don't worry, it will blow up in the query + } + } + } + String prodCatalogId = (String) context.get("prodCatalogId"); @@ -192,7 +219,7 @@ if (productCategory != null) { try { if (useCacheForMembers) { - productCategoryMembers = productCategory.getRelatedCache("ProductCategoryMember", null, UtilMisc.toList("sequenceNum")); + productCategoryMembers = productCategory.getRelatedCache(entityName, null, orderByFields); if (activeOnly) { productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true); } @@ -218,7 +245,7 @@ // set distinct on so we only get one row per order EntityFindOptions findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true); // using list iterator - EntityListIterator pli = delegator.findListIteratorByCondition("ProductCategoryMember", mainCond, null, null, UtilMisc.toList("sequenceNum", "productId"), findOpts); + EntityListIterator pli = delegator.findListIteratorByCondition(entityName, mainCond, null, null, orderByFields, findOpts); // get the partial list for this page if (limitView) { |
Free forum by Nabble | Edit this page |