| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| |
| package org.apache.directory.ldap.client.api; |
| |
| |
| import java.io.IOException; |
| import java.text.ParseException; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.apache.directory.api.i18n.I18n; |
| import org.apache.directory.api.ldap.model.constants.MetaSchemaConstants; |
| import org.apache.directory.api.ldap.model.constants.SchemaConstants; |
| import org.apache.directory.api.ldap.model.entry.Attribute; |
| import org.apache.directory.api.ldap.model.entry.DefaultEntry; |
| import org.apache.directory.api.ldap.model.entry.Entry; |
| import org.apache.directory.api.ldap.model.entry.Value; |
| import org.apache.directory.api.ldap.model.exception.LdapException; |
| import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException; |
| import org.apache.directory.api.ldap.model.name.Dn; |
| import org.apache.directory.api.ldap.model.schema.AttributeType; |
| import org.apache.directory.api.ldap.model.schema.AttributesFactory; |
| import org.apache.directory.api.ldap.model.schema.DitContentRule; |
| import org.apache.directory.api.ldap.model.schema.DitStructureRule; |
| import org.apache.directory.api.ldap.model.schema.LdapSyntax; |
| import org.apache.directory.api.ldap.model.schema.MatchingRule; |
| import org.apache.directory.api.ldap.model.schema.MatchingRuleUse; |
| import org.apache.directory.api.ldap.model.schema.NameForm; |
| import org.apache.directory.api.ldap.model.schema.ObjectClass; |
| import org.apache.directory.api.ldap.model.schema.SchemaObject; |
| import org.apache.directory.api.ldap.model.schema.SchemaObjectWrapper; |
| import org.apache.directory.api.ldap.model.schema.parsers.AttributeTypeDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.DitContentRuleDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.DitStructureRuleDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.LdapComparatorDescription; |
| import org.apache.directory.api.ldap.model.schema.parsers.LdapComparatorDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.LdapSyntaxDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.MatchingRuleDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.MatchingRuleUseDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.NameFormDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.NormalizerDescription; |
| import org.apache.directory.api.ldap.model.schema.parsers.NormalizerDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.ObjectClassDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.parsers.SyntaxCheckerDescription; |
| import org.apache.directory.api.ldap.model.schema.parsers.SyntaxCheckerDescriptionSchemaParser; |
| import org.apache.directory.api.ldap.model.schema.registries.AbstractSchemaLoader; |
| import org.apache.directory.api.ldap.model.schema.registries.DefaultSchema; |
| import org.apache.directory.api.ldap.model.schema.registries.Schema; |
| import org.apache.directory.api.util.Base64; |
| import org.apache.directory.api.util.Strings; |
| import org.apache.directory.ldap.client.api.exception.InvalidConnectionException; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| |
| /** |
| * A schema loader which uses LdapConnection to load schema from a ApacheDS serveur |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| public class DefaultSchemaLoader extends AbstractSchemaLoader |
| { |
| private static final String DEFAULT_APACHEDS_VENDOR_NAME = "Apache Software Foundation"; |
| |
| /** the logger */ |
| private static final Logger LOG = LoggerFactory.getLogger( DefaultSchemaLoader.class ); |
| |
| /** the connection to the ldap server */ |
| private LdapConnection connection; |
| |
| /** the subschemaSubentry DN */ |
| private Dn subschemaSubentryDn; |
| |
| /** The SubschemaSubentry descriptions parsers */ |
| private static final AttributeTypeDescriptionSchemaParser AT_DESCR_SCHEMA_PARSER = new AttributeTypeDescriptionSchemaParser(); |
| private static final DitStructureRuleDescriptionSchemaParser DSR_DESCR_SCHEMA_PARSER = new DitStructureRuleDescriptionSchemaParser(); |
| private static final DitContentRuleDescriptionSchemaParser DCR_DESCR_SCHEMA_PARSER = new DitContentRuleDescriptionSchemaParser(); |
| private static final MatchingRuleDescriptionSchemaParser MR_DESCR_SCHEMA_PARSER = new MatchingRuleDescriptionSchemaParser(); |
| private static final MatchingRuleUseDescriptionSchemaParser MRU_DESCR_SCHEMA_PARSER = new MatchingRuleUseDescriptionSchemaParser(); |
| private static final NameFormDescriptionSchemaParser NF_DESCR_SCHEMA_PARSER = new NameFormDescriptionSchemaParser(); |
| private static final ObjectClassDescriptionSchemaParser OC_DESCR_SCHEMA_PARSER = new ObjectClassDescriptionSchemaParser(); |
| private static final LdapSyntaxDescriptionSchemaParser LS_DESCR_SCHEMA_PARSER = new LdapSyntaxDescriptionSchemaParser(); |
| |
| private static final LdapComparatorDescriptionSchemaParser C_DESCR_SCHEMA_PARSER = new LdapComparatorDescriptionSchemaParser(); |
| private static final NormalizerDescriptionSchemaParser N_DESCR_SCHEMA_PARSER = new NormalizerDescriptionSchemaParser(); |
| private static final SyntaxCheckerDescriptionSchemaParser SC_DESCR_SCHEMA_PARSER = new SyntaxCheckerDescriptionSchemaParser(); |
| |
| protected DefaultSchemaLoader() throws LdapException |
| { |
| // For use in subclasses |
| } |
| |
| /** |
| * Creates a new instance of DefaultSchemaLoader. |
| * |
| * @param connection the LDAP connection |
| * @throws LdapException if the connection is not authenticated or if there are any problems |
| * while loading the schema entries |
| */ |
| public DefaultSchemaLoader( LdapConnection connection ) throws LdapException |
| { |
| this( connection, false ); |
| } |
| |
| |
| /** |
| * Creates a new instance of DefaultSchemaLoader. |
| * |
| * @param connection the LDAP connection |
| * @param relaxed initial setting for the relaxed mode |
| * @throws LdapException if the connection is not authenticated or if there are any problems |
| * while loading the schema entries |
| */ |
| public DefaultSchemaLoader( LdapConnection connection, boolean relaxed ) throws LdapException |
| { |
| if ( connection == null ) |
| { |
| throw new InvalidConnectionException( I18n.err( I18n.ERR_04104_NULL_CONNECTION_CANNOT_CONNECT ) ); |
| } |
| |
| this.connection = connection; |
| setRelaxed( relaxed ); |
| setQuirksMode( relaxed ); |
| |
| // Flagging if the connection was already connected |
| boolean wasConnected = connection.isConnected(); |
| |
| try |
| { |
| // Connecting (if needed) |
| if ( !wasConnected ) |
| { |
| connection.connect(); |
| } |
| |
| // Getting the subschemaSubentry DN from the rootDSE |
| Entry rootDse = connection.lookup( Dn.ROOT_DSE, SchemaConstants.SUBSCHEMA_SUBENTRY_AT, |
| SchemaConstants.VENDOR_NAME_AT ); |
| |
| if ( rootDse != null ) |
| { |
| // Checking if this is an ApacheDS server |
| if ( isApacheDs( rootDse ) ) |
| { |
| // Getting the subSchemaSubEntry attribute |
| Attribute subschemaSubentryAttribute = rootDse.get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ); |
| |
| if ( ( subschemaSubentryAttribute != null ) && ( subschemaSubentryAttribute.size() > 0 ) ) |
| { |
| subschemaSubentryDn = new Dn( connection.getSchemaManager(), |
| subschemaSubentryAttribute.getString() ); |
| |
| loadSchemas(); |
| } |
| } |
| else |
| { |
| try |
| { |
| // No matter what, first try to search the schema from the rootDSE |
| // Getting the subSchemaSubEntry attribute |
| Attribute subschemaSubentryAttribute = rootDse.get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ); |
| |
| if ( ( subschemaSubentryAttribute != null ) && ( subschemaSubentryAttribute.size() > 0 ) ) |
| { |
| subschemaSubentryDn = new Dn( connection.getSchemaManager(), |
| subschemaSubentryAttribute.getString() ); |
| |
| loadSchemas(); |
| } |
| } |
| catch ( LdapException le ) |
| { |
| // TODO : if we can't read the schema from the rootDSE, just try to read the |
| // schema from cn=schema |
| throw le; |
| } |
| } |
| } |
| } |
| finally |
| { |
| // Checking if the connection needs to be closed |
| if ( ( !wasConnected ) && ( connection.isConnected() ) ) |
| { |
| try |
| { |
| connection.close(); |
| } |
| catch ( IOException e ) |
| { |
| throw new LdapException( e ); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Creates a new instance of NetworkSchemaLoader. |
| * |
| * @param connection the LDAP connection |
| * @param subschemaSubentryDn The SubschemaSubentry |
| * @throws LdapException if the connection is not authenticated or if there are any problems |
| * while loading the schema entries |
| */ |
| public DefaultSchemaLoader( LdapConnection connection, Dn subschemaSubentryDn ) throws LdapException |
| { |
| if ( !connection.isAuthenticated() ) |
| { |
| throw new IllegalArgumentException( I18n.err( I18n.ERR_04105_CONNECTION_NOT_AUTHENTICATED ) ); |
| } |
| |
| this.connection = connection; |
| this.subschemaSubentryDn = subschemaSubentryDn; |
| |
| loadSchemas(); |
| } |
| |
| protected LdapConnection getConnection() |
| { |
| return connection; |
| } |
| |
| protected void setConnection( LdapConnection connection ) |
| { |
| this.connection = connection; |
| } |
| |
| /** |
| * Indicates if the given Root DSE corresponds to an ApacheDS server. |
| * |
| * @param rootDse the Root DSE |
| * @return <code>true</code> if this is an ApacheDS server, |
| * <code>false</code> if not. |
| * @throws LdapInvalidAttributeValueException If the vendorName attribute contains an invalid value |
| */ |
| private boolean isApacheDs( Entry rootDse ) throws LdapInvalidAttributeValueException |
| { |
| if ( rootDse != null ) |
| { |
| Attribute vendorNameAttribute = rootDse.get( SchemaConstants.VENDOR_NAME_AT ); |
| |
| if ( ( vendorNameAttribute != null ) && vendorNameAttribute.size() == 1 ) |
| { |
| return DEFAULT_APACHEDS_VENDOR_NAME.equalsIgnoreCase( vendorNameAttribute.getString() ); |
| } |
| } |
| |
| return false; |
| } |
| |
| |
| /** |
| * Load all the schemas. |
| * |
| * @throws LdapException If one schema can't be loaded |
| */ |
| private void loadSchemas() throws LdapException |
| { |
| if ( LOG.isDebugEnabled() ) |
| { |
| LOG.debug( I18n.msg( I18n.MSG_04160_INITIALIZING_SCHEMAS ) ); |
| } |
| |
| // Load all the elements from the SubschemaSubentry |
| Entry subschemaSubentry = connection.lookup( subschemaSubentryDn, |
| SchemaConstants.ATTRIBUTE_TYPES_AT, |
| SchemaConstants.COMPARATORS_AT, |
| SchemaConstants.DIT_CONTENT_RULES_AT, |
| SchemaConstants.DIT_STRUCTURE_RULES_AT, |
| SchemaConstants.LDAP_SYNTAXES_AT, |
| SchemaConstants.MATCHING_RULES_AT, |
| SchemaConstants.MATCHING_RULE_USE_AT, |
| SchemaConstants.NAME_FORMS_AT, |
| SchemaConstants.NORMALIZERS_AT, |
| SchemaConstants.OBJECT_CLASSES_AT, |
| SchemaConstants.SYNTAX_CHECKERS_AT |
| ); |
| |
| // Load all the AT |
| Attribute attributeTypes = subschemaSubentry.get( SchemaConstants.ATTRIBUTE_TYPES_AT ); |
| loadAttributeTypes( attributeTypes ); |
| |
| // Load all the C |
| Attribute comparators = subschemaSubentry.get( SchemaConstants.COMPARATORS_AT ); |
| loadComparators( comparators ); |
| |
| // Load all the DCR |
| Attribute ditContentRules = subschemaSubentry.get( SchemaConstants.DIT_CONTENT_RULES_AT ); |
| loadDitContentRules( ditContentRules ); |
| |
| // Load all the DSR |
| Attribute ditStructureRules = subschemaSubentry.get( SchemaConstants.DIT_STRUCTURE_RULES_AT ); |
| loadDitStructureRules( ditStructureRules ); |
| |
| // Load all the LS |
| Attribute ldapSytaxes = subschemaSubentry.get( SchemaConstants.LDAP_SYNTAXES_AT ); |
| loadLdapSyntaxes( ldapSytaxes ); |
| |
| // Load all the MR |
| Attribute matchingRules = subschemaSubentry.get( SchemaConstants.MATCHING_RULES_AT ); |
| loadMatchingRules( matchingRules ); |
| |
| // Load all the MRU |
| Attribute matchingRuleUse = subschemaSubentry.get( SchemaConstants.MATCHING_RULE_USE_AT ); |
| loadMatchingRuleUses( matchingRuleUse ); |
| |
| // Load all the N |
| Attribute normalizers = subschemaSubentry.get( SchemaConstants.NORMALIZERS_AT ); |
| loadNormalizers( normalizers ); |
| |
| // Load all the NF |
| Attribute nameForms = subschemaSubentry.get( SchemaConstants.NAME_FORMS_AT ); |
| loadNameForms( nameForms ); |
| |
| // Load all the OC |
| Attribute objectClasses = subschemaSubentry.get( SchemaConstants.OBJECT_CLASSES_AT ); |
| loadObjectClasses( objectClasses ); |
| |
| // Load all the SC |
| Attribute syntaxCheckers = subschemaSubentry.get( SchemaConstants.SYNTAX_CHECKERS_AT ); |
| loadSyntaxCheckers( syntaxCheckers ); |
| } |
| |
| |
| private void loadAttributeTypes( Attribute attributeTypes ) throws LdapException |
| { |
| if ( attributeTypes == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : attributeTypes ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| AttributeType attributeType = AT_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( attributeType ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadComparators( Attribute comparators ) throws LdapException |
| { |
| if ( comparators == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : comparators ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| LdapComparatorDescription comparator = C_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( comparator ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadDitContentRules( Attribute ditContentRules ) throws LdapException |
| { |
| if ( ditContentRules == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : ditContentRules ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| DitContentRule ditContentRule = DCR_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( ditContentRule ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadDitStructureRules( Attribute ditStructureRules ) throws LdapException |
| { |
| if ( ditStructureRules == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : ditStructureRules ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| DitStructureRule ditStructureRule = DSR_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( ditStructureRule ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadLdapSyntaxes( Attribute ldapSyntaxes ) throws LdapException |
| { |
| if ( ldapSyntaxes == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : ldapSyntaxes ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| LdapSyntax ldapSyntax = LS_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( ldapSyntax ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadMatchingRules( Attribute matchingRules ) throws LdapException |
| { |
| if ( matchingRules == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : matchingRules ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| MatchingRule matchingRule = MR_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( matchingRule ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadMatchingRuleUses( Attribute matchingRuleUses ) throws LdapException |
| { |
| if ( matchingRuleUses == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : matchingRuleUses ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| MatchingRuleUse matchingRuleUse = MRU_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( matchingRuleUse ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadNameForms( Attribute nameForms ) throws LdapException |
| { |
| if ( nameForms == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : nameForms ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| NameForm nameForm = NF_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( nameForm ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadNormalizers( Attribute normalizers ) throws LdapException |
| { |
| if ( normalizers == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : normalizers ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| NormalizerDescription normalizer = N_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( normalizer ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadObjectClasses( Attribute objectClasses ) throws LdapException |
| { |
| if ( objectClasses == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : objectClasses ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| ObjectClass objectClass = OC_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( objectClass ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| private void loadSyntaxCheckers( Attribute syntaxCheckers ) throws LdapException |
| { |
| if ( syntaxCheckers == null ) |
| { |
| return; |
| } |
| |
| for ( Value value : syntaxCheckers ) |
| { |
| String desc = value.getString(); |
| |
| try |
| { |
| SyntaxCheckerDescription syntaxChecker = SC_DESCR_SCHEMA_PARSER.parse( desc ); |
| |
| updateSchemas( syntaxChecker ); |
| } |
| catch ( ParseException pe ) |
| { |
| throw new LdapException( pe ); |
| } |
| } |
| } |
| |
| |
| protected void updateSchemas( SchemaObject schemaObject ) |
| { |
| String schemaName = schemaObject.getSchemaName(); |
| Schema schema; |
| |
| if ( Strings.isEmpty( schemaName ) || "null".equals( schemaName ) ) |
| { |
| schemaName = "default"; |
| schema = schemaMap.get( schemaName ); |
| } |
| else |
| { |
| schema = schemaMap.get( schemaName ); |
| } |
| |
| if ( schema == null ) |
| { |
| schema = new DefaultSchema( this, schemaName ); |
| |
| schemaMap.put( schemaName, schema ); |
| } |
| |
| schema.getContent().add( new SchemaObjectWrapper( schemaObject ) ); |
| |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadAttributeTypes( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> attributeTypeEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return attributeTypeEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof AttributeType ) |
| { |
| AttributeType attributeType = ( AttributeType ) schemaObject; |
| |
| Entry attributeTypeEntry = factory.convert( attributeType, schema, null ); |
| |
| attributeTypeEntries.add( attributeTypeEntry ); |
| } |
| } |
| } |
| |
| return attributeTypeEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadComparators( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> comparatorEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return comparatorEntries; |
| } |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof LdapComparatorDescription ) |
| { |
| LdapComparatorDescription ldapComparatorDescription = ( LdapComparatorDescription ) schemaObject; |
| Entry lcEntry = getEntry( ldapComparatorDescription ); |
| |
| comparatorEntries.add( lcEntry ); |
| } |
| } |
| } |
| |
| return comparatorEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadDitContentRules( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> ditContentRuleEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return ditContentRuleEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof DitContentRule ) |
| { |
| DitContentRule ditContentRule = ( DitContentRule ) schemaObject; |
| |
| Entry ditContentRuleEntry = factory.convert( ditContentRule, schema, null ); |
| |
| ditContentRuleEntries.add( ditContentRuleEntry ); |
| } |
| } |
| } |
| |
| return ditContentRuleEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadDitStructureRules( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> ditStructureRuleEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return ditStructureRuleEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof DitStructureRule ) |
| { |
| DitStructureRule ditStructureRule = ( DitStructureRule ) schemaObject; |
| |
| Entry ditStructureRuleEntry = factory.convert( ditStructureRule, schema, null ); |
| |
| ditStructureRuleEntries.add( ditStructureRuleEntry ); |
| } |
| } |
| } |
| |
| return ditStructureRuleEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadMatchingRuleUses( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> matchingRuleUseEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return matchingRuleUseEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof MatchingRuleUse ) |
| { |
| MatchingRuleUse matchingRuleUse = ( MatchingRuleUse ) schemaObject; |
| |
| Entry matchingRuleUseEntry = factory.convert( matchingRuleUse, schema, null ); |
| |
| matchingRuleUseEntries.add( matchingRuleUseEntry ); |
| } |
| } |
| } |
| |
| return matchingRuleUseEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadMatchingRules( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> matchingRuleEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return matchingRuleEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof MatchingRule ) |
| { |
| MatchingRule matchingRule = ( MatchingRule ) schemaObject; |
| |
| Entry matchingRuleEntry = factory.convert( matchingRule, schema, null ); |
| |
| matchingRuleEntries.add( matchingRuleEntry ); |
| } |
| } |
| } |
| |
| return matchingRuleEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadNameForms( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> nameFormEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return nameFormEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof NameForm ) |
| { |
| NameForm nameForm = ( NameForm ) schemaObject; |
| |
| Entry nameFormEntry = factory.convert( nameForm, schema, null ); |
| |
| nameFormEntries.add( nameFormEntry ); |
| } |
| } |
| } |
| |
| return nameFormEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadNormalizers( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> normalizerEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return normalizerEntries; |
| } |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof NormalizerDescription ) |
| { |
| NormalizerDescription normalizerDescription = ( NormalizerDescription ) schemaObject; |
| Entry normalizerEntry = getEntry( normalizerDescription ); |
| |
| normalizerEntries.add( normalizerEntry ); |
| } |
| } |
| } |
| |
| return normalizerEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadObjectClasses( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> objectClassEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return objectClassEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof ObjectClass ) |
| { |
| ObjectClass objectClass = ( ObjectClass ) schemaObject; |
| |
| Entry objectClassEntry = factory.convert( objectClass, schema, null ); |
| |
| objectClassEntries.add( objectClassEntry ); |
| } |
| } |
| } |
| |
| return objectClassEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadSyntaxCheckers( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> syntaxCheckerEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return syntaxCheckerEntries; |
| } |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof SyntaxCheckerDescription ) |
| { |
| SyntaxCheckerDescription syntaxCheckerDescription = ( SyntaxCheckerDescription ) schemaObject; |
| Entry syntaxCheckerEntry = getEntry( syntaxCheckerDescription ); |
| |
| syntaxCheckerEntries.add( syntaxCheckerEntry ); |
| } |
| } |
| } |
| |
| return syntaxCheckerEntries; |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public List<Entry> loadSyntaxes( Schema... schemas ) throws LdapException, IOException |
| { |
| List<Entry> syntaxEntries = new ArrayList<>(); |
| |
| if ( schemas == null ) |
| { |
| return syntaxEntries; |
| } |
| |
| AttributesFactory factory = new AttributesFactory(); |
| |
| for ( Schema schema : schemas ) |
| { |
| Set<SchemaObjectWrapper> schemaObjectWrappers = schema.getContent(); |
| |
| for ( SchemaObjectWrapper schemaObjectWrapper : schemaObjectWrappers ) |
| { |
| SchemaObject schemaObject = schemaObjectWrapper.get(); |
| |
| if ( schemaObject instanceof LdapSyntax ) |
| { |
| LdapSyntax ldapSyntax = ( LdapSyntax ) schemaObject; |
| |
| Entry ldapSyntaxEntry = factory.convert( ldapSyntax, schema, null ); |
| |
| syntaxEntries.add( ldapSyntaxEntry ); |
| } |
| } |
| } |
| |
| return syntaxEntries; |
| } |
| |
| |
| private Entry getEntry( LdapComparatorDescription comparatorDescription ) |
| { |
| Entry entry = new DefaultEntry(); |
| |
| entry.put( SchemaConstants.OBJECT_CLASS_AT, |
| SchemaConstants.TOP_OC, |
| MetaSchemaConstants.META_TOP_OC, |
| MetaSchemaConstants.META_COMPARATOR_OC ); |
| |
| entry.put( MetaSchemaConstants.M_OID_AT, comparatorDescription.getOid() ); |
| entry.put( MetaSchemaConstants.M_FQCN_AT, comparatorDescription.getFqcn() ); |
| |
| if ( comparatorDescription.getBytecode() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_BYTECODE_AT, |
| Base64.decode( comparatorDescription.getBytecode().toCharArray() ) ); |
| } |
| |
| if ( comparatorDescription.getDescription() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_DESCRIPTION_AT, comparatorDescription.getDescription() ); |
| } |
| |
| return entry; |
| } |
| |
| |
| private Entry getEntry( SyntaxCheckerDescription syntaxCheckerDescription ) |
| { |
| Entry entry = new DefaultEntry(); |
| |
| entry.put( SchemaConstants.OBJECT_CLASS_AT, |
| SchemaConstants.TOP_OC, |
| MetaSchemaConstants.META_TOP_OC, |
| MetaSchemaConstants.META_SYNTAX_CHECKER_OC ); |
| |
| entry.put( MetaSchemaConstants.M_OID_AT, syntaxCheckerDescription.getOid() ); |
| entry.put( MetaSchemaConstants.M_FQCN_AT, syntaxCheckerDescription.getFqcn() ); |
| |
| if ( syntaxCheckerDescription.getBytecode() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_BYTECODE_AT, |
| Base64.decode( syntaxCheckerDescription.getBytecode().toCharArray() ) ); |
| } |
| |
| if ( syntaxCheckerDescription.getDescription() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_DESCRIPTION_AT, syntaxCheckerDescription.getDescription() ); |
| } |
| |
| return entry; |
| } |
| |
| |
| private Entry getEntry( NormalizerDescription normalizerDescription ) |
| { |
| Entry entry = new DefaultEntry(); |
| |
| entry.put( SchemaConstants.OBJECT_CLASS_AT, |
| SchemaConstants.TOP_OC, |
| MetaSchemaConstants.META_TOP_OC, |
| MetaSchemaConstants.META_NORMALIZER_OC ); |
| |
| entry.put( MetaSchemaConstants.M_OID_AT, normalizerDescription.getOid() ); |
| entry.put( MetaSchemaConstants.M_FQCN_AT, normalizerDescription.getFqcn() ); |
| |
| if ( normalizerDescription.getBytecode() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_BYTECODE_AT, |
| Base64.decode( normalizerDescription.getBytecode().toCharArray() ) ); |
| } |
| |
| if ( normalizerDescription.getDescription() != null ) |
| { |
| entry.put( MetaSchemaConstants.M_DESCRIPTION_AT, normalizerDescription.getDescription() ); |
| } |
| |
| return entry; |
| } |
| |
| |
| /** |
| * Sets the quirks mode for all the internal parsers. |
| * |
| * If enabled the parser accepts non-numeric OIDs and some |
| * special characters in descriptions. |
| * |
| * @param enabled the new quirks mode |
| */ |
| public void setQuirksMode( boolean enabled ) |
| { |
| AT_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| C_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| DCR_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| DSR_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| LS_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| MR_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| MRU_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| N_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| NF_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| OC_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| SC_DESCR_SCHEMA_PARSER.setQuirksMode( enabled ); |
| } |
| } |