From 0c7ecbc4e3c91aa10086a9be077f97f25cd8ff0d Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 13 Nov 2014 09:32:37 +0000
Subject: [PATCH] OPENDJ-1591 (CR-5256) Switch to SDK matching rules

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java |   97 +++++++++++-------------------------------------
 opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java                |    4 +-
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java          |    3 +
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/Indexer.java        |   14 ++----
 4 files changed, 31 insertions(+), 87 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index 9dd7d02..8116569 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
@@ -35,6 +35,7 @@
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.config.server.ConfigException;
 import org.forgerock.opendj.ldap.Assertion;
+import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DecodeException;
 import org.forgerock.opendj.ldap.ResultCode;
@@ -686,96 +687,42 @@
   }
 
   /**
-   * The default lexicographic byte array comparator.
-   * Is there one available in the Java platform?
+   * Delegator to {@link ByteSequence#BYTE_ARRAY_COMPARATOR}.
+   * <p>
+   * This intermediate class is necessary to satisfy JE's requirements for a btree comparator.
+   *
+   * @see com.sleepycat.je.DatabaseConfig#setBtreeComparator(Comparator)
    */
   public static class KeyComparator implements Comparator<byte[]>
   {
-    /**
-     * Compares its two arguments for order.  Returns a negative integer,
-     * zero, or a positive integer as the first argument is less than, equal
-     * to, or greater than the second.
-     *
-     * @param a the first object to be compared.
-     * @param b the second object to be compared.
-     * @return a negative integer, zero, or a positive integer as the
-     *         first argument is less than, equal to, or greater than the
-     *         second.
-     */
+    /** The instance. */
+    public static final KeyComparator INSTANCE = new KeyComparator();
+
+    /** {@inheritDoc} */
     @Override
     public int compare(byte[] a, byte[] b)
     {
-      int i;
-      for (i = 0; i < a.length && i < b.length; i++)
-      {
-        if (a[i] > b[i])
-        {
-          return 1;
-        }
-        else if (a[i] < b[i])
-        {
-          return -1;
-        }
-      }
-      if (a.length == b.length)
-      {
-        return 0;
-      }
-      if (a.length > b.length)
-      {
-        return 1;
-      }
-      return -1;
+      return ByteSequence.BYTE_ARRAY_COMPARATOR.compare(a, b);
     }
   }
 
   /**
-   * Byte string key comparator. The default lexicographic byte string
-   * comparator.
+   * Delegator to {@link ByteSequence#COMPARATOR}.
    * <p>
-   * This is the byte string equivalent of {@link KeyComparator}.
-   * <p>
-   * Note: Matt reckons we could simply use ByteString.compareTo(),
-   * but I am using this for now as an intermediate step.
+   * This intermediate class is necessary to satisfy JE's requirements for a btree comparator.
+   *
+   * @see com.sleepycat.je.DatabaseConfig#setBtreeComparator(Comparator)
    */
-  public static class BSKeyComparator implements Comparator<ByteString>
+  public static class BSKeyComparator implements Comparator<ByteSequence>
   {
-    /**
-     * Compares its two arguments for order. Returns a negative integer, zero,
-     * or a positive integer as the first argument is less than, equal to, or
-     * greater than the second.
-     *
-     * @param a
-     *          the first object to be compared.
-     * @param b
-     *          the second object to be compared.
-     * @return a negative integer, zero, or a positive integer as the first
-     *         argument is less than, equal to, or greater than the second.
-     */
+    /** The instance. */
+    public static final BSKeyComparator INSTANCE = new BSKeyComparator();
+
+    /** {@inheritDoc} */
     @Override
-    public int compare(ByteString a, ByteString b)
+    public int compare(ByteSequence a, ByteSequence b)
     {
-      int i;
-      for (i = 0; i < a.length() && i < b.length(); i++)
-      {
-        if (a.byteAt(i) > b.byteAt(i))
-        {
-          return 1;
-        }
-        else if (a.byteAt(i) < b.byteAt(i))
-        {
-          return -1;
-        }
-      }
-      if (a.length() == b.length())
-      {
-        return 0;
-      }
-      if (a.length() > b.length())
-      {
-        return 1;
-      }
-      return -1;
+      return ByteSequence.COMPARATOR.compare(a, b);
     }
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
index 3c85b97..ab482d8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Index.java
@@ -29,6 +29,7 @@
 import java.util.*;
 
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ConditionResult;
 import org.forgerock.opendj.ldap.spi.IndexingOptions;
@@ -65,7 +66,7 @@
   /**
    * The comparator for index keys.
    */
-  private final Comparator<ByteString> bsComparator;
+  private final Comparator<ByteSequence> bsComparator;
 
   /**
    * The limit on the number of entry IDs that may be indexed by one key.
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Indexer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Indexer.java
index 723405c..8481f8b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Indexer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/Indexer.java
@@ -31,6 +31,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.spi.IndexingOptions;
 import org.opends.server.backends.jeb.AttributeIndex.BSKeyComparator;
@@ -45,12 +46,6 @@
 public abstract class Indexer
 {
   /**
-   * The comparator for keys generated by this class.
-   */
-  private static final KeyComparator comparator = new KeyComparator();
-  private static final BSKeyComparator bsComparator = new BSKeyComparator();
-
-  /**
    * Get the comparator that must be used to compare index keys generated by
    * this class.
    *
@@ -58,7 +53,7 @@
    */
   public final Comparator<byte[]> getComparator()
   {
-    return comparator;
+    return KeyComparator.INSTANCE;
   }
 
   /**
@@ -67,9 +62,9 @@
    *
    * @return A byte string comparator.
    */
-  public final Comparator<ByteString> getBSComparator()
+  public final Comparator<ByteSequence> getBSComparator()
   {
-    return bsComparator;
+    return BSKeyComparator.INSTANCE;
   }
 
   /**
@@ -112,5 +107,6 @@
    * used to name an index created using this object.
    * @return A string representation of this object.
    */
+  @Override
   public abstract String toString();
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java b/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
index c569845..55c502e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
@@ -32,6 +32,7 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.config.server.ConfigException;
+import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import org.opends.server.admin.std.server.BackendCfg;
@@ -1152,8 +1153,7 @@
         DatabaseEntry data = new DatabaseEntry();
         LockMode lockMode = LockMode.DEFAULT;
         OperationStatus status;
-        Comparator<byte[]> defaultComparator =
-            new AttributeIndex.KeyComparator();
+        Comparator<byte[]> defaultComparator = ByteSequence.BYTE_ARRAY_COMPARATOR;
         byte[] start = null;
         byte[] end = null;
         int minSize = -1;

--
Gitblit v1.10.0