From dc3a55a061bd4fa40db5c4eb360ecfa9b535f84c Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 01 Dec 2014 15:43:30 +0000
Subject: [PATCH] DBTest.java: In dumpDatabaseContainer(): - extracted method parseKeyValue(): Interestingly found a bug on parsing max key value: it was assigning to "start" instead of "end" for VLVIndex. - extracted method getComparator() and removed duplicate cases which use the default comparator anyway. Code cleanup.

---
 opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java |  193 ++++++++++++++++--------------------------------
 1 files changed, 64 insertions(+), 129 deletions(-)

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 55c502e..4a7c575 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
@@ -28,6 +28,7 @@
 
 import java.io.OutputStream;
 import java.io.PrintStream;
+import java.text.ParseException;
 import java.util.*;
 
 import org.forgerock.i18n.LocalizableMessage;
@@ -173,8 +174,7 @@
     JDKLogging.disableLogging();
 
     LocalizableMessage toolDescription = INFO_DESCRIPTION_DBTEST_TOOL.get();
-    this.parser = new SubCommandArgumentParser(this.getClass().getName(),
-                                               toolDescription, false);
+    this.parser = new SubCommandArgumentParser(getClass().getName(), toolDescription, false);
   }
 
   /** Displays the provided message followed by a help usage reference. */
@@ -939,14 +939,7 @@
           builder.appendCell(dc.getName().replace(toReplace, ""));
           builder.appendCell(dc.getClass().getSimpleName());
           builder.appendCell(dc.getName());
-          if(dc instanceof Index)
-          {
-            builder.appendCell(ec.getState().getIndexTrustState(null, dc));
-          }
-          else if(dc instanceof VLVIndex)
-          {
-            builder.appendCell(ec.getState().getIndexTrustState(null, dc));
-          }
+          builder.appendCell(ec.getState().getIndexTrustState(null, dc));
           builder.appendCell(dc.getRecordCount());
 
           if(dc instanceof Index)
@@ -1153,7 +1146,6 @@
         DatabaseEntry data = new DatabaseEntry();
         LockMode lockMode = LockMode.DEFAULT;
         OperationStatus status;
-        Comparator<byte[]> defaultComparator = ByteSequence.BYTE_ARRAY_COMPARATOR;
         byte[] start = null;
         byte[] end = null;
         int minSize = -1;
@@ -1192,39 +1184,7 @@
         {
           try
           {
-            if(minKeyValue.getValue().startsWith("0x"))
-            {
-              start = hexStringToByteArray(minKeyValue.getValue().substring(2));
-            }
-            else
-            {
-              if(databaseContainer instanceof DN2ID ||
-                  databaseContainer instanceof DN2URI)
-              {
-                // Encode the value as a DN
-                start = StaticUtils.getBytes(
-                    DN.valueOf(minKeyValue.getValue()).toNormalizedString());
-              }
-              else if(databaseContainer instanceof ID2Entry)
-              {
-                // Encode the value as an entryID
-                start = JebFormat.entryIDToDatabase(
-                    Long.parseLong(minKeyValue.getValue()));
-              }
-              else if(databaseContainer instanceof VLVIndex)
-              {
-                // Encode the value as a size/value pair
-                byte[] vBytes = StaticUtils.getBytes(minKeyValue.getValue());
-                ByteStringBuilder builder = new ByteStringBuilder();
-                builder.appendBERLength(vBytes.length);
-                builder.append(vBytes);
-                start = builder.toByteArray();
-              }
-              else
-              {
-                start = StaticUtils.getBytes(minKeyValue.getValue());
-              }
-            }
+            start = parseKeyValue(minKeyValue.getValue(), databaseContainer);
           }
           catch(Exception e)
           {
@@ -1239,39 +1199,7 @@
         {
           try
           {
-            if(maxKeyValue.getValue().startsWith("0x"))
-            {
-              end = hexStringToByteArray(maxKeyValue.getValue().substring(2));
-            }
-            else
-            {
-              if(databaseContainer instanceof DN2ID ||
-                  databaseContainer instanceof DN2URI)
-              {
-                // Encode the value as a DN
-                end = StaticUtils.getBytes(
-                    DN.valueOf(maxKeyValue.getValue()).toNormalizedString());
-              }
-              else if(databaseContainer instanceof ID2Entry)
-              {
-                // Encode the value as an entryID
-                end = JebFormat.entryIDToDatabase(
-                    Long.parseLong(maxKeyValue.getValue()));
-              }
-              else if(databaseContainer instanceof VLVIndex)
-              {
-                // Encode the value as a size/value pair
-                byte[] vBytes = StaticUtils.getBytes(maxKeyValue.getValue());
-                ByteStringBuilder builder = new ByteStringBuilder();
-                builder.appendBERLength(vBytes.length);
-                builder.append(vBytes);
-                start = builder.toByteArray();
-              }
-              else
-              {
-                end = StaticUtils.getBytes(maxKeyValue.getValue());
-              }
-            }
+            end = parseKeyValue(maxKeyValue.getValue(), databaseContainer);
           }
           catch(Exception e)
           {
@@ -1304,45 +1232,10 @@
           }
 
           // Make sure we haven't gone pass the max value yet
-          if(end != null)
+          if(end != null
+              && getComparator(databaseContainer).compare(key.getData(), end) > 0)
           {
-            if(databaseContainer instanceof DN2ID)
-            {
-              if(defaultComparator.compare(key.getData(), end) > 0)
-              {
-                break;
-              }
-            }
-            else if(databaseContainer instanceof DN2URI)
-            {
-              if(defaultComparator.compare(key.getData(), end) > 0)
-              {
-                break;
-              }
-            }
-            else if(databaseContainer instanceof Index)
-            {
-              if(((Index)databaseContainer).indexer.getComparator().
-                  compare(key.getData(), end) > 0)
-              {
-                break;
-              }
-            }
-            else if(databaseContainer instanceof VLVIndex)
-            {
-              if(((VLVIndex)databaseContainer).comparator.
-                  compare(key.getData(), end) > 0)
-              {
-                break;
-              }
-            }
-            else
-            {
-              if (defaultComparator.compare(key.getData(), end) > 0)
-              {
-                break;
-              }
-            }
+            break;
           }
 
           if (!statsOnly.isPresent())
@@ -1366,9 +1259,7 @@
                 }
                 catch(Exception e)
                 {
-                  LocalizableMessage message =
-                    ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
-                  printMessage(message);
+                  printMessage(ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e)));
                 }
                 formatedData = String.valueOf(
                   JebFormat.entryIDFromDatabase(data.getData()));
