From 25c232dabcfbaebb8295916bed92a56d9a18966f Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Wed, 13 Jun 2007 22:21:25 +0000
Subject: [PATCH] Add support for tagging managed object definitions so that similar types of managed object can be grouped together. Tagging will enable us to automatically generate more user-friendly documentation and administration tools as a result of them being easier to navigate and search. For example, an administration CLI will be able to split the available set of sub-commands into categories, thus making it easier for administrators to find the sub-command that they need.
---
opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java | 122 ++++++++++++++++++++++++++++------------
1 files changed, 86 insertions(+), 36 deletions(-)
diff --git a/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java b/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
index f2d1548..81853cc 100644
--- a/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
+++ b/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -33,10 +33,12 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
+import java.util.Set;
import org.opends.server.admin.DefinitionDecodingException.Reason;
@@ -81,6 +83,9 @@
// object definition including inherited relation definitions.
private final Map<String, RelationDefinition<?, ?>> allRelationDefinitions;
+ // The set of tags associated with this managed object.
+ private final Set<Tag> allTags;
+
// The set of managed object definitions which inherit from this definition.
private final Map<String,
AbstractManagedObjectDefinition<? extends C, ? extends S>> children;
@@ -105,6 +110,7 @@
this.allPropertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
this.allRelationDefinitions =
new HashMap<String, RelationDefinition<?, ?>>();
+ this.allTags = new HashSet<Tag>();
this.children = new HashMap<String,
AbstractManagedObjectDefinition<? extends C, ? extends S>>();
@@ -119,6 +125,8 @@
for (RelationDefinition<?, ?> rd : parent.getAllRelationDefinitions()) {
allRelationDefinitions.put(rd.getName(), rd);
}
+
+ // Tag inheritance is performed during preprocessing.
}
}
@@ -180,6 +188,19 @@
/**
+ * Get all the tags associated with this type of managed object. The
+ * returned collection will contain inherited tags.
+ *
+ * @return Returns an unmodifiable collection containing all the
+ * tags associated with this type of managed object.
+ */
+ public final Collection<Tag> getAllTags() {
+ return Collections.unmodifiableCollection(allTags);
+ }
+
+
+
+ /**
* Get the named child managed object definition which inherits from
* this managed object definition. This method will recursively
* search down through the inheritance hierarchy.
@@ -492,6 +513,21 @@
/**
+ * Determines whether or not this managed object definition has the
+ * specified tag.
+ *
+ * @param t
+ * The tag definition.
+ * @return Returns <code>true</code> if this managed object
+ * definition has the specified tag.
+ */
+ public final boolean hasTag(Tag t) {
+ return allTags.contains(t);
+ }
+
+
+
+ /**
* Determines whether or not this managed object definition is a
* sub-type of the provided managed object definition. This managed
* object definition is a sub-type of the provided managed object
@@ -538,42 +574,6 @@
/**
- * Register a property definition with the managed object definition,
- * overriding any existing property definition with the same name.
- * <p>
- * This method <b>must not</b> be called by applications.
- *
- * @param d
- * The property definition to be registered.
- */
- protected final void registerPropertyDefinition(PropertyDefinition d) {
- String name = d.getName();
-
- propertyDefinitions.put(name, d);
- allPropertyDefinitions.put(name, d);
- }
-
-
-
- /**
- * Register a relation definition with the managed object definition,
- * overriding any existing relation definition with the same name.
- * <p>
- * This method <b>must not</b> be called by applications.
- *
- * @param d
- * The relation definition to be registered.
- */
- protected final void registerRelationDefinition(RelationDefinition d) {
- String name = d.getName();
-
- relationDefinitions.put(name, d);
- allRelationDefinitions.put(name, d);
- }
-
-
-
- /**
* Finds a sub-type of this managed object definition which most closely
* corresponds to the matching criteria of the provided definition resolver.
*
@@ -632,6 +632,56 @@
+ /**
+ * Register a property definition with the managed object definition,
+ * overriding any existing property definition with the same name.
+ * <p>
+ * This method <b>must not</b> be called by applications.
+ *
+ * @param d
+ * The property definition to be registered.
+ */
+ protected final void registerPropertyDefinition(PropertyDefinition d) {
+ String name = d.getName();
+
+ propertyDefinitions.put(name, d);
+ allPropertyDefinitions.put(name, d);
+ }
+
+
+
+ /**
+ * Register a relation definition with the managed object definition,
+ * overriding any existing relation definition with the same name.
+ * <p>
+ * This method <b>must not</b> be called by applications.
+ *
+ * @param d
+ * The relation definition to be registered.
+ */
+ protected final void registerRelationDefinition(RelationDefinition d) {
+ String name = d.getName();
+
+ relationDefinitions.put(name, d);
+ allRelationDefinitions.put(name, d);
+ }
+
+
+
+ /**
+ * Register a tag with the managed object definition.
+ * <p>
+ * This method <b>must not</b> be called by applications.
+ *
+ * @param t
+ * The tag to be registered.
+ */
+ protected final void registerTag(Tag t) {
+ allTags.add(t);
+ }
+
+
+
// Recursively descend definition hierarchy to find the best match definition.
private AbstractManagedObjectDefinition<? extends C, ? extends S>
resolveManagedObjectDefinitionAux(
--
Gitblit v1.10.0