From 0b75361593e78cb6a83d7f763080b36a60e3eb79 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 07 Mar 2016 15:13:46 +0000
Subject: [PATCH] OPENDJ-1342 Migrate AVA, RDN, and DN classes: Moved DN2ID.isChild() to DNKeyFormat

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DnKeyFormat.java |   38 +++++++++++++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DnKeyFormat.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DnKeyFormat.java
index 25cfb62..ee576b5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DnKeyFormat.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DnKeyFormat.java
@@ -27,12 +27,13 @@
   /** The format version used by this class to encode and decode a ByteString. */
   static final byte FORMAT_VERSION = 0x01;
 
+  // The following fields have been copied from the DN class in the SDK
   /** RDN separator for normalized byte string of a DN. */
-  public static final byte NORMALIZED_RDN_SEPARATOR = 0x00;
+  private static final byte NORMALIZED_RDN_SEPARATOR = 0x00;
   /** AVA separator for normalized byte string of a DN. */
-  static final byte NORMALIZED_AVA_SEPARATOR = 0x01;
+  private static final byte NORMALIZED_AVA_SEPARATOR = 0x01;
   /** Escape byte for normalized byte string of a DN. */
-  static final byte NORMALIZED_ESC_BYTE = 0x02;
+  private static final byte NORMALIZED_ESC_BYTE = 0x02;
 
   /**
    * Find the length of bytes that represents the superior DN of the given DN
@@ -107,4 +108,35 @@
     afterKey.appendByte(NORMALIZED_AVA_SEPARATOR);
     return afterKey;
   }
+
+  /**
+   * Check if two DN have a parent-child relationship.
+   *
+   * @param parent
+   *          The potential parent
+   * @param child
+   *          The potential child of parent
+   * @return true if child is a direct children of parent, false otherwise.
+   */
+  static boolean isChild(ByteSequence parent, ByteSequence child)
+  {
+    if (!child.startsWith(parent))
+    {
+      return false;
+    }
+    // Immediate children should only have one RDN separator past the parent length
+    int nbSeparator = 0;
+    for (int i = parent.length() ; i < child.length(); i++)
+    {
+      if (child.byteAt(i) == NORMALIZED_RDN_SEPARATOR)
+      {
+        nbSeparator++;
+        if (nbSeparator > 1)
+        {
+          return false;
+        }
+      }
+    }
+    return nbSeparator == 1;
+  }
 }

--
Gitblit v1.10.0