package org.jai.search.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public enum SearchFacetName {
// facets: level based on number 1..n,
// the facet/query/sequenced fields and filters calculated
SEARCH_FACET_TYPE_PRODUCT_TYPE("searchfacettype_product_type"), SEARCH_FACET_TYPE_BRAND(
"searchfacettype_brand"), SEARCH_FACET_TYPE_AGE(
"searchfacettype_age"), SEARCH_FACET_TYPE_COLOR(
"searchfacettype_color"), PRODUCT_PRICE_RANGE("product_price_range"), PRODUCT_PROPERTY_SIZE(
"product_property_size"), PRODUCT_PROPERTY_COLOR(
"product_property_color"), SPECIFICATION_RESOLUTION(
"specification_resolution"), SPECIFICATION_MEMORY(
"specification_memory"),
// Auto suggestions
AUTO_SUGGESTION("auto_suggestion");
public static final String CATEGORIES_FIELD_PREFIX = "categories.";
public static final String HIERARCHICAL_DATA_LEVEL_STRING = "_level_";
public static final String SEARCH_FACET_TYPE_FACET_PREFIX = "searchfacettype_";
// Used to order filters based on sequence order
public static final String SEQUENCED_FIELD_SUFFIX = ".sequenced";
private SearchFacetName(final String code) {
this.code = code;
}
public static final List<SearchFacetName> categoryFacets = Collections
.unmodifiableList(Arrays.asList(SEARCH_FACET_TYPE_PRODUCT_TYPE,
SEARCH_FACET_TYPE_AGE, SEARCH_FACET_TYPE_BRAND,
SEARCH_FACET_TYPE_COLOR));
public static final List<String> categoryFacetFields = new ArrayList<String>();
public static final List<String> autoSuggestionFields = new ArrayList<String>();
public static final List<String> dynamicSystemFacetFields = new ArrayList<String>();
private String code;
public String getCode() {
return code;
}
public static List<SearchFacetName> categoryFacetValues() {
return categoryFacets;
}
// currently only support 5 level of hierarchy
public static int getSupportedFacetParentChildHierarchyLevel() {
return 4;
}
public String getFacetFieldNameAtLevel(final int level) {
// Level is applicable to content category facets only.
if (categoryFacetValues().contains(this)) {
return getCode() + HIERARCHICAL_DATA_LEVEL_STRING + level;
}
return null;
}
public String getFacetSequencedFieldNameAtLevel(final int level) {
// Level is applicable to content category facets only.
if (categoryFacetValues().contains(this)) {
return getCode() + HIERARCHICAL_DATA_LEVEL_STRING + level
+ SEQUENCED_FIELD_SUFFIX;
}
return null;
}
public String getAutoSuggestionFieldNameAtLevel(final int level) {
return getCode() + HIERARCHICAL_DATA_LEVEL_STRING + level + ".suggest";
}
public static String getFacetSequencedFieldNameByCode(final String facetCode) {
return facetCode + SEQUENCED_FIELD_SUFFIX;
}
static {
for (final SearchFacetName facetName : SearchFacetName
.categoryFacetValues()) {
for (int categoryLevel = 1; categoryLevel <= SearchFacetName
.getSupportedFacetParentChildHierarchyLevel(); categoryLevel++) {
categoryFacetFields.add(facetName
.getFacetFieldNameAtLevel(categoryLevel));
autoSuggestionFields
.add(CATEGORIES_FIELD_PREFIX
+ facetName
.getAutoSuggestionFieldNameAtLevel(categoryLevel));
}
}
}
}