Author: ruppert
Date: Thu Apr 5 22:19:37 2007 New Revision: 526058 URL: http://svn.apache.org/viewvc?view=rev&rev=526058 Log: Added ProductFeatureCategory Include and Exclude to advanced search mechanism Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/feature/ParametricSearch.java ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java ofbiz/trunk/applications/product/webapp/catalog/find/advancedsearch.ftl Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/feature/ParametricSearch.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/feature/ParametricSearch.java?view=diff&rev=526058&r1=526057&r2=526058 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/feature/ParametricSearch.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/feature/ParametricSearch.java Thu Apr 5 22:19:37 2007 @@ -226,4 +226,26 @@ return outSb.toString(); } + + /** + * Handles parameters coming in prefixed with "SEARCH_PROD_FEAT_CAT" + * where the parameter value is a productFeatureCategoryId; + * meant to be used with text entry boxes or check-boxes and such + **/ + public static List makeProductFeatureCategoryIdListFromPrefixed(Map parameters) { + List prodFeatureCategoryIdList = FastList.newInstance(); + if (parameters == null) return prodFeatureCategoryIdList; + + Iterator parameterNameIter = parameters.keySet().iterator(); + while (parameterNameIter.hasNext()) { + String parameterName = (String) parameterNameIter.next(); + if (parameterName.startsWith("SEARCH_PROD_FEAT_CAT")) { + String productFeatureCategoryId = (String) parameters.get(parameterName); + if (productFeatureCategoryId != null && productFeatureCategoryId.length() > 0) { + prodFeatureCategoryIdList.add(productFeatureCategoryId); + } + } + } + return prodFeatureCategoryIdList; + } } Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java?view=diff&rev=526058&r1=526057&r2=526058 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java Thu Apr 5 22:19:37 2007 @@ -925,6 +925,78 @@ } } + + public static class ProductFeatureCategoryConstraint extends ProductSearchConstraint { + public static final String constraintName = "ProductFeatureCategory"; + protected String productFeatureCategoryId; + /** This is a tri-state variable: null = Include, true = Exclude, false = AlwaysInclude */ + protected Boolean exclude; + + /** + * + * @param productFeatureCategoryId + * @param exclude This is a tri-state variable: null = Include, true = Exclude, false = AlwaysInclude + */ + public ProductFeatureCategoryConstraint(String productFeatureCategoryId, Boolean exclude) { + this.productFeatureCategoryId = productFeatureCategoryId; + this.exclude = exclude; + } + + public void addConstraint(ProductSearchContext productSearchContext) { + // just add to global sets + if (exclude == null) { + productSearchContext.includeFeatureIds.add(productFeatureCategoryId); + } else if (exclude.equals(Boolean.TRUE)) { + productSearchContext.excludeFeatureIds.add(productFeatureCategoryId); + } else if (exclude.equals(Boolean.FALSE)) { + productSearchContext.alwaysIncludeFeatureIds.add(productFeatureCategoryId); + } + + // add in productSearchConstraint, don't worry about the productSearchResultId or constraintSeqId, those will be fill in later + productSearchContext.productSearchConstraintList.add(productSearchContext.getDelegator().makeValue("ProductSearchConstraint", UtilMisc.toMap("constraintName", constraintName, "infoString", this.productFeatureCategoryId))); + } + + public String prettyPrintConstraint(GenericDelegator delegator, boolean detailed, Locale locale) { + GenericValue productFeatureCategory = null; + try { + productFeatureCategory = delegator.findByPrimaryKeyCache("ProductFeatureCategory", UtilMisc.toMap("productFeatureCategoryId", productFeatureCategoryId)); + } catch (GenericEntityException e) { + Debug.logError(e, "Error finding ProductFeatureCategory and Type information for constraint pretty print", module); + } + StringBuffer ppBuf = new StringBuffer(); + if (productFeatureCategory != null) { + ppBuf.append(UtilProperties.getMessage(resource, "ProductFeatureCategory", locale)+": "); + if(productFeatureCategory.get("description") != null) { + ppBuf.append("[" + productFeatureCategory.get("description") + "]"); + } else { + ppBuf.append("[" + this.productFeatureCategoryId + "]"); + } + + } + return (ppBuf.toString()); + } + + public boolean equals(Object obj) { + ProductSearchConstraint psc = (ProductSearchConstraint) obj; + if (psc instanceof ProductFeatureCategoryConstraint) { + ProductFeatureCategoryConstraint that = (ProductFeatureCategoryConstraint) psc; + if (this.productFeatureCategoryId == null) { + if (that.productFeatureCategoryId != null) { + return false; + } + } else { + if (!this.productFeatureCategoryId.equals(that.productFeatureCategoryId)) { + return false; + } + } + return true; + } else { + return false; + } + } + } + + public static class FeatureSetConstraint extends ProductSearchConstraint { public static final String constraintName = "Feature Set"; protected Set productFeatureIdSet; Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java?view=diff&rev=526058&r1=526057&r2=526058 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java Thu Apr 5 22:19:37 2007 @@ -531,6 +531,21 @@ searchAddFeatureIdConstraints(featureIdByType.values(), null, request); } + //if product features category were selected add a constraint for each + Iterator parameterProdFeatureCatNameIter = parameters.keySet().iterator(); + while (parameterProdFeatureCatNameIter.hasNext()) { + String parameterName = (String) parameterProdFeatureCatNameIter.next(); + if (parameterName.startsWith("SEARCH_PROD_FEAT_CAT")) { + String productFeatureCategoryId = (String) parameters.get(parameterName); + if (productFeatureCategoryId != null && productFeatureCategoryId.length() > 0) { + String paramNameExt = parameterName.substring("SEARCH_PROD_FEAT_CAT".length() + 1); + String searchProdFeatureCategoryExc = (String) parameters.get("SEARCH_PROD_FEAT_CAT_EXC" + paramNameExt); + Boolean exclude = UtilValidate.isEmpty(searchProdFeatureCategoryExc) ? null : new Boolean(!"N".equals(searchProdFeatureCategoryExc)); + searchAddConstraint(new ProductSearch.ProductFeatureCategoryConstraint(productFeatureCategoryId, exclude), session); + } + } + } + // add a supplier to the search if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_SUPPLIER_ID"))) { String supplierPartyId = (String) parameters.get("SEARCH_SUPPLIER_ID"); Modified: ofbiz/trunk/applications/product/webapp/catalog/find/advancedsearch.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/find/advancedsearch.ftl?view=diff&rev=526058&r1=526057&r2=526058 ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/find/advancedsearch.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/find/advancedsearch.ftl Thu Apr 5 22:19:37 2007 @@ -87,6 +87,32 @@ </tr> <tr> <td align="right" valign="middle"> + <div class="tabletext">${uiLabelMap.ProductFeatureCategory} ${uiLabelMap.CommonIds}:</div> + </td> + <td valign="middle"> + <div> + <input type="text" class="inputBox" name="SEARCH_PROD_FEAT_CAT1" size="15" value="${requestParameters.SEARCH_PROD_FEAT_CAT1?if_exists}"/> + ${uiLabelMap.CommonInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC1" value="" checked="checked"/> + ${uiLabelMap.CommonExclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC1" value="Y"/> + ${uiLabelMap.CommonAlwaysInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC1" value="N"/> + </div> + <div> + <input type="text" class="inputBox" name="SEARCH_PROD_FEAT_CAT2" size="15" value="${requestParameters.SEARCH_PROD_FEAT_CAT2?if_exists}"/> + ${uiLabelMap.CommonInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC2" value="" checked="checked"/> + ${uiLabelMap.CommonExclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC2" value="Y"/> + ${uiLabelMap.CommonAlwaysInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC2" value="N"/> + </div> + <div> + <input type="text" class="inputBox" name="SEARCH_PROD_FEAT_CAT3" size="15" value="${requestParameters.SEARCH_PROD_FEAT_CAT3?if_exists}"/> + ${uiLabelMap.CommonInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC3" value="" checked="checked"/> + ${uiLabelMap.CommonExclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC3" value="Y"/> + ${uiLabelMap.CommonAlwaysInclude}<input type="radio" name="SEARCH_PROD_FEAT_CAT_EXC3" value="N"/> + </div> + </td> + </tr> + + <tr> + <td align="right" valign="middle"> <div class="tabletext">${uiLabelMap.ProductFeatures} ${uiLabelMap.CommonIds}:</div> </td> <td valign="middle"> |
Free forum by Nabble | Edit this page |