From 7b618f78599b78c4b9085b938dd84a30fa5dc1a9 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Tue, 11 Sep 2007 23:12:40 +0000
Subject: [PATCH] Handle special case where the requested managed object is the root configuration.

---
 opends/src/server/org/opends/server/admin/client/spi/Driver.java              |    6 ++++--
 opends/src/server/org/opends/server/admin/client/ManagementContext.java       |    6 ++++++
 opends/src/server/org/opends/server/admin/server/ServerManagementContext.java |    6 ++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/client/ManagementContext.java b/opends/src/server/org/opends/server/admin/client/ManagementContext.java
index 972ace3..ca4771c 100644
--- a/opends/src/server/org/opends/server/admin/client/ManagementContext.java
+++ b/opends/src/server/org/opends/server/admin/client/ManagementContext.java
@@ -183,11 +183,17 @@
    *           If the client cannot contact the server due to an
    *           underlying communication problem.
    */
+  @SuppressWarnings("unchecked")
   public final <C extends ConfigurationClient, S extends Configuration>
   ManagedObject<? extends C> getManagedObject(
       ManagedObjectPath<C, S> path) throws DefinitionDecodingException,
       ManagedObjectDecodingException, ManagedObjectNotFoundException,
       AuthorizationException, CommunicationException {
+    // Be careful to handle the root configuration.
+    if (path.isEmpty()) {
+      return (ManagedObject<C>) getRootConfigurationManagedObject();
+    }
+
     return getDriver().getManagedObject(path);
   }
 
diff --git a/opends/src/server/org/opends/server/admin/client/spi/Driver.java b/opends/src/server/org/opends/server/admin/client/spi/Driver.java
index e7b0a19..bc94558 100644
--- a/opends/src/server/org/opends/server/admin/client/spi/Driver.java
+++ b/opends/src/server/org/opends/server/admin/client/spi/Driver.java
@@ -390,7 +390,9 @@
 
 
   /**
-   * Gets the named managed object.
+   * Gets the named managed object. The path is guaranteed to be
+   * non-empty, so implementations do not need to worry about handling
+   * this special case.
    *
    * @param <C>
    *          The type of client managed object configuration that the
@@ -399,7 +401,7 @@
    *          The type of server managed object configuration that the
    *          path definition refers to.
    * @param path
-   *          The path of the managed object.
+   *          The non-empty path of the managed object.
    * @return Returns the named managed object.
    * @throws DefinitionDecodingException
    *           If the managed object was found but its type could not
diff --git a/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java b/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
index d663430..39d1272 100644
--- a/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
+++ b/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
@@ -449,9 +449,15 @@
    *           If the named managed object could not be found or if it
    *           could not be decoded.
    */
+  @SuppressWarnings("unchecked")
   public <C extends ConfigurationClient, S extends Configuration>
   ServerManagedObject<? extends S> getManagedObject(
       ManagedObjectPath<C, S> path) throws ConfigException {
+    // Be careful to handle the root configuration.
+    if (path.isEmpty()) {
+      return (ServerManagedObject<S>) getRootConfigurationManagedObject();
+    }
+
     // Get the configuration entry.
     DN targetDN = DNBuilder.create(path);
     ConfigEntry configEntry = getManagedObjectConfigEntry(targetDN);

--
Gitblit v1.10.0