From 9fa1aa8315996dc555e9921a1c77979e07050878 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 29 Jun 2016 15:48:26 +0000
Subject: [PATCH] Partial OPENDJ-2625 Convert all code that uses JNDI to use the SDK instead
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java | 164 ++++++++++++++++++------------------------------------
1 files changed, 54 insertions(+), 110 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
index 8cf8166..cc59818 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
@@ -16,37 +16,41 @@
*/
package org.opends.guitools.controlpanel.util;
+import static org.forgerock.opendj.ldap.SearchScope.*;
+import static org.forgerock.opendj.ldap.requests.Requests.*;
+import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
import static org.forgerock.opendj.ldap.schema.Schema.*;
+import static org.opends.server.config.ConfigConstants.*;
+import static org.opends.server.config.ConfigConstants.ATTR_ATTRIBUTE_TYPES;
+import static org.opends.server.config.ConfigConstants.ATTR_LDAP_SYNTAXES;
+import static org.opends.server.schema.SchemaConstants.*;
import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-import javax.naming.ldap.InitialLdapContext;
+import java.util.Iterator;
import org.forgerock.opendj.config.server.ConfigException;
-import org.forgerock.opendj.ldap.ByteStringBuilder;
-import org.forgerock.opendj.ldap.ResultCode;
+import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.AttributeDescription;
+import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.LdapException;
+import org.forgerock.opendj.ldap.requests.SearchRequest;
+import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.forgerock.opendj.ldap.schema.MatchingRule;
import org.forgerock.opendj.ldap.schema.MatchingRuleImpl;
import org.forgerock.opendj.ldap.schema.SchemaBuilder;
-import org.opends.guitools.controlpanel.browser.BrowserController;
-import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
+import org.opends.admin.ads.util.ConnectionWrapper;
import org.opends.server.api.AttributeSyntax;
-import org.opends.server.config.ConfigConstants;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ServerContext;
import org.opends.server.replication.plugin.HistoricalCsnOrderingMatchingRuleImpl;
import org.opends.server.schema.AciSyntax;
-import org.opends.server.schema.SchemaConstants;
import org.opends.server.schema.SubtreeSpecificationSyntax;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.InitializationException;
import org.opends.server.types.Schema;
+import org.opends.server.types.Schema.SchemaUpdater;
/** Class used to retrieve the schema from the schema files. */
public class RemoteSchemaLoader extends SchemaLoader
@@ -68,52 +72,42 @@
/**
* Reads the schema.
*
- * @param ctx
+ * @param connWrapper
* the connection to be used to load the schema.
- * @throws NamingException
+ * @throws LdapException
* if an error occurs reading the schema.
* @throws DirectoryException
* if an error occurs parsing the schema.
* @throws InitializationException
* if an error occurs finding the base schema.
* @throws ConfigException
- * if an error occurs loading the configuration required to use the
- * schema classes.
+ * if an error occurs loading the configuration required to use the schema classes.
*/
- public void readSchema(InitialLdapContext ctx) throws NamingException, DirectoryException, InitializationException,
- ConfigException
+ public void readSchema(ConnectionWrapper connWrapper) throws LdapException, DirectoryException,
+ InitializationException, ConfigException
{
- final String[] schemaAttrs = { ConfigConstants.ATTR_LDAP_SYNTAXES_LC, ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC,
- ConfigConstants.ATTR_OBJECTCLASSES_LC };
- final SearchControls searchControls = new SearchControls();
- searchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
- searchControls.setReturningAttributes(schemaAttrs);
- final NamingEnumeration<SearchResult> srs = ctx.search(
- ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, BrowserController.ALL_OBJECTS_FILTER, searchControls);
- SearchResult sr = null;
- try
- {
- while (srs.hasMore())
- {
- sr = srs.next();
- }
- }
- finally
- {
- srs.close();
- }
-
- final CustomSearchResult csr = new CustomSearchResult(sr, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT);
schema = getBaseSchema();
// Add missing matching rules and attribute syntaxes to base schema to allow read of remote server schema
// (see OPENDJ-1122 for more details)
addMissingSyntaxesToBaseSchema(new AciSyntax(), new SubtreeSpecificationSyntax());
addMissingMatchingRuleToBaseSchema("1.3.6.1.4.1.26027.1.4.4", "historicalCsnOrderingMatch",
"1.3.6.1.4.1.1466.115.121.1.40", new HistoricalCsnOrderingMatchingRuleImpl());
- for (final String str : schemaAttrs)
+
+ final SearchRequest request = newSearchRequest(
+ DN.valueOf(DN_DEFAULT_SCHEMA_ROOT), BASE_OBJECT, Filter.alwaysTrue(),
+ ATTR_LDAP_SYNTAXES, ATTR_ATTRIBUTE_TYPES, ATTR_OBJECTCLASSES);
+ final SearchResultEntry entry = connWrapper.getConnection().searchSingleEntry(request);
+
+ removeNonOpenDjOrOpenDsSyntaxes(entry);
+ schema.updateSchema(new SchemaUpdater()
{
- registerSchemaAttr(csr, str);
- }
+ @Override
+ public org.forgerock.opendj.ldap.schema.Schema update(SchemaBuilder builder)
+ {
+ builder.addSchema(entry, true);
+ return builder.toSchema();
+ }
+ });
}
private void addMissingSyntaxesToBaseSchema(final AttributeSyntax<?>... syntaxes)
@@ -143,85 +137,35 @@
}
else
{
- matchingRule = new SchemaBuilder(schemaNG).buildMatchingRule(oid)
- .names(name)
- .syntaxOID(syntaxOID)
- .implementation(impl)
- .addToSchema().toSchema().getMatchingRule(oid);
+ matchingRule = new SchemaBuilder(schemaNG)
+ .buildMatchingRule(oid)
+ .names(name)
+ .syntaxOID(syntaxOID)
+ .implementation(impl)
+ .addToSchema()
+ .toSchema()
+ .getMatchingRule(oid);
}
schema.registerMatchingRules(Arrays.asList(matchingRule), true);
}
- private void registerSchemaAttr(final CustomSearchResult csr, final String schemaAttr) throws DirectoryException
+ private void removeNonOpenDjOrOpenDsSyntaxes(final SearchResultEntry entry) throws DirectoryException
{
- final Set<Object> remainingAttrs = new HashSet<>(csr.getAttributeValues(schemaAttr));
- if (schemaAttr.equals(ConfigConstants.ATTR_LDAP_SYNTAXES_LC))
+ Attribute attribute = entry.getAttribute(AttributeDescription.create(getLDAPSyntaxesAttributeType()));
+ if (attribute != null)
{
- registerSyntaxDefinitions(remainingAttrs);
- return;
- }
-
- while (!remainingAttrs.isEmpty())
- {
- DirectoryException lastException = null;
- final Set<Object> registered = new HashSet<>();
- for (final Object definition : remainingAttrs)
+ for (Iterator<ByteString> it = attribute.iterator(); it.hasNext();)
{
- final String definitionStr = toString(definition);
- try
+ final String definition = it.next().toString();
+ if (!definition.contains(OID_OPENDS_SERVER_BASE)
+ && !definition.contains(OID_OPENDJ_BASE))
{
- switch (schemaAttr)
- {
- case ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC:
- schema.registerAttributeType(definitionStr, null, true);
- break;
- case ConfigConstants.ATTR_OBJECTCLASSES_LC:
- schema.registerObjectClass(definitionStr, null, true);
- break;
- }
- registered.add(definition);
- }
- catch (DirectoryException de)
- {
- lastException = de;
- }
- }
- if (registered.isEmpty())
- {
- throw lastException;
- }
- remainingAttrs.removeAll(registered);
- }
- }
-
- private void registerSyntaxDefinitions(Set<Object> definitions) throws DirectoryException
- {
- for (final Object definition : definitions)
- {
- final String definitionStr = toString(definition);
- if (definition.toString().contains(SchemaConstants.OID_OPENDS_SERVER_BASE))
- {
- try
- {
- schema.registerSyntax(definitionStr, true);
- }
- catch (DirectoryException e)
- {
- // Filter error code to ignore exceptions raised on description syntaxes.
- if (e.getResultCode() != ResultCode.UNWILLING_TO_PERFORM)
- {
- throw e;
- }
+ it.remove();
}
}
}
}
- private String toString(final Object definition)
- {
- return new ByteStringBuilder().appendObject(definition).toString();
- }
-
/**
* Returns the schema that was read.
*
--
Gitblit v1.10.0