From cbabf3a2b06c69420e7bb524c59afdd4669021e2 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 08 Jun 2015 09:41:44 +0000
Subject: [PATCH] Extracted cannotDisplay() methods.

---
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SubCommandHandler.java        |   46 +++++---
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/GetPropSubCommandHandler.java |   13 --
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/CreateSubCommandHandler.java  |   32 +++---
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/ListSubCommandHandler.java    |    7 
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SetPropSubCommandHandler.java |   10 +
 opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/HelpSubCommandHandler.java    |  134 +++++++-------------------
 6 files changed, 94 insertions(+), 148 deletions(-)

diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/CreateSubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/CreateSubCommandHandler.java
index 46b7c16..ca65b3d 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/CreateSubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/CreateSubCommandHandler.java
@@ -251,10 +251,7 @@
 
             boolean isFirst = true;
             for (ManagedObjectDefinition<?, ?> mod : getSubTypes(d).values()) {
-                // Only display advanced types and custom types in advanced mode.
-                if (!app.isAdvancedMode()
-                        && (mod.hasOption(ManagedObjectOption.ADVANCED)
-                                || CLIProfile.getInstance().isForCustomization(mod))) {
+                if (cannotDisplayAdvancedOrCustomTypes(app, mod)) {
                     continue;
                 }
 
@@ -616,8 +613,7 @@
             if (app.isInteractive()) {
                 SortedSet<PropertyDefinition<?>> properties = new TreeSet<>();
                 for (PropertyDefinition<?> pd : d.getAllPropertyDefinitions()) {
-                    if (pd.hasOption(PropertyOption.HIDDEN)
-                            || (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED))) {
+                    if (cannotDisplay(app, pd)) {
                         continue;
                     }
                     properties.add(pd);
@@ -707,6 +703,11 @@
         }
     }
 
+    private static boolean cannotDisplay(ConsoleApplication app, PropertyDefinition<?> pd) {
+        return pd.hasOption(PropertyOption.HIDDEN)
+                || (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED));
+    }
+
     /** Interactively create the child by prompting for the name. */
     private static <C extends ConfigurationClient, S
         extends Configuration> ManagedObject<? extends C> createChildInteractively(
@@ -813,17 +814,9 @@
         Iterator<ManagedObjectDefinition<? extends C, ? extends S>> i;
         for (i = filteredTypes.iterator(); i.hasNext();) {
             ManagedObjectDefinition<? extends C, ? extends S> cd = i.next();
-
-            if (prohibitedTypes.contains(cd.getName())) {
-                // Remove filtered types.
+            if (prohibitedTypes.contains(cd.getName())
+                    || cannotDisplayAdvancedOrCustomTypes(app, cd)) {
                 i.remove();
-            } else if (!app.isAdvancedMode()) {
-                // Only display advanced types and custom types in advanced mode.
-                if (cd.hasOption(ManagedObjectOption.ADVANCED)) {
-                    i.remove();
-                } else if (CLIProfile.getInstance().isForCustomization(cd)) {
-                    i.remove();
-                }
             }
         }
 
@@ -868,6 +861,13 @@
         }
     }
 
+    /** Only display advanced types and custom types in advanced mode. */
+    private static boolean cannotDisplayAdvancedOrCustomTypes(
+            ConsoleApplication app, ManagedObjectDefinition<?, ?> defn) {
+        return !app.isAdvancedMode()
+                && (defn.hasOption(ManagedObjectOption.ADVANCED) || CLIProfile.getInstance().isForCustomization(defn));
+    }
+
     /** The sub-commands naming arguments. */
     private final List<StringArgument> namingArgs;
 
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/GetPropSubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/GetPropSubCommandHandler.java
index 36f8aa9..f106a01 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/GetPropSubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/GetPropSubCommandHandler.java
@@ -48,7 +48,6 @@
 import org.forgerock.opendj.config.ManagedObjectPath;
 import org.forgerock.opendj.config.OptionalRelationDefinition;
 import org.forgerock.opendj.config.PropertyDefinition;
-import org.forgerock.opendj.config.PropertyOption;
 import org.forgerock.opendj.config.RelationDefinition;
 import org.forgerock.opendj.config.RelativeInheritedDefaultBehaviorProvider;
 import org.forgerock.opendj.config.SetRelationDefinition;
@@ -273,18 +272,12 @@
         builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_VALUE.get());
         builder.addSortKey(0);
         for (PropertyDefinition<?> pd : pdList) {
-            if (pd.hasOption(PropertyOption.HIDDEN)) {
+            if (cannotDisplay(app, pd, propertyNames)) {
                 continue;
             }
 
-            if (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED)) {
-                continue;
-            }
-
-            if (propertyNames.isEmpty() || propertyNames.contains(pd.getName())) {
-                displayProperty(app, builder, child, pd, valuePrinter);
-                setCommandBuilderUseful(true);
-            }
+            displayProperty(app, builder, child, pd, valuePrinter);
+            setCommandBuilderUseful(true);
         }
 
         PrintStream out = app.getOutputStream();
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/HelpSubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/HelpSubCommandHandler.java
index ac2441c..9b120fc 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/HelpSubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/HelpSubCommandHandler.java
@@ -26,9 +26,9 @@
  */
 package org.forgerock.opendj.config.dsconfig;
 
