From 44a4880467841860fa188f4bceddd942a74b6179 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 09 Apr 2015 16:34:24 +0000
Subject: [PATCH] Introduced ImportRecord to get rid of IndexOutputBuffer.IndexComparator and its myriad of compare() methods. ImportRecord is composed of a key as a ByteSequence and an indexID being an int.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexInputBuffer.java |   52 +++++++++++++++++++++-------------------------------
 1 files changed, 21 insertions(+), 31 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexInputBuffer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexInputBuffer.java
index e5ff5be..d03d77c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexInputBuffer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexInputBuffer.java
@@ -34,6 +34,7 @@
 import java.nio.channels.FileChannel;
 
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import org.opends.server.backends.pluggable.Importer.IndexManager;
 
@@ -62,7 +63,7 @@
   private final ByteBuffer cache;
 
   /** Next fields are the fetched record data. */
-  private Integer indexID;
+  private ImportRecord record;
   private final ByteStringBuilder keyBuffer = new ByteStringBuilder(128);
   private RecordState recordState = RecordState.START;
 
@@ -163,7 +164,7 @@
    */
   public Integer getIndexID()
   {
-    if (indexID == null)
+    if (record == null)
     {
       try
       {
@@ -175,7 +176,7 @@
         throw new RuntimeException(ex);
       }
     }
-    return indexID;
+    return record != null ? record.getIndexID() : null;
   }
 
   /**
@@ -203,14 +204,20 @@
       break;
     }
 
-    indexID = getInt();
+    int indexID = getInt();
+    ByteString key = toKey();
+    record = ImportRecord.from(key, indexID);
 
+    recordState = RecordState.NEED_INSERT_ID_SET;
+  }
+
+  private ByteString toKey() throws IOException
+  {
     ensureData(20);
     int keyLen = getInt();
     ensureData(keyLen);
     keyBuffer.clear().append(cache, keyLen);
-
-    recordState = RecordState.NEED_INSERT_ID_SET;
+    return keyBuffer.toByteString();
   }
 
   private int getInt() throws IOException
@@ -286,22 +293,6 @@
     return false;
   }
 
-  /**
-   * Compares this buffer with the provided key and index ID.
-   *
-   * @param key
-   *          The key.
-   * @param indexID
-   *          The index ID.
-   * @return true if this buffer represent the same key and indexID, false otherwise.
-   */
-  boolean sameKeyAndIndexID(final ByteStringBuilder key, Integer indexID)
-  {
-    ensureRecordFetched();
-    return Importer.indexComparator.compare(keyBuffer, key) == 0
-        && this.indexID.equals(indexID);
-  }
-
   /** {@inheritDoc} */
   @Override
   public int compareTo(IndexInputBuffer o)
@@ -312,21 +303,20 @@
       return 0;
     }
 
-    ensureRecordFetched();
-    o.ensureRecordFetched();
-
-    int cmp = Importer.indexComparator.compare(keyBuffer, o.keyBuffer);
+    int cmp = currentRecord().compareTo(o.currentRecord());
     if (cmp == 0)
     {
-      cmp = indexID.intValue() - o.getIndexID().intValue();
-      if (cmp == 0)
-      {
-        return bufferID - o.bufferID;
-      }
+      return bufferID - o.bufferID;
     }
     return cmp;
   }
 
+  ImportRecord currentRecord()
+  {
+    ensureRecordFetched();
+    return record;
+  }
+
   private void ensureRecordFetched()
   {
     if (keyBuffer.length() == 0)

--
Gitblit v1.10.0