From 8368f9ae15d65cda433652abcddd2ddbf61024a0 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 02 Aug 2016 07:18:12 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead

---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java  |   42 ++----
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java    |   23 +--
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java |   21 +--
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java          |   34 ++---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java         |   80 ++++---------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java          |   99 ++++++----------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java             |   33 -----
 7 files changed, 108 insertions(+), 224 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
index 13c6a54..af08f49 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -26,21 +26,18 @@
 
 import javax.naming.CompositeName;
 import javax.naming.Name;
-import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.SearchResult;
 
 import org.forgerock.opendj.ldap.AttributeDescription;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AttributeBuilder;
 import org.opends.server.types.Entry;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.opends.server.types.OpenDsException;
 import org.opends.server.util.LDIFReader;
 
@@ -80,10 +77,10 @@
    * @throws NamingException if there is an error retrieving the attribute
    * values.
    */
-  public CustomSearchResult(SearchResult sr, String baseDN)
+  public CustomSearchResult(SearchResultEntry sr, String baseDN)
   throws NamingException
   {
-    String sName = sr.getName();
+    String sName = sr.getName().toString();
     Name name;
     if (baseDN != null && baseDN.length() > 0)
     {
@@ -116,32 +113,19 @@
 
     attributes = new HashMap<>();
     attrNames = new TreeSet<>();
-    Attributes attrs = sr.getAttributes();
-    if (attrs != null)
+    for (org.forgerock.opendj.ldap.Attribute attr : sr.getAllAttributes())
     {
-      NamingEnumeration<?> en = attrs.getAll();
-      try
+      String attrName = attr.getAttributeDescriptionAsString();
+      attrNames.add(attrName);
+      List<Object> values = new ArrayList<>();
+      for (ByteString v : attr)
       {
-        while (en.hasMore()) {
-          Attribute attr = (Attribute)en.next();
-          String attrName = attr.getID();
-          attrNames.add(attrName);
-          List<Object> values = new ArrayList<>();
-          for (int i=0; i<attr.size(); i++)
-          {
-            Object v = attr.get(i);
-            if (!"".equals(v.toString()))
-            {
-              values.add(v);
-            }
-          }
-          attributes.put(attrName.toLowerCase(), values);
+        if (!"".equals(v.toString()))
+        {
+          values.add(v);
         }
       }
-      finally
-      {
-        en.close();
-      }
+      attributes.put(attrName.toLowerCase(), values);
     }
     toString = calculateToString();
     hashCode = calculateHashCode();
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
index eb72da3..ef06eb5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
@@ -17,8 +17,13 @@
 
 package org.opends.guitools.controlpanel.task;
 
+import static org.forgerock.opendj.ldap.SearchScope.*;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
+import static org.opends.admin.ads.util.ConnectionUtils.*;
 import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.server.schema.SchemaConstants.*;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -27,19 +32,20 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import javax.naming.NameNotFoundException;
-import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-import javax.naming.ldap.BasicControl;
-import javax.naming.ldap.Control;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.TreePath;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.DN;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.forgerock.opendj.ldap.EntryNotFoundException;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.controls.SubtreeDeleteRequestControl;
+import org.forgerock.opendj.ldap.requests.DeleteRequest;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.browser.BrowserController;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
@@ -51,7 +57,6 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.server.schema.SchemaConstants;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.util.ServerConstants;
 
@@ -281,9 +286,8 @@
     }
   }
 
-  private void deleteSubtreeRecursively(ConnectionWrapper conn, DN dnToRemove,
-      TreePath path, ArrayList<BrowserNodeInfo> toNotify)
-  throws NamingException, DirectoryException
+  private void deleteSubtreeRecursively(ConnectionWrapper conn, DN dnToRemove, TreePath path,
+      List<BrowserNodeInfo> toNotify) throws NamingException, IOException, DirectoryException
   {
     lastDn = dnToRemove;
 
@@ -314,44 +318,30 @@
       });
     }
 
