From bfccb7a70ceea9c4362de3df29fad9887a37595a Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 08 Jun 2015 11:32:50 +0000
Subject: [PATCH] OPENDJ-2092 OPENDJ-2093 Code cleanup

---
 opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java             |    7 
 opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewAttributePanel.java       |  377 ++++++++++-------------
 opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java |  544 ++++++++++++---------------------
 3 files changed, 373 insertions(+), 555 deletions(-)

diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
index e3ff6b2..e50be8f 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
@@ -28,6 +28,7 @@
 
 import static org.forgerock.util.Utils.*;
 import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.server.types.CommonSchemaElements.*;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -45,84 +46,79 @@
 import javax.naming.directory.ModificationItem;
 import javax.swing.SwingUtilities;
 
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.ModificationType;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.Attributes;
 import org.opends.server.types.CommonSchemaElements;
+import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.Modification;
-import org.forgerock.opendj.ldap.ModificationType;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.OpenDsException;
 import org.opends.server.types.SchemaFileElement;
 import org.opends.server.util.LDIFReader;
 import org.opends.server.util.LDIFWriter;
 import org.opends.server.util.ServerConstants;
-import org.opends.server.util.StaticUtils;
-
-import static org.opends.server.types.CommonSchemaElements.*;
 
 /**
  * An abstract class used to re-factor some code between the different tasks
  * that create elements in the schema.
- *
  */
 public class NewSchemaElementsTask extends Task
 {
-  LinkedHashSet<ObjectClass> ocsToAdd = new LinkedHashSet<>();
-  LinkedHashSet<AttributeType> attrsToAdd = new LinkedHashSet<>();
+  final Set<ObjectClass> ocsToAdd = new LinkedHashSet<>();
+  final Set<AttributeType> attrsToAdd = new LinkedHashSet<>();
 
   /**
    * Constructor of the task.
-   * @param info the control panel information.
-   * @param dlg the progress dialog where the task progress will be displayed.
-   * @param ocsToAdd the object classes that must be created in order.
-   * @param attrsToAdd the attributes that must be created in order.
+   *
+   * @param info
+   *          the control panel information.
+   * @param dlg
+   *          the progress dialog where the task progress will be displayed.
+   * @param ocsToAdd
+   *          the object classes that must be created in order.
+   * @param attrsToAdd
+   *          the attributes that must be created in order.
    */
-  public NewSchemaElementsTask(ControlPanelInfo info, ProgressDialog dlg,
-      LinkedHashSet<ObjectClass> ocsToAdd,
-      LinkedHashSet<AttributeType> attrsToAdd)
+  public NewSchemaElementsTask(
+      ControlPanelInfo info, ProgressDialog dlg, Set<ObjectClass> ocsToAdd, Set<AttributeType> attrsToAdd)
   {
     super(info, dlg);
     this.ocsToAdd.addAll(ocsToAdd);
     this.attrsToAdd.addAll(attrsToAdd);
   }
 
-  /** {@inheritDoc} */
   @Override
   public Set<String> getBackends()
   {
     return Collections.emptySet();
   }
 
-  /** {@inheritDoc} */
   @Override
-  public boolean canLaunch(Task taskToBeLaunched,
-      Collection<LocalizableMessage> incompatibilityReasons)
+  public boolean canLaunch(Task taskToBeLaunched, Collection<LocalizableMessage> incompatibilityReasons)
   {
-    boolean canLaunch = true;
     if (state == State.RUNNING &&
         (taskToBeLaunched.getType() == Task.Type.DELETE_SCHEMA_ELEMENT ||
          taskToBeLaunched.getType() == Task.Type.MODIFY_SCHEMA_ELEMENT ||
          taskToBeLaunched.getType() == Task.Type.NEW_SCHEMA_ELEMENT))
     {
-      incompatibilityReasons.add(getIncompatibilityMessage(this,
-            taskToBeLaunched));
-      canLaunch = false;
+      incompatibilityReasons.add(getIncompatibilityMessage(this, taskToBeLaunched));
+      return false;
     }
-    return canLaunch;
+    return true;
   }
 
-  /** {@inheritDoc} */
   @Override
   public void runTask()
   {
@@ -141,39 +137,27 @@
     }
   }
 
-  /** {@inheritDoc} */
   @Override
   public Type getType()
   {
     return Type.NEW_SCHEMA_ELEMENT;
   }
 
-  /** {@inheritDoc} */
   @Override
   public LocalizableMessage getTaskDescription()
   {
     if (attrsToAdd.size() == 1 && ocsToAdd.isEmpty())
     {
-      String attributeName = attrsToAdd.iterator().next().getNameOrOID();
-      return INFO_CTRL_PANEL_NEW_ATTRIBUTE_TASK_DESCRIPTION.get(attributeName);
+      return INFO_CTRL_PANEL_NEW_ATTRIBUTE_TASK_DESCRIPTION.get(attrsToAdd.iterator().next().getNameOrOID());
     }
     else if (ocsToAdd.size() == 1 && attrsToAdd.isEmpty())
     {
-      String ocName = ocsToAdd.iterator().next().getNameOrOID();
-      return INFO_CTRL_PANEL_NEW_OBJECTCLASS_TASK_DESCRIPTION.get(ocName);
+      return INFO_CTRL_PANEL_NEW_OBJECTCLASS_TASK_DESCRIPTION.get(ocsToAdd.iterator().next().getNameOrOID());
     }
     else
     {
-      ArrayList<String> attrNames = new ArrayList<>();
-      for (AttributeType attribute : attrsToAdd)
-      {
-        attrNames.add(attribute.getNameOrOID());
-      }
-      ArrayList<String> ocNames = new ArrayList<>();
-      for (ObjectClass oc : ocsToAdd)
-      {
-        ocNames.add(oc.getNameOrOID());
-      }
+      final List<String> attrNames = getElementsNameOrOID(attrsToAdd);
+      final List<String> ocNames = getElementsNameOrOID(ocsToAdd);
       if (ocNames.isEmpty())
       {
         return INFO_CTRL_PANEL_NEW_ATTRIBUTES_TASK_DESCRIPTION.get(joinAsString(", ", attrNames));
@@ -185,15 +169,26 @@
       else
       {
         return INFO_CTRL_PANEL_NEW_SCHEMA_ELEMENTS_TASK_DESCRIPTION.get(
-            joinAsString(", ", attrNames),
-            joinAsString(", ", ocNames));
+            joinAsString(", ", attrNames), joinAsString(", ", ocNames));
       }
     }
   }
 
+  private <T extends CommonSchemaElements> List<String> getElementsNameOrOID(final Set<T> schemaElements)
+  {
+    final List<String> nameOrOIDs = new ArrayList<>();
+    for (CommonSchemaElements schemaElement : schemaElements)
+    {
+      nameOrOIDs.add(schemaElement.getNameOrOID());
+    }
+    return nameOrOIDs;
+  }
+
   /**
    * Update the schema.
-   * @throws OpenDsException if an error occurs.
+   *
+   * @throws OpenDsException
+   *           if an error occurs.
    */
   private void updateSchema() throws OpenDsException
   {
@@ -207,85 +202,74 @@
     }
   }
 
-  /** {@inheritDoc} */
   @Override
   protected String getCommandLinePath()
   {
     return null;
   }
 
-  /** {@inheritDoc} */
   @Override
   protected List<String> getCommandLineArguments()
   {
     return Collections.emptyList();
   }
 
