From 8ca638034127ea5c5911ebcd13ff33e742e06784 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 04 Aug 2016 13:23:02 +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/datamodel/CustomSearchResult.java |   25 -
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java         |   81 +-------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java       |   21 +-
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java          |   17 -
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java        |   13 +
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java  |  226 +++++++++++--------------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java        |   16 -
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java       |   14 
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java            |   83 +++++----
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java               |   10 
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java    |   17 -
 11 files changed, 215 insertions(+), 308 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
index 138d236..6d798a7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/browser/BrowserController.java
+++ b/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.ByteString;
 import org.forgerock.opendj.ldap.DN;
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.opends.admin.ads.ADSContext;
@@ -1792,12 +1793,8 @@
    */
   private static int getNumSubOrdinates(CustomSearchResult entry)
   {
-    List<Object> vs = entry.getAttributeValues(NUMSUBORDINATES_ATTR);
-    String v = null;
-    if (vs != null && !vs.isEmpty())
-    {
-      v = vs.get(0).toString();
-    }
+    List<ByteString> vs = entry.getAttributeValues(NUMSUBORDINATES_ATTR);
+    String v = !vs.isEmpty() ? vs.get(0).toString() : null;
     return toInt(v);
   }
 
@@ -1827,12 +1824,8 @@
    */
   public static boolean getHasSubOrdinates(CustomSearchResult entry)
   {
-    List<Object> vs = entry.getAttributeValues(HASSUBORDINATES_ATTR);
-    String v = null;
-    if (vs != null && !vs.isEmpty())
-    {
-      v = vs.get(0).toString();
-    }
+    List<ByteString> vs = entry.getAttributeValues(HASSUBORDINATES_ATTR);
+    String v = !vs.isEmpty() ? vs.get(0).toString() : null;
     if (v != null)
     {
       return "true".equalsIgnoreCase(v);
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
index 15e7e16..c5a71ed 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -47,7 +47,7 @@
 public class CustomSearchResult implements Comparable<CustomSearchResult>
 {
   private final DN dn;
-  private Map<String, List<Object>> attributes;
+  private Map<String, List<ByteString>> attributes;
   private SortedSet<String> attrNames;
   private String toString;
   private int hashCode;
@@ -82,7 +82,7 @@
     {
       String attrName = attr.getAttributeDescriptionAsString();
       attrNames.add(attrName);
-      List<Object> values = new ArrayList<>();
+      List<ByteString> values = new ArrayList<>();
       for (ByteString v : attr)
       {
         if (!"".equals(v.toString()))
@@ -112,9 +112,9 @@
    * @return the values for a given attribute.  It returns an empty Set if
    * the attribute is not defined.
    */
-  public List<Object> getAttributeValues(String name) {
-    List<Object> values = attributes.get(name.toLowerCase());
-    return values != null ? values : Collections.emptyList();
+  public List<ByteString> getAttributeValues(String name) {
+    List<ByteString> values = attributes.get(name.toLowerCase());
+    return values != null ? values : Collections.<ByteString> emptyList();
   }
 
   /**
@@ -178,7 +178,7 @@
    * @param attrName the name of the attribute.
    * @param values the values for the attribute.
    */
-  public void set(String attrName, List<Object> values)
+  public void set(String attrName, List<ByteString> values)
   {
     attrNames.add(attrName);
     attrName = attrName.toLowerCase();
@@ -219,7 +219,7 @@
       // corresponding definition and add the value to the appropriate hash.
       if (attrType.isObjectClass())
       {
-        for (Object value : getAttributeValues(attrType.getNameOrOID()))
+        for (ByteString value : getAttributeValues(attrType.getNameOrOID()))
         {
           String ocName = value.toString().trim();
           objectClasses.put(DirectoryServer.getSchema().getObjectClass(ocName), ocName);
@@ -228,17 +228,8 @@
       else
       {
         AttributeBuilder builder = new AttributeBuilder(attrDesc);
-        for (Object value : getAttributeValues(attrType.getNameOrOID()))
+        for (ByteString bs : getAttributeValues(attrType.getNameOrOID()))
         {
-          ByteString bs;
-          if (value instanceof byte[])
-          {
-            bs = ByteString.wrap((byte[])value);
-          }
-          else
-          {
-            bs = ByteString.valueOfUtf8(value.toString());
-          }
           builder.add(bs);
         }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index 7737d2c..1aab352 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -455,8 +455,7 @@
   {
     for (AVA ava : rdn)
     {
-      List<Object> values = entry.getAttributeValues(ava.getAttributeName());
-      if (values.isEmpty())
+      if (entry.getAttributeValues(ava.getAttributeName()).isEmpty())
       {
         return false;
       }
@@ -492,7 +491,7 @@
       {
         newValues.add(it.next());
       }
-      List<Object> oldValues = oldEntry.getAttributeValues(attrName);
+      List<ByteString> oldValues = oldEntry.getAttributeValues(attrName);
 
       ByteString rdnValue = null;
       for (AVA ava : newEntry.getName().rdn())
@@ -549,12 +548,12 @@
               createAttribute(attrName, newValues)));
         }
       } else {
-        List<ByteString> toDelete = getValuesToDelete(oldValues, newValues);
+        List<ByteString> toDelete = disjunction(newValues, oldValues);
         if (oldRdnValueDeleted != null)
         {
           toDelete.remove(oldRdnValueDeleted);
         }
-        List<ByteString> toAdd = getValuesToAdd(oldValues, newValues);
+        List<ByteString> toAdd = disjunction(oldValues, newValues);
         if (oldRdnValueToAdd != null)
         {
           toAdd.add(oldRdnValueToAdd);
@@ -599,7 +598,7 @@
       {
         continue;
       }
-      List<Object> oldValues = oldEntry.getAttributeValues(attrName);
+      List<ByteString> oldValues = oldEntry.getAttributeValues(attrName);
       AttributeDescription attrDesc = AttributeDescription.valueOf(attrName);
 
       List<org.opends.server.types.Attribute> attrs = newEntry.getAttribute(attrDesc.getNameOrOID());
@@ -641,74 +640,16 @@
     return attribute;
   }
 
-  /**
-   * Creates a ByteString for an attribute and a value (the one we got using JNDI).
-   * @param value the value found using JNDI.
-   * @return a ByteString object.
-   */
-  private static ByteString createAttributeValue(Object value)
+  private static List<ByteString> disjunction(List<ByteString> values2, List<ByteString> values1)
   {
-    if (value instanceof String)
+    List<ByteString> results = new ArrayList<>();
+    for (ByteString v : values1)
     {
-      return ByteString.valueOfUtf8((String) value);
-    }
-    else if (value instanceof byte[])
-    {
-      return ByteString.wrap((byte[]) value);
-    }
-    return ByteString.valueOfUtf8(String.valueOf(value));
-  }
-
-  /**
-   * Returns the set of ByteString that must be deleted.
-   * @param oldValues the old values of the entry.
-   * @param newValues the new values of the entry.
-   * @return the set of ByteString that must be deleted.
-   */
-  private static List<ByteString> getValuesToDelete(List<Object> oldValues,
-      List<ByteString> newValues)
-  {
-    List<ByteString> valuesToDelete = new ArrayList<>();
-    for (Object o : oldValues)
-    {
-      ByteString oldValue = createAttributeValue(o);
-      if (!newValues.contains(oldValue))
+      if (!values2.contains(v))
       {
-        valuesToDelete.add(oldValue);
+        results.add(v);
       }
     }
-    return valuesToDelete;
-  }
-
-  /**
-   * Returns the set of ByteString that must be added.
-   * @param oldValues the old values of the entry.
-   * @param newValues the new values of the entry.
-   * @return the set of ByteString that must be added.
-   */
-  private static List<ByteString> getValuesToAdd(List<Object> oldValues,
-    List<ByteString> newValues)
-  {
-    List<ByteString> valuesToAdd = new ArrayList<>();
-    for (ByteString newValue : newValues)
-    {
-      if (!contains(oldValues, newValue))
-      {
-        valuesToAdd.add(newValue);
-      }
-    }
-    return valuesToAdd;
-  }
-
-  private static boolean contains(List<Object> oldValues, ByteString newValue)
-  {
-    for (Object o : oldValues)
-    {
-      if (createAttributeValue(o).equals(newValue))
-      {
-        return true;
-      }
-    }
-    return false;
+    return results;
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
index 5d04d6b..3f32f56 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
@@ -17,8 +17,10 @@
 
 package org.opends.guitools.controlpanel.ui;
 
+import static com.forgerock.opendj.cli.Utils.*;
+
 import static org.opends.messages.AdminToolMessages.*;
-import static com.forgerock.opendj.cli.Utils.isDN;
+import static org.opends.server.util.ServerConstants.*;
 
 import java.awt.Component;
 import java.awt.GridBagConstraints;
@@ -37,6 +39,7 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizedIllegalArgumentException;
+import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.guitools.controlpanel.browser.BrowserController;
@@ -47,7 +50,6 @@
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.util.Base64;
 import org.opends.server.util.LDIFException;
-import org.opends.server.util.ServerConstants;
 
 /** The panel used to duplicate an entry. */
 public class DuplicateEntryPanel extends AbstractNewEntryPanel
@@ -344,8 +346,8 @@
     sb.append("dn: ").append(dn);
     for (String attrName : entryToDuplicate.getAttributeNames())
     {
-      List<Object> values = entryToDuplicate.getAttributeValues(attrName);
-      if (attrName.equalsIgnoreCase(ServerConstants.ATTR_USER_PASSWORD))
+      List<ByteString> values = entryToDuplicate.getAttributeValues(attrName);
+      if (attrName.equalsIgnoreCase(ATTR_USER_PASSWORD))
       {
         sb.append("\n");
         String pwd = new String(password.getPassword());
@@ -361,12 +363,12 @@
         {
           continue;
         }
-        for (Object value : values)
+        for (ByteString value : values)
         {
           sb.append("\n");
-          if (value instanceof byte[])
+          if (isBinary(attrName))
           {
-            final String base64 = Base64.encode((byte[]) value);
+            final String base64 = Base64.encode(value.toByteArray());
             sb.append(attrName).append(":: ").append(base64);
           }
           else
@@ -386,7 +388,7 @@
         else
         {
           String oldValue = getFirstValue(entryToDuplicate.getDN());
-          for (Object value : values)
+          for (ByteString value : values)
           {
             sb.append("\n");
             if (oldValue.equals(value))
@@ -470,8 +472,7 @@
             rdnAttribute = sr.getDN().rdn().getFirstAVA().getAttributeType().getNameOrOID();
 
             updateDNValue();
-            Boolean hasPassword = !sr.getAttributeValues(
-                    ServerConstants.ATTR_USER_PASSWORD).isEmpty();
+            boolean hasPassword = !sr.getAttributeValues(ATTR_USER_PASSWORD).isEmpty();
             lPassword.setVisible(hasPassword);
             password.setVisible(hasPassword);
             lconfirmPassword.setVisible(hasPassword);
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
index c7f43e2..209324b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
@@ -34,6 +34,7 @@
 import javax.swing.tree.TreePath;
 
 import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.ByteString;
 import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
 import org.opends.guitools.controlpanel.task.OfflineUpdateException;
 import org.opends.guitools.controlpanel.util.Utilities;
@@ -168,10 +169,9 @@
       editableScroll.setVisible(false);
       for (String attrName : sr.getAttributeNames())
       {
-        List<Object> values = sr.getAttributeValues(attrName);
-        for (Object o : values)
+        for (ByteString v : sr.getAttributeValues(attrName))
         {
-          sb.append("\n").append(getLDIFLine(attrName, o));
+          sb.append("\n").append(getLDIFLine(attrName, v));
         }
       }
       final Point p1 = sameEntry ?
@@ -187,10 +187,9 @@
       {
         if (!schemaReadOnlyAttributesLowerCase.contains(attrName.toLowerCase()))
         {
-          List<Object> values = sr.getAttributeValues(attrName);
-          for (Object o : values)
+          for (ByteString v : sr.getAttributeValues(attrName))
           {
-            sb.append("\n").append(getLDIFLine(attrName, o));
+            sb.append("\n").append(getLDIFLine(attrName, v));
           }
         }
       }
@@ -206,15 +205,14 @@
       sb = new StringBuilder();
       for (String attrName : schemaReadOnlyAttributes)
       {
-        List<Object> values = sr.getAttributeValues(attrName);
-        for (Object o : values)
+        for (ByteString v : sr.getAttributeValues(attrName))
         {
           if (oneLineAdded)
           {
             sb.append("\n");
           }
           oneLineAdded = true;
-          sb.append(getLDIFLine(attrName, o));
+          sb.append(getLDIFLine(attrName, v));
         }
       }
       final Point p2 = sameEntry ?
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
index 3f2fcd0..d298e1d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
@@ -506,7 +506,7 @@
       };
       for (int j=0; j < attrNames.length; j++)
       {
-        Object o = values[j] + r.nextInt();
+        ByteString o = ByteString.valueOfUtf8(values[j] + r.nextInt());
         csr.set(attrNames[j], newArrayList(o));
       }
       try
@@ -571,7 +571,7 @@
       };
       for (int j=0; j < attrNames.length; j++)
       {
-        Object o = values[j];
+        ByteString o = ByteString.valueOfUtf8(values[j]);
         csr.set(attrNames[j], newArrayList(o));
       }
       try
@@ -646,7 +646,7 @@
       // corresponding definition and add the value to the appropriate hash.
       if (attrType.isObjectClass())
       {
-        for (Object value : csr.getAttributeValues(attrType.getNameOrOID()))
+        for (ByteString value : csr.getAttributeValues(attrType.getNameOrOID()))
         {
           String ocName = value.toString().trim();
           objectClasses.put(DirectoryServer.getSchema().getObjectClass(ocName), ocName);
@@ -655,17 +655,8 @@
       else
       {
         AttributeBuilder builder = new AttributeBuilder(attrDesc);
-        for (Object value : csr.getAttributeValues(attrType.getNameOrOID()))
+        for (ByteString bs : csr.getAttributeValues(attrType.getNameOrOID()))
         {
-          ByteString bs;
-          if (value instanceof byte[])
-          {
-            bs = ByteString.wrap((byte[])value);
-          }
-          else
-          {
-            bs = ByteString.valueOfUtf8(value.toString());
-          }
           builder.add(bs);
         }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
index 68d3173..06ca7e8 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -19,6 +19,8 @@
 import static com.forgerock.opendj.cli.Utils.*;
 
 import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.server.util.CollectionUtils.*;
+import static org.opends.server.util.ServerConstants.*;
 
 import java.awt.Component;
 import java.awt.GridBagConstraints;
@@ -96,7 +98,6 @@
 import org.opends.server.types.Schema;
 import org.opends.server.util.Base64;
 import org.opends.server.util.LDIFReader;
-import org.opends.server.util.ServerConstants;
 
 /** The panel displaying a simplified view of an entry. */
 class SimplifiedViewEntryPanel extends ViewEntryPanel
@@ -144,9 +145,9 @@
   private static final Map<String, String[]> hmOrdereredAttrNames = new HashMap<>();
   static
   {
-    hmFriendlyAttrNames.put(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME,
+    hmFriendlyAttrNames.put(OBJECTCLASS_ATTRIBUTE_TYPE_NAME,
         INFO_CTRL_PANEL_OBJECTCLASS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_COMMON_NAME,
+    hmFriendlyAttrNames.put(ATTR_COMMON_NAME,
         INFO_CTRL_PANEL_CN_FRIENDLY_NAME.get());
     hmFriendlyAttrNames.put("givenname",
         INFO_CTRL_PANEL_GIVENNAME_FRIENDLY_NAME.get());
@@ -184,13 +185,13 @@
         INFO_CTRL_PANEL_DESCRIPTION_FRIENDLY_NAME.get());
     hmFriendlyAttrNames.put("postaladdress",
         INFO_CTRL_PANEL_POSTALADDRESS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_UNIQUE_MEMBER_LC,
+    hmFriendlyAttrNames.put(ATTR_UNIQUE_MEMBER_LC,
         INFO_CTRL_PANEL_UNIQUEMEMBER_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_MEMBER,
+    hmFriendlyAttrNames.put(ATTR_MEMBER,
         INFO_CTRL_PANEL_MEMBER_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_MEMBER_URL_LC,
+    hmFriendlyAttrNames.put(ATTR_MEMBER_URL_LC,
         INFO_CTRL_PANEL_MEMBERURL_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_C,
+    hmFriendlyAttrNames.put(ATTR_C,
         INFO_CTRL_PANEL_C_FRIENDLY_NAME.get());
     hmFriendlyAttrNames.put("ds-target-group-dn",
         INFO_CTRL_PANEL_DS_TARGET_GROUP_DN_FRIENDLY_NAME.get());
@@ -198,45 +199,43 @@
         INFO_CTRL_PANEL_USERCERTIFICATE_FRIENDLY_NAME.get());
     hmFriendlyAttrNames.put("jpegphoto",
         INFO_CTRL_PANEL_JPEGPHOTO_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_AUTH_PW_SCHEMES_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_AUTH_PW_SCHEMES_LC,
         INFO_CTRL_PANEL_SUPPORTEDPWDSCHEMES_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_CONTROL_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_CONTROL_LC,
         INFO_CTRL_PANEL_SUPPORTEDCONTROLS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_LDAP_VERSION_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_LDAP_VERSION_LC,
         INFO_CTRL_PANEL_SUPPORTEDLDAPVERSIONS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_CONTROL_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_CONTROL_LC,
         INFO_CTRL_PANEL_SUPPORTEDCONTROLS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_EXTENSION_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_EXTENSION_LC,
         INFO_CTRL_PANEL_SUPPORTEDEXTENSIONS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_SUPPORTED_FEATURE_LC,
+    hmFriendlyAttrNames.put(ATTR_SUPPORTED_FEATURE_LC,
         INFO_CTRL_PANEL_SUPPORTEDFEATURES_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_VENDOR_NAME_LC,
+    hmFriendlyAttrNames.put(ATTR_VENDOR_NAME_LC,
         INFO_CTRL_PANEL_VENDORNAME_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_VENDOR_VERSION_LC,
+    hmFriendlyAttrNames.put(ATTR_VENDOR_VERSION_LC,
         INFO_CTRL_PANEL_VENDORVERSION_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_NAMING_CONTEXTS_LC,
+    hmFriendlyAttrNames.put(ATTR_NAMING_CONTEXTS_LC,
         INFO_CTRL_PANEL_NAMINGCONTEXTS_FRIENDLY_NAME.get());
-    hmFriendlyAttrNames.put(ServerConstants.ATTR_PRIVATE_NAMING_CONTEXTS,
+    hmFriendlyAttrNames.put(ATTR_PRIVATE_NAMING_CONTEXTS,
         INFO_CTRL_PANEL_PRIVATENAMINGCONTEXTS_FRIENDLY_NAME.get());
 
-    hmNameAttrNames.put("organizationalunit", ServerConstants.ATTR_OU);
-    hmNameAttrNames.put("domain", ServerConstants.ATTR_DC);
-    hmNameAttrNames.put("organization", ServerConstants.ATTR_O);
-    hmNameAttrNames.put(ServerConstants.OC_GROUP_OF_URLS_LC,
-        ServerConstants.ATTR_COMMON_NAME);
-    hmNameAttrNames.put(ServerConstants.OC_GROUP_OF_NAMES_LC,
-        ServerConstants.ATTR_COMMON_NAME);
+    hmNameAttrNames.put("organizationalunit", ATTR_OU);
+    hmNameAttrNames.put("domain", ATTR_DC);
+    hmNameAttrNames.put("organization", ATTR_O);
+    hmNameAttrNames.put(OC_GROUP_OF_URLS_LC, ATTR_COMMON_NAME);
+    hmNameAttrNames.put(OC_GROUP_OF_NAMES_LC, ATTR_COMMON_NAME);
 
     hmOrdereredAttrNames.put("person",
-        new String[]{"givenname", "sn", ServerConstants.ATTR_COMMON_NAME, "uid",
+        new String[]{"givenname", "sn", ATTR_COMMON_NAME, "uid",
         "userpassword", "mail", "telephonenumber", "facsimiletelephonenumber",
         "employeenumber", "street", "l", "st", "postalcode", "mobile",
         "homephone", "pager", "description", "postaladdress"});
-    hmOrdereredAttrNames.put(ServerConstants.OC_GROUP_OF_NAMES_LC,
+    hmOrdereredAttrNames.put(OC_GROUP_OF_NAMES_LC,
         new String[]{"cn", "description",
-        ServerConstants.ATTR_UNIQUE_MEMBER_LC, "ds-target-group-dn"});
-    hmOrdereredAttrNames.put(ServerConstants.OC_GROUP_OF_URLS_LC,
-        new String[]{"cn", "description", ServerConstants.ATTR_MEMBER_URL_LC});
+        ATTR_UNIQUE_MEMBER_LC, "ds-target-group-dn"});
+    hmOrdereredAttrNames.put(OC_GROUP_OF_URLS_LC,
+        new String[]{"cn", "description", ATTR_MEMBER_URL_LC});
     hmOrdereredAttrNames.put("organizationalunit",
         new String[]{"ou", "description", "postalAddress", "telephonenumber",
     "facsimiletelephonenumber"});
@@ -440,11 +439,11 @@
     Collection<String> sortedAttributes = getSortedAttributes(sr, isReadOnly);
     if (isReadOnly)
     {
-      for (String attr : sortedAttributes)
+      for (String attrName : sortedAttributes)
       {
-        JLabel label = getLabelForAttribute(attr, sr);
-        List<Object> values = sr.getAttributeValues(attr);
-        JComponent comp = getReadOnlyComponent(attr, values);
+        JLabel label = getLabelForAttribute(attrName, sr);
+        List<ByteString> values = sr.getAttributeValues(attrName);
+        JComponent comp = getReadOnlyComponent(attrName, values);
         gbc.weightx = 0.0;
         gbc.anchor = anchor1(values);
         gbc.insets.left = 0;
@@ -459,43 +458,35 @@
     }
     else
     {
-      for (final String attr : sortedAttributes)
+      for (final String attrName : sortedAttributes)
       {
-        String lcAttr = attr.toLowerCase();
-        JLabel label = getLabelForAttribute(attr, sr);
-        if (isRequired(attr, sr))
+        String lcAttr = attrName.toLowerCase();
+        JLabel label = getLabelForAttribute(attrName, sr);
+        if (isRequired(attrName, sr))
         {
           Utilities.setRequiredIcon(label);
           requiredAttrs.add(lcAttr);
         }
-        List<Object> values = sr.getAttributeValues(attr);
+        List<ByteString> values = sr.getAttributeValues(attrName);
         if (values.isEmpty())
         {
-          values = new ArrayList<>(1);
-          if (isBinary(attr))
-          {
-            values.add(new byte[]{});
-          }
-          else
-          {
-            values.add("");
-          }
+          values = newArrayList(ByteString.empty());
         }
 
-        final boolean isPasswordAttr = isPassword(attr);
+        final boolean isPasswordAttr = isPassword(attrName);
         if (isPasswordAttr)
         {
           List<String> pwds = new ArrayList<>();
-          for (Object o : values)
+          for (ByteString v : values)
           {
-            pwds.add(getPasswordStringValue(o));
+            pwds.add(getPasswordStringValue(attrName, v));
           }
           lastUserPasswords.put(lcAttr, pwds);
         }
 
-        JComponent comp = getReadWriteComponent(attr, values);
+        JComponent comp = getReadWriteComponent(attrName, values);
         gbc.weightx = 0.0;
-        gbc.anchor = anchor2(attr, values);
+        gbc.anchor = anchor2(attrName, values);
         gbc.insets.left = 0;
         gbc.gridwidth = GridBagConstraints.RELATIVE;
         attributesPanel.add(label, gbc);
@@ -511,14 +502,14 @@
         {
           label = Utilities.createPrimaryLabel(
               INFO_CTRL_PANEL_PASSWORD_CONFIRM_LABEL.get());
-          String key = getConfirmPasswordKey(attr);
+          String key = getConfirmPasswordKey(attrName);
           comp = getReadWriteComponent(key, values);
 
           hmLabels.put(key, label);
           hmComponents.put(key, comp);
 
           gbc.weightx = 0.0;
-          gbc.anchor = isSingleValue(attr) ? GridBagConstraints.WEST : GridBagConstraints.NORTHWEST;
+          gbc.anchor = isSingleValue(attrName) ? GridBagConstraints.WEST : GridBagConstraints.NORTHWEST;
           gbc.insets.left = 0;
           gbc.gridwidth = GridBagConstraints.RELATIVE;
           attributesPanel.add(label, gbc);
@@ -560,14 +551,14 @@
     });
   }
 
-  private int anchor2(final String attr, List<Object> values)
+  private int anchor2(final String attr, List<ByteString> values)
   {
-    if (ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attr))
+    if (OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attr))
     {
       int nOcs = 0;
-      for (Object o : values)
+      for (ByteString v : values)
       {
-        if (!"top".equals(o))
+        if (!"top".equals(v))
         {
           nOcs++;
         }
@@ -578,7 +569,7 @@
     {
       return GridBagConstraints.WEST;
     }
-    else if (values.size() <= 1 && (hasBinaryValue(values) || isBinary(attr)))
+    else if (values.size() <= 1 && isBinary(attr))
     {
       return GridBagConstraints.WEST;
     }
@@ -588,7 +579,7 @@
     }
   }
 
-  private int anchor1(List<Object> values)
+  private int anchor1(List<ByteString> values)
   {
     int size = values.size();
     if (size > 1)
@@ -597,8 +588,8 @@
     }
     else if (size == 1)
     {
-      Object v = values.get(0);
-      if (v instanceof String && ((String) v).contains("\n"))
+      ByteString v = values.get(0);
+      if (v.toString().contains("\n"))
       {
         return GridBagConstraints.NORTHWEST;
       }
@@ -672,10 +663,10 @@
 
     // Put first the attributes associated with the objectclass in hmOrderedAttrNames
     LinkedHashSet<String> attrNames = new LinkedHashSet<>();
-    List<Object> values = sr.getAttributeValues(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-    for (Object o : values)
+    List<ByteString> values = sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+    for (ByteString oc : values)
     {
-      String ocName = (String)o;
+      String ocName = oc.toString();
       String[] attrs = hmOrdereredAttrNames.get(ocName.toLowerCase());
       if (attrs != null)
       {
@@ -714,11 +705,10 @@
 
       if (schema != null)
       {
-        List<Object> ocs = sr.getAttributeValues(
-            ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-        for (Object oc : ocs)
+        List<ByteString> ocs = sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+        for (ByteString oc : ocs)
         {
-          ObjectClass objectClass = schema.getObjectClass((String) oc);
+          ObjectClass objectClass = schema.getObjectClass(oc.toString());
           if (!objectClass.isPlaceHolder())
           {
             for (AttributeType attr : objectClass.getRequiredAttributes())
@@ -816,37 +806,34 @@
     return isCertificate;
   }
 
-  private JComponent getReadOnlyComponent(final String attrName, List<Object> values)
+  private JComponent getReadOnlyComponent(final String attrName, List<ByteString> values)
   {
-//  GridLayout is used to avoid the 512 limit of GridBagLayout
+    // GridLayout is used to avoid the 512 limit of GridBagLayout
     JPanel panel = new JPanel(new GridBagLayout());
     panel.setOpaque(false);
     GridBagConstraints gbc = new GridBagConstraints();
     gbc.gridy = 0;
 
-    boolean isBinary = hasBinaryValue(values);
-    for (Object o : values)
+    final Schema schema = getInfo().getServerDescriptor().getSchema();
+    boolean isBinary = isBinary(attrName);
+    for (ByteString v : values)
     {
       gbc.fill = GridBagConstraints.HORIZONTAL;
       gbc.weightx = 1.0;
       gbc.gridx = 0;
 
-      if (ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
+      if (OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
       {
         ObjectClassCellPanel ocPanel = new ObjectClassCellPanel();
-        Schema schema = getInfo().getServerDescriptor().getSchema();
         if (schema != null)
         {
-          ObjectClassValue ocDescriptor = getObjectClassDescriptor(values,
-              schema);
-          ocPanel.setValue(ocDescriptor);
+          ocPanel.setValue(getObjectClassDescriptor(values, schema));
         }
         ocPanel.setEditButtonVisible(false);
         panel.add(ocPanel, gbc);
         break;
       }
-      else if (Utilities.mustObfuscate(attrName,
-          getInfo().getServerDescriptor().getSchema()))
+      else if (Utilities.mustObfuscate(attrName, schema))
       {
         panel.add(
             Utilities.createDefaultLabel(
@@ -875,8 +862,7 @@
       {
         final BinaryCellPanel pane = new BinaryCellPanel();
         pane.setEditButtonText(INFO_CTRL_PANEL_VIEW_BUTTON_LABEL.get());
-        final byte[] binaryValue = (byte[])o;
-        Schema schema = getInfo().getServerDescriptor().getSchema();
+        final byte[] binaryValue = v.toByteArray();
         final boolean isImage = Utilities.hasImageSyntax(attrName, schema);
         pane.setValue(binaryValue, isImage);
         pane.addEditActionListener(new ActionListener()
@@ -905,18 +891,17 @@
     return panel;
   }
 
-  private Set<String> toStrings(Collection<Object> objects)
+  private Set<String> toStrings(Collection<ByteString> objects)
   {
     Set<String> results = new TreeSet<>();
-    for (Object o : objects)
+    for (ByteString o : objects)
     {
-      results.add(String.valueOf(o));
+      results.add(o.toString());
     }
     return results;
   }
 
-  private JComponent getReadWriteComponent(final String attrName,
-      List<Object> values)
+  private JComponent getReadWriteComponent(final String attrName, List<ByteString> values)
   {
     JPanel panel = new JPanel(new GridBagLayout());
     panel.setOpaque(false);
@@ -926,16 +911,16 @@
     List<EditorComponent> components = new ArrayList<>();
     hmEditors.put(attrName.toLowerCase(), components);
 
-    boolean isBinary = hasBinaryValue(values);
-    for (Object o : values)
+    final Schema schema = getInfo().getServerDescriptor().getSchema();
+    boolean isBinary = isBinary(attrName);
+    for (ByteString v : values)
     {
       gbc.fill = GridBagConstraints.HORIZONTAL;
       gbc.weightx = 1.0;
       gbc.gridx = 0;
-      if (ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
+      if (OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
       {
         final ObjectClassCellPanel ocCellPanel = new ObjectClassCellPanel();
-        Schema schema = getInfo().getServerDescriptor().getSchema();
         final ObjectClassValue ocDescriptor;
         if (schema != null)
         {
@@ -987,9 +972,9 @@
       else if (isPassword(attrName) || isConfirmPassword(attrName))
       {
         JPasswordField pf = Utilities.createPasswordField();
-        if (!"".equals(o))
+        if (!"".equals(v))
         {
-          pf.setText(getPasswordStringValue(o));
+          pf.setText(getPasswordStringValue(attrName, v));
         }
         panel.add(pf, gbc);
         components.add(new EditorComponent(pf));
@@ -999,7 +984,7 @@
         if (isSingleValue(attrName))
         {
           final JTextField tf = Utilities.createMediumTextField();
-          tf.setText(String.valueOf(o));
+          tf.setText(String.valueOf(v));
           gbc.gridx = 0;
           panel.add(tf, gbc);
           if (mustAddBrowseButton(attrName))
@@ -1041,10 +1026,9 @@
             final JButton browse = Utilities.createButton(
                 INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
             browse.addActionListener(new AddBrowseClickedActionListener(ta, attrName));
-            if (ServerConstants.ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName))
+            if (ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName))
             {
-              browse.setText(
-                  INFO_CTRL_PANEL_ADD_MEMBERS_BUTTON.get().toString());
+              browse.setText(INFO_CTRL_PANEL_ADD_MEMBERS_BUTTON.get().toString());
             }
             panel.add(browse, gbc);
             new DropTarget(ta, dropTargetListener);
@@ -1056,10 +1040,9 @@
       else
       {
         final BinaryCellPanel pane = new BinaryCellPanel();
-        Schema schema = getInfo().getServerDescriptor().getSchema();
         final boolean isImage = Utilities.hasImageSyntax(attrName, schema);
         pane.setDisplayDelete(true);
-        final byte[] binaryValue = (byte[])o;
+        final byte[] binaryValue = v.toByteArray();
         if (binaryValue.length > 0)
         {
           pane.setValue(binaryValue, isImage);
@@ -1151,10 +1134,10 @@
       AttributeType attrType = attrDesc.getAttributeType();
       if (!attrType.isPlaceHolder())
       {
-        List<Object> ocs = sr.getAttributeValues(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-        for (Object oc : ocs)
+        List<ByteString> ocs = sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+        for (ByteString oc : ocs)
         {
-          ObjectClass objectClass = schema.getObjectClass(((String) oc));
+          ObjectClass objectClass = schema.getObjectClass(oc.toString());
           if (!objectClass.isPlaceHolder() && objectClass.isRequired(attrType))
           {
             return true;
@@ -1312,7 +1295,7 @@
         List<String> newPwds = getNewPasswords(attrName);
         if (newPwds.equals(lastUserPasswords.get(attrName.toLowerCase())))
         {
-          List<Object> oldValues = searchResult.getAttributeValues(attrName);
+          List<ByteString> oldValues = searchResult.getAttributeValues(attrName);
           if (!oldValues.isEmpty())
           {
             appendLDIFLines(sb, attrName, oldValues);
@@ -1333,7 +1316,7 @@
     // Add the attributes that are not displayed
     for (String attrName : schemaReadOnlyAttributesLowerCase)
     {
-      List<Object> values = searchResult.getAttributeValues(attrName);
+      List<ByteString> values = searchResult.getAttributeValues(attrName);
       if (!values.isEmpty())
       {
         appendLDIFLines(sb, attrName, values);
@@ -1344,10 +1327,9 @@
 
   private boolean isAttrName(String attrName, CustomSearchResult sr)
   {
-    List<Object> values = sr.getAttributeValues(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
-    for (Object o : values)
+    for (ByteString v : sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME))
     {
-      String ocName = (String)o;
+      String ocName = v.toString();
       String attr = hmNameAttrNames.get(ocName.toLowerCase());
       if (attr != null && attr.equalsIgnoreCase(attrName))
       {
@@ -1357,14 +1339,9 @@
     return false;
   }
 
-  private boolean hasBinaryValue(List<Object> values)
-  {
-    return !values.isEmpty() && values.iterator().next() instanceof byte[];
-  }
-
   private boolean mustAddBrowseButton(String attrName)
   {
-    if (ServerConstants.ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName)
+    if (ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName)
         || "ds-target-group-dn".equalsIgnoreCase(attrName))
     {
       return true;
@@ -1403,12 +1380,10 @@
 
   private void appendLDIFLines(StringBuilder sb, String attrName)
   {
-    {
-      appendLDIFLines(sb, attrName, getValues(attrName));
-    }
+    appendLDIFLines(sb, attrName, getValues(attrName));
   }
 
-  private void appendLDIFLines(StringBuilder sb, String attrName, List<Object> values)
+  private void appendLDIFLines(StringBuilder sb, String attrName, List<?> values)
   {
     for (Object value : values)
     {
@@ -1540,7 +1515,7 @@
       previousTitle = browseEntriesPanel.getTitle();
       previousFilter = browseEntriesPanel.getFilter();
     }
-    if (ServerConstants.ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName))
+    if (ATTR_UNIQUE_MEMBER_LC.equalsIgnoreCase(attrName))
     {
       title = INFO_CTRL_PANEL_ADD_MEMBERS_LABEL.get();
       filter = LDAPEntrySelectionPanel.Filter.USERS;
@@ -1591,15 +1566,15 @@
     }
   }
 
-  private String getPasswordStringValue(Object o)
+  private String getPasswordStringValue(String attrName, ByteString v)
   {
-    if (o instanceof byte[])
+    if (isBinary(attrName))
     {
-      return Base64.encode((byte[])o);
+      return Base64.encode(v.toByteArray());
     }
     else
     {
-      return String.valueOf(o);
+      return v.toString();
     }
   }
 
@@ -1610,7 +1585,7 @@
 
     for (String attrName : schemaReadOnlyAttributesLowerCase)
     {
-      List<Object> values = searchResult.getAttributeValues(attrName);
+      List<ByteString> values = searchResult.getAttributeValues(attrName);
       if (!values.isEmpty())
       {
         newResult.set(attrName, values);
@@ -1662,7 +1637,7 @@
           List<String> newPwds = getNewPasswords(attrName);
           if (newPwds.equals(lastUserPasswords.get(attrName)))
           {
-            List<Object> oldValues = searchResult.getAttributeValues(attrName);
+            List<ByteString> oldValues = searchResult.getAttributeValues(attrName);
             newResult.set(attrName, oldValues);
           }
           else
@@ -1670,8 +1645,7 @@
             setValues(newResult, attrName);
           }
         }
-        else if (!schemaReadOnlyAttributesLowerCase.contains(
-          attrName.toLowerCase()))
+        else if (!schemaReadOnlyAttributesLowerCase.contains(attrName.toLowerCase()))
         {
           setValues(newResult, attrName);
         }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
index 443edf2..a9359a0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -101,6 +101,7 @@
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.quicksetup.ui.CustomHTMLEditorKit;
 import org.opends.server.types.OpenDsException;
+import org.opends.server.types.Schema;
 import org.opends.server.util.ServerConstants;
 import org.opends.server.util.StaticUtils;
 
@@ -1029,6 +1030,18 @@
   }
 
   /**
+   * Returns whether the provided attribute name has binary syntax.
+   * @param attrName the attribute name.
+   * @return {@code true} if the provided attribute name has binary syntax,
+   * {@code false} otherwise.
+   */
+  protected boolean isBinary(String attrName)
+  {
+    Schema schema = getInfo().getServerDescriptor().getSchema();
+    return Utilities.hasBinarySyntax(attrName, schema);
+  }
+
+  /**
    * Returns the control panel info object.
    *
    * @return the control panel info object.
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
index 154eff0..f20f367 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
@@ -590,7 +590,7 @@
       requiredAttrs.clear();
       List<String> addedAttrs = new ArrayList<>();
       Schema schema = getInfo().getServerDescriptor().getSchema();
-      List<Object> ocs = null;
+      List<ByteString> ocs = null;
       for (String attrName : searchResult.getAttributeNames())
       {
         if (ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME.equalsIgnoreCase(attrName))
@@ -598,8 +598,7 @@
           if (schema != null)
           {
             ocs = searchResult.getAttributeValues(attrName);
-            ObjectClassValue ocValue = getObjectClassDescriptor(
-                ocs, schema);
+            ObjectClassValue ocValue = getObjectClassDescriptor(ocs, schema);
             allSortedValues.add(new AttributeValuePair(attrName, ocValue));
           }
         }
@@ -615,9 +614,9 @@
       }
       if (ocs != null && schema != null)
       {
-        for (Object oc : ocs)
+        for (ByteString oc : ocs)
         {
-          ObjectClass objectClass = schema.getObjectClass((String) oc);
+          ObjectClass objectClass = schema.getObjectClass(oc.toString());
           if (!objectClass.isPlaceHolder())
           {
             for (AttributeType attr : objectClass.getRequiredAttributes())
@@ -717,12 +716,11 @@
     private void updateObjectClass(ObjectClassValue newValue)
     {
       CustomSearchResult oldResult = searchResult;
-      CustomSearchResult newResult =
-        new CustomSearchResult(searchResult.getDN());
+      CustomSearchResult newResult = new CustomSearchResult(searchResult.getDN());
 
       for (String attrName : schemaReadOnlyAttributesLowerCase)
       {
-        List<Object> values = searchResult.getAttributeValues(attrName);
+        List<ByteString> values = searchResult.getAttributeValues(attrName);
         if (!values.isEmpty())
         {
           newResult.set(attrName, values);
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
index 3e92d2c..6bde156 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -18,6 +18,7 @@
 
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.server.util.CollectionUtils.*;
+import static org.opends.server.util.ServerConstants.*;
 
 import java.awt.Container;
 import java.awt.GridBagConstraints;
@@ -55,7 +56,6 @@
 import org.opends.server.types.OpenDsException;
 import org.opends.server.types.Schema;
 import org.opends.server.util.Base64;
-import org.opends.server.util.ServerConstants;
 
 /**
  * Abstract class containing code shared by the different LDAP entry view
@@ -203,8 +203,7 @@
       title.setIcon(null);
     }
 
-    List<Object> ocs =
-      sr.getAttributeValues(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
+    List<ByteString> ocs = sr.getAttributeValues(OBJECTCLASS_ATTRIBUTE_TYPE_NAME);
     Schema schema = getInfo().getServerDescriptor().getSchema();
     if (!ocs.isEmpty() && schema != null)
     {
@@ -240,14 +239,13 @@
    * @return an object class value representing all the object class values of
    * the entry.
    */
-  protected ObjectClassValue getObjectClassDescriptor(List<Object> ocValues,
-      Schema schema)
+  protected ObjectClassValue getObjectClassDescriptor(List<ByteString> ocValues, Schema schema)
   {
     ObjectClass structuralObjectClass = null;
     SortedSet<String> auxiliaryClasses = new TreeSet<>();
-    for (Object o : ocValues)
+    for (ByteString oc : ocValues)
     {
-      ObjectClass objectClass = schema.getObjectClass(((String) o));
+      ObjectClass objectClass = schema.getObjectClass(oc.toString());
       if (!objectClass.isPlaceHolder())
       {
         if (objectClass.getObjectClassType() == ObjectClassType.STRUCTURAL)
@@ -357,60 +355,61 @@
       ObjectClassValue ocValue = (ObjectClassValue)value;
       if (ocValue.getStructural() != null)
       {
-        sb.append("\n");
-        sb.append(attrName).append(": ").append(ocValue.getStructural());
+        appendPlain(sb, attrName, ocValue.getStructural());
+
         Schema schema = getInfo().getServerDescriptor().getSchema();
         if (schema != null)
         {
           ObjectClass oc = schema.getObjectClass(ocValue.getStructural());
           if (!oc.isPlaceHolder())
           {
-            Set<String> names = getObjectClassSuperiorValues(oc);
-            for (String name : names)
+            for (String name : getObjectClassSuperiorValues(oc))
             {
-              sb.append("\n");
-              sb.append(attrName).append(": ").append(name);
+              appendPlain(sb, attrName, name);
             }
           }
         }
       }
       for (String v : ocValue.getAuxiliary())
       {
-        sb.append("\n");
-        sb.append(attrName).append(": ").append(v);
+        appendPlain(sb, attrName, v);
+      }
+    }
+    else if (value instanceof ByteString)
+    {
+      ByteString v = (ByteString) value;
+      if (v.length() > 0)
+      {
+        appendBase64(sb, attrName, Base64.encode(v.toByteArray()));
       }
     }
     else if (value instanceof byte[])
     {
       if (((byte[])value).length > 0)
       {
-        sb.append("\n");
-        sb.append(attrName).append(":: ").append(Base64.encode((byte[])value));
+        appendBase64(sb, attrName, Base64.encode((byte[]) value));
       }
     }
     else if (value instanceof BinaryValue)
     {
-      sb.append("\n");
-      sb.append(attrName).append(":: ").append(((BinaryValue)value).getBase64());
+      appendBase64(sb, attrName, ((BinaryValue) value).getBase64());
     }
     else if (String.valueOf(value).trim().length() > 0)
     {
-      sb.append("\n");
-      sb.append(attrName).append(": ").append(value);
+      appendPlain(sb, attrName, value);
     }
   }
 
-  /**
-   * Returns <CODE>true</CODE> if the provided attribute name has binary syntax
-   * and <CODE>false</CODE> otherwise.
-   * @param attrName the attribute name.
-   * @return <CODE>true</CODE> if the provided attribute name has binary syntax
-   * and <CODE>false</CODE> otherwise.
-   */
-  protected boolean isBinary(String attrName)
+  private void appendPlain(StringBuilder sb, String attrName, Object value)
   {
-    Schema schema = getInfo().getServerDescriptor().getSchema();
-    return Utilities.hasBinarySyntax(attrName, schema);
+    sb.append("\n");
+    sb.append(attrName).append(": ").append(value);
+  }
+
+  private void appendBase64(StringBuilder sb, String attrName, String base64Value)
+  {
+    sb.append("\n");
+    sb.append(attrName).append(":: ").append(base64Value);
   }
 
   /**
@@ -443,7 +442,7 @@
   protected void setValues(CustomSearchResult sr, String attrName)
   {
     List<Object> values = getValues(attrName);
-    List<Object> valuesToSet = new ArrayList<>();
+    List<ByteString> valuesToSet = new ArrayList<>();
     for (Object value : values)
     {
       if (value instanceof ObjectClassValue)
@@ -451,28 +450,36 @@
         ObjectClassValue ocValue = (ObjectClassValue)value;
         if (ocValue.getStructural() != null)
         {
-          valuesToSet.add(ocValue.getStructural());
+          valuesToSet.add(ByteString.valueOfUtf8(ocValue.getStructural()));
         }
-        valuesToSet.addAll(ocValue.getAuxiliary());
+        SortedSet<String> auxiliaries = ocValue.getAuxiliary();
+        for (String auxiliary : auxiliaries)
+        {
+          valuesToSet.add(ByteString.valueOfUtf8(auxiliary));
+        }
       }
       else if (value instanceof byte[])
       {
-        valuesToSet.add(value);
+        valuesToSet.add(ByteString.wrap((byte[]) value));
       }
       else if (value instanceof BinaryValue)
       {
         try
         {
-          valuesToSet.add(((BinaryValue)value).getBytes());
+          valuesToSet.add(ByteString.wrap(((BinaryValue) value).getBytes()));
         }
         catch (ParseException pe)
         {
          throw new RuntimeException("Unexpected error: "+pe, pe);
         }
       }
-      else if (String.valueOf(value).trim().length() > 0)
+      else
       {
-        valuesToSet.add(String.valueOf(value));
+        String s = String.valueOf(value);
+        if (s.trim().length() > 0)
+        {
+          valuesToSet.add(ByteString.valueOfUtf8(s));
+        }
       }
     }
     if (!valuesToSet.isEmpty())
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
index 36723de..2fa2073 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
@@ -2420,13 +2420,13 @@
   {
     if (sr != null)
     {
-      final List<Object> values = sr.getAttributeValues(attrName);
-      if (values != null && !values.isEmpty())
+      final List<ByteString> values = sr.getAttributeValues(attrName);
+      if (!values.isEmpty())
       {
-        final Object o = values.get(0);
-        if (o != null)
+        final ByteString v = values.get(0);
+        if (v != null)
         {
-          return String.valueOf(o);
+          return v.toString();
         }
       }
     }

--
Gitblit v1.10.0