From ea900ba71bf5eb5e4126583e1852c6982f9ce5a7 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 14 Oct 2014 15:44:44 +0000
Subject: [PATCH] (CR-4811) Converted opendj3 code to use SearchRequest like API

---
 opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java |  132 ++++++++++++++++++++++---------------------
 1 files changed, 67 insertions(+), 65 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java b/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
index 7212081..cb16e87 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
@@ -37,8 +37,8 @@
 import javax.management.AttributeList;
 import javax.management.AttributeNotFoundException;
 import javax.management.DynamicMBean;
-import javax.management.MBeanAttributeInfo;
 import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanConstructorInfo;
 import javax.management.MBeanException;
 import javax.management.MBeanInfo;
@@ -50,6 +50,7 @@
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.SearchScope;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.AlertGenerator;
@@ -60,13 +61,18 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.internal.InternalSearchOperation;
+import org.opends.server.protocols.internal.SearchRequest;
 import org.opends.server.protocols.jmx.Credential;
 import org.opends.server.protocols.jmx.JmxClientConnection;
 import org.opends.server.protocols.ldap.LDAPFilter;
-import org.opends.server.types.*;
-import org.forgerock.opendj.ldap.ResultCode;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.InvokableMethod;
+import org.opends.server.types.LDAPException;
 
 import static org.opends.messages.ConfigMessages.*;
+import static org.opends.server.protocols.internal.Requests.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -470,49 +476,36 @@
     //
     // prepare the ldap search
 
-    LDAPFilter filter;
     try
     {
-      filter = LDAPFilter.decode("objectclass=*");
-    }
-    catch (LDAPException e)
-    {
-      logger.traceException(e);
-
-      LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
-          get(attributeName, configEntryDN, getExceptionMessage(e));
-      throw new AttributeNotFoundException(message.toString());
-    }
-
-    //
-    // Perform the Ldap operation for
-    //  - ACI Check
-    //  - Loggin purpose
-    InternalSearchOperation op=null;
-    if (clientConnection instanceof JmxClientConnection) {
+      //
+      // Perform the Ldap operation for
+      //  - ACI Check
+      //  - Loggin purpose
+      InternalSearchOperation op=null;
+      if (clientConnection instanceof JmxClientConnection) {
         op = ((JmxClientConnection)clientConnection).processSearch(
             ByteString.valueOf(configEntryDN.toString()),
-             SearchScope.BASE_OBJECT, filter);
-    }
-    else if (clientConnection instanceof InternalClientConnection) {
-        op = ((InternalClientConnection)clientConnection).processSearch(
-            ByteString.valueOf(configEntryDN.toString()),
-             SearchScope.BASE_OBJECT, filter);
-    }
-    // BUG : op may be null
-    ResultCode rc = op.getResultCode();
-    if (rc != ResultCode.SUCCESS) {
-       clientConnection = null ;
+                SearchScope.BASE_OBJECT, getTrueFilter());
+      }
+      else if (clientConnection instanceof InternalClientConnection) {
+        SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT, "(objectclass=*)");
+        op = ((InternalClientConnection) clientConnection).processSearch(request);
+      }
+      // BUG : op may be null
+      ResultCode rc = op.getResultCode();
+      if (rc != ResultCode.SUCCESS) {
+        LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+            get(attributeName, configEntryDN, op.getErrorMessage());
+        throw new AttributeNotFoundException(message.toString());
+      }
 
-       LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
-         get(attributeName, configEntryDN, op.getErrorMessage());
-       throw new AttributeNotFoundException(message.toString());
-    }
-
-    try
-    {
       return getJmxAttribute(attributeName);
     }
+    catch (AttributeNotFoundException e)
+    {
+      throw e;
+    }
     catch (Exception e)
     {
       logger.traceException(e);
@@ -523,6 +516,20 @@
     }
   }
 
+  private LDAPFilter getTrueFilter()
+  {
+    try
+    {
+      return LDAPFilter.decode("(objectclass=*)");
+    }
+    catch (LDAPException e)
+    {
+      // can never happen
+      logger.traceException(e);
+      return null;
+    }
+  }
+
   /**
    * Set the value of a specific attribute of the Dynamic MBean.  In this case,
    * it will always throw {@code InvalidAttributeValueException} because setting
@@ -564,37 +571,35 @@
     }
 
     //
-    // prepare the ldap search
-    LDAPFilter filter;
-    try
-    {
-      filter = LDAPFilter.decode("objectclass=*");
+    // Perform the Ldap operation for
+    //  - ACI Check
+    //  - Loggin purpose
+    InternalSearchOperation op = null;
+    if (clientConnection instanceof JmxClientConnection) {
+      op = ((JmxClientConnection)clientConnection).processSearch(
+          ByteString.valueOf(configEntryDN.toString()),
+              SearchScope.BASE_OBJECT, getTrueFilter());
     }
-    catch (LDAPException e)
+    else if (clientConnection instanceof InternalClientConnection) {
+      try
+      {
+        SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT, "(objectclass=*)");
+        op = ((InternalClientConnection) clientConnection).processSearch(request);
+      }
+      catch (DirectoryException e)
+      {
+        logger.traceException(e);
+      }
+    }
+
+    if (op == null)
     {
       return null;
     }
 
-    //
-    // Perform the Ldap operation for
-    //  - ACI Check
-    //  - Loggin purpose
-    InternalSearchOperation op=null;
-    if (clientConnection instanceof JmxClientConnection) {
-      op = ((JmxClientConnection)clientConnection).processSearch(
-          ByteString.valueOf(configEntryDN.toString()),
-        SearchScope.BASE_OBJECT, filter);
-    }
-    else if (clientConnection instanceof InternalClientConnection) {
-      op = ((InternalClientConnection)clientConnection).processSearch(
-          ByteString.valueOf(configEntryDN.toString()),
-        SearchScope.BASE_OBJECT, filter);
-    }
-    // BUG: op may be null
     ResultCode rc = op.getResultCode();
     if (rc != ResultCode.SUCCESS)
     {
-      clientConnection = null ;
       return null;
     }
 
@@ -668,7 +673,6 @@
     }
 
     return attrList;
-
   }
 
   /**
@@ -865,5 +869,3 @@
     return clientConnection;
   }
 }
-
-

--
Gitblit v1.10.0