+  /**
+   * Add the schema elements one by one: we are not sure that the server will
+   * handle the adds sequentially if we only send one modification.
+   *
+   * @throws OpenDsException
+   */
   private void updateSchemaOnline() throws OpenDsException
   {
-    // Add the schema elements one by one: we are not sure that the server
-    // will handle the adds sequentially if we only send one modification.
     for (AttributeType attr : attrsToAdd)
     {
       addAttributeOnline(attr);
-      SwingUtilities.invokeLater(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
-              ColorAndFontConstants.progressFont));
-        }
-      });
+      appendNewLinesToProgress();
     }
+
     for (ObjectClass oc : ocsToAdd)
     {
       addObjectClassOnline(oc);
-      SwingUtilities.invokeLater(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
-              ColorAndFontConstants.progressFont));
-        }
-      });
+      appendNewLinesToProgress();
     }
   }
 
+  private void appendNewLinesToProgress()
+  {
+    SwingUtilities.invokeLater(new Runnable()
+    {
+      @Override
+      public void run()
+      {
+        getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>", ColorAndFontConstants.progressFont));
+      }
+    });
+  }
+
   private void updateSchemaOffline() throws OpenDsException
   {
     // Group the changes in the same schema file.
-    LinkedHashMap<String, List<AttributeType>> hmAttrs = copy(attrsToAdd);
-    LinkedHashMap<String, List<ObjectClass>> hmOcs = copy(ocsToAdd);
-
-    LinkedHashSet<String> allFileNames = new LinkedHashSet<>();
-    allFileNames.addAll(hmAttrs.keySet());
+    final Map<String, List<AttributeType>> hmAttrs = copy(attrsToAdd);
+    final Map<String, List<ObjectClass>> hmOcs = copy(ocsToAdd);
+    final Set<String> allFileNames = new LinkedHashSet<>(hmAttrs.keySet());
     allFileNames.addAll(hmOcs.keySet());
+
     for (String fileName : allFileNames)
     {
       List<AttributeType> attrs = get(hmAttrs, fileName);
       List<ObjectClass> ocs = get(hmOcs, fileName);
 
-      if (fileName.equals(""))
+      if ("".equals(fileName))
       {
         fileName = null;
       }
       updateSchemaOffline(fileName, attrs, ocs);
-      SwingUtilities.invokeLater(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
-              ColorAndFontConstants.progressFont));
-        }
-      });
+      appendNewLinesToProgress();
     }
   }
 
-  private <T extends SchemaFileElement> List<T> get(
-      LinkedHashMap<String, List<T>> hmElems, String fileName)
+  private <T extends SchemaFileElement> List<T> get(Map<String, List<T>> hmElems, String fileName)
   {
     List<T> elems = hmElems.get(fileName);
     if (elems != null)
@@ -295,10 +279,9 @@
     return Collections.emptyList();
   }
 
-  private <T extends SchemaFileElement> LinkedHashMap<String, List<T>> copy(
-      LinkedHashSet<T> elemsToAdd)
+  private <T extends SchemaFileElement> Map<String, List<T>> copy(Set<T> elemsToAdd)
   {
-    LinkedHashMap<String, List<T>> hmElems = new LinkedHashMap<>();
+    Map<String, List<T>> hmElems = new LinkedHashMap<>();
     for (T elem : elemsToAdd)
     {
       String fileName = CommonSchemaElements.getSchemaFile(elem);
@@ -317,90 +300,48 @@
     return hmElems;
   }
 
-  private void addAttributeOnline(final AttributeType attribute)
-  throws OpenDsException
+  private void addAttributeOnline(final AttributeType attribute) throws OpenDsException
   {
-    SwingUtilities.invokeLater(new Runnable()
-    {
-      /** {@inheritDoc} */
-      @Override
-      public void run()
-      {
-        printEquivalentCommandLineToAddOnline(attribute);
-        getProgressDialog().appendProgressHtml(
-            Utilities.getProgressWithPoints(
-                INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(
-                    attribute.getNameOrOID()),
-                    ColorAndFontConstants.progressFont));
-      }
-    });
-    try
-    {
-      BasicAttribute attr = new BasicAttribute(getAttributeName(attribute));
-      attr.add(getValueOnline(attribute));
-      ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
-          attr);
-      getInfo().getDirContext().modifyAttributes(
-          ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
-          new ModificationItem[]  { mod });
-    }
-    catch (NamingException ne)
-    {
-      throw new OnlineUpdateException(
-          ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne), ne);
-    }
-    notifyConfigurationElementCreated(attribute);
-    SwingUtilities.invokeLater(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        getProgressDialog().appendProgressHtml(
-            Utilities.getProgressDone(ColorAndFontConstants.progressFont));
-      }
-    });
+    addSchemaElementOnline(attribute, INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(attribute.getNameOrOID()));
   }
 
-  private void addObjectClassOnline(final ObjectClass objectClass)
-  throws OpenDsException
+  private void addObjectClassOnline(final ObjectClass objectClass) throws OpenDsException
+  {
+    addSchemaElementOnline(objectClass, INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(objectClass.getNameOrOID()));
+  }
+
+  private void addSchemaElementOnline(final CommonSchemaElements schemaElement, final LocalizableMessage progressMsg)
+      throws OpenDsException
   {
     SwingUtilities.invokeLater(new Runnable()
     {
-      /** {@inheritDoc} */
       @Override
       public void run()
       {
-        printEquivalentCommandLineToAddOnline(objectClass);
+        printEquivalentCommandLineToAddOnline(schemaElement);
         getProgressDialog().appendProgressHtml(
-            Utilities.getProgressWithPoints(
-                INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(
-                    objectClass.getNameOrOID()),
-                    ColorAndFontConstants.progressFont));
+            Utilities.getProgressWithPoints(progressMsg, ColorAndFontConstants.progressFont));
       }
     });
     try
     {
-      BasicAttribute attr = new BasicAttribute(getAttributeName(objectClass));
-      attr.add(getValueOnline(objectClass));
-      ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
-          attr);
+      final BasicAttribute attr = new BasicAttribute(getAttributeName(schemaElement));
+      attr.add(getValueOnline(schemaElement));
+      final ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
       getInfo().getDirContext().modifyAttributes(
-          ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
-          new ModificationItem[]  { mod });
+          ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, new ModificationItem[] { mod });
     }
     catch (NamingException ne)
     {
-      throw new OnlineUpdateException(
-          ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne), ne);
+      throw new OnlineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne), ne);
     }
-    notifyConfigurationElementCreated(objectClass);
+    notifyConfigurationElementCreated(schemaElement);
     SwingUtilities.invokeLater(new Runnable()
     {
       @Override
       public void run()
       {
-        getProgressDialog().appendProgressHtml(
-            Utilities.getProgressDone(ColorAndFontConstants.progressFont));
+        getProgressDialog().appendProgressHtml(Utilities.getProgressDone(ColorAndFontConstants.progressFont));
       }
     });
   }
@@ -413,72 +354,50 @@
   private String getValueOffline(CommonSchemaElements element)
   {
     final Map<String, List<String>> props = element.getExtraProperties();
-    List<String> previousValues =
-        props.get(ServerConstants.SCHEMA_PROPERTY_FILENAME);
+    List<String> previousValues = props.get(ServerConstants.SCHEMA_PROPERTY_FILENAME);
     setExtraProperty(element, ServerConstants.SCHEMA_PROPERTY_FILENAME, null);
     String attributeWithoutFileDefinition = element.toString();
 
     if (previousValues != null && !previousValues.isEmpty())
     {
-      ArrayList<String> vs = new ArrayList<>(previousValues);
-      element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, vs);
+      element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, new ArrayList<String>(previousValues));
     }
     return attributeWithoutFileDefinition;
   }
 
