/*
* 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.schemaeditor.model;
import java.util.ArrayList;
import java.util.List;
import org.apache.directory.api.ldap.model.schema.AttributeType;
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.MutableObjectClass;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.api.ldap.model.schema.registries.DefaultSchema;
/**
* This class represents a schema.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class Schema extends DefaultSchema
{
/** The project */
private Project project;
/** The AttributeType List */
private List<AttributeType> attributeTypes = new ArrayList<AttributeType>();
/** The ObjectClass List */
private List<ObjectClass> objectClasses = new ArrayList<ObjectClass>();
/** The MatchingRule List */
private List<MatchingRule> matchingRules = new ArrayList<MatchingRule>();
/** The Syntax List */
private List<LdapSyntax> syntaxes = new ArrayList<LdapSyntax>();
/**
* Creates a new instance of Schema.
*
* @param name
* the name of the schema
*/
public Schema( String name )
{
super( null, name );
}
/**
* Adds an AttributeType to the Schema.
*
* @param at
* the AttributeType
*/
public boolean addAttributeType( AttributeType at )
{
return attributeTypes.add( at );
}
/**
* Adds a MatchingRule from the Schema.
*
* @param mr
* the MatchingRule
*/
public boolean addMatchingRule( MatchingRule mr )
{
return matchingRules.add( mr );
}
/**
* Adds an ObjectClass to the Schema.
*
* @param oc
* the ObjectClass
*/
public boolean addObjectClass( MutableObjectClass oc )
{
return objectClasses.add( oc );
}
/**
* Adds a Syntax from the Schema.
*
* @param syntax
* the Syntax
*/
public boolean addSyntax( LdapSyntax syntax )
{
return syntaxes.add( syntax );
}
/**
* Gets the AttributeType identified by the given id.
*
* @param id
* the name or the oid of the AttributeType
* @return
* the AttributeType identified by the given id, or null if the
* AttributeType has not been found
*/
public AttributeType getAttributeType( String id )
{
for ( AttributeType at : attributeTypes )
{
List<String> aliases = at.getNames();
if ( aliases != null )
{
for ( String alias : aliases )
{
if ( alias.equalsIgnoreCase( id ) )
{
return at;
}
}
}
if ( at.getOid().equalsIgnoreCase( id ) )
{
return at;
}
}
return null;
}
/**
* Gets all the AttributeType objects contained in the Schema.
*
* @return
* all the AttributeType objects contained in the Schema
*/
public List<AttributeType> getAttributeTypes()
{
return attributeTypes;
}
/**
* Gets the MatchingRule identified by the given id.
*
* @param id
* the name or the oid of the MatchingRule
* @return
* the MatchingRule identified by the given id, or null if the
* MatchingRule has not been found
*/
public MatchingRule getMatchingRule( String id )
{
for ( MatchingRule mr : matchingRules )
{
List<String> aliases = mr.getNames();
if ( aliases != null )
{
for ( String alias : aliases )
{
if ( alias.equalsIgnoreCase( id ) )
{
return mr;
}
}
}
if ( mr.getOid().equalsIgnoreCase( id ) )
{
return mr;
}
}
return null;
}
/**
* Gets all the MatchingRule objects contained in the Schema.
*
* @return
* all the MatchingRule objects contained in the Schema
*/
public List<MatchingRule> getMatchingRules()
{
return matchingRules;
}
/**
* Gets the project of the Schema.
*
* @return
* the project of the Schema
*/
public Project getProject()
{
return project;
}
/**
* Gets the ObjectClass identified by the given id.
*
* @param id
* the name or the oid of the ObjectClass
* @return
* the ObjectClass identified by the given id, or null if the
* ObjectClass has not been found
*/
public ObjectClass getObjectClass( String id )
{
for ( ObjectClass oc : objectClasses )
{
List<String> aliases = oc.getNames();
if ( aliases != null )
{
for ( String alias : aliases )
{
if ( alias.equalsIgnoreCase( id ) )
{
return oc;
}
}
}
if ( oc.getOid().equalsIgnoreCase( id ) )
{
return oc;
}
}
return null;
}
/**
* Gets all the ObjectClass objects contained in the Schema.
*
* @return
* all the ObjectClass objects contained in the Schema
*/
public List<ObjectClass> getObjectClasses()
{
return objectClasses;
}
/**
* Gets the Syntax identified by the given id.
*
* @param id
* the name or the oid of the Syntax
* @return
* the Syntax identified by the given id, or null if the
* Syntax has not been found
*/
public LdapSyntax getSyntax( String id )
{
for ( LdapSyntax syntax : syntaxes )
{
List<String> aliases = syntax.getNames();
if ( aliases != null )
{
for ( String alias : aliases )
{
if ( alias.equalsIgnoreCase( id ) )
{
return syntax;
}
}
}
if ( syntax.getOid().equalsIgnoreCase( id ) )
{
return syntax;
}
}
return null;
}
/**
* Gets all the Syntax objects contained in the Schema.
*
* @return
* all the Syntax objects contained in the Schema
*/
public List<LdapSyntax> getSyntaxes()
{
return syntaxes;
}
/**
* Removes an AttributeType from the Schema.
*
* @param at
* the AttributeType
*/
public boolean removeAttributeType( AttributeType at )
{
return attributeTypes.remove( at );
}
/**
* Removes a MatchingRule from the Schema.
*
* @param mr
* the MatchingRule
*/
public boolean removeMatchingRule( MatchingRule mr )
{
return matchingRules.remove( mr );
}
/**
* Removes an ObjectClass from the Schema.
*
* @param oc
* the ObjectClass
*/
public boolean removeObjectClass( ObjectClass oc )
{
return objectClasses.remove( oc );
}
/**
* Removes a Syntax from the Schema.
*
* @param syntax
* the Syntax
*/
public boolean removeSyntax( LdapSyntax syntax )
{
return syntaxes.remove( syntax );
}
/**
* Sets the name of the schema.
*
* @param schemaName
* the name of the schema
*/
public void setSchemaName( String schemaName )
{
this.name = schemaName;
}
/**
* Sets the project of the Schema.
*
* @param name
* the project of the schema
*/
public void setProject( Project project )
{
this.project = project;
}
/**
* {@inheritDoc}
*/
public String toString()
{
return getSchemaName();
}
}