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; } opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/SchemaLoader.java
@@ -24,7 +24,6 @@ * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2013-2015 ForgeRock AS. */ package org.opends.guitools.controlpanel.util; import static org.opends.messages.ConfigMessages.*; @@ -33,6 +32,7 @@ import java.io.FileFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.schema.Syntax; @@ -41,43 +41,38 @@ import org.forgerock.opendj.config.server.ConfigException; import org.opends.server.core.DirectoryServer; import org.opends.server.core.SchemaConfigManager; import org.opends.server.schema.SchemaConstants; import org.opends.server.types.AttributeType; import org.opends.server.types.DirectoryException; import org.opends.server.types.InitializationException; import org.opends.server.types.ObjectClass; import org.opends.server.types.Schema; import com.forgerock.opendj.util.OperatingSystem; /** * Class used to retrieve the schema from the schema files. */ /** Class used to retrieve the schema from the schema files. */ public class SchemaLoader { private Schema schema; private final String[] attrsToKeep = { private static final String[] ATTRIBUTES_TO_KEEP = { ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC, ConfigConstants.ATTR_OBJECTCLASSES_LC, ConfigConstants.ATTR_NAME_FORMS_LC, ConfigConstants.ATTR_DIT_CONTENT_RULES_LC, ConfigConstants.ATTR_DIT_STRUCTURE_RULES_LC, ConfigConstants.ATTR_MATCHING_RULE_USE_LC }; private final String[] ocsToKeep = { "top" }; private static final String[] OBJECTCLASS_TO_KEEP = { SchemaConstants.TOP_OBJECTCLASS_NAME }; private final ArrayList<ObjectClass> objectclassesToKeep = new ArrayList<ObjectClass>(); private final ArrayList<AttributeType> attributesToKeep = new ArrayList<AttributeType>(); private final ArrayList<MatchingRule> matchingRulesToKeep = new ArrayList<MatchingRule>(); private final ArrayList<Syntax> syntaxesToKeep = new ArrayList<>(); private final List<ObjectClass> objectclassesToKeep = new ArrayList<>(); private final List<AttributeType> attributesToKeep = new ArrayList<>(); private final List<MatchingRule> matchingRulesToKeep = new ArrayList<>(); private final List<Syntax> syntaxesToKeep = new ArrayList<>(); /** * Constructor. */ /** Constructor. */ public SchemaLoader() { Schema sc = DirectoryServer.getSchema(); for (String name : ocsToKeep) for (String name : OBJECTCLASS_TO_KEEP) { ObjectClass oc = sc.getObjectClass(name.toLowerCase()); if (oc != null) @@ -85,7 +80,7 @@ objectclassesToKeep.add(oc); } } for (String name : attrsToKeep) for (String name : ATTRIBUTES_TO_KEEP) { AttributeType attr = sc.getAttributeType(name.toLowerCase()); if (attr != null) @@ -99,16 +94,8 @@ private static String getSchemaDirectoryPath() { File schemaDir = DirectoryServer.getEnvironmentConfig().getSchemaDirectory(); if (schemaDir != null) { return schemaDir.getAbsolutePath(); } else { return null; } File schemaDir = DirectoryServer.getEnvironmentConfig().getSchemaDirectory(); return schemaDir != null ? schemaDir.getAbsolutePath() : null; } /** @@ -121,8 +108,7 @@ * @throws DirectoryException * if there is an error registering the minimal objectclasses. */ public void readSchema() throws DirectoryException, ConfigException, InitializationException public void readSchema() throws DirectoryException, ConfigException, InitializationException { schema = getBaseSchema(); @@ -139,39 +125,28 @@ } else if (!schemaDir.isDirectory()) { LocalizableMessage message = ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath); LocalizableMessage message = ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath); throw new InitializationException(message); } FileFilter ldifFiles = new FileFilter() FileFilter ldifFilesFilter = new FileFilter() { /** {@inheritDoc} */ @Override public boolean accept(File f) { boolean accept = false; if (f != null) { if (f.isDirectory()) { accept = true; return true; } else if (OperatingSystem.isWindows()) { accept = f.getName().toLowerCase().endsWith(".ldif"); return OperatingSystem.isWindows() ? f.getName().toLowerCase().endsWith(".ldif") : f.getName().endsWith(".ldif"); } else { accept = f.getName().endsWith(".ldif"); } } return accept; return false; } }; File[] schemaFiles = schemaDir.listFiles(ldifFiles); int size = schemaFiles.length; ArrayList<String> fileList = new ArrayList<String>(size); File[] schemaFiles = schemaDir.listFiles(ldifFilesFilter); List<String> fileList = new ArrayList<>(schemaFiles.length); for (File f : schemaFiles) { if (f.isFile()) @@ -184,16 +159,9 @@ fileList.toArray(fileNames); Arrays.sort(fileNames); } catch (InitializationException ie) { throw ie; } catch (Exception e) { LocalizableMessage message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES .get(schemaDirPath, e.getMessage()); throw new InitializationException(message, e); throw new InitializationException(ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(schemaDirPath, e.getMessage()), e); } // Iterate through the schema files and read them as an LDIF file