-  private void printEquivalentCommandLineToAddOnline(
-      CommonSchemaElements element)
+  private void printEquivalentCommandLineToAddOnline(CommonSchemaElements element)
   {
-    ArrayList<String> args = new ArrayList<>();
+    List<String> args = new ArrayList<>();
     args.add("-a");
-    args.addAll(getObfuscatedCommandLineArguments(
-        getConnectionCommandLineArguments(true, true)));
+    args.addAll(getObfuscatedCommandLineArguments(getConnectionCommandLineArguments(true, true)));
     args.add(getNoPropertiesFileArgument());
 
-    String equiv = getEquivalentCommandLine(getCommandLinePath("ldapmodify"),
-        args);
-
-    StringBuilder sb = new StringBuilder();
-    LocalizableMessage msg;
-    if (element instanceof AttributeType)
-    {
-      msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_ATTRIBUTE_ONLINE.get(
-          element.getNameOrOID());
-    }
-    else
-    {
-      msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_OBJECTCLASS_ONLINE.get(
-          element.getNameOrOID());
-    }
-    sb.append(msg).append("<br><b>");
-    sb.append(equiv);
-    sb.append("<br>");
-    sb.append("dn: cn=schema<br>");
-    sb.append("changetype: modify<br>");
-    sb.append("add: ").append(getAttributeName(element)).append("<br>");
-    sb.append(getAttributeName(element)).append(": ")
-        .append(getValueOnline(element));
-    sb.append("</b><br><br>");
-    getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
-        ColorAndFontConstants.progressFont));
+    final String equivalentCmdLine = getEquivalentCommandLine(getCommandLinePath("ldapmodify"), args);
+    final String elementID = element.getNameOrOID();
+    final LocalizableMessage msg = element instanceof AttributeType ?
+        INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_ATTRIBUTE_ONLINE.get(elementID)
+      : INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_OBJECTCLASS_ONLINE.get(elementID);
+    final StringBuilder sb = new StringBuilder();
+    final String attName = getAttributeName(element);
+    sb.append(msg).append("<br><b>")
+      .append(equivalentCmdLine).append("<br>")
+      .append("dn: cn=schema<br>")
+      .append("changetype: modify<br>")
+      .append("add: ").append(attName).append("<br>")
+      .append(attName).append(": ").append(getValueOnline(element)).append("</b><br><br>");
+    getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(), ColorAndFontConstants.progressFont));
   }
 
   private String getAttributeName(CommonSchemaElements element)
   {
-    if (element instanceof AttributeType)
-    {
-      return ConfigConstants.ATTR_ATTRIBUTE_TYPES;
-    }
-    else
-    {
-      return ConfigConstants.ATTR_OBJECTCLASSES;
-    }
+    return element instanceof AttributeType ? ConfigConstants.ATTR_ATTRIBUTE_TYPES : ConfigConstants.ATTR_OBJECTCLASSES;
   }
 
-  private void updateSchemaOffline(String file,
-      final List<AttributeType> attributes,
-      final List<ObjectClass> objectClasses) throws OpenDsException
+  private void updateSchemaOffline(
+      String file, final List<AttributeType> attributes, final List<ObjectClass> objectClasses) throws OpenDsException
   {
+    final List<CommonSchemaElements> schemaElements = new ArrayList<CommonSchemaElements>(attributes);
+    schemaElements.addAll(objectClasses);
     if (file == null)
     {
       file = ConfigConstants.FILE_USER_SCHEMA_ELEMENTS;
@@ -486,88 +405,72 @@
     File f = new File(file);
     if (!f.isAbsolute())
     {
-      f = new File(
-        DirectoryServer.getEnvironmentConfig().getSchemaDirectory(),
-        file);
+      f = new File(DirectoryServer.getEnvironmentConfig().getSchemaDirectory(), file);
     }
     final String fileName = f.getAbsolutePath();
     final boolean isSchemaFileDefined = isSchemaFileDefined(fileName);
     SwingUtilities.invokeLater(new Runnable()
     {
-      /** {@inheritDoc} */
       @Override
       public void run()
       {
         final ProgressDialog progressDialog = getProgressDialog();
-        final String command = equivalentCommandToAddOffline(
-            fileName, isSchemaFileDefined, attributes, objectClasses);
-        progressDialog.appendProgressHtml(
-            Utilities.applyFont(command,
-                ColorAndFontConstants.progressFont));
+        final String command = equivalentCommandToAddOffline(fileName, isSchemaFileDefined, schemaElements);
+        progressDialog.appendProgressHtml(Utilities.applyFont(command, ColorAndFontConstants.progressFont));
 
         if (attributes.size() == 1 && objectClasses.isEmpty())
         {
           String attributeName = attributes.get(0).getNameOrOID();
-          progressDialog.appendProgressHtml(
-              Utilities.getProgressWithPoints(
-                  INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(attributeName),
-                      ColorAndFontConstants.progressFont));
+          progressDialog.appendProgressHtml(Utilities.getProgressWithPoints(
+              INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(attributeName), ColorAndFontConstants.progressFont));
         }
         else if (objectClasses.size() == 1 && attributes.isEmpty())
         {
           String ocName = objectClasses.get(0).getNameOrOID();
-          progressDialog.appendProgressHtml(
-              Utilities.getProgressWithPoints(
-                  INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(ocName),
-                      ColorAndFontConstants.progressFont));
+          progressDialog.appendProgressHtml(Utilities.getProgressWithPoints(
+              INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(ocName), ColorAndFontConstants.progressFont));
         }
         else
         {
-          progressDialog.appendProgressHtml(
-              Utilities.getProgressWithPoints(
-                  INFO_CTRL_PANEL_UPDATING_SCHEMA_FILE_PROGRESS.get(fileName),
-                      ColorAndFontConstants.progressFont));
+          progressDialog.appendProgressHtml(Utilities.getProgressWithPoints(
+              INFO_CTRL_PANEL_UPDATING_SCHEMA_FILE_PROGRESS.get(fileName), ColorAndFontConstants.progressFont));
         }
       }
     });
 
-    updateSchemaFile(fileName, isSchemaFileDefined, attributes, objectClasses);
-
-    for (AttributeType attr : attributes)
+    if (isSchemaFileDefined)
     {
-      notifyConfigurationElementCreated(attr);
+      updateSchemaFile(fileName, schemaElements);
     }
-    for (ObjectClass oc : objectClasses)
+    else
     {
-      notifyConfigurationElementCreated(oc);
+      updateSchemaUndefinedFile(fileName, schemaElements);
+    }
+
+    for (CommonSchemaElements schemaElement : schemaElements)
+    {
+      notifyConfigurationElementCreated(schemaElement);
     }
     SwingUtilities.invokeLater(new Runnable()
     {
       @Override
       public void run()
       {
-        getProgressDialog().appendProgressHtml(
-            Utilities.getProgressDone(ColorAndFontConstants.progressFont));
+        getProgressDialog().appendProgressHtml(Utilities.getProgressDone(ColorAndFontConstants.progressFont));
       }
     });
   }
 
-  private String equivalentCommandToAddOffline(String schemaFile,
-      boolean isSchemaFileDefined,
-      List<AttributeType> attributes,
-      List<ObjectClass> objectClasses)
+  private String equivalentCommandToAddOffline(
+      String schemaFile, boolean isSchemaFileDefined, List<CommonSchemaElements> schemaElements)
   {
-    ArrayList<String> names = new ArrayList<>();
-    for (AttributeType attr : attributes)
+    List<String> names = new ArrayList<>();
+    for (CommonSchemaElements schemaElement : schemaElements)
     {
-      names.add(attr.getNameOrOID());
+      names.add(schemaElement.getNameOrOID());
     }
-    for (ObjectClass oc : objectClasses)
-    {
-      names.add(oc.getNameOrOID());
-    }
-    final String namesString = joinAsString(", ", names);
 
+    final String namesString = joinAsString(", ", names);
     final StringBuilder sb = new StringBuilder();
     if (isSchemaFileDefined)
     {
@@ -585,59 +488,45 @@
       }
     }
 
-    for (AttributeType attribute : attributes)
+    for (CommonSchemaElements schemaElement : schemaElements)
     {
-      sb.append(getAttributeName(attribute)).append(": ")
-          .append(getValueOffline(attribute)).append("<br>");
-    }
-    for (ObjectClass oc : objectClasses)
-    {
-      sb.append(getAttributeName(oc)).append(": ")
-          .append(getValueOffline(oc)).append("<br>");
+      sb.append(getAttributeName(schemaElement)).append(": ").append(getValueOffline(schemaElement)).append("<br>");
     }
     sb.append("</b><br><br>");
+
     return sb.toString();
   }
 
   /**
    * Returns whether the file defined in the schema element exists or not.
-   * @param schemaFile the path to the schema file.
+   *
+   * @param schemaFile
+   *          the path to the schema file.
    * @return <CODE>true</CODE> if the schema file is defined and
-   * <CODE>false</CODE> otherwise.
+   *         <CODE>false</CODE> otherwise.
    */
   private boolean isSchemaFileDefined(String schemaFile)
   {
-    boolean schemaDefined = false;
-    LDIFReader reader = null;
-    try
+    try (LDIFReader reader = new LDIFReader(new LDIFImportConfig(schemaFile)))
     {
-      reader = new LDIFReader(new LDIFImportConfig(schemaFile));
-      Entry entry = reader.readEntry();
-      if (entry != null)
-      {
-        schemaDefined = true;
-      }
+      return reader.readEntry() != null;
     }
     catch (Throwable t)
     {
+      return false;
     }
-    finally
-    {
-      StaticUtils.close(reader);
-    }
-
-    return schemaDefined;
   }
 
   /**
    * Returns the list of LDIF lines that are enough to create the entry
    * containing only the schema element associated with this task.
+   *
    * @return the list of LDIF lines that are enough to create the entry
-   * containing only the schema element associated with this task.
+   *         containing only the schema element associated with this task.
    */
