DIRAPI-341 respecting strict/relaxed settings from SchemaLoader

Signed-off-by: Ghenadii Batalski <Ghenadii.Batalski@gmail.com>
diff --git a/.gitignore b/.gitignore
index d3c4e64..da87ed5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,5 @@
 bin
 dependency-reduced-pom.xml
 META-INF
-
+# intellij idea folder
+.idea
diff --git a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
index 05d5bc5..8b90d44 100644
--- a/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
+++ b/i18n/src/main/java/org/apache/directory/api/i18n/I18n.java
@@ -957,6 +957,7 @@
     ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED( "ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED" ),
     ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA( "ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA" ),
     ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED( "ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED" ),
+    ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED("ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED"),
 
     // api-utils                        17000 - 17999
     ERR_17000_UNEXPECTED_PARSER_CONDITION( "ERR_17000_UNEXPECTED_PARSER_CONDITION" ),
diff --git a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
index 8802ed1..24bf20f 100644
--- a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
+++ b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
@@ -950,6 +950,7 @@
 ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED=SchemaManager can't be loaded: {0}
 ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA=Cannot load the unknown schema {0}
 ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED=the SchemaObject {0} cannot be added, it''s not a valid LoadableSchemaObject.
+ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED=Default SchemaLoader cannot be created {0}
 
 # api-utils     17000 - 17999
 ERR_17000_UNEXPECTED_PARSER_CONDITION=Unexpected parser condition throwing IllegalStateException.
diff --git a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
index bf9ef43..42f7633 100644
--- a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
+++ b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
@@ -129,31 +129,36 @@
     private SchemaErrorHandler errorHandler;
 
     /**
-     * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
+     * Creates a new instance of DefaultSchemaManager with LDIF based SchemaLoader,
+     * Strict schema validation
      */
     public DefaultSchemaManager()
     {
-        // Default to the the root (one schemaManager for all the entries
-        namingContext = Dn.ROOT_DSE;
-        registries = new Registries();
-        factory = new SchemaEntityFactory();
-        isRelaxed = STRICT;
-        setErrorHandler( new LoggingSchemaErrorHandler() );
-        
+        this( STRICT, jarLdifSchemaLoader().getAllSchemas() );
         try
         {
-            SchemaLoader schemaLoader = new JarLdifSchemaLoader();
-            
-            for ( Schema schema : schemaLoader.getAllSchemas() )
-            {
-                schemaMap.put( schema.getSchemaName(), schema );
-            }
-            
             loadAllEnabled();
         }
+        catch ( LdapException e )
+        {
+            LOG.error( I18n.err( I18n.ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED, e.getMessage() ) );
+            throw new RuntimeException( e.getMessage() );
+        }
+    }
+
+    /*
+      Static helper factory Create LDIF based SchemaLoader
+      needed to handle checked exceptions
+     */
+    private static SchemaLoader jarLdifSchemaLoader()
+    {
+        try
+        {
+            return new JarLdifSchemaLoader();
+        }
         catch ( LdapException | IOException e )
         {
-            LOG.error( I18n.err( I18n.ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED, e.getMessage() ) );
+            LOG.error( I18n.err( I18n.ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED, e.getMessage() ) );
             throw new RuntimeException( e.getMessage() );
         }
     }
@@ -161,45 +166,26 @@
     
     /**
      * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
+     * Strict schema validation
      * 
      * @param schemas The list of schema to load
      */
     public DefaultSchemaManager( Collection<Schema> schemas )
     {
-        // Default to the the root (one schemaManager for all the entries
-        namingContext = Dn.ROOT_DSE;
-        
-        for ( Schema schema : schemas )
-        {
-            schemaMap.put( schema.getSchemaName(), schema );
-        }
-        
-        registries = new Registries();
-        factory = new SchemaEntityFactory();
-        isRelaxed = STRICT;
-        setErrorHandler( new LoggingSchemaErrorHandler() );
+       this( STRICT, schemas );
     }
 
     
     /**
-     * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
-     * 
+     * Creates a new instance of DefaultSchemaManager with the given schemaLoader
+     *
+     * Schema validation strictness (i.e. relaxed/strict) controlled by the given schemaLoader
+     *
      * @param schemaLoader The schemaLoader containing the schemas to load
      */
     public DefaultSchemaManager( SchemaLoader schemaLoader )
     {
-        // Default to the the root (one schemaManager for all the entries
-        namingContext = Dn.ROOT_DSE;
-        
-        for ( Schema schema : schemaLoader.getAllSchemas() )
-        {
-            schemaMap.put( schema.getSchemaName(), schema );
-        }
-        
-        registries = new Registries();
-        factory = new SchemaEntityFactory();
-        isRelaxed = STRICT;
-        setErrorHandler( new LoggingSchemaErrorHandler() );
+        this( schemaLoader.isRelaxed(), schemaLoader.getAllSchemas() );
     }