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}"/>&nbsp;
+              ${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}"/>&nbsp;
+              ${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}"/>&nbsp;
+              ${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">


Reply via email to