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/Task.java |  120 +++++++++++++++++++-----------------------------------------
 1 files changed, 38 insertions(+), 82 deletions(-)

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)
   {

--
Gitblit v1.10.0