--- /dev/null
+package org.apache.lucene.facet.enhancements.params;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.lucene.facet.enhancements.CategoryEnhancement;
+import org.apache.lucene.facet.index.attributes.CategoryProperty;
+import org.apache.lucene.facet.index.params.CategoryListParams;
+import org.apache.lucene.facet.index.params.PerDimensionIndexingParams;
+
+/**
+ * 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.
+ */
+
+/**
+ * Default implementation of {@link EnhancementsIndexingParams}
+ *
+ * @lucene.experimental
+ */
+public class DefaultEnhancementsIndexingParams extends
+ PerDimensionIndexingParams implements EnhancementsIndexingParams {
+
+ private List<CategoryEnhancement> enhancedCategories;
+
+ /**
+ * Construct with a certain {@link CategoryEnhancement enhancement}
+ * @throws IllegalArgumentException if no enhancements are provided
+ */
+ public DefaultEnhancementsIndexingParams(CategoryEnhancement... enhancements) {
+ super();
+ validateparams(enhancements);
+ addCategoryEnhancements(enhancements);
+ }
+
+ private void validateparams(CategoryEnhancement... enhancements) {
+ if (enhancements==null || enhancements.length<1) {
+ throw new IllegalArgumentException("at least one enhancement is required");
+ }
+ }
+
+ /**
+ * Construct with certain {@link CategoryEnhancement enhancements}
+ * and {@link CategoryListParams}
+ * @throws IllegalArgumentException if no enhancements are provided
+ */
+ public DefaultEnhancementsIndexingParams(
+ CategoryListParams categoryListParams,
+ CategoryEnhancement... enhancements) {
+ super(categoryListParams);
+ validateparams(enhancements);
+ addCategoryEnhancements(enhancements);
+ }
+
+ public void addCategoryEnhancements(CategoryEnhancement... enhancements) {
+ if (enhancedCategories == null) {
+ enhancedCategories = new ArrayList<CategoryEnhancement>();
+ }
+ for (CategoryEnhancement categoryEnhancement : enhancements) {
+ enhancedCategories.add(categoryEnhancement);
+ }
+ }
+
+ public List<CategoryEnhancement> getCategoryEnhancements() {
+ if (enhancedCategories == null || enhancedCategories.isEmpty()) {
+ return null;
+ }
+ return enhancedCategories;
+ }
+
+ public List<Class<? extends CategoryProperty>> getRetainableProperties() {
+ if (enhancedCategories == null) {
+ return null;
+ }
+ List<Class<? extends CategoryProperty>> retainableProperties = new ArrayList<Class<? extends CategoryProperty>>();
+ for (CategoryEnhancement enhancement : enhancedCategories) {
+ if (enhancement.getRetainableProperty() != null) {
+ retainableProperties.add(enhancement.getRetainableProperty());
+ }
+ }
+ if (retainableProperties.isEmpty()) {
+ return null;
+ }
+ return retainableProperties;
+ }
+}