From 0f682577196526a40a6653bdd6ef8f44b5167dca Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 25 Feb 2011 15:23:20 +0000
Subject: [PATCH] Fix issue OPENDJ-75: Combine RFC 3672 and relative subtree specification syntax  https://bugster.forgerock.org/jira/browse/OPENDJ-75

---
 opends/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java |   61 +++++++-----------------------
 1 files changed, 14 insertions(+), 47 deletions(-)

diff --git a/opends/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java b/opends/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
index b747ba6..17f5893 100644
--- a/opends/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
+++ b/opends/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
@@ -23,11 +23,12 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 package org.opends.server.schema;
 
-import org.opends.messages.Message;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.messages.SchemaMessages.*;
@@ -41,11 +42,8 @@
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.api.SubstringMatchingRule;
-import org.opends.server.api.SubtreeSpecification;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.RFC3672SubtreeSpecification;
-import org.opends.server.core.RelativeSubtreeSpecification;
 import org.opends.server.types.*;
 
 
@@ -107,30 +105,8 @@
      */
     public SubtreeSpecification decode(AttributeValue value)
         throws DirectoryException {
-
-      // Try parsing the value with every subtree spec known.
-      SubtreeSpecification subTreeSpec = null;
-      String specString = value.toString();
-      try {
-        subTreeSpec = RFC3672SubtreeSpecification.valueOf(
-                rootDN, specString);
-        return subTreeSpec;
-      } catch (DirectoryException de) {}
-      try {
-        subTreeSpec = RelativeSubtreeSpecification.valueOf(
-                rootDN, specString);
-        return subTreeSpec;
-      } catch (DirectoryException de) {}
-
-      if (subTreeSpec == null) {
-        Message message =
-          ERR_ATTR_SYNTAX_SUBTREE_SPECIFICATION_INVALID.get(
-            specString);
-        throw new DirectoryException(
-                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
-      }
-
-      return subTreeSpec;
+      return SubtreeSpecification.valueOf(rootDN, value
+          .getValue().toString());
     }
   }
 
@@ -275,28 +251,19 @@
                                    MessageBuilder invalidReason) {
 
     // Use the subtree specification code to make this determination.
-    // Try parsing the value with every subtree spec known.
-    SubtreeSpecification subTreeSpec = null;
-    String specString = value.toString();
     try {
-      subTreeSpec = RFC3672SubtreeSpecification.valueOf(
-              DN.nullDN(), specString);
-      return true;
-    } catch (DirectoryException de) {}
-    try {
-      subTreeSpec = RelativeSubtreeSpecification.valueOf(
-              DN.nullDN(), specString);
-      return true;
-    } catch (DirectoryException de) {}
+      SubtreeSpecification.valueOf(DN.nullDN(), value.toString());
 
-    if (subTreeSpec == null) {
-      Message message =
-        ERR_ATTR_SYNTAX_SUBTREE_SPECIFICATION_INVALID.get(
-          specString);
-      invalidReason.append(message);
+      return true;
+    } catch (DirectoryException e) {
+      if (debugEnabled())
+      {
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
+      }
+
+      invalidReason.append(e.getMessageObject());
+      return false;
     }
-
-    return false;
   }
 
  /**

--
Gitblit v1.10.0