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/task/DeleteEntryTask.java | 99 ++++++++++++++++++-------------------------------
1 files changed, 37 insertions(+), 62 deletions(-)
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;
--
Gitblit v1.10.0