From c5e1bceb1bcb9f1f36d5b5f568ac5fd3b73d9c2c Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 13 Dec 2013 14:07:45 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1235 : Migrate configuration framework

---
 opendj-admin/src/main/java/org/opends/server/admin/LDAPProfile.java |  632 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 286 insertions(+), 346 deletions(-)

diff --git a/opendj-admin/src/main/java/org/opends/server/admin/LDAPProfile.java b/opendj-admin/src/main/java/org/opends/server/admin/LDAPProfile.java
index 027b896..3dba061 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/LDAPProfile.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/LDAPProfile.java
@@ -27,8 +27,6 @@
 
 package org.opends.server.admin;
 
-
-
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -37,387 +35,329 @@
 import java.util.NoSuchElementException;
 import java.util.Set;
 
-
-
 /**
- * This class is used to map configuration elements to their LDAP
- * schema names.
+ * This class is used to map configuration elements to their LDAP schema names.
  * <p>
- * It is possible to augment the core LDAP profile with additional
- * profile mappings at run-time using instances of {@link Wrapper}.
- * This is useful for unit tests which need to add and remove mock
- * components.
+ * It is possible to augment the core LDAP profile with additional profile
+ * mappings at run-time using instances of {@link Wrapper}. This is useful for
+ * unit tests which need to add and remove mock components.
  */
 public final class LDAPProfile {
 
-  /**
-   * LDAP profile wrappers can be used to provide temporary LDAP
-   * profile information for components which do not have LDAP profile
-   * property files. These components are typically "mock" components
-   * used in unit-tests.
-   */
-  public static abstract class Wrapper {
-
     /**
-     * Default constructor.
+     * LDAP profile wrappers can be used to provide temporary LDAP profile
+     * information for components which do not have LDAP profile property files.
+     * These components are typically "mock" components used in unit-tests.
      */
-    protected Wrapper() {
-      // No implementation required.
+    public static abstract class Wrapper {
+
+        /**
+         * Default constructor.
+         */
+        protected Wrapper() {
+            // No implementation required.
+        }
+
+        /**
+         * Get the name of the LDAP attribute associated with the specified
+         * property definition.
+         * <p>
+         * The default implementation of this method is to return
+         * <code>null</code>.
+         *
+         * @param d
+         *            The managed object definition.
+         * @param pd
+         *            The property definition.
+         * @return Returns the name of the LDAP attribute associated with the
+         *         specified property definition, or <code>null</code> if the
+         *         property definition is not handled by this LDAP profile
+         *         wrapper.
+         */
+        public String getAttributeName(AbstractManagedObjectDefinition<?, ?> d, PropertyDefinition<?> pd) {
+            return null;
+        }
+
+        /**
+         * Gets the LDAP RDN attribute type for child entries of an instantiable
+         * relation.
+         * <p>
+         * The default implementation of this method is to return
+         * <code>null</code>.
+         *
+         * @param r
+         *            The instantiable relation.
+         * @return Returns the LDAP RDN attribute type for child entries of an
+         *         instantiable relation, or <code>null</code> if the
+         *         instantiable relation is not handled by this LDAP profile
+         *         wrapper.
+         */
+        public String getRelationChildRDNType(InstantiableRelationDefinition<?, ?> r) {
+            return null;
+        }
+
+        /**
+         * Gets the LDAP RDN attribute type for child entries of an set
+         * relation.
+         * <p>
+         * The default implementation of this method is to return
+         * <code>null</code>.
+         *
+         * @param r
+         *            The set relation.
+         * @return Returns the LDAP RDN attribute type for child entries of an
+         *         set relation, or <code>null</code> if the set relation is not
+         *         handled by this LDAP profile wrapper.
+         */
+        public String getRelationChildRDNType(SetRelationDefinition<?, ?> r) {
+            return null;
+        }
+
+        /**
+         * Get the principle object class associated with the specified
+         * definition.
+         * <p>
+         * The default implementation of this method is to return
+         * <code>null</code>.
+         *
+         * @param d
+         *            The managed object definition.
+         * @return Returns the principle object class associated with the
+         *         specified definition, or <code>null</code> if the managed
+         *         object definition is not handled by this LDAP profile
+         *         wrapper.
+         */
+        public String getObjectClass(AbstractManagedObjectDefinition<?, ?> d) {
+            return null;
+        }
+
+        /**
+         * Get an LDAP RDN sequence associatied with a relation.
+         * <p>
+         * The default implementation of this method is to return
+         * <code>null</code>.
+         *
+         * @param r
+         *            The relation.
+         * @return Returns the LDAP RDN sequence associatied with a relation, or
+         *         <code>null</code> if the relation is not handled by this LDAP
+         *         profile wrapper.
+         */
+        public String getRelationRDNSequence(RelationDefinition<?, ?> r) {
+            return null;
+        }
     }
 
-
+    // The singleton instance.
+    private static final LDAPProfile INSTANCE = new LDAPProfile();
 
     /**
-     * Get the name of the LDAP attribute associated with the
-     * specified property definition.
-     * <p>
-     * The default implementation of this method is to return
-     * <code>null</code>.
+     * Get the global LDAP profile instance.
      *
-     * @param d
-     *          The managed object definition.
-     * @param pd
-     *          The property definition.
-     * @return Returns the name of the LDAP attribute associated with
-     *         the specified property definition, or <code>null</code>
-     *         if the property definition is not handled by this LDAP
-     *         profile wrapper.
+     * @return Returns the global LDAP profile instance.
      */
-    public String getAttributeName(AbstractManagedObjectDefinition<?, ?> d,
-        PropertyDefinition<?> pd) {
-      return null;
+    public static LDAPProfile getInstance() {
+        return INSTANCE;
     }
 
+    // The list of profile wrappers.
+    private final LinkedList<Wrapper> profiles = new LinkedList<Wrapper>();;
 
+    // The LDAP profile property table.
+    private final ManagedObjectDefinitionResource resource = ManagedObjectDefinitionResource.createForProfile("ldap");
 
-    /**
-     * Gets the LDAP RDN attribute type for child entries of an
-     * instantiable relation.
-     * <p>
-     * The default implementation of this method is to return
-     * <code>null</code>.
-     *
-     * @param r
-     *          The instantiable relation.
-     * @return Returns the LDAP RDN attribute type for child entries
-     *         of an instantiable relation, or <code>null</code> if
-     *         the instantiable relation is not handled by this LDAP
-     *         profile wrapper.
-     */
-    public String getRelationChildRDNType(
-        InstantiableRelationDefinition<?, ?> r) {
-      return null;
+    // Prevent construction.
+    private LDAPProfile() {
+        // No implementation required.
     }
 
-
-
     /**
-     * Gets the LDAP RDN attribute type for child entries of an set
-     * relation.
-     * <p>
-     * The default implementation of this method is to return
-     * <code>null</code>.
-     *
-     * @param r
-     *          The set relation.
-     * @return Returns the LDAP RDN attribute type for child entries of
-     *         an set relation, or <code>null</code> if the set relation
-     *         is not handled by this LDAP profile wrapper.
-     */
-    public String getRelationChildRDNType(SetRelationDefinition<?, ?> r)
-    {
-      return null;
-    }
-
-
-
-    /**
-     * Get the principle object class associated with the specified
+     * Get the name of the LDAP attribute associated with the specified property
      * definition.
-     * <p>
-     * The default implementation of this method is to return
-     * <code>null</code>.
      *
      * @param d
-     *          The managed object definition.
-     * @return Returns the principle object class associated with the
-     *         specified definition, or <code>null</code> if the
-     *         managed object definition is not handled by this LDAP
-     *         profile wrapper.
+     *            The managed object definition.
+     * @param pd
+     *            The property definition.
+     * @return Returns the name of the LDAP attribute associated with the
+     *         specified property definition.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
      */
-    public String getObjectClass(AbstractManagedObjectDefinition<?, ?> d) {
-      return null;
+    public String getAttributeName(AbstractManagedObjectDefinition<?, ?> d, PropertyDefinition<?> pd)
+            throws MissingResourceException {
+        for (Wrapper profile : profiles) {
+            String attributeName = profile.getAttributeName(d, pd);
+            if (attributeName != null) {
+                return attributeName;
+            }
+        }
+        return resource.getString(d, "attribute." + pd.getName());
     }
 
+    /**
+     * Gets the LDAP RDN attribute type for child entries of an instantiable
+     * relation.
+     *
+     * @param r
+     *            The instantiable relation.
+     * @return Returns the LDAP RDN attribute type for child entries of an
+     *         instantiable relation.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
+     */
+    public String getRelationChildRDNType(InstantiableRelationDefinition<?, ?> r) throws MissingResourceException {
+        if (r.getNamingPropertyDefinition() != null) {
+            // Use the attribute associated with the naming property.
+            return getAttributeName(r.getChildDefinition(), r.getNamingPropertyDefinition());
+        } else {
+            for (Wrapper profile : profiles) {
+                String rdnType = profile.getRelationChildRDNType(r);
+                if (rdnType != null) {
+                    return rdnType;
+                }
+            }
+            return resource.getString(r.getParentDefinition(), "naming-attribute." + r.getName());
+        }
+    }
 
+    /**
+     * Gets the LDAP object classes associated with an instantiable or set
+     * relation branch. The branch is the parent entry of child managed objects.
+     *
+     * @param r
+     *            The instantiable or set relation.
+     * @return Returns the LDAP object classes associated with an instantiable
+     *         or set relation branch.
+     */
+    public List<String> getRelationObjectClasses(RelationDefinition<?, ?> r) {
+        return Arrays.asList(new String[] { "top", "ds-cfg-branch" });
+    }
+
+    /**
+     * Gets the LDAP RDN attribute type for child entries of an set relation.
+     *
+     * @param r
+     *            The set relation.
+     * @return Returns the LDAP RDN attribute type for child entries of an set
+     *         relation.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
+     */
+    public String getRelationChildRDNType(SetRelationDefinition<?, ?> r) throws MissingResourceException {
+        for (Wrapper profile : profiles) {
+            String rdnType = profile.getRelationChildRDNType(r);
+            if (rdnType != null) {
+                return rdnType;
+            }
+        }
+        return resource.getString(r.getParentDefinition(), "naming-attribute." + r.getName());
+    }
+
+    /**
+     * Get the principle object class associated with the specified definition.
+     *
+     * @param d
+     *            The managed object definition.
+     * @return Returns the principle object class associated with the specified
+     *         definition.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
+     */
+    public String getObjectClass(AbstractManagedObjectDefinition<?, ?> d) throws MissingResourceException {
+        if (d.isTop()) {
+            return "top";
+        }
+
+        for (Wrapper profile : profiles) {
+            String objectClass = profile.getObjectClass(d);
+            if (objectClass != null) {
+                return objectClass;
+            }
+        }
+        return resource.getString(d, "objectclass");
+    }
+
+    /**
+     * Get all the object classes associated with the specified definition.
+     * <p>
+     * The returned list is ordered such that the uppermost object classes
+     * appear first (e.g. top).
+     *
+     * @param d
+     *            The managed object definition.
+     * @return Returns all the object classes associated with the specified
+     *         definition.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
+     */
+    public List<String> getObjectClasses(AbstractManagedObjectDefinition<?, ?> d) throws MissingResourceException {
+        LinkedList<String> objectClasses = new LinkedList<String>();
+        Set<String> s = new HashSet<String>();
+
+        // Add the object classes from the parent hierarchy.
+        while (d != null) {
+            String oc = getObjectClass(d);
+            if (!s.contains(oc)) {
+                objectClasses.addFirst(oc);
+                s.add(oc);
+            }
+            d = d.getParent();
+        }
+
+        if (!s.contains("top")) {
+            objectClasses.addFirst("top");
+        }
+
+        return objectClasses;
+    }
 
     /**
      * Get an LDAP RDN sequence associatied with a relation.
-     * <p>
-     * The default implementation of this method is to return
-     * <code>null</code>.
      *
      * @param r
-     *          The relation.
-     * @return Returns the LDAP RDN sequence associatied with a
-     *         relation, or <code>null</code> if the relation is not
-     *         handled by this LDAP profile wrapper.
+     *            The relation.
+     * @return Returns the LDAP RDN sequence associatied with a relation.
+     * @throws MissingResourceException
+     *             If the LDAP profile properties file associated with the
+     *             provided managed object definition could not be loaded.
      */
-    public String getRelationRDNSequence(RelationDefinition<?, ?> r) {
-      return null;
-    }
-  }
-
-  // The singleton instance.
-  private static final LDAPProfile INSTANCE = new LDAPProfile();
-
-
-
-  /**
-   * Get the global LDAP profile instance.
-   *
-   * @return Returns the global LDAP profile instance.
-   */
-  public static LDAPProfile getInstance() {
-    return INSTANCE;
-  }
-
-  // The list of profile wrappers.
-  private final LinkedList<Wrapper> profiles = new LinkedList<Wrapper>();;
-
-  // The LDAP profile property table.
-  private final ManagedObjectDefinitionResource resource =
-    ManagedObjectDefinitionResource.createForProfile("ldap");
-
-
-
-  // Prevent construction.
-  private LDAPProfile() {
-    // No implementation required.
-  }
-
-
-
-  /**
-   * Get the name of the LDAP attribute associated with the specified
-   * property definition.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param pd
-   *          The property definition.
-   * @return Returns the name of the LDAP attribute associated with
-   *         the specified property definition.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public String getAttributeName(AbstractManagedObjectDefinition<?, ?> d,
-      PropertyDefinition<?> pd) throws MissingResourceException {
-    for (Wrapper profile : profiles) {
-      String attributeName = profile.getAttributeName(d, pd);
-      if (attributeName != null) {
-        return attributeName;
-      }
-    }
-    return resource.getString(d, "attribute." + pd.getName());
-  }
-
-
-
-  /**
-   * Gets the LDAP RDN attribute type for child entries of an
-   * instantiable relation.
-   *
-   * @param r
-   *          The instantiable relation.
-   * @return Returns the LDAP RDN attribute type for child entries of
-   *         an instantiable relation.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public String getRelationChildRDNType(
-      InstantiableRelationDefinition<?, ?> r) throws MissingResourceException {
-    if (r.getNamingPropertyDefinition() != null) {
-      // Use the attribute associated with the naming property.
-      return getAttributeName(r.getChildDefinition(), r
-          .getNamingPropertyDefinition());
-    } else {
-      for (Wrapper profile : profiles) {
-        String rdnType = profile.getRelationChildRDNType(r);
-        if (rdnType != null) {
-          return rdnType;
+    public String getRelationRDNSequence(RelationDefinition<?, ?> r) throws MissingResourceException {
+        for (Wrapper profile : profiles) {
+            String rdnSequence = profile.getRelationRDNSequence(r);
+            if (rdnSequence != null) {
+                return rdnSequence;
+            }
         }
-      }
-      return resource.getString(r.getParentDefinition(), "naming-attribute."
-          + r.getName());
-    }
-  }
-
-
-
-  /**
-   * Gets the LDAP object classes associated with an instantiable or set
-   * relation branch. The branch is the parent entry of child managed
-   * objects.
-   *
-   * @param r
-   *          The instantiable or set relation.
-   * @return Returns the LDAP object classes associated with an
-   *         instantiable or set relation branch.
-   */
-  public List<String> getRelationObjectClasses(
-      RelationDefinition<?, ?> r) {
-    return Arrays.asList(new String[] { "top", "ds-cfg-branch" });
-  }
-
-
-
-  /**
-   * Gets the LDAP RDN attribute type for child entries of an set
-   * relation.
-   *
-   * @param r
-   *          The set relation.
-   * @return Returns the LDAP RDN attribute type for child entries of an
-   *         set relation.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public String getRelationChildRDNType(SetRelationDefinition<?, ?> r)
-      throws MissingResourceException
-  {
-    for (Wrapper profile : profiles)
-    {
-      String rdnType = profile.getRelationChildRDNType(r);
-      if (rdnType != null)
-      {
-        return rdnType;
-      }
-    }
-    return resource.getString(r.getParentDefinition(),
-        "naming-attribute." + r.getName());
-  }
-
-
-
-  /**
-   * Get the principle object class associated with the specified
-   * definition.
-   *
-   * @param d
-   *          The managed object definition.
-   * @return Returns the principle object class associated with the
-   *         specified definition.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public String getObjectClass(AbstractManagedObjectDefinition<?, ?> d)
-      throws MissingResourceException {
-    if (d.isTop()) {
-      return "top";
+        return resource.getString(r.getParentDefinition(), "rdn." + r.getName());
     }
 
-    for (Wrapper profile : profiles) {
-      String objectClass = profile.getObjectClass(d);
-      if (objectClass != null) {
-        return objectClass;
-      }
-    }
-    return resource.getString(d, "objectclass");
-  }
-
-
-
-  /**
-   * Get all the object classes associated with the specified
-   * definition.
-   * <p>
-   * The returned list is ordered such that the uppermost object
-   * classes appear first (e.g. top).
-   *
-   * @param d
-   *          The managed object definition.
-   * @return Returns all the object classes associated with the
-   *         specified definition.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public List<String> getObjectClasses(AbstractManagedObjectDefinition<?, ?> d)
-      throws MissingResourceException {
-    LinkedList<String> objectClasses = new LinkedList<String>();
-    Set<String> s = new HashSet<String>();
-
-    // Add the object classes from the parent hierarchy.
-    while (d != null) {
-      String oc = getObjectClass(d);
-      if (!s.contains(oc)) {
-        objectClasses.addFirst(oc);
-        s.add(oc);
-      }
-      d = d.getParent();
+    /**
+     * Removes the last LDAP profile wrapper added using
+     * {@link #pushWrapper(org.opends.server.admin.LDAPProfile.Wrapper)}.
+     *
+     * @throws NoSuchElementException
+     *             If there are no LDAP profile wrappers.
+     */
+    public void popWrapper() throws NoSuchElementException {
+        profiles.removeFirst();
     }
 
-    if (!s.contains("top")) {
-      objectClasses.addFirst("top");
+    /**
+     * Decorates the core LDAP profile with the provided LDAP profile wrapper.
+     * All profile requests will be directed to the provided wrapper before
+     * being forwarded onto the core profile if the request could not be
+     * satisfied.
+     *
+     * @param wrapper
+     *            The LDAP profile wrapper.
+     */
+    public void pushWrapper(Wrapper wrapper) {
+        profiles.addFirst(wrapper);
     }
-
-    return objectClasses;
-  }
-
-
-
-  /**
-   * Get an LDAP RDN sequence associatied with a relation.
-   *
-   * @param r
-   *          The relation.
-   * @return Returns the LDAP RDN sequence associatied with a
-   *         relation.
-   * @throws MissingResourceException
-   *           If the LDAP profile properties file associated with the
-   *           provided managed object definition could not be loaded.
-   */
-  public String getRelationRDNSequence(RelationDefinition<?, ?> r)
-      throws MissingResourceException {
-    for (Wrapper profile : profiles) {
-      String rdnSequence = profile.getRelationRDNSequence(r);
-      if (rdnSequence != null) {
-        return rdnSequence;
-      }
-    }
-    return resource.getString(r.getParentDefinition(), "rdn." + r.getName());
-  }
-
-
-
-  /**
-   * Removes the last LDAP profile wrapper added using
-   * {@link #pushWrapper(org.opends.server.admin.LDAPProfile.Wrapper)}.
-   *
-   * @throws NoSuchElementException
-   *           If there are no LDAP profile wrappers.
-   */
-  public void popWrapper() throws NoSuchElementException {
-    profiles.removeFirst();
-  }
-
-
-
-  /**
-   * Decorates the core LDAP profile with the provided LDAP profile
-   * wrapper. All profile requests will be directed to the provided
-   * wrapper before being forwarded onto the core profile if the
-   * request could not be satisfied.
-   *
-   * @param wrapper
-   *          The LDAP profile wrapper.
-   */
-  public void pushWrapper(Wrapper wrapper) {
-    profiles.addFirst(wrapper);
-  }
 }

--
Gitblit v1.10.0