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/PropertyDefinitionUsageBuilder.java |  583 +++++++++++++++++++++++++++------------------------------
 1 files changed, 274 insertions(+), 309 deletions(-)

diff --git a/opendj-admin/src/main/java/org/opends/server/admin/PropertyDefinitionUsageBuilder.java b/opendj-admin/src/main/java/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
index ecb17af..57d4e5b 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
@@ -25,354 +25,319 @@
  *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-
 
 import java.text.NumberFormat;
 import java.util.EnumSet;
 import java.util.Set;
 import java.util.TreeSet;
 
-
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
- * A property definition visitor which can be used to generate syntax
- * usage information.
+ * A property definition visitor which can be used to generate syntax usage
+ * information.
  */
 public final class PropertyDefinitionUsageBuilder {
 
-  /**
-   * Underlying implementation.
-   */
-  private class MyPropertyDefinitionVisitor extends
-      PropertyDefinitionVisitor<Message, Void> {
-
-    // Flag indicating whether detailed syntax information will be
-    // generated.
-    private final boolean isDetailed;
-
-    // The formatter to use for numeric values.
-    private final NumberFormat numberFormat;
-
-
-
-    // Private constructor.
-    private MyPropertyDefinitionVisitor(boolean isDetailed) {
-      this.isDetailed = isDetailed;
-
-      this.numberFormat = NumberFormat.getNumberInstance();
-      this.numberFormat.setGroupingUsed(true);
-      this.numberFormat.setMaximumFractionDigits(2);
-    }
-
-
-
     /**
-     * {@inheritDoc}
+     * Underlying implementation.
      */
-    @Override
-    public <C extends ConfigurationClient, S extends Configuration>
-    Message visitAggregation(AggregationPropertyDefinition<C, S> d, Void p) {
-      return Message.raw("NAME");
-    }
+    private class MyPropertyDefinitionVisitor extends PropertyDefinitionVisitor<LocalizableMessage, Void> {
 
+        // Flag indicating whether detailed syntax information will be
+        // generated.
+        private final boolean isDetailed;
 
+        // The formatter to use for numeric values.
+        private final NumberFormat numberFormat;
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitAttributeType(AttributeTypePropertyDefinition d,
-        Void p) {
-      return Message.raw("OID");
-    }
+        // Private constructor.
+        private MyPropertyDefinitionVisitor(boolean isDetailed) {
+            this.isDetailed = isDetailed;
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitACI(ACIPropertyDefinition d,
-        Void p) {
-      return Message.raw("ACI");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitBoolean(BooleanPropertyDefinition d, Void p) {
-      if (isDetailed) {
-        return Message.raw("false | true");
-      } else {
-        return Message.raw("BOOLEAN");
-      }
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitClass(ClassPropertyDefinition d, Void p) {
-      if (isDetailed && !d.getInstanceOfInterface().isEmpty()) {
-        return Message.raw("CLASS <= " + d.getInstanceOfInterface().get(0));
-      } else {
-        return Message.raw("CLASS");
-      }
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitDN(DNPropertyDefinition d, Void p) {
-      if (isDetailed && d.getBaseDN() != null) {
-        return Message.raw("DN <= " + d.getBaseDN());
-      } else {
-        return Message.raw("DN");
-      }
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitDuration(DurationPropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
-      DurationUnit unit = d.getBaseUnit();
-
-      if (isDetailed && d.getLowerLimit() > 0) {
-        builder.append(DurationUnit.toString(d.getLowerLimit()));
-        builder.append(" <= ");
-      }
-
-      builder.append("DURATION (");
-      builder.append(unit.getShortName());
-      builder.append(")");
-
-      if (isDetailed) {
-        if (d.getUpperLimit() != null) {
-          builder.append(" <= ");
-          builder.append(DurationUnit.toString(d.getUpperLimit()));
+            this.numberFormat = NumberFormat.getNumberInstance();
+            this.numberFormat.setGroupingUsed(true);
+            this.numberFormat.setMaximumFractionDigits(2);
         }
 
-        if (d.isAllowUnlimited()) {
-          builder.append(" | unlimited");
-        }
-      }
-
-      return builder.toMessage();
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public <E extends Enum<E>> Message visitEnum(EnumPropertyDefinition<E> d,
-        Void p) {
-      if (!isDetailed) {
-        // Use the last word in the property name.
-        String name = d.getName();
-        int i = name.lastIndexOf('-');
-        if (i == -1 || i == (name.length() - 1)) {
-          return Message.raw(name.toUpperCase());
-        } else {
-          return Message.raw(name.substring(i + 1).toUpperCase());
-        }
-      } else {
-        Set<String> values = new TreeSet<String>();
-
-        for (Object value : EnumSet.allOf(d.getEnumClass())) {
-          values.add(value.toString().trim().toLowerCase());
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> LocalizableMessage visitAggregation(
+                AggregationPropertyDefinition<C, S> d, Void p) {
+            return LocalizableMessage.raw("NAME");
         }
 
-        boolean isFirst = true;
-        MessageBuilder builder = new MessageBuilder();
-        for (String s : values) {
-          if (!isFirst) {
-            builder.append(" | ");
-          }
-          builder.append(s);
-          isFirst = false;
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitAttributeType(AttributeTypePropertyDefinition d, Void p) {
+            return LocalizableMessage.raw("OID");
         }
 
-        return builder.toMessage();
-      }
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitInteger(IntegerPropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
-
-      if (isDetailed) {
-        builder.append(String.valueOf(d.getLowerLimit()));
-        builder.append(" <= ");
-      }
-
-      builder.append("INTEGER");
-
-      if (isDetailed) {
-        if (d.getUpperLimit() != null) {
-          builder.append(" <= ");
-          builder.append(String.valueOf(d.getUpperLimit()));
-        } else if (d.isAllowUnlimited()) {
-          builder.append(" | unlimited");
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitACI(ACIPropertyDefinition d, Void p) {
+            return LocalizableMessage.raw("ACI");
         }
-      }
 
-      return builder.toMessage();
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitIPAddress(IPAddressPropertyDefinition d, Void p) {
-      return Message.raw("HOST_NAME");
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitIPAddressMask(IPAddressMaskPropertyDefinition d,
-        Void p) {
-      return Message.raw("IP_ADDRESS_MASK");
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Message visitSize(SizePropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
-
-      if (isDetailed && d.getLowerLimit() > 0) {
-        SizeUnit unit = SizeUnit.getBestFitUnitExact(d.getLowerLimit());
-        builder.append(numberFormat.format(unit.fromBytes(d.getLowerLimit())));
-        builder.append(' ');
-        builder.append(unit.getShortName());
-        builder.append(" <= ");
-      }
-
-      builder.append("SIZE");
-
-      if (isDetailed) {
-        if (d.getUpperLimit() != null) {
-          long upperLimit = d.getUpperLimit();
-          SizeUnit unit = SizeUnit.getBestFitUnitExact(upperLimit);
-
-          // Quite often an upper limit is some power of 2 minus 1. In those
-          // cases lets use a "less than" relation rather than a "less than
-          // or equal to" relation. This will result in a much more readable
-          // quantity.
-          if (unit == SizeUnit.BYTES && upperLimit < Long.MAX_VALUE) {
-            unit = SizeUnit.getBestFitUnitExact(upperLimit + 1);
-            if (unit != SizeUnit.BYTES) {
-              upperLimit += 1;
-              builder.append(" < ");
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitBoolean(BooleanPropertyDefinition d, Void p) {
+            if (isDetailed) {
+                return LocalizableMessage.raw("false | true");
             } else {
-              builder.append(" <= ");
+                return LocalizableMessage.raw("BOOLEAN");
             }
-          } else {
-            builder.append(" <= ");
-          }
-
-          builder.append(numberFormat.format(unit.fromBytes(upperLimit)));
-          builder.append(' ');
-          builder.append(unit.getShortName());
         }
 
-        if (d.isAllowUnlimited()) {
-          builder.append(" | unlimited");
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitClass(ClassPropertyDefinition d, Void p) {
+            if (isDetailed && !d.getInstanceOfInterface().isEmpty()) {
+                return LocalizableMessage.raw("CLASS <= " + d.getInstanceOfInterface().get(0));
+            } else {
+                return LocalizableMessage.raw("CLASS");
+            }
         }
-      }
 
-      return builder.toMessage();
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitDN(DNPropertyDefinition d, Void p) {
+            if (isDetailed && d.getBaseDN() != null) {
+                return LocalizableMessage.raw("DN <= " + d.getBaseDN());
+            } else {
+                return LocalizableMessage.raw("DN");
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitDuration(DurationPropertyDefinition d, Void p) {
+            LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
+            DurationUnit unit = d.getBaseUnit();
+
+            if (isDetailed && d.getLowerLimit() > 0) {
+                builder.append(DurationUnit.toString(d.getLowerLimit()));
+                builder.append(" <= ");
+            }
+
+            builder.append("DURATION (");
+            builder.append(unit.getShortName());
+            builder.append(")");
+
+            if (isDetailed) {
+                if (d.getUpperLimit() != null) {
+                    builder.append(" <= ");
+                    builder.append(DurationUnit.toString(d.getUpperLimit()));
+                }
+
+                if (d.isAllowUnlimited()) {
+                    builder.append(" | unlimited");
+                }
+            }
+
+            return builder.toMessage();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public <E extends Enum<E>> LocalizableMessage visitEnum(EnumPropertyDefinition<E> d, Void p) {
+            if (!isDetailed) {
+                // Use the last word in the property name.
+                String name = d.getName();
+                int i = name.lastIndexOf('-');
+                if (i == -1 || i == (name.length() - 1)) {
+                    return LocalizableMessage.raw(name.toUpperCase());
+                } else {
+                    return LocalizableMessage.raw(name.substring(i + 1).toUpperCase());
+                }
+            } else {
+                Set<String> values = new TreeSet<String>();
+
+                for (Object value : EnumSet.allOf(d.getEnumClass())) {
+                    values.add(value.toString().trim().toLowerCase());
+                }
+
+                boolean isFirst = true;
+                LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
+                for (String s : values) {
+                    if (!isFirst) {
+                        builder.append(" | ");
+                    }
+                    builder.append(s);
+                    isFirst = false;
+                }
+
+                return builder.toMessage();
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitInteger(IntegerPropertyDefinition d, Void p) {
+            LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
+
+            if (isDetailed) {
+                builder.append(String.valueOf(d.getLowerLimit()));
+                builder.append(" <= ");
+            }
+
+            builder.append("INTEGER");
+
+            if (isDetailed) {
+                if (d.getUpperLimit() != null) {
+                    builder.append(" <= ");
+                    builder.append(String.valueOf(d.getUpperLimit()));
+                } else if (d.isAllowUnlimited()) {
+                    builder.append(" | unlimited");
+                }
+            }
+
+            return builder.toMessage();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitIPAddress(IPAddressPropertyDefinition d, Void p) {
+            return LocalizableMessage.raw("HOST_NAME");
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitIPAddressMask(IPAddressMaskPropertyDefinition d, Void p) {
+            return LocalizableMessage.raw("IP_ADDRESS_MASK");
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitSize(SizePropertyDefinition d, Void p) {
+            LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
+
+            if (isDetailed && d.getLowerLimit() > 0) {
+                SizeUnit unit = SizeUnit.getBestFitUnitExact(d.getLowerLimit());
+                builder.append(numberFormat.format(unit.fromBytes(d.getLowerLimit())));
+                builder.append(' ');
+                builder.append(unit.getShortName());
+                builder.append(" <= ");
+            }
+
+            builder.append("SIZE");
+
+            if (isDetailed) {
+                if (d.getUpperLimit() != null) {
+                    long upperLimit = d.getUpperLimit();
+                    SizeUnit unit = SizeUnit.getBestFitUnitExact(upperLimit);
+
+                    // Quite often an upper limit is some power of 2 minus 1. In
+                    // those
+                    // cases lets use a "less than" relation rather than a "less
+                    // than
+                    // or equal to" relation. This will result in a much more
+                    // readable
+                    // quantity.
+                    if (unit == SizeUnit.BYTES && upperLimit < Long.MAX_VALUE) {
+                        unit = SizeUnit.getBestFitUnitExact(upperLimit + 1);
+                        if (unit != SizeUnit.BYTES) {
+                            upperLimit += 1;
+                            builder.append(" < ");
+                        } else {
+                            builder.append(" <= ");
+                        }
+                    } else {
+                        builder.append(" <= ");
+                    }
+
+                    builder.append(numberFormat.format(unit.fromBytes(upperLimit)));
+                    builder.append(' ');
+                    builder.append(unit.getShortName());
+                }
+
+                if (d.isAllowUnlimited()) {
+                    builder.append(" | unlimited");
+                }
+            }
+
+            return builder.toMessage();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public LocalizableMessage visitString(StringPropertyDefinition d, Void p) {
+            if (d.getPattern() != null) {
+                if (isDetailed) {
+                    LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
+                    builder.append(d.getPatternUsage());
+                    builder.append(" - ");
+                    builder.append(d.getPatternSynopsis());
+                    return builder.toMessage();
+                } else {
+                    return LocalizableMessage.raw(d.getPatternUsage());
+                }
+            } else {
+                return LocalizableMessage.raw("STRING");
+            }
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public <T> LocalizableMessage visitUnknown(PropertyDefinition<T> d, Void p)
+                throws UnknownPropertyDefinitionException {
+            return LocalizableMessage.raw("?");
+        }
     }
 
-
+    // Underlying implementation.
+    private final MyPropertyDefinitionVisitor pimpl;
 
     /**
-     * {@inheritDoc}
+     * Creates a new property usage builder.
+     *
+     * @param isDetailed
+     *            Indicates whether or not the generated usage should contain
+     *            detailed information such as constraints.
      */
-    @Override
-    public Message visitString(StringPropertyDefinition d, Void p) {
-      if (d.getPattern() != null) {
-        if (isDetailed) {
-          MessageBuilder builder = new MessageBuilder();
-          builder.append(d.getPatternUsage());
-          builder.append(" - ");
-          builder.append(d.getPatternSynopsis());
-          return builder.toMessage();
-        } else {
-          return Message.raw(d.getPatternUsage());
-        }
-      } else {
-        return Message.raw("STRING");
-      }
+    public PropertyDefinitionUsageBuilder(boolean isDetailed) {
+        this.pimpl = new MyPropertyDefinitionVisitor(isDetailed);
     }
 
-
-
     /**
-     * {@inheritDoc}
+     * Generates the usage information for the provided property definition.
+     *
+     * @param pd
+     *            The property definitions.
+     * @return Returns the usage information for the provided property
+     *         definition.
      */
-    @Override
-    public <T> Message visitUnknown(PropertyDefinition<T> d, Void p)
-        throws UnknownPropertyDefinitionException {
-      return Message.raw("?");
-    }
-  }
-
-  // Underlying implementation.
-  private final MyPropertyDefinitionVisitor pimpl;
-
-
-
-  /**
-   * Creates a new property usage builder.
-   *
-   * @param isDetailed
-   *          Indicates whether or not the generated usage should
-   *          contain detailed information such as constraints.
-   */
-  public PropertyDefinitionUsageBuilder(boolean isDetailed) {
-    this.pimpl = new MyPropertyDefinitionVisitor(isDetailed);
-  }
-
-
-
-  /**
-   * Generates the usage information for the provided property
-   * definition.
-   *
-   * @param pd
-   *          The property definitions.
-   * @return Returns the usage information for the provided property
-   *         definition.
-   */
-  public Message getUsage(PropertyDefinition<?> pd) {
-    return pd.accept(pimpl, null);
-  };
+    public LocalizableMessage getUsage(PropertyDefinition<?> pd) {
+        return pd.accept(pimpl, null);
+    };
 
 }

--
Gitblit v1.10.0