From 1b12eb719f2aeec7624182b983d79fc949d7cea2 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Tue, 05 May 2015 15:26:50 +0000
Subject: [PATCH] OPENDJ-1932 CR-6839 Improve management context API

---
 opendj-config/src/main/java/org/forgerock/opendj/config/client/ldap/LDAPManagementContext.java |  135 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 118 insertions(+), 17 deletions(-)

diff --git a/opendj-config/src/main/java/org/forgerock/opendj/config/client/ldap/LDAPManagementContext.java b/opendj-config/src/main/java/org/forgerock/opendj/config/client/ldap/LDAPManagementContext.java
index 306525e..824c142 100644
--- a/opendj-config/src/main/java/org/forgerock/opendj/config/client/ldap/LDAPManagementContext.java
+++ b/opendj-config/src/main/java/org/forgerock/opendj/config/client/ldap/LDAPManagementContext.java
@@ -35,28 +35,142 @@
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.SortedSet;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.config.AbstractManagedObjectDefinition;
+import org.forgerock.opendj.config.Configuration;
+import org.forgerock.opendj.config.ConfigurationClient;
+import org.forgerock.opendj.config.DefinitionDecodingException;
+import org.forgerock.opendj.config.InstantiableRelationDefinition;
 import org.forgerock.opendj.config.LDAPProfile;
+import org.forgerock.opendj.config.ManagedObjectNotFoundException;
+import org.forgerock.opendj.config.ManagedObjectPath;
+import org.forgerock.opendj.config.OptionalRelationDefinition;
+import org.forgerock.opendj.config.PropertyDefinition;
+import org.forgerock.opendj.config.SetRelationDefinition;
+import org.forgerock.opendj.config.client.DriverBasedManagementContext;
+import org.forgerock.opendj.config.client.ManagedObject;
+import org.forgerock.opendj.config.client.ManagedObjectDecodingException;
 import org.forgerock.opendj.config.client.ManagementContext;
+import org.forgerock.opendj.config.client.OperationRejectedException;
 import org.forgerock.opendj.config.client.spi.Driver;
 import org.forgerock.opendj.ldap.AbstractConnectionWrapper;
 import org.forgerock.opendj.ldap.Connection;
 import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.LdapException;
 import org.forgerock.opendj.ldap.MemoryBackend;
 import org.forgerock.opendj.ldap.requests.UnbindRequest;
 import org.forgerock.opendj.ldif.LDIF;
 import org.forgerock.opendj.ldif.LDIFEntryReader;
 import org.forgerock.opendj.ldif.LDIFEntryWriter;
+import org.forgerock.opendj.server.config.client.RootCfgClient;
 import org.forgerock.util.Reject;
 
 /**
  * An LDAP management connection context.
  */
-public final class LDAPManagementContext extends ManagementContext {
+public final class LDAPManagementContext extends DriverBasedManagementContext {
+
+    private static final class ManagementContextWrapper implements ManagementContext {
+        private final ManagementContext delegate;
+        private final List<IOException> exceptions;
+
+        private ManagementContextWrapper(ManagementContext result, List<IOException> exceptions) {
+            this.delegate = result;
+            this.exceptions = exceptions;
+        }
+
+        @Override
+        public boolean managedObjectExists(ManagedObjectPath<?, ?> path) throws ManagedObjectNotFoundException,
+                LdapException {
+            return delegate.managedObjectExists(path);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> String[] listManagedObjects(
+                ManagedObjectPath<?, ?> parent, SetRelationDefinition<C, S> rd) throws ManagedObjectNotFoundException,
+                LdapException {
+            return delegate.listManagedObjects(parent, rd);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> String[] listManagedObjects(
+                ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd,
+                AbstractManagedObjectDefinition<? extends C, ? extends S> d) throws ManagedObjectNotFoundException,
+                LdapException {
+            return delegate.listManagedObjects(parent, rd, d);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> String[] listManagedObjects(
+                ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd)
+                throws ManagedObjectNotFoundException, LdapException {
+            return delegate.listManagedObjects(parent, rd);
+        }
+
+        @Override
+        public ManagedObject<RootCfgClient> getRootConfigurationManagedObject() {
+            return delegate.getRootConfigurationManagedObject();
+        }
+
+        @Override
+        public RootCfgClient getRootConfiguration() {
+            return delegate.getRootConfiguration();
+        }
+
+        @Override
+        public <P> SortedSet<P> getPropertyValues(ManagedObjectPath<?, ?> path, PropertyDefinition<P> pd)
+                throws DefinitionDecodingException, LdapException, ManagedObjectNotFoundException {
+            return delegate.getPropertyValues(path, pd);
+        }
+
+        @Override
+        public <P> P getPropertyValue(ManagedObjectPath<?, ?> path, PropertyDefinition<P> pd)
+                throws DefinitionDecodingException, LdapException, ManagedObjectNotFoundException {
+            return delegate.getPropertyValue(path, pd);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> ManagedObject<? extends C> getManagedObject(
+                ManagedObjectPath<C, S> path) throws DefinitionDecodingException, ManagedObjectDecodingException,
+                ManagedObjectNotFoundException, LdapException {
+            return delegate.getManagedObject(path);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> boolean deleteManagedObject(
+                ManagedObjectPath<?, ?> parent, SetRelationDefinition<C, S> rd, String name)
+                throws ManagedObjectNotFoundException, OperationRejectedException, LdapException {
+            return delegate.deleteManagedObject(parent, rd, name);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> boolean deleteManagedObject(
+                ManagedObjectPath<?, ?> parent, OptionalRelationDefinition<C, S> rd)
+                throws ManagedObjectNotFoundException, OperationRejectedException, LdapException {
+            return delegate.deleteManagedObject(parent, rd);
+        }
+
+        @Override
+        public <C extends ConfigurationClient, S extends Configuration> boolean deleteManagedObject(
+                ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd, String name)
+                throws ManagedObjectNotFoundException, OperationRejectedException, LdapException {
+            return delegate.deleteManagedObject(parent, rd, name);
+        }
+
+        @Override
+        public void close() throws IOException {
+            delegate.close();
+            if (!exceptions.isEmpty()) {
+                throw exceptions.get(0);
+            }
+        }
+    }
 
     private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
@@ -77,21 +191,7 @@
         return context;
     }
 
-    /**
-     * Returns a LDIF management context on the provided LDIF file.
-     *
-     * @param ldifFile
-     *            The LDIF file to manage
-     * @param profile
-     *            The LDAP profile
-     * @param exceptions
-     *            Contains {@code IOException} that may occurred during management context close.
-     *            Could be {@code null}
-     * @return A LDIF file management context
-     * @throws IOException
-     *             If problems occurs while reading the file.
-     */
-    public static ManagementContext newLDIFManagementContext(final File ldifFile, final LDAPProfile profile,
+    private static ManagementContext newLDIFManagementContext(final File ldifFile, final LDAPProfile profile,
             final List<IOException> exceptions) throws IOException {
         final BufferedReader configReader = new BufferedReader(new FileReader(ldifFile));
         try {
@@ -145,7 +245,8 @@
      */
     public static ManagementContext newLDIFManagementContext(final File ldifFile, final LDAPProfile profile)
             throws IOException {
-        return newLDIFManagementContext(ldifFile, profile, null);
+        final List<IOException> exceptions = new ArrayList<>();
+        return new ManagementContextWrapper(newLDIFManagementContext(ldifFile, profile, exceptions), exceptions);
     }
 
     /** The LDAP management context driver. */

--
Gitblit v1.10.0