From 747224b472c37b0f1325344918fcc08265bb1b09 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 03 May 2007 09:37:28 +0000
Subject: [PATCH] Three introspection related changes required in order to support the CLI:
---
opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java | 231 ++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 162 insertions(+), 69 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
index 608e7d9..b1853a6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -29,9 +29,11 @@
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
@@ -90,52 +92,15 @@
AbstractManagedObjectDefinition<? super C, ? super S> parent) {
this.name = name;
this.parent = parent;
+ this.propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+ this.relationDefinitions = new HashMap<String, RelationDefinition<?,?>>();
+ this.children = new HashMap<String,
+ AbstractManagedObjectDefinition<? extends C, ? extends S>>();
// If we have a parent definition then inherit its features.
if (parent != null) {
- this.propertyDefinitions = new HashMap<String, PropertyDefinition<?>>(
- parent.propertyDefinitions);
- this.relationDefinitions = new HashMap<String, RelationDefinition<?,?>>(
- parent.relationDefinitions);
parent.children.put(name, this);
- } else {
- this.propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
- this.relationDefinitions = new HashMap<String, RelationDefinition<?,?>>();
}
-
- this.children = new HashMap<String,
- AbstractManagedObjectDefinition<? extends C, ? extends S>>();
- }
-
-
-
- /**
- * Get the named child managed object definition which inherits from this
- * managed object definition.
- *
- * @param name
- * The name of the managed object definition sub-type.
- * @return Returns the named child managed object definition which inherits
- * from this managed object definition.
- * @throws IllegalArgumentException
- * If the specified managed object definition name was null or empty
- * or if the requested subordinate managed object definition was not
- * found.
- */
- public final AbstractManagedObjectDefinition<? extends C, ? extends S>
- getChild(String name) throws IllegalArgumentException {
- if ((name == null) || (name.length() == 0)) {
- throw new IllegalArgumentException("null or empty managed object name");
- }
-
- AbstractManagedObjectDefinition<? extends C, ? extends S> d = children
- .get(name);
- if (d == null) {
- throw new IllegalArgumentException("managed object definition \"" + name
- + "\" not found");
- }
-
- return d;
}
@@ -149,6 +114,121 @@
* this managed object definition.
*/
public final Collection<AbstractManagedObjectDefinition
+ <? extends C, ? extends S>> getAllChildren() {
+ List<AbstractManagedObjectDefinition<? extends C, ? extends S>> list =
+ new ArrayList<AbstractManagedObjectDefinition<? extends C, ? extends S>>(
+ children.values());
+
+ for (AbstractManagedObjectDefinition<? extends C, ? extends S> child :
+ children.values()) {
+ list.addAll(child.getAllChildren());
+ }
+
+ return Collections.unmodifiableCollection(list);
+ }
+
+
+
+ /**
+ * Get all the property definitions associated with this type of
+ * managed object. The returned collection will contain inherited
+ * property definitions.
+ *
+ * @return Returns an unmodifiable collection containing all the
+ * property definitions associated with this type of managed
+ * object.
+ */
+ public final Collection<PropertyDefinition<?>> getAllPropertyDefinitions() {
+ if (parent == null) {
+ return getPropertyDefinitions();
+ } else {
+ List<PropertyDefinition<?>> list = new ArrayList<PropertyDefinition<?>>(
+ propertyDefinitions.values());
+ list.addAll(parent.getAllPropertyDefinitions());
+ return Collections.unmodifiableCollection(list);
+ }
+ }
+
+
+
+ /**
+ * Get all the relation definitions associated with this type of
+ * managed object. The returned collection will contain inherited
+ * relation definitions.
+ *
+ * @return Returns an unmodifiable collection containing all the
+ * relation definitions associated with this type of managed
+ * object.
+ */
+ public final Collection<RelationDefinition<?, ?>>
+ getAllRelationDefinitions() {
+ if (parent == null) {
+ return getRelationDefinitions();
+ } else {
+ List<RelationDefinition<?, ?>> list =
+ new ArrayList<RelationDefinition<?, ?>>(relationDefinitions.values());
+ list.addAll(parent.getAllRelationDefinitions());
+ return Collections.unmodifiableCollection(list);
+ }
+ }
+
+
+
+ /**
+ * Get the named child managed object definition which inherits from
+ * this managed object definition. This method will recursively
+ * search down through the inheritance hierarchy.
+ *
+ * @param name
+ * The name of the managed object definition sub-type.
+ * @return Returns the named child managed object definition which
+ * inherits from this managed object definition.
+ * @throws IllegalArgumentException
+ * If the specified managed object definition name was
+ * null or empty or if the requested subordinate managed
+ * object definition was not found.
+ */
+ public final AbstractManagedObjectDefinition<? extends C, ? extends S>
+ getChild(String name) throws IllegalArgumentException {
+ if ((name == null) || (name.length() == 0)) {
+ throw new IllegalArgumentException("null or empty managed object name");
+ }
+
+ AbstractManagedObjectDefinition<? extends C, ? extends S> d = children
+ .get(name);
+
+ if (d == null) {
+ // Recursively search.
+ for (AbstractManagedObjectDefinition<? extends C, ? extends S> child :
+ children.values()) {
+ try {
+ d = child.getChild(name);
+ break;
+ } catch (IllegalArgumentException e) {
+ // Try the next child.
+ }
+ }
+ }
+
+ if (d == null) {
+ throw new IllegalArgumentException("child managed object definition \""
+ + name + "\" not found");
+ }
+
+ return d;
+ }
+
+
+
+ /**
+ * Get the child managed object definitions which inherit directly
+ * from this managed object definition.
+ *
+ * @return Returns an unmodifiable collection containing the
+ * subordinate managed object definitions which inherit
+ * directly from this managed object definition.
+ */
+ public final Collection<AbstractManagedObjectDefinition
<? extends C, ? extends S>> getChildren() {
return Collections.unmodifiableCollection(children.values());
}
@@ -216,16 +296,17 @@
/**
- * Get the specified property definition associated with this type of managed
- * object.
+ * Get the specified property definition associated with this type
+ * of managed object. The search will include any inherited property
+ * definitions.
*
* @param name
* The name of the property definition to be retrieved.
- * @return Returns the specified property definition associated with this type
- * of managed object.
+ * @return Returns the specified property definition associated with
+ * this type of managed object.
* @throws IllegalArgumentException
- * If the specified property name was null or empty or if the
- * requested property definition was not found.
+ * If the specified property name was null or empty or if
+ * the requested property definition was not found.
*/
public final PropertyDefinition getPropertyDefinition(String name)
throws IllegalArgumentException {
@@ -234,9 +315,14 @@
}
PropertyDefinition d = propertyDefinitions.get(name);
+
if (d == null) {
- throw new IllegalArgumentException("property definition \"" + name
- + "\" not found");
+ if (parent != null) {
+ return parent.getPropertyDefinition(name);
+ } else {
+ throw new IllegalArgumentException("property definition \"" + name
+ + "\" not found");
+ }
}
return d;
@@ -245,12 +331,13 @@
/**
- * Get all the property definitions associated with this type of
- * managed object.
+ * Get the property definitions defined by this managed object
+ * definition. The returned collection will not contain inherited
+ * property definitions.
*
- * @return Returns an unmodifiable collection containing all the
- * property definitions associated with this type of managed
- * object.
+ * @return Returns an unmodifiable collection containing the
+ * property definitions defined by this managed object
+ * definition.
*/
public final Collection<PropertyDefinition<?>> getPropertyDefinitions() {
return Collections.unmodifiableCollection(propertyDefinitions
@@ -260,16 +347,17 @@
/**
- * Get the specified relation definition associated with this type of managed
- * object.
+ * Get the specified relation definition associated with this type
+ * of managed object.The search will include any inherited relation
+ * definitions.
*
* @param name
* The name of the relation definition to be retrieved.
- * @return Returns the specified relation definition associated with this type
- * of managed object.
+ * @return Returns the specified relation definition associated with
+ * this type of managed object.
* @throws IllegalArgumentException
- * If the specified relation name was null or empty or if the
- * requested relation definition was not found.
+ * If the specified relation name was null or empty or if
+ * the requested relation definition was not found.
*/
public final RelationDefinition getRelationDefinition(String name)
throws IllegalArgumentException {
@@ -278,9 +366,14 @@
}
RelationDefinition d = relationDefinitions.get(name);
+
if (d == null) {
- throw new IllegalArgumentException("relation definition \"" + name
- + "\" not found");
+ if (parent != null) {
+ return parent.getRelationDefinition(name);
+ } else {
+ throw new IllegalArgumentException("relation definition \"" + name
+ + "\" not found");
+ }
}
return d;
@@ -289,16 +382,16 @@
/**
- * Get all the relation definitions associated with this type of
- * managed object.
+ * Get the relation definitions defined by this managed object
+ * definition. The returned collection will not contain inherited
+ * relation definitions.
*
- * @return Returns an unmodifiable collection containing all the
- * relation definitions associated with this type of managed
- * object.
+ * @return Returns an unmodifiable collection containing the
+ * relation definitions defined by this managed object
+ * definition.
*/
public final Collection<RelationDefinition<?,?>> getRelationDefinitions() {
- return Collections.unmodifiableCollection(relationDefinitions
- .values());
+ return Collections.unmodifiableCollection(relationDefinitions.values());
}
--
Gitblit v1.10.0