package org.apache.lucene.facet.search.params; import java.util.ArrayList; import java.util.List; import org.apache.lucene.facet.index.params.DefaultFacetIndexingParams; import org.apache.lucene.facet.index.params.FacetIndexingParams; import org.apache.lucene.facet.search.cache.CategoryListCache; import org.apache.lucene.facet.search.results.FacetResult; /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Faceted search parameters indicate for which facets should info be gathered. * <p> * The contained facet requests define for which facets should info be gathered. * <p> * Contained faceted indexing parameters provide required info on how * to read and interpret the underlying faceted information in the search index. * * @lucene.experimental */ public class FacetSearchParams { protected final FacetIndexingParams indexingParams; protected final List<FacetRequest> facetRequests; private CategoryListCache clCache = null; /** * Construct with specific faceted indexing parameters. * It is important to know the indexing parameters so as to e.g. * read facets data correctly from the index. * {@link #addFacetRequest(FacetRequest)} must be called at least once * for this faceted search to find any faceted result. * @param indexingParams Indexing faceted parameters which were used at indexing time. * @see #addFacetRequest(FacetRequest) */ public FacetSearchParams(FacetIndexingParams indexingParams) { this.indexingParams = indexingParams; facetRequests = new ArrayList<FacetRequest>(); } /** * Construct with default faceted indexing parameters. * Usage of this constructor is valid only if also during indexing the * default faceted indexing parameters were used. * {@link #addFacetRequest(FacetRequest)} must be called at least once * for this faceted search to find any faceted result. * @see #addFacetRequest(FacetRequest) */ public FacetSearchParams() { this(new DefaultFacetIndexingParams()); } /** * A list of {@link FacetRequest} objects, determining what to count. * If the returned collection is empty, the faceted search will return no facet results! */ public final FacetIndexingParams getFacetIndexingParams() { return indexingParams; } /** * Parameters which controlled the indexing of facets, and which are also * needed during search. */ public final List<FacetRequest> getFacetRequests() { return facetRequests; } /** * Add a facet request to apply for this faceted search. * This method must be called at least once for faceted search * to find any faceted result. <br> * NOTE: The order of addition implies the order of the {@link FacetResult}s * @param facetRequest facet request to be added. */ public void addFacetRequest(FacetRequest facetRequest) { if (facetRequest == null) { throw new IllegalArgumentException("Provided facetRequest must not be null"); } facetRequests.add(facetRequest); } @Override public String toString() { final char TAB = '\t'; final char NEWLINE = '\n'; StringBuilder sb = new StringBuilder("IndexingParams: "); sb.append(NEWLINE).append(TAB).append(getFacetIndexingParams()); sb.append(NEWLINE).append("FacetRequests:"); for (FacetRequest facetRequest : getFacetRequests()) { sb.append(NEWLINE).append(TAB).append(facetRequest); } return sb.toString(); } /** * @return the cldCache in effect */ public CategoryListCache getClCache() { return clCache; } /** * Set Cached Category Lists data to be used in Faceted search. * @param clCache the cldCache to set */ public void setClCache(CategoryListCache clCache) { this.clCache = clCache; } }