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