From 0a2e22293f5c36807d89441f9bd8c56ae0b59097 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 16 Nov 2007 16:40:35 +0000
Subject: [PATCH] Update admin framework and dsconfig to support tagging of component definitions as advanced and customizable:

---
 opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java |   46 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java b/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
index 3292bc7..6a4d8e3 100644
--- a/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
+++ b/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
@@ -40,6 +40,8 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 import org.opends.messages.Message;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
@@ -48,7 +50,9 @@
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.admin.DurationUnit;
 import org.opends.server.admin.InstantiableRelationDefinition;
+import org.opends.server.admin.ManagedObjectDefinition;
 import org.opends.server.admin.ManagedObjectNotFoundException;
+import org.opends.server.admin.ManagedObjectOption;
 import org.opends.server.admin.ManagedObjectPath;
 import org.opends.server.admin.ManagedObjectPathSerializer;
 import org.opends.server.admin.OptionalRelationDefinition;
@@ -987,8 +991,41 @@
 
     app.println();
     app.println();
-    String[] children = parent.listChildren(r, d);
-    switch (children.length) {
+
+    // Filter out advanced and hidden types if required.
+    String[] childNames = parent.listChildren(r, d);
+    SortedSet<String> children = new TreeSet<String>(
+        String.CASE_INSENSITIVE_ORDER);
+
+    for (String childName : childNames) {
+      ManagedObject<?> child;
+      try {
+        child = parent.getChild(r, childName);
+
+        ManagedObjectDefinition<?, ?> cd = child.getManagedObjectDefinition();
+
+        if (cd.hasOption(ManagedObjectOption.HIDDEN)) {
+          continue;
+        }
+
+        if (!app.isAdvancedMode()
+            && cd.hasOption(ManagedObjectOption.ADVANCED)) {
+          continue;
+        }
+
+        children.add(childName);
+      } catch (DefinitionDecodingException e) {
+        // Add it anyway: maybe the user is trying to fix the problem.
+        children.add(childName);
+      } catch (ManagedObjectDecodingException e) {
+        // Add it anyway: maybe the user is trying to fix the problem.
+        children.add(childName);
+      } catch (ManagedObjectNotFoundException e) {
+        // Skip it - the managed object has been concurrently removed.
+      }
+    }
+
+    switch (children.size()) {
     case 0: {
       // No options available - abort.
       Message msg =
@@ -999,9 +1036,9 @@
       // Only one option available so confirm that the user wishes to
       // access it.
       Message msg = INFO_DSCFG_FINDER_PROMPT_SINGLE.get(
-              d.getUserFriendlyName(), children[0]);
+              d.getUserFriendlyName(), children.first());
       if (app.confirmAction(msg, true)) {
-        return MenuResult.success(children[0]);
+        return MenuResult.success(children.first());
       } else {
         return MenuResult.cancel();
       }
@@ -1013,7 +1050,6 @@
       builder.setPrompt(INFO_DSCFG_FINDER_PROMPT_MANY.get(d
           .getUserFriendlyName()));
 
-      Arrays.sort(children, String.CASE_INSENSITIVE_ORDER);
       for (String child : children) {
         Message option = Message.raw("%s", child);
         builder.addNumberedOption(option, MenuResult.success(child));

--
Gitblit v1.10.0