-    try
+    String filter = "(|(objectClass=*)(objectclass=ldapsubentry))";
+    SearchRequest request = newSearchRequest(dnToRemove, SINGLE_LEVEL, Filter.valueOf(filter), NO_ATTRIBUTES);
+    DN entryDNFound = dnToRemove;
+    try (ConnectionEntryReader entryDNs = conn.getConnection().search(request))
     {
-      SearchControls ctls = new SearchControls();
-      ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
-      String filter =
-        "(|(objectClass=*)(objectclass=ldapsubentry))";
-      ctls.setReturningAttributes(
-          new String[] { SchemaConstants.NO_ATTRIBUTES });
-      NamingEnumeration<SearchResult> entryDNs =
-          conn.getLdapContext().search(Utilities.getJNDIName(dnToRemove.toString()), filter, ctls);
-
-      DN entryDNFound = dnToRemove;
-      try
+      while (entryDNs.hasNext())
       {
-        while (entryDNs.hasMore())
+        SearchResultEntry sr = entryDNs.readEntry();
+        if (!sr.getName().equals(""))
         {
-          SearchResult sr = entryDNs.next();
-          if (!sr.getName().equals(""))
-          {
-            CustomSearchResult res =
-              new CustomSearchResult(sr, dnToRemove.toString());
-            entryDNFound = DN.valueOf(res.getDN());
-            deleteSubtreeRecursively(conn, entryDNFound, null, toNotify);
-          }
+          CustomSearchResult res = new CustomSearchResult(sr, dnToRemove.toString());
+          entryDNFound = DN.valueOf(res.getDN());
+          deleteSubtreeRecursively(conn, entryDNFound, null, toNotify);
         }
       }
-      finally
-      {
-        entryDNs.close();
-      }
-
-    } catch (NameNotFoundException nnfe) {
+    }
+    catch (EntryNotFoundException e)
+    {
       // The entry is not there: it has been removed
     }
 
     try
     {
-      conn.getLdapContext().destroySubcontext(Utilities.getJNDIName(dnToRemove.toString()));
+      conn.getConnection().delete(dnToRemove.toString());
       if (path != null)
       {
         toNotify.add(controller.getNodeInfoFromPath(path));
@@ -385,15 +375,15 @@
           }
         });
       }
-    } catch (NameNotFoundException nnfe)
+    }
+    catch (EntryNotFoundException ignored)
     {
       // The entry is not there: it has been removed
     }
   }
 
-  private void deleteSubtreeWithControl(ConnectionWrapper conn, DN dn,
-      TreePath path, ArrayList<BrowserNodeInfo> toNotify)
-  throws NamingException
+  private void deleteSubtreeWithControl(ConnectionWrapper conn, DN dn, TreePath path, List<BrowserNodeInfo> toNotify)
+      throws LdapException, NamingException
   {
     lastDn = dn;
     long t = System.currentTimeMillis();
@@ -418,26 +408,11 @@
     //  Use a copy of the dir context since we are using an specific
     // control to delete the subtree and this can cause
     // synchronization problems when the tree is refreshed.
-    ConnectionWrapper conn1 = null;
-    try
+    ControlPanelInfo info = getInfo();
+    try (ConnectionWrapper conn1 = cloneConnectionWrapper(conn, info.getConnectTimeout(), info.getTrustManager(), null))
     {
-      conn1 = ConnectionUtils.cloneConnectionWrapper(conn,
-          getInfo().getConnectTimeout(),
-          getInfo().getTrustManager(), null);
-      Control[] ctls = {
-          new BasicControl(ServerConstants.OID_SUBTREE_DELETE_CONTROL)};
-      conn1.getLdapContext().setRequestControls(ctls);
-      conn1.getLdapContext().destroySubcontext(Utilities.getJNDIName(dn.toString()));
-    }
-    finally
-    {
-      try
-      {
-        conn1.close();
-      }
-      catch (Throwable th)
-      {
-      }
+      DeleteRequest request = newDeleteRequest(dn).addControl(SubtreeDeleteRequestControl.newControl(true));
+      conn1.getConnection().delete(request);
     }
     nDeleted ++;
     lastProgressTime = t;
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 55b1d9a..295f34e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -16,6 +16,7 @@
  */
 package org.opends.guitools.controlpanel.task;
 
+import static org.forgerock.opendj.ldap.ModificationType.*;
 import static org.opends.guitools.controlpanel.util.Utilities.*;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.server.types.ExistingFileBehavior.*;
@@ -33,15 +34,14 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.naming.NamingException;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
 import javax.swing.SwingUtilities;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
+import org.forgerock.opendj.ldap.LdapException;
 import org.forgerock.opendj.ldap.ModificationType;
+import org.forgerock.opendj.ldap.requests.ModifyRequest;
+import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.schema.AttributeType;
 import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.forgerock.opendj.ldap.schema.SchemaBuilder;
@@ -278,16 +278,13 @@
     {
       try
       {
-        BasicAttribute attr = new BasicAttribute(getAttributeConfigName(element));
-        attr.add(getSchemaFileAttributeValue(element));
-        ModificationItem mod = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr);
-        getInfo().getConnection().getLdapContext().modifyAttributes(
-            ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
-            new ModificationItem[]  { mod });
+        ModifyRequest request = Requests.newModifyRequest(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT)
+            .addModification(DELETE, getAttributeConfigName(element), getSchemaFileAttributeValue(element));
+        getInfo().getConnection().getConnection().modify(request);
       }
-      catch (NamingException ne)
+      catch (LdapException e)
       {
-        throw new OnlineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne), ne);
+        throw new OnlineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(e), e);
       }
     }
     else
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
index b19edb3..b7d137e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
@@ -21,18 +21,14 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.BasicAttributes;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.TreePath;
 
 import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.adapter.server3x.Converters;
 import org.forgerock.opendj.ldap.DN;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.browser.BrowserController;
