From 867e35d3947bd5f2e6c0baaf502312ca618a00ea Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 05 Aug 2016 18:35:35 +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/task/ModifyEntryTask.java       |  166 +++++-------
 /dev/null                                                                                           |   38 --
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java      |   39 +-
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/AddToGroupTask.java        |  131 ++-------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java      |   32 --
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java |   93 ++----
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java                  |  120 ++------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java             |   41 ---
 opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java                   |   64 ----
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java  |   18 
 10 files changed, 202 insertions(+), 540 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/SubtreeDeleteControl.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/SubtreeDeleteControl.java
deleted file mode 100644
index d3d0dc8..0000000
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/SubtreeDeleteControl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The contents of this file are subject to the terms of the Common Development and
- * Distribution License (the License). You may not use this file except in compliance with the
- * License.
- *
- * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
- * specific language governing permission and limitations under the License.
- *
- * When distributing Covered Software, include this CDDL Header Notice in each file and include
- * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
- * Header, with the fields enclosed by brackets [] replaced by your own identifying
- * information: "Portions Copyright [year] [name of copyright owner]".
- *
- * Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2016 ForgeRock AS.
- */
-package org.opends.admin.ads;
-
-import javax.naming.ldap.BasicControl;
-
-/** This class implements the LDAP subtree delete control for JNDI. */
-class SubtreeDeleteControl extends BasicControl
-{
-  /**
-   * The serial version identifier required to satisfy the compiler
-   * because this class implements <CODE>javax.ldap.naming.Control</CODE>,
-   * which extends the <CODE>java.io.Serializable</CODE> interface.
-   * This value was generated using the <CODE>serialver</CODE>
-   * command-line utility included with the Java SDK.
-   */
-  static final long serialVersionUID = 3941576361457157921L;
-
-  /** Default constructor. */
-  public SubtreeDeleteControl()
-  {
-    super("1.2.840.113556.1.4.805");
-  }
-}
diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
index 82ad403..dfd91b1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 import java.net.ConnectException;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Set;
 
@@ -27,8 +26,6 @@
 import javax.naming.Context;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
 import javax.naming.ldap.InitialLdapContext;
@@ -487,67 +484,6 @@
   }
 
   /**
-   * Returns the String representation of the first value of an attribute in a
-   * LDAP entry.
-   * @param entry the entry.
-   * @param attrName the attribute name.
-   * @return the String representation of the first value of an attribute in a
-   * LDAP entry.
-   * @throws NamingException if there is an error processing the entry.
-   */
-  public static String getFirstValue(SearchResult entry, String attrName)
-  throws NamingException
-  {
-    String v = null;
-    Attributes attrs = entry.getAttributes();
-    if (attrs != null)
-    {
-      Attribute attr = attrs.get(attrName);
-      if (attr != null && attr.size() > 0)
-      {
-        Object o = attr.get();
-        if (o instanceof String)
-        {
-          v = (String)o;
-        }
-        else
-        {
-          v = String.valueOf(o);
-        }
-      }
-    }
-    return v;
-  }
-
-  /**
-   * Returns a Set with the String representation of the values of an attribute
-   * in a LDAP entry.  The returned Set will never be null.
-   * @param entry the entry.
-   * @param attrName the attribute name.
-   * @return a Set with the String representation of the values of an attribute
-   * in a LDAP entry.
-   * @throws NamingException if there is an error processing the entry.
-   */
-  public static Set<String> getValues(SearchResult entry, String attrName)
-  throws NamingException
-  {
-    Set<String> values = new HashSet<>();
-    Attributes attrs = entry.getAttributes();
-    if (attrs != null)
-    {
-      Attribute attr = attrs.get(attrName);
-      if (attr != null)
-      {
-        for (int i=0; i<attr.size(); i++)
-        {
-          values.add((String)attr.get(i));
-        }
-      }
-    }
-    return values;
-  }
-
-  /**
    * Returns the first attribute value in this attribute decoded as a UTF-8 string.
    *
    * @param sr
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
index 81cc654..d201ebf 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
@@ -62,7 +62,6 @@
 import org.opends.guitools.controlpanel.ui.nodes.SuffixNode;
 import org.opends.guitools.controlpanel.ui.renderer.BrowserCellRenderer;
 import org.opends.guitools.controlpanel.util.NumSubordinateHacker;
-import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.types.HostPort;
 import org.opends.server.types.LDAPURL;
@@ -914,15 +913,14 @@
     if (node instanceof SuffixNode)
     {
       DN dn = node.getDN();
-      String dnStr = dn.toString();
-      return dn.equals(ADSContext.getAdministrationSuffixDN()) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_TASK_ROOT) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_CONFIG_ROOT) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_MONITOR_ROOT) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_TRUST_STORE_ROOT) ||
-          Utilities.areDnsEqual(dnStr, ConfigConstants.DN_BACKUP_ROOT) ||
-          Utilities.areDnsEqual(dnStr, DN_EXTERNAL_CHANGELOG_ROOT);
+      return dn.equals(ADSContext.getAdministrationSuffixDN())
+          || dn.equals(DN.valueOf(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT))
+          || dn.equals(DN.valueOf(ConfigConstants.DN_TASK_ROOT))
+          || dn.equals(DN.valueOf(ConfigConstants.DN_CONFIG_ROOT))
+          || dn.equals(DN.valueOf(ConfigConstants.DN_MONITOR_ROOT))
+          || dn.equals(DN.valueOf(ConfigConstants.DN_TRUST_STORE_ROOT))
+          || dn.equals(DN.valueOf(ConfigConstants.DN_BACKUP_ROOT))
+          || dn.equals(DN.valueOf(DN_EXTERNAL_CHANGELOG_ROOT));
     }
     else
     {
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
index f28f19d..37d01c0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
@@ -30,12 +30,7 @@
 
 import javax.naming.InterruptedNamingException;
 import javax.naming.NameNotFoundException;
-import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.SizeLimitExceededException;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-import javax.naming.ldap.LdapName;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.TreeNode;
 
@@ -345,42 +340,36 @@
    * Performs the search in the case the user specified a custom filter.
    * @param dn the parent DN we perform the search from.
    * @param conn the connection to be used.
-   * @throws NamingException if a problem occurred.
+   * @throws IOException if a problem occurred.
    */
