From 2fef5aa0046548cb88034553f522d907195a19f7 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 02 Dec 2013 10:47:18 +0000
Subject: [PATCH] OpenDJ 3 : config framework

---
 opendj-admin/src/main/java/org/opends/server/admin/StringPropertyDefinition.java |  476 ++++++++++++++++++++++++++---------------------------------
 1 files changed, 212 insertions(+), 264 deletions(-)

diff --git a/opendj-admin/src/main/java/org/opends/server/admin/StringPropertyDefinition.java b/opendj-admin/src/main/java/org/opends/server/admin/StringPropertyDefinition.java
index 56732e1..f68f6d0 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/StringPropertyDefinition.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/StringPropertyDefinition.java
@@ -26,11 +26,8 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
 
-
-
-import static org.opends.server.util.Validator.ensureNotNull;
+import static com.forgerock.opendj.util.Validator.*;
 
 import java.util.EnumSet;
 import java.util.Locale;
@@ -39,297 +36,248 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
-
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * String property definition.
  */
 public final class StringPropertyDefinition extends PropertyDefinition<String> {
 
-  /**
-   * An interface for incrementally constructing string property
-   * definitions.
-   */
-  public static class Builder extends
-      AbstractBuilder<String, StringPropertyDefinition> {
+    /**
+     * An interface for incrementally constructing string property definitions.
+     */
+    public static class Builder extends AbstractBuilder<String, StringPropertyDefinition> {
+
+        // Flag indicating whether values of this property are
+        // case-insensitive.
+        private boolean isCaseInsensitive = true;
+
+        // Optional pattern which values of this property must match.
+        private Pattern pattern = null;
+
+        // Pattern usage which provides a user-friendly summary of the
+        // pattern if present.
+        private String patternUsage = null;
+
+        // Private constructor
+        private Builder(AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
+            super(d, propertyName);
+        }
+
+        /**
+         * Set a flag indicating whether values of this property are
+         * case-insensitive.
+         *
+         * @param value
+         *            <code>true</code> if values are case-insensitive, or
+         *            <code>false</code> otherwise.
+         */
+        public final void setCaseInsensitive(boolean value) {
+            isCaseInsensitive = value;
+        }
+
+        /**
+         * Set the regular expression pattern which values of this property must
+         * match. By default there is no pattern defined.
+         *
+         * @param pattern
+         *            The regular expression pattern string, or
+         *            <code>null</code> if there is no pattern.
+         * @param patternUsage
+         *            A user-friendly usage string representing the pattern
+         *            which can be used in error messages and help (e.g. for
+         *            patterns which match a host/port combination, the usage
+         *            string "HOST:PORT" would be appropriate).
+         * @throws PatternSyntaxException
+         *             If the provided regular expression pattern has an invalid
+         *             syntax.
+         */
+        public final void setPattern(String pattern, String patternUsage) throws PatternSyntaxException {
+            if (pattern == null) {
+                this.pattern = null;
+                this.patternUsage = null;
+            } else {
+                this.pattern = Pattern.compile(pattern);
+                this.patternUsage = patternUsage;
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected StringPropertyDefinition buildInstance(AbstractManagedObjectDefinition<?, ?> d, String propertyName,
+                EnumSet<PropertyOption> options, AdministratorAction adminAction,
+                DefaultBehaviorProvider<String> defaultBehavior) {
+            return new StringPropertyDefinition(d, propertyName, options, adminAction, defaultBehavior,
+                    isCaseInsensitive, pattern, patternUsage);
+        }
+
+    }
+
+    /**
+     * Create a string property definition builder.
+     *
+     * @param d
+     *            The managed object definition associated with this property
+     *            definition.
+     * @param propertyName
+     *            The property name.
+     * @return Returns the new string property definition builder.
+     */
+    public static Builder createBuilder(AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
+        return new Builder(d, propertyName);
+    }
 
     // Flag indicating whether values of this property are
     // case-insensitive.
-    private boolean isCaseInsensitive = true;
+    private final boolean isCaseInsensitive;
 
     // Optional pattern which values of this property must match.
-    private Pattern pattern = null;
+    private final Pattern pattern;
 
     // Pattern usage which provides a user-friendly summary of the
     // pattern if present.
-    private String patternUsage = null;
+    private final String patternUsage;
 
-
-
-    // Private constructor
-    private Builder(AbstractManagedObjectDefinition<?, ?> d,
-        String propertyName) {
-      super(d, propertyName);
-    }
-
-
-
-    /**
-     * Set a flag indicating whether values of this property are
-     * case-insensitive.
-     *
-     * @param value
-     *          <code>true</code> if values are case-insensitive, or
-     *          <code>false</code> otherwise.
-     */
-    public final void setCaseInsensitive(boolean value) {
-      isCaseInsensitive = value;
-    }
-
-
-
-    /**
-     * Set the regular expression pattern which values of this
-     * property must match. By default there is no pattern defined.
-     *
-     * @param pattern
-     *          The regular expression pattern string, or
-     *          <code>null</code> if there is no pattern.
-     * @param patternUsage
-     *          A user-friendly usage string representing the pattern
-     *          which can be used in error messages and help (e.g. for
-     *          patterns which match a host/port combination, the
-     *          usage string "HOST:PORT" would be appropriate).
-     * @throws PatternSyntaxException
-     *           If the provided regular expression pattern has an
-     *           invalid syntax.
-     */
-    public final void setPattern(String pattern, String patternUsage)
-        throws PatternSyntaxException {
-      if (pattern == null) {
-        this.pattern = null;
-        this.patternUsage = null;
-      } else {
-        this.pattern = Pattern.compile(pattern);
+    // Private constructor.
+    private StringPropertyDefinition(AbstractManagedObjectDefinition<?, ?> d, String propertyName,
+            EnumSet<PropertyOption> options, AdministratorAction adminAction,
+            DefaultBehaviorProvider<String> defaultBehavior, boolean isCaseInsensitive, Pattern pattern,
+            String patternUsage) {
+        super(d, String.class, propertyName, options, adminAction, defaultBehavior);
+        this.isCaseInsensitive = isCaseInsensitive;
+        this.pattern = pattern;
         this.patternUsage = patternUsage;
-      }
     }
 
-
-
     /**
      * {@inheritDoc}
      */
     @Override
-    protected StringPropertyDefinition buildInstance(
-        AbstractManagedObjectDefinition<?, ?> d, String propertyName,
-        EnumSet<PropertyOption> options,
-        AdministratorAction adminAction,
-        DefaultBehaviorProvider<String> defaultBehavior) {
-      return new StringPropertyDefinition(d, propertyName, options,
-          adminAction, defaultBehavior, isCaseInsensitive, pattern,
-          patternUsage);
+    public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) {
+        return v.visitString(this, p);
     }
 
-  }
-
-
-
-  /**
-   * Create a string property definition builder.
-   *
-   * @param d
-   *          The managed object definition associated with this
-   *          property definition.
-   * @param propertyName
-   *          The property name.
-   * @return Returns the new string property definition builder.
-   */
-  public static Builder createBuilder(AbstractManagedObjectDefinition<?, ?> d,
-      String propertyName) {
-    return new Builder(d, propertyName);
-  }
-
-  // Flag indicating whether values of this property are
-  // case-insensitive.
-  private final boolean isCaseInsensitive;
-
-  // Optional pattern which values of this property must match.
-  private final Pattern pattern;
-
-  // Pattern usage which provides a user-friendly summary of the
-  // pattern if present.
-  private final String patternUsage;
-
-
-
-  // Private constructor.
-  private StringPropertyDefinition(AbstractManagedObjectDefinition<?, ?> d,
-      String propertyName, EnumSet<PropertyOption> options,
-      AdministratorAction adminAction,
-      DefaultBehaviorProvider<String> defaultBehavior,
-      boolean isCaseInsensitive, Pattern pattern, String patternUsage) {
-    super(d, String.class, propertyName, options, adminAction,
-        defaultBehavior);
-    this.isCaseInsensitive = isCaseInsensitive;
-    this.pattern = pattern;
-    this.patternUsage = patternUsage;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) {
-    return v.visitString(this, p);
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <R, P> R accept(PropertyValueVisitor<R, P> v, String value, P p) {
-    return v.visitString(this, value, p);
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public String decodeValue(String value)
-      throws IllegalPropertyValueStringException {
-    ensureNotNull(value);
-
-    try {
-      validateValue(value);
-    } catch (IllegalPropertyValueException e) {
-      throw new IllegalPropertyValueStringException(this, value);
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <R, P> R accept(PropertyValueVisitor<R, P> v, String value, P p) {
+        return v.visitString(this, value, p);
     }
 
-    return value;
-  }
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String decodeValue(String value) throws IllegalPropertyValueStringException {
+        ensureNotNull(value);
 
+        try {
+            validateValue(value);
+        } catch (IllegalPropertyValueException e) {
+            throw new IllegalPropertyValueStringException(this, value);
+        }
 
-
-  /**
-   * Gets the optional regular expression pattern which values of this
-   * property must match.
-   *
-   * @return Returns the optional regular expression pattern which
-   *         values of this property must match, or <code>null</code>
-   *         if there is no pattern.
-   */
-  public Pattern getPattern() {
-    return pattern;
-  }
-
-
-
-  /**
-   * Gets the pattern synopsis of this string property definition in
-   * the default locale.
-   *
-   * @return Returns the pattern synopsis of this string property
-   *         definition in the default locale, or <code>null</code>
-   *         if there is no pattern synopsis (which is the case when
-   *         there is no pattern matching defined for this string
-   *         property definition).
-   */
-  public Message getPatternSynopsis() {
-    return getPatternSynopsis(Locale.getDefault());
-  }
-
-
-
-  /**
-   * Gets the optional pattern synopsis of this string property
-   * definition in the specified locale.
-   *
-   * @param locale
-   *          The locale.
-   * @return Returns the pattern synopsis of this string property
-   *         definition in the specified locale, or <code>null</code>
-   *         if there is no pattern synopsis (which is the case when
-   *         there is no pattern matching defined for this string
-   *         property definition).
-   */
-  public Message getPatternSynopsis(Locale locale) {
-    ManagedObjectDefinitionI18NResource resource =
-      ManagedObjectDefinitionI18NResource.getInstance();
-    String property = "property." + getName()
-        + ".syntax.string.pattern.synopsis";
-    try {
-      return resource
-          .getMessage(getManagedObjectDefinition(), property, locale);
-    } catch (MissingResourceException e) {
-      return null;
+        return value;
     }
-  }
 
-
-
-  /**
-   * Gets a user-friendly usage string representing the pattern which
-   * can be used in error messages and help (e.g. for patterns which
-   * match a host/port combination, the usage string "HOST:PORT" would
-   * be appropriate).
-   *
-   * @return Returns the user-friendly pattern usage string, or
-   *         <code>null</code> if there is no pattern.
-   */
-  public String getPatternUsage() {
-    return patternUsage;
-  }
-
-
-
-  /**
-   * Query whether values of this property are case-insensitive.
-   *
-   * @return Returns <code>true</code> if values are
-   *         case-insensitive, or <code>false</code> otherwise.
-   */
-  public boolean isCaseInsensitive() {
-    return isCaseInsensitive;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public String normalizeValue(String value)
-      throws IllegalPropertyValueException {
-    ensureNotNull(value);
-
-    if (isCaseInsensitive()) {
-      return value.trim().toLowerCase();
-    } else {
-      return value.trim();
+    /**
+     * Gets the optional regular expression pattern which values of this
+     * property must match.
+     *
+     * @return Returns the optional regular expression pattern which values of
+     *         this property must match, or <code>null</code> if there is no
+     *         pattern.
+     */
+    public Pattern getPattern() {
+        return pattern;
     }
-  }
 
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void validateValue(String value) throws IllegalPropertyValueException {
-    ensureNotNull(value);
-
-    if (pattern != null) {
-      Matcher matcher = pattern.matcher(value);
-      if (!matcher.matches()) {
-        throw new IllegalPropertyValueException(this, value);
-      }
+    /**
+     * Gets the pattern synopsis of this string property definition in the
+     * default locale.
+     *
+     * @return Returns the pattern synopsis of this string property definition
+     *         in the default locale, or <code>null</code> if there is no
+     *         pattern synopsis (which is the case when there is no pattern
+     *         matching defined for this string property definition).
+     */
+    public LocalizableMessage getPatternSynopsis() {
+        return getPatternSynopsis(Locale.getDefault());
     }
-  }
+
+    /**
+     * Gets the optional pattern synopsis of this string property definition in
+     * the specified locale.
+     *
+     * @param locale
+     *            The locale.
+     * @return Returns the pattern synopsis of this string property definition
+     *         in the specified locale, or <code>null</code> if there is no
+     *         pattern synopsis (which is the case when there is no pattern
+     *         matching defined for this string property definition).
+     */
+    public LocalizableMessage getPatternSynopsis(Locale locale) {
+        ManagedObjectDefinitionI18NResource resource = ManagedObjectDefinitionI18NResource.getInstance();
+        String property = "property." + getName() + ".syntax.string.pattern.synopsis";
+        try {
+            return resource.getMessage(getManagedObjectDefinition(), property, locale);
+        } catch (MissingResourceException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Gets a user-friendly usage string representing the pattern which can be
+     * used in error messages and help (e.g. for patterns which match a
+     * host/port combination, the usage string "HOST:PORT" would be
+     * appropriate).
+     *
+     * @return Returns the user-friendly pattern usage string, or
+     *         <code>null</code> if there is no pattern.
+     */
+    public String getPatternUsage() {
+        return patternUsage;
+    }
+
+    /**
+     * Query whether values of this property are case-insensitive.
+     *
+     * @return Returns <code>true</code> if values are case-insensitive, or
+     *         <code>false</code> otherwise.
+     */
+    public boolean isCaseInsensitive() {
+        return isCaseInsensitive;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String normalizeValue(String value) throws IllegalPropertyValueException {
+        ensureNotNull(value);
+
+        if (isCaseInsensitive()) {
+            return value.trim().toLowerCase();
+        } else {
+            return value.trim();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void validateValue(String value) throws IllegalPropertyValueException {
+        ensureNotNull(value);
+
+        if (pattern != null) {
+            Matcher matcher = pattern.matcher(value);
+            if (!matcher.matches()) {
+                throw new IllegalPropertyValueException(this, value);
+            }
+        }
+    }
 }

--
Gitblit v1.10.0