@@ -44,7 +40,6 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.server.config.ConfigConstants;
 import org.opends.server.types.Entry;
 
 /** The task launched when we must create an entry. */
@@ -169,29 +164,6 @@
         conn = getInfo().getConnection();
         useAdminCtx = true;
       }
-      BasicAttributes attrs = new BasicAttributes();
-      BasicAttribute objectclass =
-        new BasicAttribute(ConfigConstants.ATTR_OBJECTCLASS);
-      for (String oc : newEntry.getObjectClasses().values())
-      {
-        objectclass.add(oc);
-      }
-      attrs.put(objectclass);
-      for (org.opends.server.types.Attribute attr : newEntry.getAttributes())
-      {
-        Set<ByteString> values = new LinkedHashSet<>();
-        Iterator<ByteString> it = attr.iterator();
-        while (it.hasNext())
-        {
-          values.add(it.next());
-        }
-        BasicAttribute a = new BasicAttribute(attr.getAttributeDescription().toString());
-        for (ByteString value : values)
-        {
-          a.add(value.toByteArray());
-        }
-        attrs.put(a);
-      }
 
       SwingUtilities.invokeLater(new Runnable()
       {
@@ -206,8 +178,7 @@
         }
       });
 
-      conn.getLdapContext().createSubcontext(Utilities.getJNDIName(newEntry.getName().toString()),
-          attrs);
+      conn.getConnection().add(Converters.from(newEntry));
 
       SwingUtilities.invokeLater(new Runnable()
       {
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
index 02d0290..962efd3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
@@ -18,9 +18,9 @@
 
 import static org.forgerock.opendj.ldap.ModificationType.*;
 import static org.forgerock.util.Utils.*;
-import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.guitools.controlpanel.util.Utilities.*;
-import static org.opends.server.util.SchemaUtils.getElementSchemaFile;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.server.util.SchemaUtils.*;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -34,13 +34,12 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.naming.NamingException;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
 import javax.swing.SwingUtilities;
 
 import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.requests.ModifyRequest;
+import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.schema.AttributeType;
 import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.forgerock.opendj.ldap.schema.SchemaElement;
@@ -318,15 +317,13 @@
     });
     try
     {
-      final BasicAttribute attr = new BasicAttribute(getAttributeConfigName(schemaElement));
-      attr.add(schemaElement.toString());
-      final ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
-      getInfo().getConnection().getLdapContext().modifyAttributes(
-          ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, new ModificationItem[] { mod });
+      ModifyRequest request = Requests.newModifyRequest(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT)
+          .addModification(ADD, getAttributeConfigName(schemaElement), schemaElement.toString());
+      getInfo().getConnection().getConnection().modify(request);
     }
