mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noël Rouvignac
03.53.2016 c9958277baf5f911bda401802259a4b50d9cd599
BasicNode: use DN
20 files modified
330 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java 51 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java 25 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/event/EntryReadErrorEvent.java 10 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java 49 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java 61 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java 5 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java 63 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java 15 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java 6 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java 3 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewGroupPanel.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java 10 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/RootNode.java 5 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/SuffixNode.java 5 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java 8 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
@@ -48,6 +48,7 @@
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.opends.admin.ads.ADSContext;
import org.opends.admin.ads.util.ConnectionWrapper;
@@ -249,7 +250,7 @@
   * @throws IllegalArgumentException if a node with the given dn exists but
   * is not a suffix node.
   */
  public boolean hasSuffix(String suffixDn) throws IllegalArgumentException
  public boolean hasSuffix(DN suffixDn) throws IllegalArgumentException
  {
    return findSuffixNode(suffixDn, rootNode) != null;
  }
@@ -263,15 +264,13 @@
   * @return the TreePath of the new node.
   * @throws IllegalArgumentException if a node with the given dn exists.
   */
  public TreePath addSuffix(String suffixDn, String parentSuffixDn)
  throws IllegalArgumentException
  public TreePath addSuffix(DN suffixDn, DN parentSuffixDn) throws IllegalArgumentException
  {
    SuffixNode parentNode;
    if (parentSuffixDn != null) {
      parentNode = findSuffixNode(parentSuffixDn, rootNode);
      if (parentNode == null) {
        throw new IllegalArgumentException("Invalid suffix dn " +
            parentSuffixDn);
        throw new IllegalArgumentException("Invalid suffix dn " + parentSuffixDn);
      }
    }
    else {
@@ -295,7 +294,7 @@
   * @param nodeDn the DN of the node to be added.
   * @return the TreePath of the new node.
   */
  public TreePath addNodeUnderRoot(String nodeDn) {
  public TreePath addNodeUnderRoot(DN nodeDn) {
    SuffixNode parentNode = rootNode;
    int index = findChildNode(parentNode, nodeDn);
    if (index >= 0) { // A node has already this dn -> bug
@@ -530,8 +529,7 @@
   * @param newEntryDn the dn of the entry to be added.
   * @return the tree path associated with the new entry.
   */
  public TreePath notifyEntryAdded(BrowserNodeInfo parentInfo,
      String newEntryDn) {
  public TreePath notifyEntryAdded(BrowserNodeInfo parentInfo, DN newEntryDn) {
    BasicNode parentNode = parentInfo.getNode();
    BasicNode childNode = new BasicNode(newEntryDn);
    int childIndex;
@@ -916,15 +914,16 @@
    }
    if (node instanceof SuffixNode)
    {
      String dn = node.getDN();
      return Utilities.areDnsEqual(dn, ADSContext.getAdministrationSuffixDN().toString()) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_TASK_ROOT) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_CONFIG_ROOT) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_MONITOR_ROOT) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_TRUST_STORE_ROOT) ||
          Utilities.areDnsEqual(dn, ConfigConstants.DN_BACKUP_ROOT) ||
          Utilities.areDnsEqual(dn, DN_EXTERNAL_CHANGELOG_ROOT);
      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);
    }
    else
    {
@@ -988,9 +987,9 @@
    if (parent != null)
    {
      final LDAPURL parentUrl = findUrlForDisplayedEntry(parent);
      return LDAPConnectionPool.makeLDAPUrl(parentUrl, node.getDN());
      return LDAPConnectionPool.makeLDAPUrl(parentUrl, node.getDN().toString());
    }
    return LDAPConnectionPool.makeLDAPUrl(connConfig.getHostPort(), node.getDN(), connConfig.isLdaps());
    return LDAPConnectionPool.makeLDAPUrl(connConfig.getHostPort(), node.getDN().toString(), connConfig.isLdaps());
  }
  /**
@@ -1019,7 +1018,7 @@
    if (followReferrals && node.getRemoteUrl() != null) {
      return node.getRemoteUrl().getRawBaseDN();
    }
    return node.getDN();
    return node.getDN().toString();
  }
  /**
@@ -1371,7 +1370,7 @@
      // Search a child node matching the DN of the entry
      int index;
      if (differential) {
        index = findChildNode(parent, entry.getName().toString());
        index = findChildNode(parent, entry.getName());
      }
      else {
        index = - (parent.getChildCount() + 1);
@@ -1382,7 +1381,7 @@
      if (index < 0) {
        // -(index + 1) is the location where to insert the new node
        index = -(index + 1);
        child = new BasicNode(entry.getName().toString());
        child = new BasicNode(entry.getName());
        parent.insert(child, index);
        updateNodeRendering(child, entry);
        insertIndex.add(index);
@@ -1614,7 +1613,7 @@
   * @param childDn the DN of the entry that is being searched.
   * @return the index of the node matching childDn.
   */
  public int findChildNode(BasicNode parent, String childDn) {
  public int findChildNode(BasicNode parent, DN childDn) {
    int childCount = parent.getChildCount();
    int i = 0;
    while (i < childCount
@@ -1704,10 +1703,10 @@
   * @throws IllegalArgumentException if a node with the given dn exists but
   * is not a suffix node.
   */
  private SuffixNode findSuffixNode(String suffixDn, SuffixNode suffixNode)
  private SuffixNode findSuffixNode(DN suffixDn, SuffixNode suffixNode)
      throws IllegalArgumentException
  {
    if (Utilities.areDnsEqual(suffixNode.getDN(), suffixDn)) {
    if (suffixNode.getDN().equals(suffixDn)) {
      return suffixNode;
    }
@@ -1722,7 +1721,7 @@
    do
    {
      child = (BasicNode) suffixNode.getChildAt(i);
      if (Utilities.areDnsEqual(child.getDN(), suffixDn))
      if (child.getDN().equals(suffixDn))
      {
        found = true;
      }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/NodeRefresher.java
@@ -309,7 +309,8 @@
   */
  private void searchForCustomFilter(BasicNode node, ConnectionWrapper conn) throws IOException
  {
    SearchRequest request = newSearchRequest(node.getDN(), WHOLE_SUBTREE, controller.getFilter(), NO_ATTRIBUTES)
    SearchRequest request =
        newSearchRequest(node.getDN().toString(), WHOLE_SUBTREE, controller.getFilter(), NO_ATTRIBUTES)
        .setSizeLimit(1);
    try (ConnectionEntryReader s = conn.getConnection().search(request))
    {
@@ -398,10 +399,9 @@
        String filter = controller.getObjectSearchFilter();
        SearchRequest request =
            newSearchRequest(node.getDN(), BASE_OBJECT, filter, controller.getAttrsForRedSearch())
            newSearchRequest(node.getDN().toString(), BASE_OBJECT, filter, controller.getAttrsForRedSearch())
            .setSizeLimit(controller.getMaxChildren());
        localEntry = conn.getConnection().searchSingleEntry(request);
        localEntry.setName(node.getDN());
        if (localEntry == null) {
          /* Not enough rights to read the entry or the entry simply does not exist */
          throw newLdapException(ResultCode.NO_SUCH_OBJECT, "Can't find entry: " + node.getDN());
@@ -798,19 +798,10 @@
          for (int i=0; i<getNode().getChildCount(); i++)
          {
            BasicNode node = (BasicNode)getNode().getChildAt(i);
            try
            if (node.getDN().equals(parentToAddDN))
            {
              DN dn = DN.valueOf(node.getDN());
              if (dn.equals(parentToAddDN))
              {
                resultValue[0] = false;
                break;
              }
            }
            catch (Throwable t)
            {
              throw new RuntimeException("Error decoding dn: "+
                  node.getDN()+" . "+t, t);
              resultValue[0] = false;
              break;
            }
          }
        }
@@ -966,9 +957,7 @@
    boolean checkSucceeded = true;
    try
    {
      DN dn1 = DN.valueOf(getNode().getDN());
      DN dn2 = url.getBaseDN();
      if (dn2.isSuperiorOrEqualTo(dn1))
      if (url.getBaseDN().isSuperiorOrEqualTo(getNode().getDN()))
      {
        HostPort urlHostPort = new HostPort(url.getHost(), url.getPort());
        checkSucceeded = urlHostPort.equals(controller.getConfigurationConnection().getHostPort());
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/event/EntryReadErrorEvent.java
@@ -12,10 +12,12 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2008 Sun Microsystems, Inc.
 * Portions Copyright 2016 ForgeRock AS.
 */
package org.opends.guitools.controlpanel.event;
import org.forgerock.opendj.ldap.DN;
//Note: in terms of synchronization, this implementation assumes that the
//interrupt method is only called in the event thread (this class is used
//when the user selects a node in the LDAP entry browser).
@@ -27,7 +29,7 @@
{
  private Object source;
  private Throwable t;
  private String dn;
  private DN dn;
  /**
   * Constructor for the event.
@@ -35,7 +37,7 @@
   * @param dn the DN of the entry we were searching.
   * @param t the throwable that we got as error.
   */
  public EntryReadErrorEvent(Object source, String dn, Throwable t)
  public EntryReadErrorEvent(Object source, DN dn, Throwable t)
  {
    this.source = source;
    this.t = t;
@@ -64,7 +66,7 @@
   * Returns the DN of the entry we were searching.
   * @return the DN of the entry we were searching.
   */
  public String getDN()
  public DN getDN()
  {
    return dn;
  }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
@@ -94,7 +94,7 @@
    for (TreePath path : paths)
    {
      BasicNode node = (BasicNode)path.getLastPathComponent();
      entries.add(DN.valueOf(node.getDN()));
      entries.add(node.getDN());
    }
    for (BackendDescriptor backend : info.getServerDescriptor().getBackends())
    {
@@ -186,37 +186,20 @@
      for (TreePath path : paths)
      {
        BasicNode node = (BasicNode)path.getLastPathComponent();
        try
        DN dn = node.getDN();
        if (!isAlreadyDeleted(alreadyDeleted, dn))
        {
          DN dn = DN.valueOf(node.getDN());
          boolean isDnDeleted = false;
          for (DN deletedDn : alreadyDeleted)
          ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
          useAdminCtx = controller.isConfigurationNode(node);
          if (node.hasSubOrdinates())
          {
            if (dn.isSubordinateOrEqualTo(deletedDn))
            {
              isDnDeleted = true;
              break;
            }
            deleteSubtreeWithControl(conn, dn, path, toNotify);
          }
          if (!isDnDeleted)
          else
          {
            ConnectionWrapper conn = controller.findConnectionForDisplayedEntry(node);
            useAdminCtx = controller.isConfigurationNode(node);
            if (node.hasSubOrdinates())
            {
              deleteSubtreeWithControl(conn, dn, path, toNotify);
            }
            else
            {
              deleteSubtreeRecursively(conn, dn, path, toNotify);
            }
            alreadyDeleted.add(dn);
            deleteSubtreeRecursively(conn, dn, path, toNotify);
          }
        }
        catch (DirectoryException de)
        {
          throw new RuntimeException("Unexpected error parsing dn: "+
              node.getDN(), de);
          alreadyDeleted.add(dn);
        }
      }
      if (!toNotify.isEmpty())
@@ -247,6 +230,18 @@
    }
  }
  private boolean isAlreadyDeleted(ArrayList<DN> dns, DN dnToFind)
  {
    for (DN dn : dns)
    {
      if (dnToFind.isSubordinateOrEqualTo(dn))
      {
        return true;
      }
    }
    return false;
  }
  /**
   * Notifies that some entries have been deleted.  This will basically update
   * the browser controller so that the tree reflects the changes that have
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -370,7 +370,7 @@
            controller.getNodeInfoFromPath(treePath));
        newPath[0] = controller.notifyEntryAdded(
            controller.getNodeInfoFromPath(parentPath),
            newEntry.getName().toString());
            newEntry.getName());
      }
    });
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewEntryTask.java
@@ -187,44 +187,32 @@
        {
          getProgressDialog().appendProgressHtml(
              Utilities.getProgressDone(ColorAndFontConstants.progressFont));
          final DN newEntryName = newEntry.getName();
          boolean entryInserted = false;
          if (parentNode != null)
          {
            boolean isReallyParentNode = false;
            try
            {
              DN parentDN = DN.valueOf(parentNode.getDN());
              isReallyParentNode =
                parentDN.equals(newEntry.getName().parent());
            }
            catch (Throwable t)
            {
              // Bug
              t.printStackTrace();
              isReallyParentNode = false;
            }
            boolean isReallyParentNode = parentNode.getDN().equals(newEntryName.parent());
            if (isReallyParentNode)
            {
              insertNode(parentNode, newEntry.getName(),
                  isBaseDN(newEntry.getName()));
              insertNode(parentNode, newEntryName, isBaseDN(newEntryName));
              entryInserted = true;
            }
          }
          if (!entryInserted)
          {
            BasicNode root = (BasicNode)controller.getTreeModel().getRoot();
            BasicNode realParentNode = findParentNode(newEntry.getName(), root);
            BasicNode realParentNode = findParentNode(newEntryName, root);
            if (realParentNode != null)
            {
              insertNode(realParentNode, newEntry.getName(), false);
              insertNode(realParentNode, newEntryName, false);
            }
            else if (isBaseDN(newEntry.getName()))
            else if (isBaseDN(newEntryName))
            {
              int nRootChildren = controller.getTreeModel().getChildCount(controller.getTreeModel().getRoot());
              if (nRootChildren > 1)
              {
                // Insert in the root.
                insertNode(root, newEntry.getName(), true);
                insertNode(root, newEntryName, true);
              }
            }
          }
@@ -269,29 +257,20 @@
    int nRootChildren = controller.getTreeModel().getChildCount(root);
    for (int i=0; i<nRootChildren; i++)
    {
      BasicNode node =
        (BasicNode)controller.getTreeModel().getChild(root, i);
      try
      BasicNode node = (BasicNode) controller.getTreeModel().getChild(root, i);
      DN nodeDN = node.getDN();
      if (dn.isSubordinateOrEqualTo(nodeDN))
      {
        DN nodeDN = DN.valueOf(node.getDN());
        if (dn.isSubordinateOrEqualTo(nodeDN))
        if (dn.size() == nodeDN.size() + 1)
        {
          if (dn.size() == nodeDN.size() + 1)
          {
            parentNode = node;
            break;
          }
          else
          {
            parentNode = findParentNode(dn, node);
            break;
          }
          parentNode = node;
          break;
        }
      }
      catch (Throwable t)
      {
        // Bug
        throw new RuntimeException("Unexpected error: "+t, t);
        else
        {
          parentNode = findParentNode(dn, node);
          break;
        }
      }
    }
    return parentNode;
@@ -306,11 +285,11 @@
      TreePath newPath;
      if (isSuffix)
      {
        newPath = controller.addSuffix(dn.toString(), parentNode.getDN());
        newPath = controller.addSuffix(dn, parentNode.getDN());
      }
      else
      {
        newPath = controller.notifyEntryAdded(controller.getNodeInfoFromPath(parentPath), dn.toString());
        newPath = controller.notifyEntryAdded(controller.getNodeInfoFromPath(parentPath), dn);
      }
      if (newPath != null)
      {
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
@@ -70,7 +70,7 @@
    backendSet = new HashSet<>();
    this.node = node;
    this.newPassword = pwd;
    dn = DN.valueOf(node.getDN());
    dn = node.getDN();
    for (BackendDescriptor backend : info.getServerDescriptor().getBackends())
    {
@@ -112,8 +112,7 @@
  @Override
  public LocalizableMessage getTaskDescription()
  {
    return INFO_CTRL_PANEL_RESET_USER_PASSWORD_TASK_DESCRIPTION.get(
        node.getDN());
    return INFO_CTRL_PANEL_RESET_USER_PASSWORD_TASK_DESCRIPTION.get(node.getDN());
  }
  @Override
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -631,7 +631,7 @@
      controller.removeAllUnderRoot();
      controller.setFilter(filterValue);
      controller.setAutomaticExpand(!BrowserController.ALL_OBJECTS_FILTER.equals(filterValue));
      SortedSet<String> allSuffixes = new TreeSet<>();
      SortedSet<DN> allSuffixes = new TreeSet<>();
      if (controller.getConfigurationConnection() != null)
      {
        treePane.getTree().setRootVisible(displayAll);
@@ -639,27 +639,27 @@
        boolean added = false;
        for (BackendDescriptor backend : getInfo().getServerDescriptor().getBackends())
        {
          for (BaseDNDescriptor baseDN : backend.getBaseDns())
          for (BaseDNDescriptor baseDNDescriptor : backend.getBaseDns())
          {
            boolean isBaseDN = baseDN.getDn().equals(theDN);
            String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
            DN baseDN = baseDNDescriptor.getDn();
            boolean isBaseDN = baseDN.equals(theDN);
            if (displayAll)
            {
              allSuffixes.add(dn);
              allSuffixes.add(baseDN);
            }
            else if (isBaseDN)
            {
              controller.addSuffix(dn, null);
              controller.addSuffix(baseDN, null);
              added = true;
            }
          }
        }
        if (displayAll)
        {
          allSuffixes.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
          for (String dn : allSuffixes)
          allSuffixes.add(DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT));
          for (DN baseDN : allSuffixes)
          {
            controller.addSuffix(dn, null);
            controller.addSuffix(baseDN, null);
          }
        }
        else if (!added && !displayAll)
@@ -667,14 +667,14 @@
          if (isChangeLog(theDN))
          {
            // Consider it a suffix
            controller.addSuffix(s, null);
            controller.addSuffix(theDN, null);
          }
          else
          {
            BasicNode rootNode = (BasicNode) controller.getTree().getModel().getRoot();
            if (controller.findChildNode(rootNode, s) == -1)
            if (controller.findChildNode(rootNode, theDN) == -1)
            {
              controller.addNodeUnderRoot(s);
              controller.addNodeUnderRoot(theDN);
            }
          }
        }
@@ -813,29 +813,29 @@
        boolean isSubordinate = false;
        for (BackendDescriptor backend : ev.getBackends())
        {
          for (BaseDNDescriptor baseDN : backend.getBaseDns())
          for (BaseDNDescriptor baseDNDescriptor : backend.getBaseDns())
          {
            boolean isBaseDN = false;
            if (baseDN.getDn().equals(theDN))
            DN baseDN = baseDNDescriptor.getDn();
            if (baseDN.equals(theDN))
            {
              isBaseDN = true;
            }
            else if (baseDN.getDn().isSuperiorOrEqualTo(theDN))
            else if (baseDN.isSuperiorOrEqualTo(theDN))
            {
              isSubordinate = true;
            }
            String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
            if (displayAll || isBaseDN)
            {
              try
              {
                if (!controller.hasSuffix(dn))
                if (!controller.hasSuffix(baseDN))
                {
                  controller.addSuffix(dn, null);
                  controller.addSuffix(baseDN, null);
                }
                else
                {
                  int index = controller.findChildNode(rootNode, dn);
                  int index = controller.findChildNode(rootNode, baseDN);
                  if (index >= 0)
                  {
                    TreeNode node = rootNode.getChildAt(index);
@@ -851,14 +851,15 @@
              {
                // The suffix node exists but is not a suffix node. Simply log a message.
                logger.warn(
                    LocalizableMessage.raw("Suffix: " + dn + " added as a non suffix node. Exception: " + iae, iae));
                    LocalizableMessage.raw("Suffix: " + baseDN + " added as a non suffix node. Exception: " + iae,
                        iae));
              }
            }
          }
        }
        if (isSubordinate && controller.findChildNode(rootNode, s) == -1)
        if (isSubordinate && controller.findChildNode(rootNode, theDN) == -1)
        {
          controller.addNodeUnderRoot(s);
          controller.addNodeUnderRoot(theDN);
        }
      }
    }
@@ -1315,17 +1316,17 @@
            boolean added = false;
            for (BackendDescriptor backend : getInfo().getServerDescriptor().getBackends())
            {
              for (BaseDNDescriptor baseDN : backend.getBaseDns())
              for (BaseDNDescriptor baseDNDescriptor : backend.getBaseDns())
              {
                String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
                boolean isBaseDN = baseDN.getDn().equals(theDN);
                if (baseDN.getEntries() > 0)
                DN baseDN = baseDNDescriptor.getDn();
                boolean isBaseDN = baseDN.equals(theDN);
                if (baseDNDescriptor.getEntries() > 0)
                {
                  try
                  {
                    if ((displayAll || isBaseDN) && !controller.hasSuffix(dn))
                    if ((displayAll || isBaseDN) && !controller.hasSuffix(baseDN))
                    {
                      controller.addSuffix(dn, null);
                      controller.addSuffix(baseDN, null);
                      added = true;
                    }
                  }
@@ -1333,16 +1334,16 @@
                  {
                    // The suffix node exists but is not a suffix node. Simply log a message.
                    logger.warn(LocalizableMessage.raw(
                        "Suffix: " + dn + " added as a non suffix node. Exception: " + iae, iae));
                        "Suffix: " + baseDN + " added as a non suffix node. Exception: " + iae, iae));
                  }
                }
              }
              if (!added && !displayAll)
              {
                BasicNode rootNode = (BasicNode) controller.getTree().getModel().getRoot();
                if (controller.findChildNode(rootNode, s) == -1)
                if (controller.findChildNode(rootNode, theDN) == -1)
                {
                  controller.addNodeUnderRoot(s);
                  controller.addNodeUnderRoot(theDN);
                }
              }
            }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
@@ -335,8 +335,8 @@
        {
          for (TreePath p : paths)
          {
            BasicNode n = (BasicNode)p.getLastPathComponent();
            if (!entryPane.canDelete(DN.valueOf(n.getDN())))
            BasicNode n = (BasicNode) p.getLastPathComponent();
            if (!entryPane.canDelete(n.getDN()))
            {
              return false;
            }
@@ -502,7 +502,7 @@
    }
    if (node != null)
    {
      String dn;
      DN dn;
      if (controller.getFollowReferrals() &&
          node.getReferral() != null &&
          node.getRemoteUrl() == null &&
@@ -511,13 +511,12 @@
      {
        // We are in the case where we are following referrals but the referral
        // could not be resolved.  Display an error.
        entryPane.referralSolveError(node.getDN(), node.getReferral(),
            node.getError());
        entryPane.referralSolveError(node.getDN(), node.getReferral(), node.getError());
        dn = null;
      }
      else if (controller.getFollowReferrals() && node.getRemoteUrl() != null)
      {
        dn = node.getRemoteUrl().getRawBaseDN();
        dn = DN.valueOf(node.getRemoteUrl().getRawBaseDN());
      }
      else
      {
@@ -1069,8 +1068,8 @@
      LinkedHashSet<DN> dns = new LinkedHashSet<>();
      for (TreePath path : paths)
      {
        BasicNode node = (BasicNode)path.getLastPathComponent();
        dns.add(DN.valueOf(node.getDN()));
        BasicNode node = (BasicNode) path.getLastPathComponent();
        dns.add(node.getDN());
      }
      if (addToGroupDlg == null)
      {
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
@@ -116,7 +116,7 @@
    DN aParentDN;
    String aRdn;
    DN nodeDN = DN.valueOf(node.getDN());
    DN nodeDN = node.getDN();
    if (nodeDN.isRootDN())
    {
      aParentDN = nodeDN;
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
@@ -25,6 +25,7 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.ldap.DN;
import org.opends.guitools.controlpanel.browser.BasicNodeError;
import org.opends.guitools.controlpanel.browser.ReferralLimitExceededException;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -85,7 +86,7 @@
   * @param dn the DN of the entry that caused a problem.
   * @param t the Throwable that occurred when searching the entry.
   */
  public void setError(String dn, Throwable t)
  public void setError(DN dn, Throwable t)
  {
    LocalizableMessage title = INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
    LocalizableMessage details;
@@ -108,8 +109,7 @@
   * @param referrals the list of referrals defined in the entry.
   * @param error the error that occurred resolving the referral.
   */
  public void setReferralError(String dn, String[] referrals,
      BasicNodeError error)
  public void setReferralError(DN dn, String[] referrals, BasicNodeError error)
  {
    LocalizableMessage title = INFO_CTRL_PANEL_ERROR_RESOLVING_REFERRAL_TITLE.get();
    LocalizableMessageBuilder details = new LocalizableMessageBuilder();
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java
@@ -316,8 +316,7 @@
   * @param referrals the list of referrals defined in the entry.
   * @param error the error that occurred resolving the referral.
   */
  public void referralSolveError(String dn, String[] referrals,
      BasicNodeError error)
  public void referralSolveError(DN dn, String[] referrals, BasicNodeError error)
  {
    searchResult = null;
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java
@@ -126,7 +126,7 @@
      dns = new String[paths.length];
      for (int i=0; i<paths.length; i++)
      {
        dns[i] = ((BasicNode)paths[i].getLastPathComponent()).getDN();
        dns[i] = ((BasicNode) paths[i].getLastPathComponent()).getDN().toString();
      }
    }
    else
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewGroupPanel.java
@@ -565,7 +565,7 @@
          else if (comp == referenceGroup
              && nodes.getNodes().length > 0)
          {
            String dn = nodes.getNodes()[0].getNode().getDN();
            String dn = nodes.getNodes()[0].getNode().getDN().toString();
            referenceGroup.setText(dn);
            referenceGroup.setCaretPosition(dn.length());
          }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java
@@ -26,13 +26,13 @@
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.task.ResetUserPasswordTask;
import org.opends.guitools.controlpanel.task.Task;
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
import org.opends.guitools.controlpanel.util.Utilities;
import org.forgerock.i18n.LocalizableMessage;
/** Panel that appears when the user wants to change the password of a user. */
public class ResetUserPasswordPanel extends StatusGenericPanel
@@ -68,7 +68,7 @@
    setPrimaryValid(lPassword);
    setPrimaryValid(lConfirmPassword);
    dn.setText(node.getDN());
    dn.setText(node.getDN().toString());
    name.setText(node.getDisplayName());
    password.setText("");
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -332,7 +332,7 @@
            JTextField tf = (JTextField)comp;
            if (nodes.getNodes().length > 0)
            {
              String dn = nodes.getNodes()[0].getNode().getDN();
              String dn = nodes.getNodes()[0].getNode().getDN().toString();
              tf.setText(dn);
              tf.setCaretPosition(dn.length());
            }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java
@@ -28,7 +28,7 @@
public class BasicNode extends DefaultMutableTreeNode {
  private static final long serialVersionUID = 5441658731908509872L;
  private String localDn;
  private DN localDn;
  private String localRdn;
  private String localRdnWithAttributeName;
  private LDAPURL remoteUrl;
@@ -61,10 +61,10 @@
   * Constructor.
   * @param dn the DN of the entry.
   */
  public BasicNode(String dn) {
  public BasicNode(DN dn) {
    localDn = dn;
    localRdn = extractRDN(localDn);
    localRdnWithAttributeName = extractRDN(localDn, true);
    localRdn = extractRDN(localDn.toString());
    localRdnWithAttributeName = extractRDN(localDn.toString(), true);
    isLeaf = true;
    refreshNeededOnExpansion = true;
    numSubOrdinates = -1;
@@ -77,7 +77,7 @@
   * Returns the DN of the local entry.
   * @return the DN of the local entry.
   */
  public String getDN() {
  public DN getDN() {
    return localDn;
  }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/RootNode.java
@@ -14,9 +14,10 @@
 * Copyright 2008 Sun Microsystems, Inc.
 * Portions Copyright 2016 ForgeRock AS.
 */
package org.opends.guitools.controlpanel.ui.nodes;
import org.forgerock.opendj.ldap.DN;
/**
 * The root node of the tree in the 'Manage Entries...' tree.  It represents
 * the root entry of the directory.
@@ -27,7 +28,7 @@
  /** Constructor of the node. */
  public RootNode() {
    super("");
    super(DN.rootDN());
    setLeaf(false);
    setRefreshNeededOnExpansion(false);
  }
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/nodes/SuffixNode.java
@@ -14,9 +14,10 @@
 * Copyright 2008 Sun Microsystems, Inc.
 * Portions Copyright 2016 ForgeRock AS.
 */
package org.opends.guitools.controlpanel.ui.nodes;
import org.forgerock.opendj.ldap.DN;
/** Represents a suffix in the tree in the 'Manage Entries...' tree. */
public class SuffixNode extends BasicNode {
@@ -26,7 +27,7 @@
   * Constructor of the node.
   * @param dn the DN of the suffix.
   */
  public SuffixNode(String dn) {
  public SuffixNode(DN dn) {
    super(dn);
  }
}
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/LDAPEntryReader.java
@@ -22,6 +22,8 @@
import java.util.HashSet;
import java.util.Set;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Filter;
import org.forgerock.opendj.ldap.requests.Requests;
import org.forgerock.opendj.ldap.requests.SearchRequest;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
@@ -38,7 +40,7 @@
 */
public class LDAPEntryReader extends BackgroundTask<CustomSearchResult>
{
  private final String dn;
  private final DN dn;
  private final ConnectionWrapper conn;
  private final Set<EntryReadListener> listeners = new HashSet<>();
  private boolean isOver;
@@ -49,7 +51,7 @@
   * @param dn the DN of the entry.
   * @param conn the connection to the server.
   */
  public LDAPEntryReader(String dn, ConnectionWrapper conn)
  public LDAPEntryReader(DN dn, ConnectionWrapper conn)
  {
    this.dn = dn;
    this.conn = conn;
@@ -60,7 +62,7 @@
  public CustomSearchResult processBackgroundTask() throws Throwable
  {
    isOver = false;
    final String filter = "(|(objectclass=*)(objectclass=ldapsubentry))";
    final Filter filter = Filter.valueOf("(|(objectclass=*)(objectclass=ldapsubentry))");
    SearchRequest request = Requests.newSearchRequest(dn, BASE_OBJECT, filter, "*", "+");
    SearchResultEntry sr = conn.getConnection().searchSingleEntry(request);
    if (isInterrupted())