From 80e2d352bedcafd7b83fc85f07239655fadb66dd Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 21 Jul 2014 12:22:07 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend   to support cn=changelog CR-4052

---
 opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
index 1a6fe96..00970f5 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -526,20 +526,32 @@
         {
           // Do nothing here and let AciHandler deal with it.
         }
-
-        // NYI -- Add support for additional controls.
-
-        else if (c.isCritical())
+        else if (OID_ECL_COOKIE_EXCHANGE_CONTROL.equals(oid))
         {
-          if ((backend == null) || (! backend.supportsControl(oid)))
+          if (c.isCritical() && !backendSupportsControl(oid))
           {
             throw new DirectoryException(
-                           ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
-                           ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL.get(oid));
+                ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
+                ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL_ECL_COOKIE_EXCHANGE.get(backend.getBackendID()));
           }
+          setECLRequestControl(getRequestControl(ExternalChangelogRequestControl.DECODER));
+        }
+        // NYI -- Add support for additional controls.
+
+        else if (c.isCritical() && !backendSupportsControl(oid))
+        {
+          throw new DirectoryException(
+              ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
+              ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL.get(oid));
         }
       }
     }
   }
+
+  /** Indicates if the backend supports the control corresponding to provided oid. */
+  private boolean backendSupportsControl(final String oid)
+  {
+    return backend != null && backend.supportsControl(oid);
+  }
 }
 

--
Gitblit v1.10.0