-  private ArrayList<String> getSchemaEntryLines()
+  private List<String> getSchemaEntryLines()
   {
-    ArrayList<String> lines = new ArrayList<>();
+    List<String> lines = new ArrayList<>();
     lines.add("dn: cn=schema");
     lines.add("objectClass: top");
     lines.add("objectClass: ldapSubentry");
@@ -645,96 +534,75 @@
     return lines;
   }
 
-
   /**
    * Updates the contents of the schema file.
    *
-   * @param schemaFile the schema file.
-   * @param isSchemaFileDefined whether the schema is defined or not.
-   * @param attributes the attributes to add.
-   * @param objectClasses the object classes to add.
-   * @throws OpenDsException if an error occurs updating the schema file.
+   * @param schemaFile
+   *          the schema file.
+   * @param isSchemaFileDefined
+   *          whether the schema is defined or not.
+   * @param attributes
+   *          the attributes to add.
+   * @param objectClasses
+   *          the object classes to add.
+   * @throws OpenDsException
+   *           if an error occurs updating the schema file.
    */
-  private void updateSchemaFile(String schemaFile,
-      boolean isSchemaFileDefined,
-      List<AttributeType> attributes,
-      List<ObjectClass> objectClasses) throws OpenDsException
+  private void updateSchemaFile(String schemaFile, List<CommonSchemaElements> schemaElements)
+      throws OpenDsException
   {
-    if (isSchemaFileDefined)
+    try (final LDIFExportConfig exportConfig = new LDIFExportConfig(schemaFile, ExistingFileBehavior.OVERWRITE))
     {
-      LDIFExportConfig exportConfig =
-        new LDIFExportConfig(schemaFile,
-                             ExistingFileBehavior.OVERWRITE);
-      LDIFReader reader = null;
-      LDIFWriter writer = null;
-      try
+      try (final LDIFReader reader = new LDIFReader(new LDIFImportConfig(schemaFile)))
       {
-        reader = new LDIFReader(new LDIFImportConfig(schemaFile));
-        Entry schemaEntry = reader.readEntry();
-
-        for (AttributeType attribute : attributes)
+        final Entry schemaEntry = reader.readEntry();
+        addElementsToEntry(schemaElements, schemaEntry);
+        try (final LDIFWriter writer = new LDIFWriter(exportConfig))
         {
-          Modification mod = new Modification(ModificationType.ADD,
-              Attributes.create(getAttributeName(attribute).toLowerCase(),
-                  getValueOffline(attribute)));
-          schemaEntry.applyModification(mod);
+          writer.writeEntry(schemaEntry);
+          exportConfig.getWriter().newLine();
         }
-        for (ObjectClass oc : objectClasses)
-        {
-          Modification mod = new Modification(ModificationType.ADD,
-              Attributes.create(getAttributeName(oc).toLowerCase(),
-                  getValueOffline(oc)));
-          schemaEntry.applyModification(mod);
-        }
-        writer = new LDIFWriter(exportConfig);
-        writer.writeEntry(schemaEntry);
-        exportConfig.getWriter().newLine();
       }
       catch (Throwable t)
       {
-        throw new OfflineUpdateException(
-            ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t), t);
-      }
-      finally
-      {
-        StaticUtils.close(reader, exportConfig, writer);
-      }
-    }
-    else
-    {
-      LDIFExportConfig exportConfig =
-        new LDIFExportConfig(schemaFile,
-                             ExistingFileBehavior.FAIL);
-      try
-      {
-        ArrayList<String> lines = getSchemaEntryLines();
-        for (AttributeType attribute : attributes)
-        {
-          lines.add(
-              getAttributeName(attribute)+": "+getValueOffline(attribute));
-        }
-        for (ObjectClass oc : objectClasses)
-        {
-          lines.add(getAttributeName(oc)+": "+getValueOffline(oc));
-        }
-        for (String line : lines)
-        {
-          LDIFWriter.writeLDIFLine(new StringBuilder(line),
-              exportConfig.getWriter(), exportConfig.getWrapColumn() > 1,
-              exportConfig.getWrapColumn());
-        }
-
-        exportConfig.getWriter().newLine();
-      }
-      catch (Throwable t)
-      {
-        throw new OfflineUpdateException(
-            ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t), t);
-      }
-      finally
-      {
-        StaticUtils.close(exportConfig);
+        throw new OfflineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t), t);
       }
     }
   }
