RefinementMenu cartridges render the set of dimension value refinements that are available in the left-hand rail for the current record set. This set of refinement values is driven by the dimension values that are tagged to the records themselves.
In Oracle ATG Web Commerce, applications may incorporate multiple sites and multiple catalogs. This means that each ATG category in the Category dimension may have one or more sites or catalogs associated with it. For example, Category A may be associated with Sites X and Y but not Site Z. In this case, when a customer is browsing on Sites X and Y, Category A should be included in the list of refinement values but when the customer is browsing Site Z, it should not. The RefinementMenu cartridge that is included out of the box with Oracle Endeca Commerce does not take site and catalog associations into account when it calculates the refinement values for the Category dimension. For this reason, the DCS module provides an extension to the RefinementMenu handler that filters out Category dimension values that are inappropriate for the current site and catalog context.
The DCS.Endeca.Assembler module configures the /atg/endeca/assembler/cartridge/handler/RefinementMenu component to use the atg.commerce.endeca.assembler.cartridge.handler.CategoryMenuHandler class, which is an extension of the com.endeca.infront.cartridge.RefinementMenuHandler class with an override for the process() method. The CategoryMenuHandler.process() method makes an initial call to the RefinementMenuHandler.process() method to get the refinement values for the current record set as they would normally be returned by the Assembler. The CategoryMenuHandler.process() method then filters the refinement values to remove any values that are not appropriate for the current site and catalog context. To do the filtering, the process() method invokes the /atg/endeca/assembler/cartridge/manager/filter/SiteFilterBuilder and /atg/endeca/assembler/cartridge/manager/filter/CatalogFilterBuilder components, which are of class atg.endeca.assembler.navigation.filter.SiteFilterBuilder and atg.commerce.endeca.assembler.navigation.filter.CatalogFilterBuilder, respectively. These components calculate the set of sites and catalogs that are specified for the current request. Only those refinement values that have an association with these sites and catalogs are returned.
To do its tasks, the /atg/endeca/assembler/cartridge/handler/RefinementMenu component defines the following properties in the DCS module:
sitesPropertyName: The name of the category repository item property that contains the list of sites associated with the category. Set by default tocategory.siteId.catalogsPropertyname: The name of the category repository item property that contains the list of catalogs associated with the category. Set by default tocategory.catalogs.repositoryId.categoryDimensionName: The name of the Category dimension. Set by default toproduct.category.separator: A reference to aContactFilter.separatorproperty. Because thecategory.siteIdandcategory.catalogs.repositoryIdproperties can be multi-valued, their values are generated by theConcatFiltercomponent. To split the properties into their separate values, theCategoryMenuHandlermust know which separator is being used.siteFilterBuilder: A reference to theSiteFilterBuildercomponent that should be used to calculate the set of sites that make up the site context for the current request. Set by default to/atg/endeca/assembler/cartridge/manager/filter/SiteFilterBuilder.catalogFilterBuilder: A reference to theCatalogFilterBuildercomponent that should be used to calculate the set of catalogs that make up the catalog context for the current request. Set by default to/atg/endeca/assembler/cartridge/manager/filter/CatalogFilterBuilder.

