From 5d6e9428fedead57a9c9438cebe58b485ff476d2 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 14 Sep 2007 10:22:17 +0000
Subject: [PATCH] Avoid managed object definition initialization dependency problems. Using features like inherited default values and aggregation properties it is quite straightforward to encounter initialization dependency problems. For example: the global configuration will contain an aggregation property which references the default password policy. This aggregation definition is defined using a managed object path which, when decoded, contains a reference to the root configuration and its "password-policy" relation. This is what happens during initialization of the root configuration:
---
opends/src/server/org/opends/server/admin/DefaultBehaviorProvider.java | 67 ++++++++++++++++++++++++---------
1 files changed, 49 insertions(+), 18 deletions(-)
diff --git a/opends/src/server/org/opends/server/admin/DefaultBehaviorProvider.java b/opends/src/server/org/opends/server/admin/DefaultBehaviorProvider.java
index 565f7d1..a9aef47 100644
--- a/opends/src/server/org/opends/server/admin/DefaultBehaviorProvider.java
+++ b/opends/src/server/org/opends/server/admin/DefaultBehaviorProvider.java
@@ -29,31 +29,43 @@
/**
- * An interface for determining the default behavior of a property. A property
- * exhibits default behavior when it has no values defined. There are four
- * different types of default behavior:
+ * An interface for determining the default behavior of a property. A
+ * property exhibits default behavior when it has no values defined.
+ * There are four different types of default behavior:
* <ol>
- * <li>there is no default behavior - e.g. leaving a "description" unset has
- * no side-effects. This default behavior is represented using the
- * {@link UndefinedDefaultBehaviorProvider} implementation
- * <li>the property defaults to one or more real values of the property. This
- * default behavior is represented using the
+ * <li>there is no default behavior - e.g. leaving a "description"
+ * unset has no side-effects. This default behavior is represented
+ * using the {@link UndefinedDefaultBehaviorProvider} implementation
+ * <li>the property defaults to one or more real values of the
+ * property. This default behavior is represented using the
* {@link DefinedDefaultBehaviorProvider} implementation
* <li>the property defaults to some special behavior that cannot be
- * represented using real property values. This default behavior is represented
- * using the {@link AliasDefaultBehaviorProvider} implementation
- * <li>the property inherits its values from property held in another managed
- * object (e.g. the parent managed object). This default behavior is
- * represented using the {@link AbsoluteInheritedDefaultBehaviorProvider} and
+ * represented using real property values. This default behavior is
+ * represented using the {@link AliasDefaultBehaviorProvider}
+ * implementation
+ * <li>the property inherits its values from property held in another
+ * managed object (e.g. the parent managed object). This default
+ * behavior is represented using the
+ * {@link AbsoluteInheritedDefaultBehaviorProvider} and
* {@link RelativeInheritedDefaultBehaviorProvider} implementations.
* </ol>
- * An application can perform actions based on the type of the default behavior
- * by implementing the {@link DefaultBehaviorProviderVisitor} interface.
+ * An application can perform actions based on the type of the default
+ * behavior by implementing the {@link DefaultBehaviorProviderVisitor}
+ * interface.
*
* @param <T>
* The type of values represented by this provider.
*/
-public interface DefaultBehaviorProvider<T> {
+public abstract class DefaultBehaviorProvider<T> {
+
+ /**
+ * Creates a new default behavior provider.
+ */
+ protected DefaultBehaviorProvider() {
+ // No implementation required.
+ }
+
+
/**
* Apply a visitor to this default behavior provider.
@@ -61,13 +73,32 @@
* @param <R>
* The return type of the visitor's methods.
* @param <P>
- * The type of the additional parameters to the visitor's methods.
+ * The type of the additional parameters to the visitor's
+ * methods.
* @param v
* The default behavior visitor.
* @param p
* Optional additional visitor parameter.
* @return Returns a result as specified by the visitor.
*/
- <R, P> R accept(DefaultBehaviorProviderVisitor<T, R, P> v, P p);
+ public abstract <R, P>
+ R accept(DefaultBehaviorProviderVisitor<T, R, P> v, P p);
+
+
+
+ /**
+ * Performs any run-time initialization required by this default
+ * behavior provider. This may include resolving managed object
+ * paths and property names.
+ * <p>
+ * The default implementation is to do nothing.
+ *
+ * @throws Exception
+ * If this default behavior provider could not be
+ * initialized.
+ */
+ protected void initialize() throws Exception {
+ // Default implementation is to do nothing.
+ }
}
--
Gitblit v1.10.0