From 88f8db26c1a4389ea8ddcd5679f433446d0a55f3 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 08 Oct 2015 09:59:03 +0000
Subject: [PATCH] OPENDJ-1852 Fix feature envy between AttributeIndex and Index* classes

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQuery.java |  155 +--------------------------------------------------
 1 files changed, 4 insertions(+), 151 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQuery.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQuery.java
index 228b859..ab86794 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQuery.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQuery.java
@@ -26,24 +26,12 @@
  */
 package org.opends.server.backends.pluggable;
 
-import static org.opends.server.backends.pluggable.EntryIDSet.*;
-import static org.opends.server.backends.pluggable.IndexFilter.*;
-
-import java.util.Collection;
-
 import org.forgerock.i18n.LocalizableMessageBuilder;
-import org.forgerock.util.Utils;
 
-/** This class represents a Backend Query. */
-@org.opends.server.types.PublicAPI(
-    stability = org.opends.server.types.StabilityLevel.VOLATILE,
-    mayInstantiate = false,
-    mayExtend = true,
-    mayInvoke = false)
-abstract class IndexQuery
+/** This interface represents a Backend Query. */
+// @FunctionalInterface
+interface IndexQuery
 {
-  private static final String SEPARATOR = "\n  ";
-
   /**
    * Evaluates the index query and returns the EntryIDSet.
    *
@@ -54,140 +42,5 @@
    *                      index results.
    * @return The non null EntryIDSet as a result of evaluating this query
    */
-  public abstract EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut);
-
-  /**
-   * Creates an IntersectionIndexQuery object from a collection of
-   * IndexQuery objects.
-   *
-   * @param subIndexQueries
-   *          A collection of IndexQuery objects.
-   * @return An IntersectionIndexQuery object.
-   */
-  static IndexQuery createIntersectionIndexQuery(Collection<IndexQuery> subIndexQueries)
-  {
-    return new IntersectionIndexQuery(subIndexQueries);
-  }
-
-  /**
-   * Creates a union IndexQuery object from a collection of IndexQuery
-   * objects.
-   *
-   * @param subIndexQueries
-   *          Collection of IndexQuery objects.
-   * @return A UnionIndexQuery object.
-   */
-  static IndexQuery createUnionIndexQuery(Collection<IndexQuery> subIndexQueries)
-  {
-    return new UnionIndexQuery(subIndexQueries);
-  }
-
-  /**
-   * Creates an empty IndexQuery object.
-   *
-   * @return A NullIndexQuery object.
-   */
-  static IndexQuery createNullIndexQuery()
-  {
-    return new NullIndexQuery();
-  }
-
-  /**
-   * This class creates a Null IndexQuery. It is used when there is no
-   * record in the index. It may also be used when the index contains
-   * all the records but an empty EntryIDSet should be returned as part
-   * of the optimization.
-   */
-  private static final class NullIndexQuery extends IndexQuery
-  {
-    @Override
-    public EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut)
-    {
-      return newUndefinedSet();
-    }
-
-    @Override
-    public String toString()
-    {
-      return "Null";
-    }
-  }
-
-  /** This class creates an intersection IndexQuery from a collection of IndexQuery objects. */
-  private static final class IntersectionIndexQuery extends IndexQuery
-  {
-    /** Collection of IndexQuery objects. */
-    private final Collection<IndexQuery> subIndexQueries;
-
-    /**
-     * Creates an instance of IntersectionIndexQuery.
-     *
-     * @param subIndexQueries
-     *          Collection of IndexQuery objects.
-     */
-    private IntersectionIndexQuery(Collection<IndexQuery> subIndexQueries)
-    {
-      this.subIndexQueries = subIndexQueries;
-    }
-
-    @Override
-    public EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut)
-    {
-      final EntryIDSet entryIDs = newUndefinedSet();
-      for (IndexQuery query : subIndexQueries)
-      {
-        entryIDs.retainAll(query.evaluate(debugMessage, indexNameOut));
-        if (isBelowFilterThreshold(entryIDs))
-        {
-          break;
-        }
-      }
-      return entryIDs;
-    }
-
-    @Override
-    public String toString()
-    {
-      return "Intersection(" + SEPARATOR + Utils.joinAsString(SEPARATOR, subIndexQueries) + ")";
-    }
-  }
-
-  /** This class creates a union of IndexQuery objects. */
-  private static final class UnionIndexQuery extends IndexQuery
-  {
-    /** Collection containing IndexQuery objects. */
-    private final Collection<IndexQuery> subIndexQueries;
-
-    /**
-     * Creates an instance of UnionIndexQuery.
-     *
-     * @param subIndexQueries
-     *          The Collection of IndexQuery objects.
-     */
-    private UnionIndexQuery(Collection<IndexQuery> subIndexQueries)
-    {
-      this.subIndexQueries = subIndexQueries;
-    }
-
-    @Override
-    public EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut)
-    {
-      final EntryIDSet entryIDs = newDefinedSet();
-      for (IndexQuery query : subIndexQueries)
-      {
-        entryIDs.addAll(query.evaluate(debugMessage, indexNameOut));
-        if (entryIDs.isDefined() && entryIDs.size() >= CURSOR_ENTRY_LIMIT)
-        {
-          break;
-        }
-      }
-      return entryIDs;
-    }
-
-    @Override
-    public String toString()
-    {
-      return "Union(" + SEPARATOR + Utils.joinAsString(SEPARATOR, subIndexQueries) + ")";
-    }
-  }
+  EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut);
 }

--
Gitblit v1.10.0