-import static com.forgerock.opendj.dsconfig.DsconfigMessages.*;
 import static com.forgerock.opendj.cli.CliMessages.*;
-import static com.forgerock.opendj.cli.Utils.MAX_LINE_WIDTH;
+import static com.forgerock.opendj.cli.Utils.*;
+import static com.forgerock.opendj.dsconfig.DsconfigMessages.*;
 
 import java.io.PrintStream;
 import java.util.Collection;
@@ -51,7 +51,6 @@
 import org.forgerock.opendj.config.DefaultBehaviorProviderVisitor;
 import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
 import org.forgerock.opendj.config.EnumPropertyDefinition;
-import org.forgerock.opendj.config.ManagedObjectOption;
 import org.forgerock.opendj.config.PropertyDefinition;
 import org.forgerock.opendj.config.PropertyDefinitionUsageBuilder;
 import org.forgerock.opendj.config.PropertyDefinitionVisitor;
@@ -64,12 +63,12 @@
 
 import com.forgerock.opendj.cli.ArgumentException;
 import com.forgerock.opendj.cli.BooleanArgument;
-import com.forgerock.opendj.cli.StringArgument;
-import com.forgerock.opendj.cli.SubCommand;
-import com.forgerock.opendj.cli.SubCommandArgumentParser;
 import com.forgerock.opendj.cli.ClientException;
 import com.forgerock.opendj.cli.ConsoleApplication;
 import com.forgerock.opendj.cli.MenuResult;
+import com.forgerock.opendj.cli.StringArgument;
+import com.forgerock.opendj.cli.SubCommand;
+import com.forgerock.opendj.cli.SubCommandArgumentParser;
 import com.forgerock.opendj.cli.TableBuilder;
 import com.forgerock.opendj.cli.TablePrinter;
 import com.forgerock.opendj.cli.TextTablePrinter;
@@ -138,7 +137,6 @@
             public LocalizableMessage visitUndefined(UndefinedDefaultBehaviorProvider<T> d, PropertyDefinition<T> p) {
                 return INFO_DSCFG_HELP_FIELD_UNDEFINED.get();
             }
