{
errors.clear();
}
// Work on a cloned and relaxed registries
Registries clonedRegistries = cloneRegistries();
clonedRegistries.setRelaxed();
Set<Schema> disabledSchemas = new HashSet<Schema>();
for ( Schema schema : schemas )
{
if ( schema.getDependencies() != null )
{
for ( String dependency : schema.getDependencies() )
{
Schema dependencySchema = schemaLoader.getSchema( dependency );
if ( dependencySchema.isDisabled() )
{
disabledSchemas.add( dependencySchema );
}
}
}
schema.enable();
load( clonedRegistries, schema );
}
// Revert back the disabled schema to disabled
for ( Schema disabledSchema : disabledSchemas )
{
if ( disabledSchema.isEnabled() )
{
disabledSchema.disable();
}
}
// Build the cross references
errors = clonedRegistries.buildReferences();
// Destroy the clonedRegistry
clonedRegistries.clear();
if ( errors.isEmpty() )
{
// Ok no errors. Check the registries now
errors = clonedRegistries.checkRefInteg();
if ( errors.isEmpty() )
{
// We are golden : let's apply the schemas in the real registries
for ( Schema schema : schemas )
{
schema.enable();
load( registries, schema );
}
// Build the cross references
errors = registries.buildReferences();
registries.setStrict();
enabled = true;
}
}
// clear the cloned registries
clonedRegistries.clear();
return enabled;
}