+
+  private void addElementsToEntry(List<CommonSchemaElements> schemaElements, Entry schemaEntry)
+      throws DirectoryException
+  {
+    for (CommonSchemaElements schemaElement : schemaElements)
+    {
+      final Modification mod = new Modification(ModificationType.ADD,
+          Attributes.create(getAttributeName(schemaElement).toLowerCase(), getValueOffline(schemaElement)));
+      schemaEntry.applyModification(mod);
+    }
+  }
+
+  private void updateSchemaUndefinedFile(String schemaFile, List<CommonSchemaElements> schemaElements)
+      throws OfflineUpdateException
+  {
+    try (LDIFExportConfig exportConfig = new LDIFExportConfig(schemaFile, ExistingFileBehavior.FAIL))
+    {
+      List<String> lines = getSchemaEntryLines();
+      for (final CommonSchemaElements schemaElement : schemaElements)
+      {
+        lines.add(getAttributeName(schemaElement) + ": " + getValueOffline(schemaElement));
+      }
+      for (String line : lines)
+      {
+        final boolean wrapLines = exportConfig.getWrapColumn() > 1;
+        LDIFWriter.writeLDIFLine(
+            new StringBuilder(line), exportConfig.getWriter(), wrapLines, exportConfig.getWrapColumn());
+      }
+      exportConfig.getWriter().newLine();
+    }
+    catch (Throwable t)
+    {
+      throw new OfflineUpdateException(ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t), t);
+    }
+  }
+
 }
diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewAttributePanel.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
index 110da6a..4a5ec81 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
@@ -35,10 +35,12 @@
 import java.awt.event.ItemListener;
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
@@ -80,107 +82,90 @@
 public class NewAttributePanel extends StatusGenericPanel
 {
   private static final long serialVersionUID = 2340170241535771321L;
-  private JLabel lName = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_NAME_LABEL.get());
-  private JLabel lParent = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_PARENT_LABEL.get());
-  private JLabel lOID = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_OID_LABEL.get());
-  private JLabel lAliases = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_ALIASES_LABEL.get());
-  private JLabel lOrigin = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_ORIGIN_LABEL.get());
-  private JLabel lFile = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_FILE_LABEL.get());
-  private JLabel lDescription = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_DESCRIPTION_LABEL.get());
-  private JLabel lUsage = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_USAGE_LABEL.get());
-  private JLabel lSyntax = Utilities.createPrimaryLabel(
-      INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_LABEL.get());
-  private JLabel lApproximate = Utilities.createPrimaryLabel(
+
+  private static final LocalizableMessage NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
+  private static final LocalizableMessage NO_MATCHING_RULE = INFO_CTRL_PANEL_NO_MATCHING_RULE_FOR_ATTRIBUTE.get();
+
+  private final JLabel lName = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_NAME_LABEL.get());
+  private final JLabel lParent = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_PARENT_LABEL.get());
+  private final JLabel lOID = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_OID_LABEL.get());
+  private final JLabel lAliases = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_ALIASES_LABEL.get());
+  private final JLabel lOrigin = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_ORIGIN_LABEL.get());
+  private final JLabel lFile = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_FILE_LABEL.get());
+  private final JLabel lDescription = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_DESCRIPTION_LABEL.get());
+  private final JLabel lUsage = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_USAGE_LABEL.get());
+  private final JLabel lSyntax = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_LABEL.get());
+  private final JLabel lApproximate = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_ATTRIBUTE_APPROXIMATE_MATCHING_RULE_LABEL.get());
-  private JLabel lEquality = Utilities.createPrimaryLabel(
+  private final JLabel lEquality = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_ATTRIBUTE_EQUALITY_MATCHING_RULE_LABEL.get());
-  private JLabel lOrdering = Utilities.createPrimaryLabel(
+  private final JLabel lOrdering = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_ATTRIBUTE_ORDERING_MATCHING_RULE_LABEL.get());
-  private JLabel lSubstring = Utilities.createPrimaryLabel(
+  private final JLabel lSubstring = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_ATTRIBUTE_SUBSTRING_MATCHING_RULE_LABEL.get());
-  private JLabel lType = Utilities.createPrimaryLabel();
+  private final JLabel lType = Utilities.createPrimaryLabel();
 
-  private JLabel[] labels = {lName, lParent, lOID, lAliases, lOrigin, lFile,
-      lDescription, lUsage, lSyntax, lApproximate,
-      lEquality, lOrdering, lSubstring, lType
-  };
+  private final JLabel[] labels = { lName, lParent, lOID, lAliases, lOrigin, lFile, lDescription, lUsage, lSyntax,
+    lApproximate, lEquality, lOrdering, lSubstring, lType };
 
-  private JTextField name = Utilities.createMediumTextField();
-  private JComboBox parent = Utilities.createComboBox();
-  private JTextField oid = Utilities.createMediumTextField();
-  private JTextField aliases = Utilities.createLongTextField();
-  private JTextField description = Utilities.createLongTextField();
-  private JTextField origin = Utilities.createLongTextField();
-  private JTextField file = Utilities.createLongTextField();
-  private JComboBox usage = Utilities.createComboBox();
-  private JComboBox syntax = Utilities.createComboBox();
-  private JComboBox approximate = Utilities.createComboBox();
-  private JComboBox equality = Utilities.createComboBox();
-  private JComboBox ordering = Utilities.createComboBox();
-  private JComboBox substring = Utilities.createComboBox();
-  private JCheckBox nonModifiable = Utilities.createCheckBox(
+  private final JTextField name = Utilities.createMediumTextField();
+  private final JComboBox parent = Utilities.createComboBox();
+  private final JTextField oid = Utilities.createMediumTextField();
+  private final JTextField aliases = Utilities.createLongTextField();
+  private final JTextField description = Utilities.createLongTextField();
+  private final JTextField origin = Utilities.createLongTextField();
+  private final JTextField file = Utilities.createLongTextField();
+  private final JComboBox<AttributeUsage> usage = Utilities.createComboBox();
+  private final JComboBox syntax = Utilities.createComboBox();
+  private final JComboBox approximate = Utilities.createComboBox();
+  private final JComboBox equality = Utilities.createComboBox();
+  private final JComboBox ordering = Utilities.createComboBox();
+  private final JComboBox substring = Utilities.createComboBox();
+  private final JCheckBox nonModifiable = Utilities.createCheckBox(
       INFO_CTRL_PANEL_ATTRIBUTE_NON_MODIFIABLE_LABEL.get());
-  private JCheckBox singleValued = Utilities.createCheckBox(
-      INFO_CTRL_PANEL_ATTRIBUTE_SINGLE_VALUED_LABEL.get());
-  private JCheckBox collective = Utilities.createCheckBox(
-      INFO_CTRL_PANEL_ATTRIBUTE_COLLECTIVE_LABEL.get());
-  private JCheckBox obsolete = Utilities.createCheckBox(
-      INFO_CTRL_PANEL_ATTRIBUTE_OBSOLETE_LABEL.get());
+  private final JCheckBox singleValued = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_SINGLE_VALUED_LABEL.get());
+  private final JCheckBox collective = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_COLLECTIVE_LABEL.get());
+  private final JCheckBox obsolete = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_OBSOLETE_LABEL.get());
 
   private Schema schema;
 
-  private Component relativeComponent;
-
-  private LocalizableMessage NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
-  private LocalizableMessage NO_MATCHING_RULE =
-    INFO_CTRL_PANEL_NO_MATCHING_RULE_FOR_ATTRIBUTE.get();
+  private final Component relativeComponent;
 
   /**
    * Constructor of the new attribute panel.
-   * @param relativeComponent the component relative to which the dialog
-   * containing this panel must be centered.
+   *
+   * @param relativeComponent
+   *          the component relative to which the dialog containing this panel
+   *          must be centered.
    */
   public NewAttributePanel(Component relativeComponent)
   {
-    super();
     this.relativeComponent = relativeComponent;
     createLayout();
   }
 
-  /** {@inheritDoc} */
   @Override
   public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_ATTRIBUTE_PANEL_TITLE.get();
   }
 
