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/ManagedObjectDefinitionI18NResource.java |  534 ++++++++++++++++++++++++++--------------------------------
 1 files changed, 242 insertions(+), 292 deletions(-)

diff --git a/opendj-admin/src/main/java/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java b/opendj-admin/src/main/java/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
index e3e0a3d..7cfe16e 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
@@ -24,8 +24,8 @@
  *
  *      Copyright 2008 Sun Microsystems, Inc.
  */
-
 package org.opends.server.admin;
+
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
@@ -34,313 +34,263 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 
-
-
 /**
- * A class for retrieving internationalized resource properties
- * associated with a managed object definition.
+ * A class for retrieving internationalized resource properties associated with
+ * a managed object definition.
  * <p>
- * I18N resource properties are not available for the
- * {@link TopCfgDefn}.
+ * I18N resource properties are not available for the {@link TopCfgDefn}.
  */
 public final class ManagedObjectDefinitionI18NResource {
 
-  // Application-wide set of instances.
-  private static final Map<String, ManagedObjectDefinitionI18NResource>
-    INSTANCES = new HashMap<String, ManagedObjectDefinitionI18NResource>();
+    // Application-wide set of instances.
+    private static final Map<String, ManagedObjectDefinitionI18NResource> INSTANCES =
+            new HashMap<String, ManagedObjectDefinitionI18NResource>();
 
-
-
-  /**
-   * Gets the internationalized resource instance which can be used to
-   * retrieve the localized descriptions for the managed objects and
-   * their associated properties and relations.
-   *
-   * @return Returns the I18N resource instance.
-   */
-  public static ManagedObjectDefinitionI18NResource getInstance() {
-    return getInstance("admin.messages");
-  }
-
-
-
-  /**
-   * Gets the internationalized resource instance for the named
-   * profile.
-   *
-   * @param profile
-   *          The name of the profile.
-   * @return Returns the I18N resource instance for the named profile.
-   */
-  public static ManagedObjectDefinitionI18NResource getInstanceForProfile(
-      String profile) {
-    return getInstance("admin.profiles." + profile);
-  }
-
-
-
-  // Get a resource instance creating it if necessary.
-  private synchronized static ManagedObjectDefinitionI18NResource getInstance(
-      String prefix) {
-    ManagedObjectDefinitionI18NResource instance = INSTANCES
-        .get(prefix);
-
-    if (instance == null) {
-      instance = new ManagedObjectDefinitionI18NResource(prefix);
-      INSTANCES.put(prefix, instance);
+    /**
+     * Gets the internationalized resource instance which can be used to
+     * retrieve the localized descriptions for the managed objects and their
+     * associated properties and relations.
+     *
+     * @return Returns the I18N resource instance.
+     */
+    public static ManagedObjectDefinitionI18NResource getInstance() {
+        return getInstance("admin.messages");
     }
 
-    return instance;
-  }
-
-
-
-  // Mapping from definition to locale-based resource bundle.
-  private final Map<AbstractManagedObjectDefinition<?, ?>,
-    Map<Locale, ResourceBundle>> resources;
-
-
-
-  // The resource name prefix.
-  private final String prefix;
-
-
-
-  // Private constructor.
-  private ManagedObjectDefinitionI18NResource(String prefix) {
-    this.resources = new HashMap<AbstractManagedObjectDefinition<?, ?>,
-      Map<Locale, ResourceBundle>>();
-    this.prefix = prefix;
-  }
-
-
-
-  /**
-   * Get the internationalized message associated with the specified
-   * key in the default locale.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param key
-   *          The resource key.
-   * @return Returns the internationalized message associated with the
-   *         specified key in the default locale.
-   * @throws MissingResourceException
-   *           If the key was not found.
-   * @throws UnsupportedOperationException
-   *           If the provided managed object definition was the
-   *           {@link TopCfgDefn}.
-   */
-  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key)
-      throws MissingResourceException, UnsupportedOperationException {
-    return getMessage(d, key, Locale.getDefault(), (String[]) null);
-  }
-
-
-
-  /**
-   * Get the internationalized message associated with the specified
-   * key and locale.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param key
-   *          The resource key.
-   * @param locale
-   *          The locale.
-   * @return Returns the internationalized message associated with the
-   *         specified key and locale.
-   * @throws MissingResourceException
-   *           If the key was not found.
-   * @throws UnsupportedOperationException
-   *           If the provided managed object definition was the
-   *           {@link TopCfgDefn}.
-   */
-  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
-      String key, Locale locale) throws MissingResourceException,
-      UnsupportedOperationException {
-    return getMessage(d, key, locale, (String[]) null);
-  }
-
-
-
-  /**
-   * Get the parameterized internationalized message associated with
-   * the specified key and locale.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param key
-   *          The resource key.
-   * @param locale
-   *          The locale.
-   * @param args
-   *          Arguments that should be inserted into the retrieved
-   *          message.
-   * @return Returns the internationalized message associated with the
-   *         specified key and locale.
-   * @throws MissingResourceException
-   *           If the key was not found.
-   * @throws UnsupportedOperationException
-   *           If the provided managed object definition was the
-   *           {@link TopCfgDefn}.
-   */
-  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
-      String key, Locale locale, String... args)
-      throws MissingResourceException, UnsupportedOperationException {
-    ResourceBundle resource = getResourceBundle(d, locale);
-
-    // TODO: use message framework directly
-    if (args == null) {
-      return LocalizableMessage.raw(resource.getString(key));
-    } else {
-      return LocalizableMessage.raw(resource.getString(key), (Object[]) args);
-    }
-  }
-
-
-
-  /**
-   * Get the parameterized internationalized message associated with
-   * the specified key in the default locale.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param key
-   *          The resource key.
-   * @param args
-   *          Arguments that should be inserted into the retrieved
-   *          message.
-   * @return Returns the internationalized message associated with the
-   *         specified key in the default locale.
-   * @throws MissingResourceException
-   *           If the key was not found.
-   * @throws UnsupportedOperationException
-   *           If the provided managed object definition was the
-   *           {@link TopCfgDefn}.
-   */
-  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
-      String key, String... args) throws MissingResourceException,
-      UnsupportedOperationException {
-    return getMessage(d, key, Locale.getDefault(), args);
-  }
-
-
-
-  /**
-   * Forcefully removes any resource bundles associated with the
-   * provided definition and using the default locale.
-   * <p>
-   * This method is intended for internal testing only.
-   *
-   * @param d
-   *          The managed object definition.
-   */
-  synchronized void removeResourceBundle(
-      AbstractManagedObjectDefinition<?, ?> d) {
-    removeResourceBundle(d, Locale.getDefault());
-  }
-
-
-
-  /**
-   * Forcefully removes any resource bundles associated with the
-   * provided definition and locale.
-   * <p>
-   * This method is intended for internal testing only.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param locale
-   *          The locale.
-   */
-  synchronized void removeResourceBundle(
-      AbstractManagedObjectDefinition<?, ?> d, Locale locale) {
-    // Get the locale resource mapping.
-    Map<Locale, ResourceBundle> map = resources.get(d);
-    if (map != null) {
-      map.remove(locale);
-    }
-  }
-
-
-
-  /**
-   * Forcefully adds the provided resource bundle to this I18N
-   * resource for the default locale.
-   * <p>
-   * This method is intended for internal testing only.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param resoureBundle
-   *          The resource bundle to be used.
-   */
-  synchronized void setResourceBundle(AbstractManagedObjectDefinition<?, ?> d,
-      ResourceBundle resoureBundle) {
-    setResourceBundle(d, Locale.getDefault(), resoureBundle);
-  }
-
-
-
-  /**
-   * Forcefully adds the provided resource bundle to this I18N
-   * resource.
-   * <p>
-   * This method is intended for internal testing only.
-   *
-   * @param d
-   *          The managed object definition.
-   * @param locale
-   *          The locale.
-   * @param resoureBundle
-   *          The resource bundle to be used.
-   */
-  synchronized void setResourceBundle(AbstractManagedObjectDefinition<?, ?> d,
-      Locale locale, ResourceBundle resoureBundle) {
-    // First get the locale-resource mapping, creating it if
-    // necessary.
-    Map<Locale, ResourceBundle> map = resources.get(d);
-    if (map == null) {
-      map = new HashMap<Locale, ResourceBundle>();
-      resources.put(d, map);
+    /**
+     * Gets the internationalized resource instance for the named profile.
+     *
+     * @param profile
+     *            The name of the profile.
+     * @return Returns the I18N resource instance for the named profile.
+     */
+    public static ManagedObjectDefinitionI18NResource getInstanceForProfile(String profile) {
+        return getInstance("admin.profiles." + profile);
     }
 
-    // Add the resource bundle.
-    map.put(locale, resoureBundle);
-  }
+    // Get a resource instance creating it if necessary.
+    private synchronized static ManagedObjectDefinitionI18NResource getInstance(String prefix) {
+        ManagedObjectDefinitionI18NResource instance = INSTANCES.get(prefix);
 
+        if (instance == null) {
+            instance = new ManagedObjectDefinitionI18NResource(prefix);
+            INSTANCES.put(prefix, instance);
+        }
 
-
-  // Retrieve the resource bundle associated with a managed object and
-  // locale, lazily loading it if necessary.
-  private synchronized ResourceBundle getResourceBundle(
-      AbstractManagedObjectDefinition<?, ?> d, Locale locale)
-      throws MissingResourceException, UnsupportedOperationException {
-    if (d.isTop()) {
-      throw new UnsupportedOperationException(
-          "I18n resources are not available for the "
-              + "Top configuration definition");
+        return instance;
     }
 
-    // First get the locale-resource mapping, creating it if
-    // necessary.
-    Map<Locale, ResourceBundle> map = resources.get(d);
-    if (map == null) {
-      map = new HashMap<Locale, ResourceBundle>();
-      resources.put(d, map);
+    // Mapping from definition to locale-based resource bundle.
+    private final Map<AbstractManagedObjectDefinition<?, ?>, Map<Locale, ResourceBundle>> resources;
+
+    // The resource name prefix.
+    private final String prefix;
+
+    // Private constructor.
+    private ManagedObjectDefinitionI18NResource(String prefix) {
+        this.resources = new HashMap<AbstractManagedObjectDefinition<?, ?>, Map<Locale, ResourceBundle>>();
+        this.prefix = prefix;
     }
 
-    // Now get the resource based on the locale, loading it if
-    // necessary.
-    ResourceBundle resourceBundle = map.get(locale);
-    if (resourceBundle == null) {
-      String baseName = prefix + "." + d.getClass().getName();
-      resourceBundle = ResourceBundle.getBundle(baseName, locale,
-          ClassLoaderProvider.getInstance().getClassLoader());
-      map.put(locale, resourceBundle);
+    /**
+     * Get the internationalized message associated with the specified key in
+     * the default locale.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param key
+     *            The resource key.
+     * @return Returns the internationalized message associated with the
+     *         specified key in the default locale.
+     * @throws MissingResourceException
+     *             If the key was not found.
+     * @throws UnsupportedOperationException
+     *             If the provided managed object definition was the
+     *             {@link TopCfgDefn}.
+     */
+    public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key)
+            throws MissingResourceException, UnsupportedOperationException {
+        return getMessage(d, key, Locale.getDefault(), (String[]) null);
     }
 
-    return resourceBundle;
-  }
+    /**
+     * Get the internationalized message associated with the specified key and
+     * locale.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param key
+     *            The resource key.
+     * @param locale
+     *            The locale.
+     * @return Returns the internationalized message associated with the
+     *         specified key and locale.
+     * @throws MissingResourceException
+     *             If the key was not found.
+     * @throws UnsupportedOperationException
+     *             If the provided managed object definition was the
+     *             {@link TopCfgDefn}.
+     */
+    public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key, Locale locale)
+            throws MissingResourceException, UnsupportedOperationException {
+        return getMessage(d, key, locale, (String[]) null);
+    }
+
+    /**
+     * Get the parameterized internationalized message associated with the
+     * specified key and locale.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param key
+     *            The resource key.
+     * @param locale
+     *            The locale.
+     * @param args
+     *            Arguments that should be inserted into the retrieved message.
+     * @return Returns the internationalized message associated with the
+     *         specified key and locale.
+     * @throws MissingResourceException
+     *             If the key was not found.
+     * @throws UnsupportedOperationException
+     *             If the provided managed object definition was the
+     *             {@link TopCfgDefn}.
+     */
+    public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key, Locale locale,
+            String... args) throws MissingResourceException, UnsupportedOperationException {
+        ResourceBundle resource = getResourceBundle(d, locale);
+
+        // TODO: use message framework directly
+        if (args == null) {
+            return LocalizableMessage.raw(resource.getString(key));
+        } else {
+            return LocalizableMessage.raw(resource.getString(key), (Object[]) args);
+        }
+    }
+
+    /**
+     * Get the parameterized internationalized message associated with the
+     * specified key in the default locale.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param key
+     *            The resource key.
+     * @param args
+     *            Arguments that should be inserted into the retrieved message.
+     * @return Returns the internationalized message associated with the
+     *         specified key in the default locale.
+     * @throws MissingResourceException
+     *             If the key was not found.
+     * @throws UnsupportedOperationException
+     *             If the provided managed object definition was the
+     *             {@link TopCfgDefn}.
+     */
+    public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key, String... args)
+            throws MissingResourceException, UnsupportedOperationException {
+        return getMessage(d, key, Locale.getDefault(), args);
+    }
+
+    /**
+     * Forcefully removes any resource bundles associated with the provided
+     * definition and using the default locale.
+     * <p>
+     * This method is intended for internal testing only.
+     *
+     * @param d
+     *            The managed object definition.
+     */
+    synchronized void removeResourceBundle(AbstractManagedObjectDefinition<?, ?> d) {
+        removeResourceBundle(d, Locale.getDefault());
+    }
+
+    /**
+     * Forcefully removes any resource bundles associated with the provided
+     * definition and locale.
+     * <p>
+     * This method is intended for internal testing only.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param locale
+     *            The locale.
+     */
+    synchronized void removeResourceBundle(AbstractManagedObjectDefinition<?, ?> d, Locale locale) {
+        // Get the locale resource mapping.
+        Map<Locale, ResourceBundle> map = resources.get(d);
+        if (map != null) {
+            map.remove(locale);
+        }
+    }
+
+    /**
+     * Forcefully adds the provided resource bundle to this I18N resource for
+     * the default locale.
+     * <p>
+     * This method is intended for internal testing only.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param resoureBundle
+     *            The resource bundle to be used.
+     */
+    synchronized void setResourceBundle(AbstractManagedObjectDefinition<?, ?> d, ResourceBundle resoureBundle) {
+        setResourceBundle(d, Locale.getDefault(), resoureBundle);
+    }
+
+    /**
+     * Forcefully adds the provided resource bundle to this I18N resource.
+     * <p>
+     * This method is intended for internal testing only.
+     *
+     * @param d
+     *            The managed object definition.
+     * @param locale
+     *            The locale.
+     * @param resoureBundle
+     *            The resource bundle to be used.
+     */
+    synchronized void setResourceBundle(AbstractManagedObjectDefinition<?, ?> d, Locale locale,
+            ResourceBundle resoureBundle) {
+        // First get the locale-resource mapping, creating it if
+        // necessary.
+        Map<Locale, ResourceBundle> map = resources.get(d);
+        if (map == null) {
+            map = new HashMap<Locale, ResourceBundle>();
+            resources.put(d, map);
+        }
+
+        // Add the resource bundle.
+        map.put(locale, resoureBundle);
+    }
+
+    // Retrieve the resource bundle associated with a managed object and
+    // locale, lazily loading it if necessary.
+    private synchronized ResourceBundle getResourceBundle(AbstractManagedObjectDefinition<?, ?> d, Locale locale)
+            throws MissingResourceException, UnsupportedOperationException {
+        if (d.isTop()) {
+            throw new UnsupportedOperationException("I18n resources are not available for the "
+                    + "Top configuration definition");
+        }
+
+        // First get the locale-resource mapping, creating it if
+        // necessary.
+        Map<Locale, ResourceBundle> map = resources.get(d);
+        if (map == null) {
+            map = new HashMap<Locale, ResourceBundle>();
+            resources.put(d, map);
+        }
+
+        // Now get the resource based on the locale, loading it if
+        // necessary.
+        ResourceBundle resourceBundle = map.get(locale);
+        if (resourceBundle == null) {
+            String baseName = prefix + "." + d.getClass().getName();
+            resourceBundle = ResourceBundle.getBundle(baseName, locale, ClassLoaderProvider.getInstance()
+                    .getClassLoader());
+            map.put(locale, resourceBundle);
+        }
+
+        return resourceBundle;
+    }
 }

--
Gitblit v1.10.0