-    catch (NamingException ne)
+    catch (LdapException e)
     {
-      throw new OnlineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne), ne);
+      throw new OnlineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(e), e);
     }
     notifyConfigurationElementCreated(schemaElement);
     SwingUtilities.invokeLater(new Runnable()
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
index 5c43346..443edf2 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -16,8 +16,14 @@
  */
 package org.opends.guitools.controlpanel.ui;
 
+import static org.forgerock.opendj.ldap.SearchScope.*;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
+import static org.opends.admin.ads.util.ConnectionUtils.*;
+import static org.opends.guitools.controlpanel.browser.BrowserController.*;
 import static org.opends.guitools.controlpanel.ui.ControlCenterMainPane.*;
 import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.server.schema.SchemaConstants.*;
+import static org.opends.server.util.ServerConstants.*;
 
 import java.awt.CardLayout;
 import java.awt.Color;
@@ -33,6 +39,7 @@
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -48,9 +55,6 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
 import javax.swing.Box;
 import javax.swing.ComboBoxModel;
 import javax.swing.DefaultComboBoxModel;
@@ -67,11 +71,12 @@
 import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.forgerock.opendj.ldap.schema.ObjectClassType;
-import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.guitools.controlpanel.browser.BrowserController;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
 import org.opends.guitools.controlpanel.browser.IconPool;
 import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
@@ -95,7 +100,6 @@
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.quicksetup.ui.CustomHTMLEditorKit;
-import org.opends.server.schema.SchemaConstants;
 import org.opends.server.types.OpenDsException;
 import org.opends.server.util.ServerConstants;
 import org.opends.server.util.StaticUtils;
@@ -1992,33 +1996,15 @@
    */
   protected boolean entryExists(final String dn)
   {
-    boolean entryExists = false;
     try
     {
-      SearchControls ctls = new SearchControls();
-      ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
-      ctls.setReturningAttributes(new String[] { SchemaConstants.NO_ATTRIBUTES });
-      String filter = BrowserController.ALL_OBJECTS_FILTER;
-      NamingEnumeration<SearchResult> result =
-          getInfo().getConnection().getLdapContext().search(Utilities.getJNDIName(dn), filter, ctls);
-
-      try
-      {
-        while (result.hasMore())
-        {
-          SearchResult sr = result.next();
-          entryExists = sr != null;
-        }
-      }
-      finally
-      {
-        result.close();
-      }
+      SearchRequest request = newSearchRequest(dn, BASE_OBJECT, ALL_OBJECTS_FILTER, NO_ATTRIBUTES);
+      return getInfo().getConnection().getConnection().searchSingleEntry(request) != null;
     }
-    catch (Throwable t)
+    catch (LdapException e)
     {
+      return false;
     }
-    return entryExists;
   }
 
   /**
@@ -2034,45 +2020,29 @@
    */
   protected boolean hasObjectClass(final String dn, final String... objectClasses)
   {
-    try
+    SearchRequest request = newSearchRequest(dn, BASE_OBJECT, ALL_OBJECTS_FILTER, OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+    try (ConnectionEntryReader entryReader = getInfo().getConnection().getConnection().search(request))
     {
-      SearchControls ctls = new SearchControls();
-      ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
-      ctls.setReturningAttributes(new String[] { ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME });
-      String filter = BrowserController.ALL_OBJECTS_FILTER;
-      NamingEnumeration<SearchResult> result =
-          getInfo().getConnection().getLdapContext().search(Utilities.getJNDIName(dn), filter, ctls);
-
-      try
+      while (entryReader.hasNext())
       {
-        while (result.hasMore())
+        SearchResultEntry sr = entryReader.readEntry();
+        for (String oc : asSetOfString(sr, ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME))
         {
-          SearchResult sr = result.next();
-          Set<String> values = ConnectionUtils.getValues(sr, ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-          if (values != null)
+          for (String objectClass : objectClasses)
           {
-            for (String s : values)
+            if (oc.equalsIgnoreCase(objectClass))
             {
-              for (String objectClass : objectClasses)
-              {
-                if (s.equalsIgnoreCase(objectClass))
-                {
-                  return true;
-                }
-              }
+              return true;
             }
           }
         }
       }
-      finally
-      {
-        result.close();
-      }
+      return false;
     }
-    catch (Throwable t)
+    catch (IOException e)
     {
+      return false;
     }
-    return false;
   }
 
   /**
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
index 1c27e7d..06e8e81 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
@@ -17,13 +17,15 @@
 
 package org.opends.guitools.controlpanel.util;
 
+import static org.forgerock.opendj.ldap.SearchScope.*;
+
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-
+import org.forgerock.opendj.ldap.requests.Requests;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
 import org.opends.guitools.controlpanel.event.EntryReadErrorEvent;
@@ -59,22 +61,14 @@
   public CustomSearchResult processBackgroundTask() throws Throwable
   {
     isOver = false;
-    NamingEnumeration<SearchResult> en = null;
-    try
+    final String filter = "(|(objectclass=*)(objectclass=ldapsubentry))";
+    SearchRequest request = Requests.newSearchRequest(dn, BASE_OBJECT, filter, "*", "+");
+    try (ConnectionEntryReader entryReader = conn.getConnection().search(request))
     {
-      SearchControls controls = new SearchControls();
-
-      String[] attrs = {"*", "+"};
-      controls.setReturningAttributes(attrs);
-      controls.setSearchScope(SearchControls.OBJECT_SCOPE);
-      final String filter = "(|(objectclass=*)(objectclass=ldapsubentry))";
-
-      en = conn.getLdapContext().search(Utilities.getJNDIName(dn), filter, controls);
-
-      SearchResult sr = null;
-      while (en.hasMore())
+      SearchResultEntry sr = null;
+      while (entryReader.hasNext())
       {
-        sr = en.next();
+        sr = entryReader.readEntry();
       }
 
       return new CustomSearchResult(sr, dn);
@@ -85,10 +79,6 @@
       {
         isOver = true;
       }
-      if (en != null)
-      {
-        en.close();
-      }
     }
   }
 

--
Gitblit v1.10.0