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/AddToGroupTask.java |  131 ++++++++++++-------------------------------
 1 files changed, 38 insertions(+), 93 deletions(-)

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;
   }
 }
-

--
Gitblit v1.10.0