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(); 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; 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 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() { 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() 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; } /** 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(); } } }