pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / facet / src / java / org / apache / lucene / facet / index / params / DefaultFacetIndexingParams.java
diff --git a/lucene-java-3.5.0/lucene/contrib/facet/src/java/org/apache/lucene/facet/index/params/DefaultFacetIndexingParams.java b/lucene-java-3.5.0/lucene/contrib/facet/src/java/org/apache/lucene/facet/index/params/DefaultFacetIndexingParams.java
new file mode 100644 (file)
index 0000000..557b918
--- /dev/null
@@ -0,0 +1,196 @@
+package org.apache.lucene.facet.index.params;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.lucene.facet.index.categorypolicy.DefaultOrdinalPolicy;
+import org.apache.lucene.facet.index.categorypolicy.DefaultPathPolicy;
+import org.apache.lucene.facet.index.categorypolicy.OrdinalPolicy;
+import org.apache.lucene.facet.index.categorypolicy.PathPolicy;
+import org.apache.lucene.facet.taxonomy.CategoryPath;
+
+/**
+ * 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 for {@link FacetIndexingParams}.
+ * <p>
+ * Getters for <em>partition-size</em>, {@link OrdinalPolicy} and
+ * {@link PathPolicy} are all final, and so the proper way to modify them when
+ * extending this class is through {@link #fixedPartitionSize()},
+ * {@link #fixedOrdinalPolicy()} or {@link #fixedPathPolicy()} accordingly.
+ * 
+ * @lucene.experimental
+ */
+public class DefaultFacetIndexingParams implements FacetIndexingParams {
+
+  /**
+   * delimiter between a categories in a path, e.g. Products FACET_DELIM
+   * Consumer FACET_DELIM Tv. This should be a character not found in any path
+   * component
+   */
+  public static final char DEFAULT_FACET_DELIM_CHAR = '\uF749';
+
+  private final CategoryListParams clpParams;
+  private final OrdinalPolicy ordinalPolicy;
+  private final PathPolicy pathPolicy;
+  private final int partitionSize;
+
+  public DefaultFacetIndexingParams() {
+    this(new CategoryListParams());
+  }
+
+  public DefaultFacetIndexingParams(CategoryListParams categoryListParams) {
+    clpParams = categoryListParams;
+    ordinalPolicy = fixedOrdinalPolicy();
+    pathPolicy = fixedPathPolicy();
+    partitionSize = fixedPartitionSize();
+  }
+
+  public CategoryListParams getCategoryListParams(CategoryPath category) {
+    return clpParams;
+  }
+
+  public int drillDownTermText(CategoryPath path, char[] buffer) {
+    return path.copyToCharArray(buffer, 0, -1, getFacetDelimChar());
+  }
+
+  /**
+   * "fixed" partition size. 
+   * @see #getPartitionSize()
+   */
+  protected int fixedPartitionSize() {
+    return Integer.MAX_VALUE;
+  }
+  
+  /**
+   * "fixed" ordinal policy. 
+   * @see #getOrdinalPolicy()
+   */
+  protected OrdinalPolicy fixedOrdinalPolicy() {
+    return new DefaultOrdinalPolicy();
+  }
+  
+  /**
+   * "fixed" path policy. 
+   * @see #getPathPolicy()
+   */
+  protected PathPolicy fixedPathPolicy() {
+    return new DefaultPathPolicy();
+  }
+  
+  public final int getPartitionSize() {
+    return partitionSize;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * org.apache.lucene.facet.index.params.FacetIndexingParams#getAllCategoryListParams
+   * ()
+   */
+  public Iterable<CategoryListParams> getAllCategoryListParams() {
+    List<CategoryListParams> res = new ArrayList<CategoryListParams>();
+    res.add(clpParams);
+    return res;
+  }
+
+  public final OrdinalPolicy getOrdinalPolicy() {
+    return ordinalPolicy;
+  }
+
+  public final PathPolicy getPathPolicy() {
+    return pathPolicy;
+  }
+
+  /* (non-Javadoc)
+   * @see java.lang.Object#hashCode()
+   */
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    result = prime * result
+        + ((clpParams == null) ? 0 : clpParams.hashCode());
+    result = prime * result
+        + ((ordinalPolicy == null) ? 0 : ordinalPolicy.hashCode());
+    result = prime * result + partitionSize;
+    result = prime * result
+        + ((pathPolicy == null) ? 0 : pathPolicy.hashCode());
+    
+    for (CategoryListParams clp: getAllCategoryListParams()) {
+      result ^= clp.hashCode();
+    }
+    
+    return result;
+  }
+
+  /* (non-Javadoc)
+   * @see java.lang.Object#equals(java.lang.Object)
+   */
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null) {
+      return false;
+    }
+    if (!(obj instanceof DefaultFacetIndexingParams)) {
+      return false;
+    }
+    DefaultFacetIndexingParams other = (DefaultFacetIndexingParams) obj;
+    if (clpParams == null) {
+      if (other.clpParams != null) {
+        return false;
+      }
+    } else if (!clpParams.equals(other.clpParams)) {
+      return false;
+    }
+    if (ordinalPolicy == null) {
+      if (other.ordinalPolicy != null) {
+        return false;
+      }
+    } else if (!ordinalPolicy.equals(other.ordinalPolicy)) {
+      return false;
+    }
+    if (partitionSize != other.partitionSize) {
+      return false;
+    }
+    if (pathPolicy == null) {
+      if (other.pathPolicy != null) {
+        return false;
+      }
+    } else if (!pathPolicy.equals(other.pathPolicy)) {
+      return false;
+    }
+    
+    Iterable<CategoryListParams> cLs = getAllCategoryListParams();
+    Iterable<CategoryListParams> otherCLs = other.getAllCategoryListParams();
+    
+    return cLs.equals(otherCLs);
+  }
+
+  /**
+   * Use {@link #DEFAULT_FACET_DELIM_CHAR} as the delimiter.
+   */
+  public char getFacetDelimChar() {
+    return DEFAULT_FACET_DELIM_CHAR;
+  }
+
+}