From e219b928766a0a4984f613c7e3162cf03889380c Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 05 Dec 2014 14:46:11 +0000
Subject: [PATCH] Increased IndexBuffer encapsulation: Moved Index.getBufferedIndexValues() and VLVIndex.getVLVIndex() to IndexBuffer.

---
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java |   66 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index 7e735bd..20d3e8c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -28,6 +28,7 @@
 
 import java.util.*;
 
+import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.types.DirectoryException;
 
@@ -173,29 +174,6 @@
   }
 
   /**
-   * Get the buffered values for the given index.
-   *
-   * @param index The index with the buffered values to retrieve.
-   * @return The buffered values or <code>null</code> if there are
-   * no buffered values for the specified index.
-   */
-  public TreeMap<ByteString, BufferedIndexValues> getBufferedIndex(Index index)
-  {
-    return bufferedIndexes.get(index);
-  }
-
-  /**
-   * Put the specified buffered index values for the given index.
-   *
-   * @param index The index affected by the buffered values.
-   * @param bufferedValues The buffered values for the index.
-   */
-  public void putBufferedIndex(Index index, TreeMap<ByteString, BufferedIndexValues> bufferedValues)
-  {
-    bufferedIndexes.put(index, bufferedValues);
-  }
-
-  /**
    * Get the buffered VLV values for the given VLV index.
    *
    * @param vlvIndex The VLV index with the buffered values to retrieve.
@@ -204,18 +182,48 @@
    */
   public BufferedVLVValues getVLVIndex(VLVIndex vlvIndex)
   {
-    return bufferedVLVIndexes.get(vlvIndex);
+    BufferedVLVValues bufferedValues = bufferedVLVIndexes.get(vlvIndex);
+    if (bufferedValues == null)
+    {
+      bufferedValues = new BufferedVLVValues();
+      bufferedVLVIndexes.put(vlvIndex, bufferedValues);
+    }
+    return bufferedValues;
   }
 
   /**
-   * Put the specified buffered VLV values for the given VLV index.
+   * Get the buffered index values for the given index and keyBytes.
    *
-   * @param vlvIndex The VLV index affected by the buffered values.
-   * @param bufferedVLVValues The buffered values for the VLV index.
+   * @param index
+   *          The index for which to retrieve the buffered index values
+   * @param keyBytes
+   *          The keyBytes for which to retrieve the buffered index values
+   * @param bsComparator
+   *          The byte sequence comparator to use when retrieving the
+   *          BufferedIndexValues
+   * @return The buffered index values, it can never be null
    */
-  public void putBufferedVLVIndex(VLVIndex vlvIndex, BufferedVLVValues bufferedVLVValues)
+  BufferedIndexValues getBufferedIndexValues(Index index, ByteString keyBytes, Comparator<ByteSequence> bsComparator)
   {
-    bufferedVLVIndexes.put(vlvIndex, bufferedVLVValues);
+    BufferedIndexValues values = null;
+
+    TreeMap<ByteString, BufferedIndexValues> bufferedOperations = bufferedIndexes.get(index);
+    if (bufferedOperations == null)
+    {
+      bufferedOperations = new TreeMap<ByteString, BufferedIndexValues>(bsComparator);
+      bufferedIndexes.put(index, bufferedOperations);
+    }
+    else
+    {
+      values = bufferedOperations.get(keyBytes);
+    }
+
+    if (values == null)
+    {
+      values = new BufferedIndexValues();
+      bufferedOperations.put(keyBytes, values);
+    }
+    return values;
   }
 
   /**

--
Gitblit v1.10.0