From: <ssk...@vh...> - 2005-12-05 16:14:25
|
Author: sskracic Date: 2005-12-05 17:12:11 +0100 (Mon, 05 Dec 2005) New Revision: 1031 Modified: trunk/ccm-ldn-search/src/com/arsdigita/london/search/ui/CategoryHierarchyFilterWidget.java Log: Completed killing of 'descend' additional category filter parameter. Modified: trunk/ccm-ldn-search/src/com/arsdigita/london/search/ui/CategoryHierarchyFilterWidget.java =================================================================== --- trunk/ccm-ldn-search/src/com/arsdigita/london/search/ui/CategoryHierarchyFilterWidget.java 2005-12-05 16:01:45 UTC (rev 1030) +++ trunk/ccm-ldn-search/src/com/arsdigita/london/search/ui/CategoryHierarchyFilterWidget.java 2005-12-05 16:12:11 UTC (rev 1031) @@ -16,6 +16,10 @@ */ package com.arsdigita.london.search.ui; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormModel; @@ -23,6 +27,7 @@ import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.categorization.Category; +import com.arsdigita.categorization.CategoryCollection; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.OID; import com.arsdigita.search.FilterSpecification; @@ -30,24 +35,22 @@ import com.arsdigita.search.filters.CategoryFilterSpecification; import com.arsdigita.search.ui.filters.SimpleCategoryFilterWidget; import com.arsdigita.xml.Element; -import java.util.HashSet; -import java.util.Set; /** * @author chr...@we... * - * Category filter widget that includes an extra parameter that can be used to + * Category filter widget that includes an extra parameter that can be used to * search all the subcategories of the selected categories - * - * - * + * + * + * */ public class CategoryHierarchyFilterWidget extends SimpleCategoryFilterWidget { private Form m_form; private StringParameter includeCategoryHierarchy; /** - * @param root the root category for categories available for selection + * @param root the root category for categories available for selection */ public CategoryHierarchyFilterWidget(Category root) { this(new Category[] { root }); @@ -70,10 +73,10 @@ } /** - * + * * returns a FilterSpecification that includes the selected categories - * and if subcats parameter has a value, then includes all descendent - * categories of the selected categories + * and if subcats parameter has a value, then includes all descendent + * categories of the selected categories */ public FilterSpecification getFilter(PageState state) { OID[] oids = (OID[]) getValue(state); @@ -91,17 +94,31 @@ for (int i = 0; i < oids.length; i++) { Category cat = (Category) DomainObjectFactory.newInstance(oids[i]); - includedCats.add(cat); + if (includeSubCats) { + CategoryCollection subtree = cat.getDescendants(); + while (subtree.next()) { + includedCats.add(subtree.getCategory()); + + } + } else { + includedCats.add(cat); + } } - Category[] cats = (Category []) includedCats.toArray(new Category[0]); - return new CategoryFilterSpecification(cats, includeSubCats); + Category[] cats = new Category[includedCats.size()]; + Iterator it = includedCats.iterator(); + int i = 0; + while (it.hasNext()) { + cats[i++] = (Category) it.next(); + } + + return new CategoryFilterSpecification(cats); } /** - * + * * adds xml for the extra parameter to the <search:filter param="category" type="category"> element. * The xml for the parameter is <search:includeSubCats name="subcats" value="true" /> which can be - * transformed into a checkbox or a hidden input + * transformed into a checkbox or a hidden input */ public void generateBodyXML(PageState state, Element parent) { super.generateBodyXML(state, parent); |