-  private void searchForCustomFilter(String dn, ConnectionWrapper conn)
-  throws NamingException
+  private void searchForCustomFilter(String dn, ConnectionWrapper conn) throws IOException
   {
-    SearchControls ctls = controller.getBasicSearchControls();
-    ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-    ctls.setReturningAttributes(new String[]{});
-    ctls.setCountLimit(1);
-    NamingEnumeration<SearchResult> s = conn.getLdapContext().search(new LdapName(dn),
-              controller.getFilter(),
-              ctls);
-    try
+    SearchRequest request = newSearchRequest(dn, WHOLE_SUBTREE, controller.getFilter())
+        .setSizeLimit(1);
+    try (ConnectionEntryReader entryReader = conn.getConnection().search(request))
     {
-      if (!s.hasMore())
+      if (!entryReader.hasNext())
       {
-        throw new NameNotFoundException("Entry "+dn+
+        throw LdapException.newLdapException(ResultCode.NO_SUCH_OBJECT, "Entry " + dn +
             " does not verify filter "+controller.getFilter());
       }
-      while (s.hasMore())
+      while (entryReader.hasNext())
       {
-        s.next();
+        entryReader.readEntry();
       }
     }
-    catch (SizeLimitExceededException slme)
+    catch (LdapException e)
     {
+      if (!e.getResult().getResultCode().equals(ResultCode.SIZE_LIMIT_EXCEEDED))
+      {
+        throw e;
+      }
       // We are just searching for an entry, but if there is more than one
       // this exception will be thrown.  We call sr.hasMore after the
       // first entry has been retrieved to avoid sending a systematic
       // abandon when closing the s NamingEnumeration.
       // See CR 6976906.
     }
-    finally
-    {
-      s.close();
-    }
   }
 
   /** Read the local entry associated to the current node. */
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/AddToGroupTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/AddToGroupTask.java
index c6ab786..02bdb3a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/AddToGroupTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/AddToGroupTask.java
@@ -14,30 +14,35 @@
  * Copyright 2008-2010 Sun Microsystems, Inc.
  * Portions Copyright 2013-2016 ForgeRock AS.
  */
-
 package org.opends.guitools.controlpanel.task;
 
+import static org.forgerock.opendj.ldap.ModificationType.*;
+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.messages.AdminToolMessages.*;
+import static org.opends.server.util.ServerConstants.*;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
 import javax.swing.SwingUtilities;
 
-import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.guitools.controlpanel.browser.BrowserController;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.Modification;
+import org.forgerock.opendj.ldap.requests.ModifyRequest;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
+import org.forgerock.opendj.ldif.ConnectionEntryReader;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
@@ -45,9 +50,6 @@
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.messages.AdminToolMessages;
-import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.opendj.ldap.DN;
-import org.opends.server.util.ServerConstants;
 
 /** The class that is in charge of adding a set of entries to a set of static groups. */
 public class AddToGroupTask extends Task
@@ -154,14 +156,11 @@
     {
       for (final DN groupDn : groupDns)
       {
-        final Collection<ModificationItem> modifications =
-          getModifications(groupDn, dns);
+        ModifyRequest request = newModifyRequest(groupDn);
+        addModifications(groupDn, dns, request);
+        final List<Modification> modifications = request.getModifications();
         if (!modifications.isEmpty())
         {
-          ModificationItem[] mods =
-          new ModificationItem[modifications.size()];
-          modifications.toArray(mods);
-
           SwingUtilities.invokeLater(new Runnable()
           {
             @Override
@@ -175,8 +174,7 @@
             }
           });
 
-          getInfo().getConnection().getLdapContext().modifyAttributes(
-              Utilities.getJNDIName(groupDn.toString()), mods);
+          getInfo().getConnection().getConnection().modify(request);
 
           SwingUtilities.invokeLater(new Runnable()
           {
@@ -203,89 +201,36 @@
    * Returns the modifications that must be made to the provided group.
    * @param groupDn the DN of the static group that must be updated.
    * @param dns the list of entry DNs that must be added to the group.
-   * @return the list of modifications (in form of ModificationItem) that
-   *  must be made to the provided group.
-   * @throws NamingException if an error occurs.
+   * @param modRequest
+   * @throws IOException if an error occurs.
    */
-  private Collection<ModificationItem> getModifications(DN groupDn,
-  Set<DN> dns) throws NamingException
+  private void addModifications(DN groupDn, Set<DN> dns, ModifyRequest modRequest) throws IOException
   {
-    ArrayList<ModificationItem> modifications = new ArrayList<>();
-
     // Search for the group entry
-    SearchControls ctls = new SearchControls();
-    ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
-    ctls.setReturningAttributes(
-        new String[] {
-            ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME,
-            ServerConstants.ATTR_MEMBER,
-            ServerConstants.ATTR_UNIQUE_MEMBER
-        });
-    String filter = BrowserController.ALL_OBJECTS_FILTER;
-    NamingEnumeration<SearchResult> result =
-      getInfo().getConnection().getLdapContext().search(
-          Utilities.getJNDIName(groupDn.toString()),
-          filter, ctls);
+    SearchRequest searchRequest = newSearchRequest(groupDn, BASE_OBJECT, Filter.valueOf(ALL_OBJECTS_FILTER),
+        OBJECTCLASS_ATTRIBUTE_TYPE_NAME,
+        ATTR_MEMBER,
+        ATTR_UNIQUE_MEMBER);
 
-    try
+    try (ConnectionEntryReader reader = getInfo().getConnection().getConnection().search(searchRequest))
     {
-      String memberAttr = ServerConstants.ATTR_MEMBER;
-      while (result.hasMore())
+      String memberAttr = ATTR_MEMBER;
+      while (reader.hasNext())
       {
-        SearchResult sr = result.next();
-        Set<String> objectClasses =
-          ConnectionUtils.getValues(sr, ServerConstants
-            .OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-        if (objectClasses.contains(ServerConstants.OC_GROUP_OF_UNIQUE_NAMES))
+        SearchResultEntry sr = reader.readEntry();
+        Set<String> objectClasses = asSetOfString(sr, OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+        if (objectClasses.contains(OC_GROUP_OF_UNIQUE_NAMES))
         {
-          memberAttr = ServerConstants.ATTR_UNIQUE_MEMBER;
+          memberAttr = ATTR_UNIQUE_MEMBER;
         }
-        Set<String> values = ConnectionUtils.getValues(sr, memberAttr);
-        Set<String> dnsToAdd = new LinkedHashSet<>();
-        if (values != null)
-        {
-          for (DN newDn : dns)
-          {
-            boolean found = false;
-            for (String dn : values)
-            {
-              if (Utilities.areDnsEqual(dn, newDn.toString()))
-              {
-                found = true;
-                break;
-              }
-            }
-            if (!found)
-            {
-              dnsToAdd.add(newDn.toString());
-            }
-          }
-        }
-        else
-        {
-          for (DN newDn : dns)
-          {
-            dnsToAdd.add(newDn.toString());
-          }
-        }
+        Set<DN> dnsToAdd = new LinkedHashSet<>(dns);
+        // remove all existing members
+        dnsToAdd.removeAll(asSetOfDN(sr, memberAttr));
         if (!dnsToAdd.isEmpty())
         {
-          Attribute attribute = new BasicAttribute(memberAttr);
-          for (String dn : dnsToAdd)
-          {
-            attribute.add(dn);
-          }
-          modifications.add(new ModificationItem(
-              DirContext.ADD_ATTRIBUTE,
-              attribute));
+          modRequest.addModification(ADD, memberAttr, dnsToAdd.toArray());
         }
       }
     }
-    finally
-    {
-      result.close();
-    }
-    return modifications;
   }
 }
-
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index 7b87777..e1136ec 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -16,6 +16,8 @@
  */
 package org.opends.guitools.controlpanel.task;
 
+import static org.forgerock.opendj.ldap.ModificationType.*;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
 
@@ -26,11 +28,6 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
 import javax.swing.SwingUtilities;
 import javax.swing.tree.TreePath;
 
@@ -39,7 +36,12 @@
 import org.forgerock.opendj.ldap.AttributeDescription;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.LinkedAttribute;
+import org.forgerock.opendj.ldap.Modification;
+import org.forgerock.opendj.ldap.ModificationType;
 import org.forgerock.opendj.ldap.RDN;
+import org.forgerock.opendj.ldap.requests.ModifyRequest;
 import org.forgerock.opendj.ldap.schema.AttributeType;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.browser.BrowserController;
@@ -65,8 +67,8 @@
   private boolean hasModifications;
   private org.forgerock.opendj.ldap.Entry oldEntry;
   private DN oldDn;
-  private ArrayList<ModificationItem> modifications;
-  private ModificationItem passwordModification;
+  private List<Modification> modifications;
+  private Modification passwordModification;
   private Entry newEntry;
   private BrowserController controller;
   private TreePath treePath;
@@ -109,9 +111,9 @@
     modifications = getModifications(newEntry, oldEntry, getInfo());
 
     // Find password modifications
-    for (ModificationItem mod : modifications)
+    for (Modification mod : modifications)
     {
-      if ("userPassword".equalsIgnoreCase(mod.getAttribute().getID()))
+      if ("userPassword".equalsIgnoreCase(mod.getAttribute().getAttributeDescriptionAsString()))
       {
         passwordModification = mod;
         break;
@@ -208,10 +210,6 @@
       if (!mustRename)
       {
         if (!modifications.isEmpty()) {
-          ModificationItem[] mods =
-          new ModificationItem[modifications.size()];
-          modifications.toArray(mods);
-
           SwingUtilities.invokeLater(new Runnable()
           {
             @Override
@@ -226,7 +224,7 @@
             }
           });
 
-          conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(oldEntry.getName().toString()), mods);
+          conn.getConnection().modify(newModifyRequest0(oldEntry.getName(), modifications));
 
           SwingUtilities.invokeLater(new Runnable()
           {
@@ -264,49 +262,25 @@
         && state == State.FINISHED_SUCCESSFULLY
         && passwordModification != null)
     {
-      try
+      String sPwd = passwordModification.getAttribute().firstValueAsString();
+      ResetUserPasswordTask newTask = new ResetUserPasswordTask(getInfo(),
+          getProgressDialog(), (BasicNode)treePath.getLastPathComponent(),
+          controller, sPwd.toCharArray());
+      if (!modifications.isEmpty() || mustRename)
       {
-        Object o = passwordModification.getAttribute().get();
-        String sPwd;
-        if (o instanceof byte[])
-        {
-          try
-          {
-            sPwd = new String((byte[])o, "UTF-8");
-          }
-          catch (Throwable t)
-          {
-            throw new RuntimeException("Unexpected error: "+t, t);
-          }
-        }
-        else
-        {
-          sPwd = String.valueOf(o);
-        }
-        ResetUserPasswordTask newTask = new ResetUserPasswordTask(getInfo(),
-            getProgressDialog(), (BasicNode)treePath.getLastPathComponent(),
-            controller, sPwd.toCharArray());
-        if (!modifications.isEmpty() || mustRename)
-        {
-          getProgressDialog().appendProgressHtml("<br><br>");
-        }
-        StatusGenericPanel.launchOperation(newTask,
-            INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUMMARY.get(),
-            INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_SUMMARY.get(),
-            INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_DETAILS.get(),
-            ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_SUMMARY.get(),
-            ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_DETAILS.get(),
-            null,
-            getProgressDialog(),
-            false,
-            getInfo());
-        getProgressDialog().setVisible(true);
+        getProgressDialog().appendProgressHtml("<br><br>");
       }
-      catch (NamingException ne)
-      {
-        // This should not happen
-        throw new RuntimeException("Unexpected exception: "+ne, ne);
-      }
+      StatusGenericPanel.launchOperation(newTask,
+          INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUMMARY.get(),
+          INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_SUMMARY.get(),
+          INFO_CTRL_PANEL_RESETTING_USER_PASSWORD_SUCCESSFUL_DETAILS.get(),
+          ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_SUMMARY.get(),
+          ERR_CTRL_PANEL_RESETTING_USER_PASSWORD_ERROR_DETAILS.get(),
+          null,
+          getProgressDialog(),
+          false,
+          getInfo());
+      getProgressDialog().setVisible(true);
     }
   }
 
@@ -319,12 +293,12 @@
    * @param originalMods the original modifications (these are required since
    * we might want to update them).
    * @throws CannotRenameException if we cannot perform the modification.
-   * @throws NamingException if an error performing the modification occurs.
+   * @throws LdapException if an error performing the modification occurs.
    */
   private void modifyAndRename(ConnectionWrapper conn, final DN oldDN,
       org.forgerock.opendj.ldap.Entry originalEntry,
-      final Entry newEntry, final ArrayList<ModificationItem> originalMods)
-      throws CannotRenameException, NamingException
+      final Entry newEntry, final List<Modification> originalMods)
+      throws CannotRenameException, LdapException
   {
     RDN oldRDN = oldDN.rdn();
     RDN newRDN = newEntry.getName().rdn();
@@ -351,8 +325,7 @@
       }
     });
 
-    conn.getLdapContext().rename(Utilities.getJNDIName(oldDn.toString()),
-        Utilities.getJNDIName(newEntry.getName().toString()));
+    conn.getConnection().modifyDN(newModifyDNRequest(oldDn, newRDN));
 
     final TreePath[] newPath = {null};
 
@@ -372,9 +345,7 @@
       }
     });
 
-    ModificationItem[] mods = new ModificationItem[originalMods.size()];
-    originalMods.toArray(mods);
-    if (mods.length > 0)
+    if (originalMods.size() > 0)
     {
       SwingUtilities.invokeLater(new Runnable()
       {
@@ -390,7 +361,7 @@
         }
       });
 
-      conn.getLdapContext().modifyAttributes(Utilities.getJNDIName(newEntry.getName().toString()), mods);
+      conn.getConnection().modify(newModifyRequest0(newEntry.getName(), originalMods));
 
       SwingUtilities.invokeLater(new Runnable()
       {
@@ -408,6 +379,16 @@
     }
   }
 
+  private ModifyRequest newModifyRequest0(DN dn, final Collection<Modification> mods)
+  {
+    ModifyRequest modRequest = newModifyRequest(dn);
+    for (Modification mod : mods)
+    {
+      modRequest.addModification(mod);
+    }
+    return modRequest;
+  }
+
   private boolean rdnTypeChanged(RDN oldRDN, RDN newRDN)
   {
     if (newRDN.size() != oldRDN.size())
@@ -437,11 +418,11 @@
     return false;
   }
 
-  private boolean userChangedObjectclass(final ArrayList<ModificationItem> mods)
+  private boolean userChangedObjectclass(final List<Modification> mods)
   {
-    for (ModificationItem mod : mods)
+    for (Modification mod : mods)
     {
-      if (ATTR_OBJECTCLASS.equalsIgnoreCase(mod.getAttribute().getID()))
+      if (ATTR_OBJECTCLASS.equalsIgnoreCase(mod.getAttribute().getAttributeDescriptionAsString()))
       {
         return true;
       }
@@ -469,9 +450,9 @@
    * @param info the ControlPanelInfo, used to retrieve the schema for instance.
    * @return the modifications to apply between two entries.
    */
-  public static ArrayList<ModificationItem> getModifications(Entry newEntry,
+  public static List<Modification> getModifications(Entry newEntry,
       org.forgerock.opendj.ldap.Entry oldEntry, ControlPanelInfo info) {
-    ArrayList<ModificationItem> modifications = new ArrayList<>();
+    List<Modification> modifications = new ArrayList<>();
     Schema schema = info.getServerDescriptor().getSchema();
 
     List<org.opends.server.types.Attribute> newAttrs = newEntry.getAttributes();
@@ -479,7 +460,6 @@
     for (org.opends.server.types.Attribute attr : newAttrs)
     {
       AttributeDescription attrDesc = attr.getAttributeDescription();
-      final String attrName = attrDesc.toString();
       if (!ViewEntryPanel.isEditable(attrDesc, schema))
       {
         continue;
@@ -541,9 +521,7 @@
         }
         if (!vs.isEmpty())
         {
-          modifications.add(new ModificationItem(
-              DirContext.ADD_ATTRIBUTE,
-              createAttribute(attrName, newValues)));
+          modifications.add(newModification(ADD, attrDesc, newValues));
         }
       } else {
         final List<ByteString> oldValues = toList(oldAttr);
@@ -560,17 +538,13 @@
         if (toDelete.size() + toAdd.size() >= newValues.size() &&
             !isAttributeInNewRdn)
         {
-          modifications.add(new ModificationItem(
-              DirContext.REPLACE_ATTRIBUTE,
-              createAttribute(attrName, newValues)));
+          modifications.add(newModification(REPLACE, attrDesc, newValues));
         }
         else
         {
           if (!toDelete.isEmpty())
           {
-            modifications.add(new ModificationItem(
-                DirContext.REMOVE_ATTRIBUTE,
-                createAttribute(attrName, toDelete)));
+            modifications.add(newModification(DELETE, attrDesc, toDelete));
           }
           if (!toAdd.isEmpty())
           {
@@ -581,9 +555,7 @@
             }
             if (!vs.isEmpty())
             {
-              modifications.add(new ModificationItem(
-                  DirContext.ADD_ATTRIBUTE,
-                  createAttribute(attrName, vs)));
+              modifications.add(newModification(ADD, attrDesc, vs));
             }
           }
         }
@@ -602,14 +574,23 @@
 
       if (!newEntry.hasAttribute(AttributeDescription.valueOf(attrDesc.getNameOrOID())) && !oldAttr.isEmpty())
       {
-        modifications.add(new ModificationItem(
-            DirContext.REMOVE_ATTRIBUTE,
-            new BasicAttribute(attrDesc.toString())));
+        modifications.add(newModification(DELETE, attrDesc));
       }
     }
     return modifications;
   }
 
+  private static Modification newModification(ModificationType modType, AttributeDescription attrDesc)
+  {
+    return new Modification(modType, new LinkedAttribute(attrDesc));
+  }
+
+  private static Modification newModification(
+      ModificationType modType, AttributeDescription attrDesc, Collection<?> values)
+  {
+    return new Modification(modType, new LinkedAttribute(attrDesc, values));
+  }
+
   private static List<ByteString> toList(org.forgerock.opendj.ldap.Attribute oldAttr)
   {
     List<ByteString> results = new ArrayList<>();
@@ -620,21 +601,6 @@
     return results;
   }
 
-  /**
-   * Creates a JNDI attribute using an attribute name and a set of values.
-   * @param attrName the attribute name.
-   * @param values the values.
-   * @return a JNDI attribute using an attribute name and a set of values.
-   */
-  private static Attribute createAttribute(String attrName, List<ByteString> values) {
-    Attribute attribute = new BasicAttribute(attrName);
-    for (ByteString value : values)
-    {
-      attribute.add(value.toByteArray());
-    }
-    return attribute;
-  }
-
   private static List<ByteString> disjunction(List<ByteString> values2, List<ByteString> values1)
   {
     List<ByteString> results = new ArrayList<>();
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
index c5d63d1..1c39d62 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
@@ -14,25 +14,28 @@
  * Copyright 2008-2010 Sun Microsystems, Inc.
  * Portions Copyright 2014-2016 ForgeRock AS.
  */
-
 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.config.ConfigConstants.*;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.DN;
-import org.opends.admin.ads.util.ConnectionUtils;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.LdapException;
+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;
@@ -40,8 +43,6 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
-import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.server.config.ConfigConstants;
 import org.opends.server.tools.LDAPPasswordModify;
 
 /** The task called when we want to reset the password of the user. */
@@ -128,9 +129,9 @@
   }
 
   @Override
-  protected ArrayList<String> getCommandLineArguments()
+  protected List<String> getCommandLineArguments()
   {
-    ArrayList<String> args = new ArrayList<>();
+    List<String> args = new ArrayList<>();
     if (currentPassword == null)
     {
       args.add("--authzID");
@@ -177,9 +178,8 @@
     lastException = null;
     try
     {
-      ArrayList<String> arguments = getCommandLineArguments();
-      String[] args = new String[arguments.size()];
-      arguments.toArray(args);
+      List<String> arguments = getCommandLineArguments();
+      String[] args = arguments.toArray(new String[arguments.size()]);
 
       returnCode = LDAPPasswordModify.mainPasswordModify(args, false,
             outPrintStream, errorPrintStream);
@@ -195,14 +195,10 @@
           // The connections must be updated, just update the environment, which
           // is what we use to clone connections and to launch scripts.
           // The environment will also be used if we want to reconnect.
-          getInfo().getConnection().getLdapContext().addToEnvironment(
-              Context.SECURITY_CREDENTIALS,
-              String.valueOf(newPassword));
+          rebind(getInfo().getConnection());
           if (getInfo().getUserDataDirContext() != null)
           {
-            getInfo().getUserDataDirContext().getLdapContext().addToEnvironment(
-                Context.SECURITY_CREDENTIALS,
-                String.valueOf(newPassword));
+            rebind(getInfo().getUserDataDirContext());
           }
         }
         state = State.FINISHED_SUCCESSFULLY;
@@ -215,60 +211,35 @@
     }
   }
 
+  private void rebind(ConnectionWrapper conn) throws LdapException
+  {
+    conn.getConnection().bind(newSimpleBindRequest(conn.getBindDn().toString(), newPassword));
+  }
+
   /**
-   * Returns <CODE>true</CODE> if we are bound using the provided entry.  In
+   * Returns whether we are bound using the provided entry.  In
    * the case of root entries this is not necessarily the same as using that
    * particular DN (we might be binding using a value specified in
    * ds-cfg-alternate-bind-dn).
    * @param dn the DN.
    * @param conn the connection that we are using to modify the password.
-   * @return <CODE>true</CODE> if we are bound using the provided entry.
+   * @return {@code true} if we are bound using the provided entry.
    */
   private boolean isBoundAs(DN dn, ConnectionWrapper conn)
   {
-    boolean isBoundAs = false;
-    DN bindDN = DN.rootDN();
-    try
-    {
-      bindDN = conn.getBindDn();
-      isBoundAs = dn.equals(bindDN);
-    }
-    catch (Throwable t)
-    {
-      // Ignore
-    }
+    final DN bindDN = conn.getBindDn();
+    boolean isBoundAs = dn.equals(bindDN);
     if (!isBoundAs)
     {
-      try
+      String attrName = ATTR_ROOTDN_ALTERNATE_BIND_DN;
+      Filter filter = Filter.valueOf("(|(objectClass=*)(objectclass=ldapsubentry))");
+      SearchRequest request = newSearchRequest(dn, BASE_OBJECT, filter, attrName);
+      try (ConnectionEntryReader entries = conn.getConnection().search(request))
       {
-        SearchControls ctls = new SearchControls();
-        ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
-        String filter =
-          "(|(objectClass=*)(objectclass=ldapsubentry))";
-        String attrName = ConfigConstants.ATTR_ROOTDN_ALTERNATE_BIND_DN;
-        ctls.setReturningAttributes(new String[] {attrName});
-        NamingEnumeration<SearchResult> entries =
-            conn.getLdapContext().search(Utilities.getJNDIName(dn.toString()), filter, ctls);
-
-        try
+        while (entries.hasNext())
         {
-          while (entries.hasMore())
-          {
-            SearchResult sr = entries.next();
-            Set<String> dns = ConnectionUtils.getValues(sr, attrName);
-            for (String sDn : dns)
-            {
-              if (bindDN.equals(DN.valueOf(sDn)))
-              {
-                isBoundAs = true;
-                break;
-              }
-            }
-          }
-        }
-        finally
-        {
-          entries.close();
+          SearchResultEntry sr = entries.readEntry();
+          return asSetOfDN(sr, attrName).contains(bindDN);
         }
       }
       catch (Throwable t)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
index 5e6091c..239114b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/Task.java
@@ -30,14 +30,12 @@
 import java.util.Objects;
 import java.util.Set;
 
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
-
 import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.AttributeDescription;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.Modification;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
@@ -57,7 +55,6 @@
 import org.opends.server.types.HostPort;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Schema;
-import org.opends.server.util.Base64;
 import org.opends.server.util.SetupUtils;
 
 import com.forgerock.opendj.cli.CommandBuilder;
@@ -407,49 +404,29 @@
    * to display the command-line equivalent when we do a modification in an
    * entry.  But since some attributes must be obfuscated (like the user
    * password) we pass through this method.
-   * @param attrName the attribute name.
-   * @param o the attribute value.
+   * @param attrDesc the attribute description.
+   * @param value the attribute value.
    * @return the obfuscated String representing the attribute value to be
    * displayed in the logs of the user.
    */
-  private String obfuscateAttributeStringValue(String attrName, Object o)
+  private String obfuscateAttributeStringValue(AttributeDescription attrDesc, ByteString value)
   {
-    if (Utilities.mustObfuscate(attrName,
+    if (Utilities.mustObfuscate(attrDesc.toString(),
         getInfo().getServerDescriptor().getSchema()))
     {
       return OBFUSCATED_VALUE;
     }
-    else if (o instanceof byte[])
+    else if (displayBase64(attrDesc.toString()))
     {
-      byte[] bytes = (byte[])o;
-      if (displayBase64(attrName))
+      if (value.length() > MAX_BINARY_LENGTH_TO_DISPLAY)
       {
-        if (bytes.length > MAX_BINARY_LENGTH_TO_DISPLAY)
-        {
-          return INFO_CTRL_PANEL_VALUE_IN_BASE64.get().toString();
-        }
-        else
-        {
-          return Base64.encode(bytes);
-        }
+        return INFO_CTRL_PANEL_VALUE_IN_BASE64.get().toString();
       }
-      else
-      {
-        if (bytes.length > MAX_BINARY_LENGTH_TO_DISPLAY)
-        {
-          return INFO_CTRL_PANEL_BINARY_VALUE.get().toString();
-        }
-        else
-        {
-          // Get the String value
-          ByteString v = ByteString.wrap(bytes);
-          return v.toString();
-        }
-      }
+      return value.toBase64String();
     }
     else
     {
-      return String.valueOf(o);
+      return value.toString();
     }
   }
 
@@ -801,20 +778,7 @@
    * @param mods the modifications.
    * @param useAdminCtx use the administration connector.
    */
-  protected void printEquivalentCommandToModify(DN dn,
-      Collection<ModificationItem> mods, boolean useAdminCtx)
-  {
-    printEquivalentCommandToModify(dn.toString(), mods, useAdminCtx);
-  }
-
-  /**
-   * Prints the equivalent modify command line in the progress dialog.
-   * @param dn the dn of the modified entry.
-   * @param mods the modifications.
-   * @param useAdminCtx use the administration connector.
-   */
-  private void printEquivalentCommandToModify(String dn,
-      Collection<ModificationItem> mods, boolean useAdminCtx)
+  protected void printEquivalentCommandToModify(DN dn, Collection<Modification> mods, boolean useAdminCtx)
   {
     ArrayList<String> args = new ArrayList<>(getObfuscatedCommandLineArguments(
         getConnectionCommandLineArguments(useAdminCtx, true)));
@@ -827,7 +791,7 @@
     sb.append("<br>");
     sb.append("dn: ").append(dn);
     boolean firstChangeType = true;
-    for (ModificationItem mod : mods)
+    for (Modification mod : mods)
     {
       if (firstChangeType)
       {
@@ -838,44 +802,36 @@
         sb.append("-<br>");
       }
       firstChangeType = false;
+
       Attribute attr = mod.getAttribute();
-      String attrName = attr.getID();
-      if (mod.getModificationOp() == DirContext.ADD_ATTRIBUTE)
+      AttributeDescription attrDesc = attr.getAttributeDescription();
+      switch (mod.getModificationType().asEnum())
       {
-        sb.append("add: ").append(attrName).append("<br>");
+      case ADD:
+        sb.append("add: ").append(attrDesc).append("<br>");
+        break;
+      case REPLACE:
+        sb.append("replace: ").append(attrDesc).append("<br>");
+        break;
+      case DELETE:
+        sb.append("delete: ").append(attrDesc).append("<br>");
+        break;
       }
-      else if (mod.getModificationOp() == DirContext.REPLACE_ATTRIBUTE)
+
+      for (ByteString value : attr)
       {
-        sb.append("replace: ").append(attrName).append("<br>");
-      }
-      else
-      {
-        sb.append("delete: ").append(attrName).append("<br>");
-      }
-      for (int i=0; i<attr.size(); i++)
-      {
-        try
+        // We are systematically adding the values in binary mode.
+        // Use the attribute names to figure out the value to be displayed.
+        if (displayBase64(attrDesc.toString()))
         {
-          Object o = attr.get(i);
-          // We are systematically adding the values in binary mode.
-          // Use the attribute names to figure out the value to be displayed.
-          if (displayBase64(attr.getID()))
-          {
-            sb.append(attrName).append(":: ");
-          }
-          else
-          {
-            sb.append(attrName).append(": ");
-          }
-          sb.append(obfuscateAttributeStringValue(attrName, o));
-          sb.append("<br>");
+          sb.append(attrDesc).append(":: ");
         }
-        catch (NamingException ne)
+        else
         {
-          // Bug
-          throw new RuntimeException(
-              "Unexpected error parsing modifications: "+ne, ne);
+          sb.append(attrDesc).append(": ");
         }
+        sb.append(obfuscateAttributeStringValue(attrDesc, value));
+        sb.append("<br>");
       }
     }
     sb.append("</b><br><br>");
@@ -930,8 +886,8 @@
    * Tells whether the provided attribute's values must be displayed using
    * base 64 when displaying the equivalent command-line or not.
    * @param attrName the attribute name.
-   * @return <CODE>true</CODE> if the attribute must be displayed using base 64
-   * and <CODE>false</CODE> otherwise.
+   * @return {@code true} if the attribute must be displayed using base 64,
+   * {@code false} otherwise.
    */
   private boolean displayBase64(String attrName)
   {
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
index a6919e0..75a575f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
@@ -41,9 +41,7 @@
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.OpenDsException;
-import org.opends.server.util.Base64;
 import org.opends.server.util.LDIFReader;
-import org.opends.server.util.StaticUtils;
 
 /** The panel displaying an LDIF view of an entry. */
 public class LDIFViewEntryPanel extends ViewEntryPanel
@@ -290,35 +288,17 @@
   /**
    * Returns the equivalent LDIF line for a given attribute and value.
    * @param attrName the attribute name.
-   * @param o the value.
+   * @param value the value.
    * @return the equivalent LDIF line for the provided attribute and value.
    */
-  private String getLDIFLine(String attrName, Object o)
+  private String getLDIFLine(String attrName, ByteString value)
   {
-    String attrValue;
-    if (o instanceof String)
+    String v = value.toString();
+    if (isBinary(attrName) || Utilities.hasControlCharaters(v))
     {
-      if (Utilities.hasControlCharaters((String)o))
-      {
-        attrValue = Base64.encode(StaticUtils.getBytes((String)o));
-        attrName = attrName+":";
-      }
-      else
-      {
-        attrValue = (String)o;
-      }
-    }
-    else if (o instanceof byte[])
-    {
-      attrValue = Base64.encode((byte[])o);
       // To indicate that is base64 encoded
-      attrName = attrName+":";
+      return attrName + ":: " + value.toBase64String();
     }
-    else
-    {
-      attrValue = String.valueOf(o);
-    }
-
-    return attrName+": "+ attrValue;
+    return attrName + ": " + v;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
index 6749125..2099c45 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
@@ -54,11 +54,7 @@
 import java.util.logging.Logger;
 import java.util.regex.Pattern;
 
-import javax.naming.CompositeName;
-import javax.naming.InvalidNameException;
-import javax.naming.Name;
 import javax.naming.NamingException;
-import javax.naming.ldap.LdapName;
 import javax.swing.BorderFactory;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.ImageIcon;
@@ -1447,26 +1443,6 @@
   }
 
   /**
-   * Returns whether the provided strings represent the same DN.
-   *
-   * @param dn1 the first dn to compare.
-   * @param dn2 the second dn to compare.
-   * @return {@code true} if the provided strings represent the same DN, {@code false} otherwise.
-   */
-  public static boolean areDnsEqual(String dn1, String dn2)
-  {
-    try
-    {
-      LdapName name1 = new LdapName(dn1);
-      LdapName name2 = new LdapName(dn2);
-      return name1.equals(name2);
-    } catch (Exception ex)
-    {
-      return false;
-    }
-  }
-
-  /**
    * Returns the attribute name with no options (or subtypes).
    * <p>
    * Note: normal code should use <code>AttributeDescription.valueOf(attrName).getNameOrOID()</code>
@@ -1538,23 +1514,6 @@
   }
 
   /**
-   * Commodity method to get the Name object representing a dn.
-   * It is preferable to use Name objects when doing JNDI operations to avoid
-   * problems with the '/' character.
-   * @param dn the DN as a String.
-   * @return a Name object representing the DN.
-   * @throws InvalidNameException if the provided DN value is not valid.
-   */
-  public static Name getJNDIName(String dn) throws InvalidNameException
-  {
-    Name name = new CompositeName();
-    if (dn != null && dn.length() > 0) {
-      name.add(dn);
-    }
-    return name;
-  }
-
-  /**
    * Returns the HTML representation of the 'Done' string.
    * @param progressFont the font to be used.
    * @return the HTML representation of the 'Done' string.

--
Gitblit v1.10.0