-
         }
 
         /**
@@ -466,29 +464,17 @@
         builder.startRow();
         builder.appendCell(INFO_DSCFG_HELP_HEADING_ADVANCED.get());
         builder.appendCell(HEADING_SEPARATOR);
-        if (pd.hasOption(PropertyOption.ADVANCED)) {
-            builder.appendCell(INFO_GENERAL_YES.get());
-        } else {
-            builder.appendCell(INFO_GENERAL_NO.get());
-        }
+        builder.appendCell(hasOptionYN(pd, PropertyOption.ADVANCED));
 
         builder.startRow();
         builder.appendCell(INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get());
         builder.appendCell(HEADING_SEPARATOR);
-        if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
-            builder.appendCell(INFO_GENERAL_YES.get());
-        } else {
-            builder.appendCell(INFO_GENERAL_NO.get());
-        }
+        builder.appendCell(hasOptionYN(pd, PropertyOption.MULTI_VALUED));
 
         builder.startRow();
         builder.appendCell(INFO_DSCFG_HELP_HEADING_MANDATORY.get());
         builder.appendCell(HEADING_SEPARATOR);
-        if (pd.hasOption(PropertyOption.MANDATORY)) {
-            builder.appendCell(INFO_GENERAL_YES.get());
-        } else {
-            builder.appendCell(INFO_GENERAL_NO.get());
-        }
+        builder.appendCell(hasOptionYN(pd, PropertyOption.MANDATORY));
 
         builder.startRow();
         builder.appendCell(INFO_DSCFG_HELP_HEADING_READ_ONLY.get());
@@ -509,28 +495,34 @@
         builder.print(factory);
 
         // Administrator action.
-        AdministratorAction action = pd.getAdministratorAction();
-        LocalizableMessage synopsis = action.getSynopsis();
-        if (synopsis == null) {
-            switch (action.getType()) {
-            case COMPONENT_RESTART:
-                synopsis = INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART.get(d.getUserFriendlyName());
-                break;
-            case SERVER_RESTART:
-                synopsis = INFO_DSCFG_HELP_FIELD_SERVER_RESTART.get();
-                break;
-            default:
-                // Do nothing.
-                break;
-            }
-        }
-
+        LocalizableMessage synopsis = getSynopsis(d, pd);
         if (synopsis != null) {
             app.println();
             app.println(synopsis);
         }
     }
 
+    private static LocalizableMessage hasOptionYN(PropertyDefinition<?> pd, PropertyOption option) {
+        return pd.hasOption(option) ? INFO_GENERAL_YES.get() : INFO_GENERAL_NO.get();
+    }
+
+    private static LocalizableMessage getSynopsis(AbstractManagedObjectDefinition<?, ?> d, PropertyDefinition<?> pd) {
+        AdministratorAction action = pd.getAdministratorAction();
+        LocalizableMessage synopsis = action.getSynopsis();
+        if (synopsis != null) {
+            return synopsis;
+        }
+
+        switch (action.getType()) {
+        case COMPONENT_RESTART:
+            return INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART.get(d.getUserFriendlyName());
+        case SERVER_RESTART:
+            return INFO_DSCFG_HELP_FIELD_SERVER_RESTART.get();
+        default:
+            return null;
+        }
+    }
+
     /** Displays the property option summary key. */
     private static void displayPropertyOptionKey(ConsoleApplication app) {
         LocalizableMessageBuilder builder;
@@ -854,52 +846,25 @@
 
                 // Display help for each property.
                 AbstractManagedObjectDefinition<?, ?> mod = subTypes.get(type);
-
-                // Skip hidden types.
-                if (mod.hasOption(ManagedObjectOption.HIDDEN)) {
-                    continue;
-                }
-
-                // Skip advanced types if required.
-                if (!app.isAdvancedMode() && mod.hasOption(ManagedObjectOption.ADVANCED)) {
-                    continue;
-                }
-
-                // Skip if this does not have the required tag.
-                if (tag != null && !mod.hasTag(tag)) {
+                if (cannotDisplay(app, mod, tag)) {
                     continue;
                 }
 
                 Set<PropertyDefinition<?>> pds = getPropertyDefinitions(mod);
                 for (PropertyDefinition<?> pd : pds) {
-                    if (pd.hasOption(PropertyOption.HIDDEN)) {
+                    if (cannotDisplay(app, pd, propertyNames)) {
                         continue;
                     }
 
-                    if (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED)) {
-                        continue;
-                    }
-
-                    if (!propertyNames.isEmpty() && !propertyNames.contains(pd.getName())) {
-                        continue;
-                    }
-
-                    // Display the property.
+                    // Display the property:
+                    // - component category and type,
+                    // - property name, options
+                    // - syntax
                     builder.startRow();
-
-                    // Display the component category.
                     builder.appendCell(category);
-
-                    // Display the component type.
                     builder.appendCell(type);
-
-                    // Display the property name.
                     builder.appendCell(pd.getName());
-
-                    // Display the options.
                     builder.appendCell(getPropertyOptionSummary(pd));
-
-                    // Display the syntax.
                     PropertyDefinitionUsageBuilder v = new PropertyDefinitionUsageBuilder(false);
                     builder.appendCell(v.getUsage(pd));
                 }
@@ -940,35 +905,14 @@
 
                 // Display help for each property.
                 AbstractManagedObjectDefinition<?, ?> mod = subTypes.get(type);
-
-                // Skip hidden types.
-                if (mod.hasOption(ManagedObjectOption.HIDDEN)) {
+                if (cannotDisplay(app, mod, tag)) {
                     continue;
                 }
 
-                // Skip advanced types if required.
-                if (!app.isAdvancedMode() && mod.hasOption(ManagedObjectOption.ADVANCED)) {
-                    continue;
-                }
-
-                // Skip if this does not have the required tag.
-                if (tag != null && !mod.hasTag(tag)) {
-                    continue;
-                }
-
-                Set<PropertyDefinition<?>> pds = getPropertyDefinitions(mod);
-
                 boolean isFirstProperty = true;
+                Set<PropertyDefinition<?>> pds = getPropertyDefinitions(mod);
                 for (PropertyDefinition<?> pd : pds) {
-                    if (pd.hasOption(PropertyOption.HIDDEN)) {
-                        continue;
-                    }
-
-                    if (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED)) {
-                        continue;
-                    }
-
-                    if (!propertyNames.isEmpty() && !propertyNames.contains(pd.getName())) {
+                    if (cannotDisplay(app, pd, propertyNames)) {
                         continue;
                     }
 
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/ListSubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/ListSubCommandHandler.java
index 7324ca9..3796f8a 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/ListSubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/ListSubCommandHandler.java
@@ -345,7 +345,7 @@
             // Output just the names of the children.
             for (String name : children.keySet()) {
                 ManagedObjectDefinition<?, ?> d = children.get(name).getManagedObjectDefinition();
-                if (!canDisplay(app, d)) {
+                if (!cannotDisplay(app, d)) {
                     app.println(LocalizableMessage.raw(name));
                 }
             }
@@ -370,8 +370,7 @@
             for (String name : children.keySet()) {
                 ManagedObject<?> child = children.get(name);
                 ManagedObjectDefinition<?, ?> d = child.getManagedObjectDefinition();
-
-                if (canDisplay(app, d)) {
+                if (cannotDisplay(app, d)) {
                     continue;
                 }
 
@@ -441,7 +440,7 @@
         return MenuResult.success(0);
     }
 
-    private boolean canDisplay(ConsoleApplication app, ManagedObjectDefinition<?, ?> d) {
+    private boolean cannotDisplay(ConsoleApplication app, ManagedObjectDefinition<?, ?> d) {
         return !app.isAdvancedMode() && (d.hasOption(HIDDEN) || d.hasOption(ADVANCED));
     }
 
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SetPropSubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SetPropSubCommandHandler.java
index b1829ad..dd9a010 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SetPropSubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SetPropSubCommandHandler.java
@@ -248,10 +248,7 @@
             if (app.isInteractive()) {
                 SortedSet<PropertyDefinition<?>> properties = new TreeSet<>();
                 for (PropertyDefinition<?> pd : d.getAllPropertyDefinitions()) {
-                    if (pd.hasOption(PropertyOption.HIDDEN)) {
-                        continue;
-                    }
-                    if (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED)) {
+                    if (cannotDisplay(app, pd)) {
                         continue;
                     }
                     properties.add(pd);
@@ -346,6 +343,11 @@
         }
     }
 
+    private static boolean cannotDisplay(ConsoleApplication app, PropertyDefinition<?> pd) {
+        return pd.hasOption(PropertyOption.HIDDEN)
+                || (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED));
+    }
+
     /**
      * Check that any referenced components are enabled if required.
      */
diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SubCommandHandler.java b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SubCommandHandler.java
index fd7cbef..0102fa7 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SubCommandHandler.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/SubCommandHandler.java
@@ -58,6 +58,7 @@
 import org.forgerock.opendj.config.OptionalRelationDefinition;
 import org.forgerock.opendj.config.PropertyDefinition;
 import org.forgerock.opendj.config.PropertyDefinitionUsageBuilder;
+import org.forgerock.opendj.config.PropertyOption;
 import org.forgerock.opendj.config.RelationDefinition;
 import org.forgerock.opendj.config.SetRelationDefinition;
 import org.forgerock.opendj.config.SingletonRelationDefinition;
@@ -86,9 +87,7 @@
 import com.forgerock.opendj.cli.TabSeparatedTablePrinter;
 import com.forgerock.opendj.cli.TablePrinter;
 
-/**
- * An interface for sub-command implementations.
- */
+/** An interface for sub-command implementations. */
 abstract class SubCommandHandler implements Comparable<SubCommandHandler> {
 
     /**
@@ -430,9 +429,7 @@
         }
     }
 
-    /**
-     * A path serializer which is used to register a sub-command's naming arguments.
-     */
+    /** A path serializer which is used to register a sub-command's naming arguments. */
     private static final class NamingArgumentBuilder implements ManagedObjectPathSerializer {
 
         /**
@@ -563,12 +560,9 @@
                 SingletonRelationDefinition<? super C, ? super S> r, AbstractManagedObjectDefinition<C, S> d) {
             sz--;
         }
-
     }
 
-    /**
-     * The threshold above which choice menus should be displayed in multiple columns.
-     */
+    /** The threshold above which choice menus should be displayed in multiple columns. */
     public static final int MULTI_COLUMN_THRESHOLD = 8;
 
     /** The value for the long option property. */
@@ -588,9 +582,7 @@
     /** The value for the short option unit-time. */
     private static final char OPTION_DSCFG_SHORT_UNIT_TIME = 'm';
 
-    /**
-     * The argument which should be used to specify zero or more property names.
-     */
+    /** The argument which should be used to specify zero or more property names. */
     private StringArgument propertyArgument;
     /** The argument which should be used to request record mode. */
     private BooleanArgument recordModeArgument;
@@ -962,12 +954,7 @@
                 }
 
                 ManagedObjectDefinition<?, ?> cd = child.getManagedObjectDefinition();
-
-                if (cd.hasOption(ManagedObjectOption.HIDDEN)) {
-                    continue;
-                }
-
-                if (!app.isAdvancedMode() && cd.hasOption(ManagedObjectOption.ADVANCED)) {
+                if (cannotDisplay(app, cd, null)) {
                     continue;
                 }
 
@@ -1079,6 +1066,27 @@
     }
 
     /**
+     * Skips:
+     *
+     * <ul>
+     * <li>hidden types</li>
+     * <li>advanced types if required</li>
+     * <li>if this does not have the required tag</li>
+     * </ul>.
+     */
+    static boolean cannotDisplay(ConsoleApplication app, AbstractManagedObjectDefinition<?, ?> defn, Tag tag) {
+        return defn.hasOption(ManagedObjectOption.HIDDEN)
+                || (!app.isAdvancedMode() && defn.hasOption(ManagedObjectOption.ADVANCED))
+                || (tag != null && !defn.hasTag(tag));
+    }
+
+    static boolean cannotDisplay(ConsoleApplication app, PropertyDefinition<?> pd, Set<String> allowedPropertyNames) {
+        return pd.hasOption(PropertyOption.HIDDEN)
+                || (!app.isAdvancedMode() && pd.hasOption(PropertyOption.ADVANCED))
+                || !allowedPropertyNames.contains(pd.getName());
+    }
+
+    /**
      * Registers the property name argument with the sub-command.
      *
      * @param subCommand

--
Gitblit v1.10.0