/*
* 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
*
* http://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.studio.ldapbrowser.core.utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.ldapbrowser.core.model.schema.Schema;
/**
* A class exposing some common methods on the schema.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class SchemaObjectLoader
{
/** The browser connection */
private IBrowserConnection browserConnection;
/** The array of attributes names and OIDs */
private String[] attributeNamesAndOids;
/** The array of ObjectClasses and OIDs */
private String[] objectClassesAndOids;
/**
* An interface to allow the getSchemaObjectNamesAndOid() to be called for any schema object
*/
private interface SchemaAdder
{
/**
* Adds the schema object names and OIDs to the given set.
*
* @param schema the schema
* @param schemaObjectNamesList the schema object names list
* @param oidsList the OIDs name list
*/
void add( Schema schema, List<String> schemaObjectNamesList, List<String> oidsList );
}
/**
* Gets the array containing the objectClass names and OIDs.
*
* @return the array containing the objectClass names and OIDs
*/
public String[] getObjectClassNamesAndOids()
{
objectClassesAndOids = getSchemaObjectsAnddOids( objectClassesAndOids, new SchemaAdder()
{
@Override
public void add( Schema schema, List<String> objectClassNamesList, List<String> oidsList )
{
if ( schema != null )
{
for ( ObjectClass ocd : schema.getObjectClassDescriptions() )
{
// OID
if ( !oidsList.contains( ocd.getOid() ) )
{
oidsList.add( ocd.getOid() );
}
// Names
for ( String name : ocd.getNames() )
{
if ( !objectClassNamesList.contains( name ) )
{
objectClassNamesList.add( name );
}
}
}
}
}
});
return objectClassesAndOids;
}
/**
* Gets the array containing the attribute names and OIDs.
*
* @return the array containing the attribute names and OIDs
*/
public String[] getAttributeNamesAndOids()
{
attributeNamesAndOids = getSchemaObjectsAnddOids( attributeNamesAndOids, new SchemaAdder()
{
@Override
public void add( Schema schema, List<String> attributeNamesList, List<String> oidsList )
{
if ( schema != null )
{
for ( AttributeType atd : schema.getAttributeTypeDescriptions() )
{
// OID
if ( !oidsList.contains( atd.getOid() ) )
{
oidsList.add( atd.getOid() );
}
// Names
for ( String name : atd.getNames() )
{
if ( !attributeNamesList.contains( name ) )
{
attributeNamesList.add( name );
}
}
}
}
}
});
return attributeNamesAndOids;
}
/**
* Gets the array containing the schemaObjects and OIDs.
*
* @return the array containing the Schema objects and OIDs
*/
private String[] getSchemaObjectsAnddOids( String[] schemaObjects, SchemaAdder schemaAdder )
{
// Checking if the array has already be generated
if ( ( schemaObjects == null ) || ( schemaObjects.length == 0 ) )
{
List<String> schemaObjectNamesList = new ArrayList<String>();
List<String> oidsList = new ArrayList<String>();
if ( browserConnection == null )
{
// Getting all connections in the case where no connection is found
IBrowserConnection[] connections = BrowserCorePlugin.getDefault().getConnectionManager()
.getBrowserConnections();
for ( IBrowserConnection connection : connections )
{
schemaAdder.add( connection.getSchema(), schemaObjectNamesList, oidsList );
}
}
else
{
// Only adding schema object names and OIDs from the associated connection
schemaAdder.add( browserConnection.getSchema(), schemaObjectNamesList, oidsList );
}
// Also adding schemaObject names and OIDs from the default schema
schemaAdder.add( Schema.DEFAULT_SCHEMA, schemaObjectNamesList, oidsList );
// Sorting the set
Collections.sort( schemaObjectNamesList );
Collections.sort( oidsList );
schemaObjects = new String[schemaObjectNamesList.size() + oidsList.size()];
System.arraycopy( schemaObjectNamesList.toArray(), 0, schemaObjects, 0, schemaObjectNamesList
.size() );
System.arraycopy( oidsList.toArray(), 0, schemaObjects, schemaObjectNamesList
.size(), oidsList.size() );
}
return schemaObjects;
}
}