@@ -1389,9 +1280,7 @@
                 }
                 catch(Exception e)
                 {
-                  LocalizableMessage message =
-                    ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
-                  printMessage(message);
+                  printMessage(ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e)));
                 }
               }
               else if(databaseContainer instanceof DN2URI)
@@ -1403,9 +1292,7 @@
                 }
                 catch(Exception e)
                 {
-                  LocalizableMessage message =
-                    ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
-                  printMessage(message);
+                  printMessage(ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e)));
                 }
                 formatedData = new String(key.getData());
                 dataLabel = INFO_LABEL_DBTEST_URI.get();
@@ -1470,8 +1357,7 @@
                     }
 
                     byte[] valueBytes = new byte[valueLength];
-                    System.arraycopy(keyBytes, pos, valueBytes, 0,
-                                   valueLength);
+                    System.arraycopy(keyBytes, pos, valueBytes, 0, valueLength);
                     builder.append(sortKey.getAttributeType().getNameOrOID());
                     builder.append(": ");
                     if(valueBytes.length == 0)
@@ -1537,9 +1423,7 @@
                 }
                 catch(Exception e)
                 {
-                  LocalizableMessage message =
-                    ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
-                  printMessage(message);
+                  printMessage(ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e)));
                 }
               }
             }
@@ -1595,6 +1479,57 @@
     }
   }
 
+  private byte[] parseKeyValue(String value, DatabaseContainer databaseContainer)
+      throws ParseException, DirectoryException
+  {
+    if(value.startsWith("0x"))
+    {
+      return hexStringToByteArray(value.substring(2));
+    }
+    else if(databaseContainer instanceof DN2ID
+        || databaseContainer instanceof DN2URI)
+    {
+      // Encode the value as a DN
+      return StaticUtils.getBytes(
+          DN.valueOf(value).toNormalizedString());
+    }
+    else if(databaseContainer instanceof ID2Entry)
+    {
+      // Encode the value as an entryID
+      return JebFormat.entryIDToDatabase(
+          Long.parseLong(value));
+    }
+    else if(databaseContainer instanceof VLVIndex)
+    {
+      // Encode the value as a size/value pair
+      byte[] vBytes = StaticUtils.getBytes(value);
+      ByteStringBuilder builder = new ByteStringBuilder();
+      builder.appendBERLength(vBytes.length);
+      builder.append(vBytes);
+      return builder.toByteArray();
+    }
+    else
+    {
+      return StaticUtils.getBytes(value);
+    }
+  }
+
+  private Comparator<byte[]> getComparator(DatabaseContainer databaseContainer)
+  {
+    if(databaseContainer instanceof Index)
+    {
+      return ((Index)databaseContainer).indexer.getComparator();
+    }
+    else if(databaseContainer instanceof VLVIndex)
+    {
+      return ((VLVIndex)databaseContainer).comparator;
+    }
+    else
+    { // default comparator
+      return ByteSequence.BYTE_ARRAY_COMPARATOR;
+    }
+  }
+
   private Map<LocalDBBackendCfg, BackendImpl> getJEBackends()
   {
     ArrayList<Backend> backendList = new ArrayList<Backend>();

--
Gitblit v1.10.0