mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Gaetan Boismal
02.38.2015 75b73b74de454814f71324cf7ea989beaa3d72ff
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
@@ -22,13 +22,11 @@
 *
 *
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 *      Portions Copyright 2013-2014 ForgeRock AS
 *      Portions Copyright 2013-2015 ForgeRock AS
 */
package org.opends.guitools.controlpanel.util;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.naming.NamingEnumeration;
@@ -37,35 +35,23 @@
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.opends.guitools.controlpanel.browser.BrowserController;
import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
import org.opends.server.config.ConfigConstants;
import org.forgerock.opendj.config.server.ConfigException;
import org.opends.server.schema.AttributeTypeSyntax;
import org.opends.server.schema.ObjectClassSyntax;
import org.opends.server.types.AttributeType;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.InitializationException;
import org.opends.server.types.ObjectClass;
import org.opends.server.types.Schema;
/**
 * Class used to retrieve the schema from the schema files.
 */
/** Class used to retrieve the schema from the schema files. */
public class RemoteSchemaLoader extends SchemaLoader
{
  private Schema schema;
  /**
   * Constructor.
   */
  public RemoteSchemaLoader()
  {
    super();
  }
  /**
   * Reads the schema.
   *
   * @param ctx
@@ -80,21 +66,16 @@
   *           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(InitialLdapContext ctx) throws NamingException, DirectoryException, InitializationException,
      ConfigException
  {
    final String[] schemaAttrs =
        { ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC,
          ConfigConstants.ATTR_OBJECTCLASSES_LC };
    final String[] schemaAttrs = { ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC, ConfigConstants.ATTR_OBJECTCLASSES_LC };
    final SearchControls searchControls = new SearchControls();
    searchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
    searchControls.setReturningAttributes(schemaAttrs);
    final String filter = BrowserController.ALL_OBJECTS_FILTER;
    final NamingEnumeration<SearchResult> srs =
        ctx.search(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, filter,
            searchControls);
    final NamingEnumeration<SearchResult> srs = ctx.search(
        ConfigConstants.DN_DEFAULT_SCHEMA_ROOT, BrowserController.ALL_OBJECTS_FILTER, searchControls);
    SearchResult sr = null;
    try
    {
@@ -107,48 +88,38 @@
    {
      srs.close();
    }
    final CustomSearchResult csr =
        new CustomSearchResult(sr, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT);
    final CustomSearchResult csr = new CustomSearchResult(sr, ConfigConstants.DN_DEFAULT_SCHEMA_ROOT);
    schema = getBaseSchema();
    for (final String str : schemaAttrs)
    {
      registerSchemaAttr(csr, str);
    }
  }
  private void registerSchemaAttr(final CustomSearchResult csr,
      final String schemaAttr) throws DirectoryException
  private void registerSchemaAttr(final CustomSearchResult csr, final String schemaAttr) throws DirectoryException
  {
    @SuppressWarnings({ "unchecked", "rawtypes" })
    final Set<String> remainingAttrs =
        new HashSet<String>((List) csr.getAttributeValues(schemaAttr));
    final Set<Object> remainingAttrs = new HashSet<>(csr.getAttributeValues(schemaAttr));
    while (!remainingAttrs.isEmpty())
    {
      DirectoryException lastException = null;
      boolean oneRegistered = false;
      Set<String> registered = new HashSet<String>();
      for (final String definition : remainingAttrs)
      final Set<Object> registered = new HashSet<>();
      for (final Object definition : remainingAttrs)
      {
        final ByteStringBuilder sb = new ByteStringBuilder();
        sb.append(definition);
        try
        {
          if (schemaAttr.equals(ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC))
          switch (schemaAttr)
          {
            final AttributeType attrType =
                AttributeTypeSyntax.decodeAttributeType(sb, schema, false);
            schema.registerAttributeType(attrType, true);
          case ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC:
            schema.registerAttributeType(AttributeTypeSyntax.decodeAttributeType(sb, schema, false), true);
            break;
          case ConfigConstants.ATTR_OBJECTCLASSES_LC:
            schema.registerObjectClass(ObjectClassSyntax.decodeObjectClass(sb, schema, false), true);
            break;
          }
          else if (schemaAttr.equals(ConfigConstants.ATTR_OBJECTCLASSES_LC))
          {
            final ObjectClass oc =
                ObjectClassSyntax.decodeObjectClass(sb, schema, false);
            schema.registerObjectClass(oc, true);
          }
          oneRegistered = true;
          registered.add(definition);
        }
        catch (DirectoryException de)
@@ -156,7 +127,7 @@
          lastException = de;
        }
      }
      if (!oneRegistered)
      if (registered.isEmpty())
      {
        throw lastException;
      }