-  /** {@inheritDoc} */
   @Override
   public Component getPreferredFocusComponent()
   {
     return name;
   }
 
-  /** {@inheritDoc} */
   @Override
   public void configurationChanged(ConfigurationChangeEvent ev)
   {
-    ArrayList<Syntax> newSyntaxes = new ArrayList<>();
-
+    List<Syntax> newSyntaxes = new ArrayList<>();
     final ServerDescriptor desc = ev.getNewDescriptor();
     Schema s = desc.getSchema();
 
     final boolean firstSchema = schema == null;
-    final boolean[] repack = {firstSchema};
-    final boolean[] error = {false};
+    final boolean[] repack = { firstSchema };
+    final boolean[] error = { false };
 
     boolean schemaChanged;
     if (schema != null && s != null)
@@ -202,8 +187,7 @@
     if (schemaChanged)
     {
       schema = s;
-
-      HashMap<String, Syntax> syntaxNameMap = new HashMap<>();
+      Map<String, Syntax> syntaxNameMap = new HashMap<>();
 
       for (String key : schema.getSyntaxes().keySet())
       {
@@ -224,7 +208,7 @@
       }
       updateComboBoxModel(newSyntaxes, (DefaultComboBoxModel) syntax.getModel());
 
-      HashMap<String, AttributeType> attributeNameMap = new HashMap<>();
+      Map<String, AttributeType> attributeNameMap = new HashMap<>();
       for (String key : schema.getAttributeTypes().keySet())
       {
         AttributeType attr = schema.getAttributeType(key);
@@ -232,7 +216,7 @@
       }
       orderedKeys.clear();
       orderedKeys.addAll(attributeNameMap.keySet());
-      ArrayList<Object> newParents = new ArrayList<>();
+      List<Object> newParents = new ArrayList<>();
       for (String key : orderedKeys)
       {
         newParents.add(attributeNameMap.get(key));
@@ -240,12 +224,11 @@
       newParents.add(0, NO_PARENT);
       updateComboBoxModel(newParents, (DefaultComboBoxModel) parent.getModel());
 
-      ArrayList<MatchingRule> approximateElements = new ArrayList<>();
-      ArrayList<MatchingRule> equalityElements = new ArrayList<>();
-      ArrayList<MatchingRule> orderingElements = new ArrayList<>();
-      ArrayList<MatchingRule> substringElements = new ArrayList<>();
-
-      HashMap<String, MatchingRule> matchingRuleNameMap = new HashMap<>();
+      List<MatchingRule> approximateElements = new ArrayList<>();
+      List<MatchingRule> equalityElements = new ArrayList<>();
+      List<MatchingRule> orderingElements = new ArrayList<>();
+      List<MatchingRule> substringElements = new ArrayList<>();
+      Map<String, MatchingRule> matchingRuleNameMap = new HashMap<>();
       for (String key : schema.getMatchingRules().keySet())
       {
         MatchingRule rule = schema.getMatchingRule(key);
@@ -274,24 +257,17 @@
           substringElements.add(matchingRule);
         }
       }
-      JComboBox[] combos = {approximate, equality, ordering, substring};
-      ArrayList<ArrayList<MatchingRule>> ruleNames = new ArrayList<>();
+      JComboBox[] combos = { approximate, equality, ordering, substring };
+      List<List<MatchingRule>> ruleNames = new ArrayList<>();
       ruleNames.add(approximateElements);
       ruleNames.add(equalityElements);
       ruleNames.add(orderingElements);
       ruleNames.add(substringElements);
-      for (int i=0; i<combos.length; i++)
+      for (int i = 0; i < combos.length; i++)
       {
-        DefaultComboBoxModel model = (DefaultComboBoxModel)combos[i].getModel();
-        ArrayList<Object> el = new ArrayList<Object>(ruleNames.get(i));
-        if (model.getSize() == 0)
-        {
-          el.add(0, NO_MATCHING_RULE);
-        }
-        else
-        {
-          el.add(0, model.getElementAt(0));
-        }
+        DefaultComboBoxModel model = (DefaultComboBoxModel) combos[i].getModel();
+        List<Object> el = new ArrayList<Object>(ruleNames.get(i));
+        el.add(0, model.getSize() == 0 ? NO_MATCHING_RULE : model.getElementAt(0));
         updateComboBoxModel(el, model);
       }
     }
@@ -307,7 +283,6 @@
     }
     SwingUtilities.invokeLater(new Runnable()
     {
-      /** {@inheritDoc} */
       @Override
       public void run()
       {
@@ -315,9 +290,9 @@
         errorPane.setVisible(error[0]);
         if (firstSchema)
         {
-          for (int i=0; i<syntax.getModel().getSize(); i++)
+          for (int i = 0; i < syntax.getModel().getSize(); i++)
           {
-            Syntax syn = (Syntax)syntax.getModel().getElementAt(i);
+            Syntax syn = (Syntax) syntax.getModel().getElementAt(i);
             if ("DirectoryString".equals(syn.getName()))
             {
               syntax.setSelectedIndex(i);
@@ -335,9 +310,7 @@
           packParentDialog();
           if (relativeComponent != null)
           {
-            Utilities.centerGoldenMean(
-                Utilities.getParentDialog(NewAttributePanel.this),
-                relativeComponent);
+            Utilities.centerGoldenMean(Utilities.getParentDialog(NewAttributePanel.this), relativeComponent);
           }
         }
       }
@@ -345,17 +318,15 @@
     if (!error[0])
     {
       updateErrorPaneAndOKButtonIfAuthRequired(desc,
-          isLocal() ?
-     INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_ATTRIBUTE_SUMMARY.get() :
-     INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
+          isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_ATTRIBUTE_SUMMARY.get()
+                    : INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
     }
   }
 
-  /** {@inheritDoc} */
   @Override
   public void okClicked()
   {
-    ArrayList<LocalizableMessage> errors = new ArrayList<>();
+    List<LocalizableMessage> errors = new ArrayList<>();
     for (JLabel label : labels)
     {
       setPrimaryValid(label);
@@ -429,30 +400,26 @@
     }
 
     setPrimaryValid(lUsage);
-    if (nonModifiable.isSelected()
-        && AttributeUsage.USER_APPLICATIONS.equals(usage.getSelectedItem()))
+    if (nonModifiable.isSelected() && AttributeUsage.USER_APPLICATIONS.equals(usage.getSelectedItem()))
     {
       errors.add(ERR_NON_MODIFIABLE_CANNOT_BE_USER_APPLICATIONS.get());
       setPrimaryInvalid(lUsage);
     }
 
-    ProgressDialog dlg = new ProgressDialog(
-        Utilities.createFrame(),
-        Utilities.getParentDialog(this),
+    ProgressDialog dlg = new ProgressDialog(Utilities.createFrame(), Utilities.getParentDialog(this),
         INFO_CTRL_PANEL_NEW_ATTRIBUTE_PANEL_TITLE.get(), getInfo());
     NewSchemaElementsTask newTask = null;
     if (errors.isEmpty())
     {
-      LinkedHashSet<AttributeType> attributes = new LinkedHashSet<>();
+      Set<AttributeType> attributes = new LinkedHashSet<>();
       attributes.add(getAttribute());
-      LinkedHashSet<ObjectClass> ocs = new LinkedHashSet<>(0);
+      Set<ObjectClass> ocs = new LinkedHashSet<>(0);
       newTask = new NewSchemaElementsTask(getInfo(), dlg, ocs, attributes);
       for (Task task : getInfo().getTasks())
       {
         task.canLaunch(newTask, errors);
       }
-      for (ConfigurationElementCreatedListener listener :
-        getConfigurationElementCreatedListeners())
+      for (ConfigurationElementCreatedListener listener : getConfigurationElementCreatedListeners())
       {
         newTask.addConfigurationElementCreatedListener(listener);
       }
@@ -461,13 +428,13 @@
     {
       String attrName = getAttributeName();
       launchOperation(newTask,
-          INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUMMARY.get(attrName),
-          INFO_CTRL_PANEL_CREATING_ATTRIBUTE_COMPLETE.get(),
-          INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUCCESSFUL.get(attrName),
-          ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_SUMMARY.get(),
-          ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_DETAILS.get(attrName),
-          null,
-          dlg);
+                      INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUMMARY.get(attrName),
+                      INFO_CTRL_PANEL_CREATING_ATTRIBUTE_COMPLETE.get(),
+                      INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUCCESSFUL.get(attrName),
+                      ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_SUMMARY.get(),
+                      ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_DETAILS.get(attrName),
+                      null,
+                      dlg);
       dlg.setVisible(true);
       name.setText("");
       oid.setText("");
@@ -484,8 +451,11 @@
 
   /**
    * Returns the message representing the schema element type.
-   * @param name the name of the schema element.
-   * @param schema the schema.
+   *
+   * @param name
+   *          the name of the schema element.
+   * @param schema
+   *          the schema.
    * @return the message representing the schema element type.
    */
   static LocalizableMessage getSchemaElementType(String name, Schema schema)
@@ -528,10 +498,7 @@
     return null;
   }
 
-
-  /**
-   * Creates the layout of the panel (but the contents are not populated here).
-   */
+  /** Creates the layout of the panel (but the contents are not populated here). */
   private void createLayout()
   {
     GridBagConstraints gbc = new GridBagConstraints();
@@ -541,7 +508,7 @@
     gbc.gridy = 0;
     addErrorPane(gbc);
 
-    gbc.gridy ++;
+    gbc.gridy++;
     gbc.gridwidth = 1;
     gbc.weighty = 0.0;
     gbc.gridx = 1;
@@ -551,27 +518,23 @@
     gbc.insets.bottom = 10;
     add(requiredLabel, gbc);
 
-    gbc.gridy ++;
+    gbc.gridy++;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     gbc.anchor = GridBagConstraints.WEST;
     gbc.insets.bottom = 0;
 
-    JComboBox[] comboBoxes = {parent, syntax, approximate,
-        equality, ordering, substring};
-    LocalizableMessage[] defaultValues = {NO_PARENT, LocalizableMessage.EMPTY, NO_MATCHING_RULE,
-        NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE
-    };
-    SchemaElementComboBoxCellRenderer renderer = new
-    SchemaElementComboBoxCellRenderer(syntax);
-    for (int i=0; i<comboBoxes.length; i++)
+    JComboBox[] comboBoxes = { parent, syntax, approximate, equality, ordering, substring };
+    LocalizableMessage[] defaultValues =
+        { NO_PARENT, LocalizableMessage.EMPTY, NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE };
+    SchemaElementComboBoxCellRenderer renderer = new SchemaElementComboBoxCellRenderer(syntax);
+    for (int i = 0; i < comboBoxes.length; i++)
     {
-      DefaultComboBoxModel model = new DefaultComboBoxModel(
-          new Object[]{defaultValues[i]});
+      DefaultComboBoxModel model = new DefaultComboBoxModel(new Object[] { defaultValues[i] });
       comboBoxes[i].setModel(model);
       comboBoxes[i].setRenderer(renderer);
     }
 
-    DefaultComboBoxModel model = new DefaultComboBoxModel();
+    DefaultComboBoxModel<AttributeUsage> model = new DefaultComboBoxModel<AttributeUsage>();
     for (AttributeUsage us : AttributeUsage.values())
     {
       model.addElement(us);
@@ -580,44 +543,32 @@
     usage.setSelectedItem(AttributeUsage.USER_APPLICATIONS);
     usage.setRenderer(renderer);
 
-    Component[] basicComps = {name, oid, description,
-        syntax};
-    JLabel[] basicLabels = {lName, lOID, lDescription, lSyntax};
-    JLabel[] basicInlineHelp = new JLabel[] {null, null, null,
-        Utilities.createInlineHelpLabel(
-            INFO_CTRL_PANEL_SYNTAX_INLINE_HELP.get())};
+    Component[] basicComps = { name, oid, description, syntax };
+    JLabel[] basicLabels = { lName, lOID, lDescription, lSyntax };
+    JLabel[] basicInlineHelp = new JLabel[] {
+      null, null, null, Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SYNTAX_INLINE_HELP.get()) };
     add(basicLabels, basicComps, basicInlineHelp, this, gbc);
 
     BasicExpander[] expanders = new BasicExpander[] {
-        new BasicExpander(INFO_CTRL_PANEL_EXTRA_OPTIONS_EXPANDER.get()),
-        new BasicExpander(
-            INFO_CTRL_PANEL_ATTRIBUTE_TYPE_OPTIONS_EXPANDER.get()),
-        new BasicExpander(INFO_CTRL_PANEL_MATCHING_RULE_OPTIONS_EXPANDER.get())
-    };
+          new BasicExpander(INFO_CTRL_PANEL_EXTRA_OPTIONS_EXPANDER.get()),
+          new BasicExpander(INFO_CTRL_PANEL_ATTRIBUTE_TYPE_OPTIONS_EXPANDER.get()),
+          new BasicExpander(INFO_CTRL_PANEL_MATCHING_RULE_OPTIONS_EXPANDER.get()) };
 
-    Component[][] comps = {{parent, aliases, origin, file},
-        {usage, singleValued, nonModifiable, collective, obsolete},
-        {approximate, equality, ordering, substring}};
-    JLabel[][] labels = {{lParent, lAliases, lOrigin, lFile},
-        {lUsage, lType, null, null, null},
-        {lApproximate, lEquality, lOrdering, lSubstring}};
-    JLabel[][] inlineHelps = {{null,
-      Utilities.createInlineHelpLabel(
-          INFO_CTRL_PANEL_SEPARATED_WITH_COMMAS_HELP.get()), null,
-      Utilities.createInlineHelpLabel(
-          INFO_CTRL_PANEL_SCHEMA_FILE_ATTRIBUTE_HELP.get(File.separator))},
-      {null, null, null, null, null, null},
-      {Utilities.createInlineHelpLabel(
-          INFO_CTRL_PANEL_MATCHING_RULE_APPROXIMATE_HELP.get()),
-        Utilities.createInlineHelpLabel(
-            INFO_CTRL_PANEL_MATCHING_RULE_EQUALITY_HELP.get()),
-        Utilities.createInlineHelpLabel(
-            INFO_CTRL_PANEL_MATCHING_RULE_ORDERING_HELP.get()),
-        Utilities.createInlineHelpLabel(
-            INFO_CTRL_PANEL_MATCHING_RULE_SUBSTRING_HELP.get())
-      }
-    };
-    for (int i=0; i<expanders.length; i++)
+    Component[][] comps = { { parent, aliases, origin, file },
+                            { usage, singleValued, nonModifiable, collective, obsolete },
+                            { approximate, equality, ordering, substring } };
+    JLabel[][] labels ={ { lParent, lAliases, lOrigin, lFile },
+                         { lUsage, lType, null, null, null },
+                         { lApproximate, lEquality, lOrdering, lSubstring } };
+    JLabel[][] inlineHelps = {
+          { null, Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SEPARATED_WITH_COMMAS_HELP.get()), null,
+            Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SCHEMA_FILE_ATTRIBUTE_HELP.get(File.separator)) },
+          { null, null, null, null, null, null },
+          { Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_APPROXIMATE_HELP.get()),
+            Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_EQUALITY_HELP.get()),
+            Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_ORDERING_HELP.get()),
+            Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_SUBSTRING_HELP.get()) } };
+    for (int i = 0; i < expanders.length; i++)
     {
       gbc.gridwidth = 2;
       gbc.gridx = 0;
@@ -625,9 +576,9 @@
       add(expanders[i], gbc);
       final JPanel p = new JPanel(new GridBagLayout());
       gbc.insets.left = 15;
-      gbc.gridy ++;
+      gbc.gridy++;
       add(p, gbc);
-      gbc.gridy ++;
+      gbc.gridy++;
       p.setOpaque(false);
 
       GridBagConstraints gbc1 = new GridBagConstraints();
@@ -638,7 +589,6 @@
       final BasicExpander expander = expanders[i];
       ChangeListener changeListener = new ChangeListener()
       {
-        /** {@inheritDoc} */
         @Override
         public void stateChanged(ChangeEvent e)
         {
@@ -653,7 +603,6 @@
 
     ItemListener itemListener = new ItemListener()
     {
-      /** {@inheritDoc} */
       @Override
       public void itemStateChanged(ItemEvent ev)
       {
@@ -672,29 +621,26 @@
     file.setText(ConfigConstants.FILE_USER_SCHEMA_ELEMENTS);
   }
 
-
   private void updateDefaultMatchingRuleNames()
   {
-    Syntax syn = (Syntax)syntax.getSelectedItem();
+    Syntax syn = (Syntax) syntax.getSelectedItem();
     if (syn != null)
     {
-      MatchingRule[] rules = {syn.getApproximateMatchingRule(),
-          syn.getSubstringMatchingRule(),
-          syn.getEqualityMatchingRule(),
-          syn.getOrderingMatchingRule()};
-      JComboBox[] combos = {approximate, substring, equality, ordering};
-      for (int i=0; i<rules.length; i++)
+      MatchingRule[] rules = { syn.getApproximateMatchingRule(), syn.getSubstringMatchingRule(),
+        syn.getEqualityMatchingRule(), syn.getOrderingMatchingRule() };
+      JComboBox[] combos = { approximate, substring, equality, ordering };
+      for (int i = 0; i < rules.length; i++)
       {
-        DefaultComboBoxModel model = (DefaultComboBoxModel)combos[i].getModel();
+        DefaultComboBoxModel model = (DefaultComboBoxModel) combos[i].getModel();
         int index = combos[i].getSelectedIndex();
         if (model.getSize() > 0)
         {
           model.removeElementAt(0);
         }
 
-        final LocalizableMessage msg = rules[i] != null
-            ? INFO_CTRL_PANEL_DEFAULT_DEFINED_IN_SYNTAX.get(rules[i].getNameOrOID())
-            : NO_MATCHING_RULE;
+        final LocalizableMessage msg =
+            rules[i] != null ? INFO_CTRL_PANEL_DEFAULT_DEFINED_IN_SYNTAX.get(rules[i].getNameOrOID())
+                             : NO_MATCHING_RULE;
         model.insertElementAt(msg, 0);
         combos[i].setSelectedIndex(index);
       }
@@ -711,14 +657,14 @@
     String o = oid.getText().trim();
     if (o.length() == 0)
     {
-      o = getAttributeName()+"-oid";
+      o = getAttributeName() + "-oid";
     }
     return o;
   }
 
-  private ArrayList<String> getAliases()
+  private List<String> getAliases()
   {
-    ArrayList<String> al = new ArrayList<>();
+    List<String> al = new ArrayList<>();
     String s = aliases.getText().trim();
     if (s.length() > 0)
     {
@@ -731,9 +677,9 @@
     return al;
   }
 
-  private ArrayList<String> getAllNames()
+  private List<String> getAllNames()
   {
-    ArrayList<String> al = new ArrayList<>();
+    List<String> al = new ArrayList<>();
     al.add(getAttributeName());
     al.addAll(getAliases());
     return al;
@@ -780,24 +726,22 @@
 
   private Map<String, List<String>> getExtraProperties()
   {
-    Map<String, List<String>> map = new HashMap<>();
-    String f = file.getText().trim();
-    if (f.length() > 0)
-    {
-      ArrayList<String> list = new ArrayList<>();
-      list.add(f);
-      map.put(ServerConstants.SCHEMA_PROPERTY_FILENAME, list);
-    }
-    String or = origin.getText().trim();
-    if (or.length() > 0)
-    {
-      ArrayList<String> list = new ArrayList<>();
-      list.add(or);
-      map.put(ServerConstants.SCHEMA_PROPERTY_ORIGIN, list);
-    }
+    final Map<String, List<String>> map = new HashMap<>();
+    addExtraPropertyFromTextField(file, ServerConstants.SCHEMA_PROPERTY_FILENAME, map);
+    addExtraPropertyFromTextField(origin, ServerConstants.SCHEMA_PROPERTY_ORIGIN, map);
     return map;
   }
 
+  private void addExtraPropertyFromTextField(
+      final JTextField value, final String key, final Map<String, List<String>> map)
+  {
+    final String trimmedValue = value.getText().trim();
+    if (!trimmedValue.trim().isEmpty())
+    {
+      map.put(key, Arrays.asList(trimmedValue));
+    }
+  }
+
   private String getDescription()
   {
     return description.getText().trim();
@@ -805,19 +749,22 @@
 
   private AttributeType getAttribute()
   {
-    return new AttributeType("", getAttributeName(),
-        getAllNames(),
-        getOID(),
-        getDescription(),
-        getSuperior(),
-        (Syntax)syntax.getSelectedItem(),
-        getApproximateMatchingRule(),
-        getEqualityMatchingRule(),
-        getOrderingMatchingRule(),
-        getSubstringMatchingRule(),
-        (AttributeUsage)usage.getSelectedItem(),
-        collective.isSelected(), nonModifiable.isSelected(),
-        obsolete.isSelected(), singleValued.isSelected(),
-        getExtraProperties());
+    return new AttributeType("",
+                             getAttributeName(),
+                             getAllNames(),
+                             getOID(),
+                             getDescription(),
+                             getSuperior(),
+                             (Syntax) syntax.getSelectedItem(),
+                             getApproximateMatchingRule(),
+                             getEqualityMatchingRule(),
+                             getOrderingMatchingRule(),
+                             getSubstringMatchingRule(),
+                             (AttributeUsage) usage.getSelectedItem(),
+                             collective.isSelected(),
+                             nonModifiable.isSelected(),
+                             obsolete.isSelected(),
+                             singleValued.isSelected(),
+                             getExtraProperties());
   }
 }
diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
index 865f5ab..957d1e8 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/Utilities.java
@@ -170,11 +170,14 @@
 
   /**
    * Creates a combo box.
+   *
+   * @param <T>
+   *          The combo box data type.
    * @return a combo box.
    */
-  public static JComboBox createComboBox()
+  public static <T> JComboBox<T> createComboBox()
   {
-    JComboBox combo = new JComboBox();
+    JComboBox<T> combo = new JComboBox<>();
     if (isMacOS())
     {
       combo.setOpaque(false);

--
Gitblit v1.10.0