You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2007/10/30 06:43:51 UTC
svn commit: r589966 - in /directory:
apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/
apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/
apacheds/branches/bigbang/core/src/tes...
Author: akarasulu
Date: Mon Oct 29 22:43:50 2007
New Revision: 589966
URL: http://svn.apache.org/viewvc?rev=589966&view=rev
Log:
more added to core-entry classes ...
o added instanceOf method to ServerValue
o added isAncestorOf which is needed by this to AttributeType
o added isDescendantOf which is needed by this to AttributeType
o added field in ServerAttribute to track the user provided identifier
o added entry methods to use the user provided identifier
Modified:
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerEntry.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerAttribute.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerBinaryValue.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntry.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStreamedValue.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStringValue.java
directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerValue.java
directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/AttributeTypeImpl.java
directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java
directory/apacheds/branches/bigbang/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/AbstractBootstrapProducer.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractAttributeType.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractSchemaObject.java
directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AttributeType.java
directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/schema/SchemaUtilsTest.java
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerEntry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerEntry.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerEntry.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerEntry.java Mon Oct 29 22:43:50 2007
@@ -18,8 +18,8 @@
*/
package org.apache.directory.server.core.entry;
+
import org.apache.directory.server.schema.registries.Registries;
-import org.apache.directory.shared.asn1.primitives.OID;
import org.apache.directory.shared.ldap.NotImplementedException;
import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.name.LdapDN;
@@ -155,6 +155,69 @@
}
+ public boolean addObjectClass( ObjectClass objectClass, String alias ) throws NamingException
+ {
+ throw new NotImplementedException();
+ }
+
+
+ public boolean addObjectClass( ObjectClass objectClass ) throws NamingException
+ {
+ if ( allObjectClasses.contains( objectClass ) )
+ {
+ return false;
+ }
+
+ ServerAttribute serverAttribute = serverAttributeMap.get( objectClassAT );
+ String name = objectClass.getName();
+
+ if ( name == null )
+ {
+ name = objectClass.getOid();
+ }
+
+ serverAttribute.add( name );
+ Set<ObjectClass> ancestors = addAncestors( objectClass, new HashSet<ObjectClass>() );
+ ancestors.add( objectClass );
+ // now create sets of the different kinds of objectClasses
+ for ( ObjectClass oc : ancestors )
+ {
+ switch ( oc.getType().getValue() )
+ {
+ case( ObjectClassTypeEnum.STRUCTURAL_VAL ):
+ structuralObjectClasses.add( oc );
+ break;
+ case( ObjectClassTypeEnum.AUXILIARY_VAL ):
+ auxiliaryObjectClasses.add( oc );
+ break;
+ case( ObjectClassTypeEnum.ABSTRACT_VAL ):
+ abstractObjectClasses.add( oc );
+ break;
+ default:
+ throw new IllegalStateException( "Unrecognized objectClass type value: " + oc.getType() );
+ }
+
+ // now go through all objectClassses to collect the must an may list attributes
+ Collections.addAll( mayList, oc.getMayList() );
+ Collections.addAll( mustList, oc.getMustList() );
+ }
+
+ return true;
+ }
+
+
+ public boolean hasObjectClass( ObjectClass objectClass )
+ {
+ return allObjectClasses.contains( objectClass );
+ }
+
+
+ public Set<ObjectClass> getAbstractObjectClasses()
+ {
+ return Collections.unmodifiableSet( abstractObjectClasses );
+ }
+
+
public ObjectClass getStructuralObjectClass()
{
if ( structuralObjectClasses.isEmpty() )
@@ -165,13 +228,19 @@
}
+ public Set<ObjectClass> getStructuralObjectClasses()
+ {
+ return Collections.unmodifiableSet( structuralObjectClasses );
+ }
+
+
public Set<ObjectClass> getAuxiliaryObjectClasses()
{
return Collections.unmodifiableSet( auxiliaryObjectClasses );
}
- public Set<ObjectClass> getObjectClasses()
+ public Set<ObjectClass> getAllObjectClasses()
{
return Collections.unmodifiableSet( allObjectClasses );
}
@@ -195,6 +264,12 @@
}
+ public boolean isValid( ObjectClass objectClass )
+ {
+ throw new NotImplementedException();
+ }
+
+
public ServerAttribute get( AttributeType attributeType )
{
return serverAttributeMap.get( attributeType );
@@ -212,6 +287,18 @@
}
+ public ServerAttribute put( String upId, AttributeType attributeType ) throws NamingException
+ {
+ throw new NotImplementedException();
+ }
+
+
+ public ServerAttribute put( AttributeType attributeType ) throws NamingException
+ {
+ throw new NotImplementedException();
+ }
+
+
public ServerAttribute remove( ServerAttribute serverAttribute ) throws NamingException
{
if ( serverAttribute.getType().equals( objectClassAT ) )
@@ -224,8 +311,27 @@
public ServerAttribute put( AttributeType attributeType, ServerValue<?> val ) throws NamingException
{
- ServerAttribute serverAttribute = new ServerAttribute( attributeType );
- serverAttribute.add( val );
+ ServerAttribute existing = serverAttributeMap.get( attributeType );
+
+ if ( existing != null )
+ {
+ return put( existing.getUpId(), attributeType, val );
+ }
+ else
+ {
+ String name = attributeType.getName();
+ if ( name == null )
+ {
+ name = attributeType.getOid();
+ }
+ return put( name, attributeType, val );
+ }
+ }
+
+
+ public ServerAttribute put( String upId, AttributeType attributeType, ServerValue<?> val ) throws NamingException
+ {
+ ServerAttribute serverAttribute = new ServerAttribute( upId, attributeType, val );
if ( attributeType.equals( objectClassAT ) )
{
@@ -238,8 +344,27 @@
public ServerAttribute put( AttributeType attributeType, String val ) throws NamingException
{
- ServerAttribute serverAttribute = new ServerAttribute( attributeType );
- serverAttribute.add( val );
+ ServerAttribute existing = serverAttributeMap.get( attributeType );
+
+ if ( existing != null )
+ {
+ return put( existing.getUpId(), attributeType, val );
+ }
+ else
+ {
+ String name = attributeType.getName();
+ if ( name == null )
+ {
+ name = attributeType.getOid();
+ }
+ return put( name, attributeType, val );
+ }
+ }
+
+
+ public ServerAttribute put( String upId, AttributeType attributeType, String val ) throws NamingException
+ {
+ ServerAttribute serverAttribute = new ServerAttribute( upId, attributeType, val );
if ( attributeType.equals( objectClassAT ) )
{
@@ -252,8 +377,27 @@
public ServerAttribute put( AttributeType attributeType, byte[] val ) throws NamingException
{
- ServerAttribute serverAttribute = new ServerAttribute( attributeType );
- serverAttribute.add( val );
+ ServerAttribute existing = serverAttributeMap.get( attributeType );
+
+ if ( existing != null )
+ {
+ return put( existing.getUpId(), attributeType, val );
+ }
+ else
+ {
+ String name = attributeType.getName();
+ if ( name == null )
+ {
+ name = attributeType.getOid();
+ }
+ return put( name, attributeType, val );
+ }
+ }
+
+
+ public ServerAttribute put( String upId, AttributeType attributeType, byte[] val ) throws NamingException
+ {
+ ServerAttribute serverAttribute = new ServerAttribute( upId, attributeType, val );
if ( attributeType.equals( objectClassAT ) )
{
@@ -264,15 +408,16 @@
}
- public ServerAttribute remove( OID oid ) throws NamingException
+ public ServerAttribute remove( AttributeType attributeType ) throws NamingException
{
- AttributeType attributeType = registries.getAttributeTypeRegistry().lookup( oid.toString() );
- ServerAttribute serverAttribute = serverAttributeMap.remove( attributeType );
if ( attributeType.equals( objectClassAT ) )
{
- return setObjectClassAttribute( new ServerAttribute( objectClassAT) );
+ return setObjectClassAttribute( new ServerAttribute( objectClassAT ) );
+ }
+ else
+ {
+ return serverAttributeMap.remove( attributeType );
}
- return serverAttribute;
}
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerAttribute.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerAttribute.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerAttribute.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerAttribute.java Mon Oct 29 22:43:50 2007
@@ -37,7 +37,7 @@
{
private HashSet<ServerValue<?>> values = new HashSet<ServerValue<?>>();
private AttributeType attributeType;
-
+ private String upId;
// maybe have some additional convenience constructors which take
// an initial value as a string or a byte[]
@@ -46,6 +46,155 @@
public ServerAttribute( AttributeType attributeType )
{
this.attributeType = attributeType;
+ setUpId( null, attributeType );
+ }
+
+
+ public ServerAttribute( String upId, AttributeType attributeType )
+ {
+ this.attributeType = attributeType;
+ setUpId( upId, attributeType );
+ }
+
+
+ /**
+ * Doc me more!
+ *
+ * If the value does not correspond to the same attributeType, then it's
+ * wrapped value is copied into a new ServerValue which uses the specified
+ * attributeType.
+ *
+ * @param attributeType
+ * @param val
+ * @throws NamingException
+ */
+ public ServerAttribute( AttributeType attributeType, ServerValue<?> val ) throws NamingException
+ {
+ this( null, attributeType, val );
+ }
+
+
+ /**
+ * Doc me more!
+ *
+ * If the value does not correspond to the same attributeType, then it's
+ * wrapped value is copied into a new ServerValue which uses the specified
+ * attributeType.
+ *
+ * @param upId
+ * @param attributeType
+ * @param val
+ * @throws NamingException
+ */
+ public ServerAttribute( String upId, AttributeType attributeType, ServerValue<?> val ) throws NamingException
+ {
+ this.attributeType = attributeType;
+ if ( val == null )
+ {
+ if ( attributeType.getSyntax().isHumanReadable() )
+ {
+ values.add( new ServerStringValue( attributeType ) );
+ }
+ else
+ {
+ values.add( new ServerBinaryValue( attributeType ) );
+ }
+ }
+ else
+ {
+ if ( attributeType.equals( val.getAttributeType() ) )
+ {
+ values.add( val );
+ }
+ else if ( val instanceof ServerStringValue )
+ {
+ values.add( new ServerStringValue( attributeType, ( String ) val.get() ) );
+ }
+ else if ( val instanceof ServerBinaryValue )
+ {
+ values.add( new ServerBinaryValue( attributeType, ( byte[] ) val.get() ) );
+ }
+ else
+ {
+ throw new IllegalStateException( "Unknown value type: " + val.getClass().getName() );
+ }
+
+ values.add( val );
+ }
+ setUpId( upId, attributeType );
+ }
+
+
+ public ServerAttribute( AttributeType attributeType, String val ) throws NamingException
+ {
+ this( null, attributeType, val );
+ }
+
+
+ public ServerAttribute( String upId, AttributeType attributeType, String val ) throws NamingException
+ {
+ this.attributeType = attributeType;
+ if ( val == null )
+ {
+ if ( attributeType.getSyntax().isHumanReadable() )
+ {
+ values.add( new ServerStringValue( attributeType ) );
+ }
+ else
+ {
+ values.add( new ServerBinaryValue( attributeType ) );
+ }
+ }
+ else
+ {
+ values.add( new ServerStringValue( attributeType, val ) );
+ }
+ setUpId( upId, attributeType );
+ }
+
+
+ public ServerAttribute( AttributeType attributeType, byte[] val ) throws NamingException
+ {
+ this( null, attributeType, val );
+ }
+
+
+ public ServerAttribute( String upId, AttributeType attributeType, byte[] val ) throws NamingException
+ {
+ this.attributeType = attributeType;
+ if ( val == null )
+ {
+ if ( attributeType.getSyntax().isHumanReadable() )
+ {
+ values.add( new ServerStringValue( attributeType ) );
+ }
+ else
+ {
+ values.add( new ServerBinaryValue( attributeType ) );
+ }
+ }
+ else
+ {
+ values.add( new ServerBinaryValue( attributeType, val ) );
+ }
+ setUpId( upId, attributeType );
+ }
+
+
+ private void setUpId( String upId, AttributeType attributeType )
+ {
+ if ( upId == null )
+ {
+ String name = attributeType.getName();
+ if ( name == null )
+ {
+ this.upId = attributeType.getOid();
+ }
+ else
+ {
+ this.upId = name;
+ }
+ }
}
@@ -57,6 +206,23 @@
public AttributeType getType()
{
return attributeType;
+ }
+
+
+ /**
+ * Get's the user provided identifier for this entry. This is the value
+ * that will be used as the identifier for the attribute within the
+ * entry. If this is a commonName attribute for example and the user
+ * provides "COMMONname" instead when adding the entry then this is
+ * the format the user will have that entry returned by the directory
+ * server. To do so we store this value as it was given and track it
+ * in the attribute using this property.
+ *
+ * @return the user provided identifier for this attribute
+ */
+ public String getUpId()
+ {
+ return upId;
}
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerBinaryValue.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerBinaryValue.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerBinaryValue.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerBinaryValue.java Mon Oct 29 22:43:50 2007
@@ -176,7 +176,6 @@
* change. Syntax checks only result on the first check, and when the wrapped
* value changes.
*
- * @todo can go into a base class
* @see ServerValue#isValid()
*/
public final boolean isValid() throws NamingException
@@ -232,6 +231,32 @@
}
+ public AttributeType getAttributeType()
+ {
+ return attributeType;
+ }
+
+
+ /**
+ * @see ServerValue#instanceOf(AttributeType)
+ */
+ public boolean instanceOf( AttributeType attributeType ) throws NamingException
+ {
+ if ( this.attributeType.equals( attributeType ) )
+ {
+ return true;
+ }
+
+ //noinspection RedundantIfStatement
+ if ( this.attributeType.isDescentantOf( attributeType ) )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+
// -----------------------------------------------------------------------
// Object Methods
// -----------------------------------------------------------------------
@@ -331,7 +356,6 @@
* available: SUBSTR, and ORDERING. If a matchingRule cannot be found null is
* returned.
*
- * @todo can go into a base class
* @return a matchingRule or null if one cannot be found for the attributeType
* @throws NamingException if resolution of schema entities fail
*/
@@ -357,7 +381,6 @@
* Gets a normalizer using getMatchingRule() to resolve the matchingRule
* that the normalizer is extracted from.
*
- * @todo can go into a base class
* @return a normalizer associated with the attributeType or null if one cannot be found
* @throws NamingException if resolution of schema entities fail
*/
@@ -378,7 +401,6 @@
* Gets a comparator using getMatchingRule() to resolve the matching
* that the comparator is extracted from.
*
- * @todo can go into a base class
* @return a comparator associated with the attributeType or null if one cannot be found
* @throws NamingException if resolution of schema entities fail
*/
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntry.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntry.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntry.java Mon Oct 29 22:43:50 2007
@@ -19,7 +19,6 @@
package org.apache.directory.server.core.entry;
-import org.apache.directory.shared.asn1.primitives.OID;
import org.apache.directory.shared.ldap.entry.Entry;
import org.apache.directory.shared.ldap.schema.AttributeType;
import org.apache.directory.shared.ldap.schema.ObjectClass;
@@ -42,6 +41,41 @@
/**
+ * Adds an objectClass to the objectClass attribute of this ServerEntry using
+ * a specific alias name with the case provided by the user.
+ *
+ * @param objectClass the objectClass to add to this ServerEntry
+ * @param alias the optional user provided alias to use
+ * @return true if the objectClass is added, false otherwise
+ * @throws NamingException if there are problems resolving entities while
+ * adding the objectClass and its ancestors
+ */
+ boolean addObjectClass( ObjectClass objectClass, String alias ) throws NamingException;
+
+
+ /**
+ * Adds an objectClass to the objectClass attribute of this ServerEntry using
+ * the first alias it can find. If no alias name exists the numeric OID of the
+ * objectClass is added as a value to the objectClass attribute.
+ *
+ * @param objectClass the objectClass to add to this ServerEntry
+ * @return true if the objectClass is added, false otherwise
+ * @throws NamingException if there are problems resolving entities while
+ * adding the objectClass and its ancestors
+ */
+ boolean addObjectClass( ObjectClass objectClass ) throws NamingException;
+
+
+ /**
+ * Checks to see if this entry is of the objectClass.
+ *
+ * @param objectClass the objectClass to check for in this ServerEntry
+ * @return true if this entry is of the objectClass, false otherwise
+ */
+ boolean hasObjectClass( ObjectClass objectClass );
+
+
+ /**
* Gets the first structural objectClass that it can find within the entry.
* If the entry is inconsistent and contains no objectClass attribute then
* null is returned. If the entry is inconsistent and contains more than
@@ -54,6 +88,18 @@
/**
+ * Gets all the structural objectClasses that are found within the entry
+ * even though such a condition is considered invalid. Only one structural
+ * objectClass can be present within a valid entry. The entry can also be
+ * inconsistent by having no structural objectClasses then an empty set is
+ * returned.
+ *
+ * @return all the structural objectClasses found in this entry
+ */
+ Set<ObjectClass> getStructuralObjectClasses();
+
+
+ /**
* Gets all the auxiliary objectClasses that it can find within the entry.
* If the entry is inconsistent and contains no objectClass attribute then
* the empty set is returned.
@@ -64,13 +110,23 @@
/**
+ * Gets all the abstract objectClasses that it can find within the entry.
+ * If the entry is inconsistent and contains no objectClass attribute then
+ * the empty set is returned.
+ *
+ * @return the set of abstract objectClasses found in this entry
+ */
+ Set<ObjectClass> getAbstractObjectClasses();
+
+
+ /**
* Gets the objectClasses associated with this entry. If there is no
* objectClass attribute contained within this entry then an empty set
* is returned.
*
* @return the objectClasses which govern the structure of this entry
*/
- Set<ObjectClass> getObjectClasses();
+ Set<ObjectClass> getAllObjectClasses();
/**
@@ -101,53 +157,92 @@
boolean isValid();
+ /**
+ * Check performed to determine entry consistency according to the schema
+ * requirements of a particular objectClass. The entry must be of that objectClass
+ * to return true: meaning if the entry's objectClass attribute does not contain
+ * the objectClass argument, then false should be returned.
+ *
+ * @param objectClass the objectClass to use while checking for validity
+ * @return true if the entry, it's attributes and their values are consistent
+ * with the objectClass
+ */
+ boolean isValid( ObjectClass objectClass );
+
+
// -----------------------------------------------------------------------
// Container (get/put/remove) Methods
// -----------------------------------------------------------------------
/**
- * Returns the attribute with the specified OID. The return value
- * is <code>null</code> if no match is found.
+ * Returns the attribute with the specified attributeType. The return
+ * value is <code>null</code> if no match is found.
*
* @param attributeType the type of the attribute
- * @return the attribute with the specified OID
+ * @return the attribute of the specified type
*/
ServerAttribute get( AttributeType attributeType );
/**
- * Places a non-null attribute in the attribute collection. If there is
- * already an attribute with the same OID as the new attribute, the old one
- * is removed from the collection and is returned by this method. If there
- * was no attribute with the same OID the return value is <code>null</code>.
- *
- * @param attribute the attribute to be put
- * @return the old attribute with the same OID, if exists; otherwise
- * <code>null</code>
+ * Places a non-null attribute into this ServerEntry. If there an attribute
+ * of the same exists, the existing one is removed from the set and is
+ * returned by this method. If there was no attribute of the same type the
+ * return value is <code>null</code>.
+ *
+ * @param attribute the attribute to be put into this ServerEntry
+ * @return the existing attribute of the same type if it exists; otherwise
+ * <code>null</code>
*/
ServerAttribute put( ServerAttribute attribute ) throws NamingException;
+ // no value put'ters
+
+ ServerAttribute put( String upId, AttributeType attributeType ) throws NamingException;
+
+ ServerAttribute put( AttributeType attributeType ) throws NamingException;
+
/**
- * Places a new attribute with the supplied OID and value into the attribute
- * collection. If there is already an attribute with the same OID, the old
- * one is removed from the collection and is returned by this method. If
- * there was no attribute with the same OID the return value is
- * <code>null</code>.
+ * Places a new attribute of the supplied type and value into the attribute
+ * collection. The identifier used for the attribute is the first alias found
+ * from the attributeType and if no aliases are available then the
+ * attributeType's numric OID is used instead. If there is already an attribute
+ * of the same type, the old attribute is removed from the collection and is
+ * returned by this method. The user provided identifier of the existing
+ * attribute will be used for the new one. If there was no attribute with the same
+ * type the return value is <code>null</code>.
*
- * This method provides a mechanism to put an attribute with a
- * <code>null</code> value: the value of <code>obj</code> may be
- * <code>null</code>.
+ * This method provides a mechanism to put an attribute with a <code>null</code>
+ * value: the value of <code>val</code> may be <code>null</code>.
*
* @param attributeType the type of the new attribute to be put
* @param val the value of the new attribute to be put
- * @return the old attribute with the same OID, if exists; otherwise
+ * @return the old attribute of the same type, if exists; otherwise
* <code>null</code>
- * @throws NamingException if there are failures
+ * @throws NamingException if there are resolution issues
*/
ServerAttribute put( AttributeType attributeType, ServerValue<?> val ) throws NamingException;
+ /**
+ * Places a new attribute with the supplied attributeType and value into this
+ * ServerEntry. If there already exists attribute of the same type, the existing
+ * one is removed from this ServerEntry and is returned. If there was no existing
+ * attribute the <code>null</code> is returned instead.
+ *
+ * This method provides a mechanism to put an attribute with a <code>null</code>
+ * value: the value of <code>obj</code> may be <code>null</code>.
+ *
+ * @param upId the user provided identifier for the new attribute
+ * @param attributeType the type of the new attribute to be put
+ * @param val the value of the new attribute to be put
+ * @return the old attribute of the same type, if exists; otherwise
+ * <code>null</code>
+ * @throws NamingException if there are failures
+ */
+ ServerAttribute put( String upId, AttributeType attributeType, ServerValue<?> val ) throws NamingException;
+
/**
* Places a new attribute with the supplied OID and value into the attribute
@@ -169,6 +264,9 @@
ServerAttribute put( AttributeType attributeType, String val ) throws NamingException;
+ ServerAttribute put( String upId, AttributeType attributeType, String val ) throws NamingException;
+
+
/**
* Places a new attribute with the supplied OID and value into the attribute
* collection. If there is already an attribute with the same OID, the old
@@ -189,14 +287,17 @@
ServerAttribute put( AttributeType attributeType, byte[] val ) throws NamingException;
+ ServerAttribute put( String upId, AttributeType attributeType, byte[] val ) throws NamingException;
+
+
/**
* Removes the attribute with the specified alias. The removed attribute is
* returned by this method. If there is no attribute with the specified OID,
* the return value is <code>null</code>.
*
- * @param oid the numeric object identifier of the attribute to be removed
+ * @param attributeType the type of the attribute to be removed
* @return the removed attribute, if exists; otherwise <code>null</code>
* @throws NamingException if there are failures
*/
- ServerAttribute remove( OID oid ) throws NamingException;
+ ServerAttribute remove( AttributeType attributeType ) throws NamingException;
}
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStreamedValue.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStreamedValue.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStreamedValue.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStreamedValue.java Mon Oct 29 22:43:50 2007
@@ -223,4 +223,30 @@
{
throw new NotImplementedException();
}
+
+
+ public AttributeType getAttributeType()
+ {
+ return attributeType;
+ }
+
+
+ /**
+ * @see ServerValue#instanceOf(AttributeType)
+ */
+ public boolean instanceOf( AttributeType attributeType ) throws NamingException
+ {
+ if ( this.attributeType.equals( attributeType ) )
+ {
+ return true;
+ }
+
+ //noinspection RedundantIfStatement
+ if ( this.attributeType.isDescentantOf( attributeType ) )
+ {
+ return true;
+ }
+
+ return false;
+ }
}
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStringValue.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStringValue.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStringValue.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerStringValue.java Mon Oct 29 22:43:50 2007
@@ -176,7 +176,6 @@
* change. Syntax checks only result on the first check, and when the wrapped
* value changes.
*
- * @todo can go into a base class
* @see ServerValue#isValid()
*/
public final boolean isValid() throws NamingException
@@ -231,6 +230,32 @@
}
+ public AttributeType getAttributeType()
+ {
+ return attributeType;
+ }
+
+
+ /**
+ * @see ServerValue#instanceOf(AttributeType)
+ */
+ public boolean instanceOf( AttributeType attributeType ) throws NamingException
+ {
+ if ( this.attributeType.equals( attributeType ) )
+ {
+ return true;
+ }
+
+ //noinspection RedundantIfStatement
+ if ( this.attributeType.isDescentantOf( attributeType ) )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+
// -----------------------------------------------------------------------
// Object Methods
// -----------------------------------------------------------------------
@@ -327,7 +352,6 @@
* available: SUBSTR, and ORDERING. If a matchingRule cannot be found null is
* returned.
*
- * @todo can go into a base class
* @return a matchingRule or null if one cannot be found for the attributeType
* @throws NamingException if resolution of schema entities fail
*/
@@ -353,7 +377,6 @@
* Gets a normalizer using getMatchingRule() to resolve the matchingRule
* that the normalizer is extracted from.
*
- * @todo can go into a base class
* @return a normalizer associated with the attributeType or null if one cannot be found
* @throws NamingException if resolution of schema entities fail
*/
@@ -374,7 +397,6 @@
* Gets a comparator using getMatchingRule() to resolve the matching
* that the comparator is extracted from.
*
- * @todo can go into a base class
* @return a comparator associated with the attributeType or null if one cannot be found
* @throws NamingException if resolution of schema entities fail
*/
Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerValue.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerValue.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerValue.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerValue.java Mon Oct 29 22:43:50 2007
@@ -20,6 +20,7 @@
import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.schema.AttributeType;
import javax.naming.NamingException;
@@ -87,4 +88,10 @@
* if this ServerValue is less than the supplied ServerValue.
*/
int compareTo( ServerValue<T> value );
+
+
+ AttributeType getAttributeType();
+
+
+ boolean instanceOf( AttributeType attributeType ) throws NamingException;
}
Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/AttributeTypeImpl.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/AttributeTypeImpl.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/AttributeTypeImpl.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/AttributeTypeImpl.java Mon Oct 29 22:43:50 2007
@@ -23,7 +23,6 @@
import javax.naming.NamingException;
import org.apache.directory.server.schema.registries.Registries;
-import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
import org.apache.directory.shared.ldap.exception.LdapNamingException;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
import org.apache.directory.shared.ldap.schema.AbstractAttributeType;
@@ -152,7 +151,7 @@
return registries.getMatchingRuleRegistry().lookup( substrOid );
}
-
+
/**
* Recursively gets the substring matchingRule if one exists within the attribute heirarchy.
Modified: directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java (original)
+++ directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java Mon Oct 29 22:43:50 2007
@@ -183,6 +183,18 @@
}
+ public boolean isAncestorOf( AttributeType descendant ) throws NamingException
+ {
+ return false;
+ }
+
+
+ public boolean isDescentantOf( AttributeType ancestor ) throws NamingException
+ {
+ return false;
+ }
+
+
public boolean isObsolete()
{
return false;
@@ -444,6 +456,18 @@
public MatchingRule getSubstr() throws NamingException
{
return null;
+ }
+
+
+ public boolean isAncestorOf( AttributeType descendant ) throws NamingException
+ {
+ return false;
+ }
+
+
+ public boolean isDescentantOf( AttributeType ancestor ) throws NamingException
+ {
+ return false;
}
Modified: directory/apacheds/branches/bigbang/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/AbstractBootstrapProducer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/AbstractBootstrapProducer.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/AbstractBootstrapProducer.java (original)
+++ directory/apacheds/branches/bigbang/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/AbstractBootstrapProducer.java Mon Oct 29 22:43:50 2007
@@ -24,7 +24,6 @@
import javax.naming.NamingException;
-import org.apache.directory.server.schema.bootstrap.ProducerTypeEnum;
import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
import org.apache.directory.server.schema.registries.ComparatorRegistry;
import org.apache.directory.server.schema.registries.MatchingRuleRegistry;
@@ -312,6 +311,18 @@
}
return null;
+ }
+
+
+ public boolean isAncestorOf( AttributeType attributeType ) throws NamingException
+ {
+ return false;
+ }
+
+
+ public boolean isDescentantOf( AttributeType attributeType ) throws NamingException
+ {
+ return false;
}
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java Mon Oct 29 22:43:50 2007
@@ -35,6 +35,7 @@
*/
public class BinaryValue implements Value<byte[]>
{
+ @SuppressWarnings ( { "unchecked" } )
private static final Comparator<byte[]> BYTE_ARRAY_COMPARATOR = new ByteArrayComparator();
/** the wrapped binary value */
private byte[] wrapped;
@@ -85,9 +86,16 @@
}
- public void set( byte[] wrapped )
+ /**
+ * Sets this value's wrapped value to a copy of the src array.
+ *
+ * @param src the source byte array to use as the wrapped value
+ */
+ public void set( byte[] src )
{
- this.wrapped = wrapped;
+ byte[] dest = new byte[ src.length];
+ System.arraycopy( src, 0, dest, 0, dest.length );
+ this.wrapped = dest;
}
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractAttributeType.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractAttributeType.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractAttributeType.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractAttributeType.java Mon Oct 29 22:43:50 2007
@@ -20,6 +20,7 @@
package org.apache.directory.shared.ldap.schema;
+import javax.naming.NamingException;
import java.io.Serializable;
@@ -121,6 +122,7 @@
// M U T A T O R S
// ------------------------------------------------------------------------
+
/**
* Sets whether or not an attribute of this AttributeType single valued or
* multi-valued.
@@ -181,5 +183,61 @@
protected void setLength( int length )
{
this.length = length;
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Additional Methods
+ // -----------------------------------------------------------------------
+
+
+ public boolean isAncestorOf( AttributeType attributeType ) throws NamingException
+ {
+ //noinspection SimplifiableIfStatement
+ if ( attributeType == null || equals( attributeType ) )
+ {
+ return false;
+ }
+
+ return isAncestorOrEqual( this, attributeType );
+ }
+
+
+ public boolean isDescentantOf( AttributeType attributeType ) throws NamingException
+ {
+ //noinspection SimplifiableIfStatement
+ if ( attributeType == null || equals( attributeType ) )
+ {
+ return false;
+ }
+
+ return isAncestorOrEqual( attributeType, this );
+ }
+
+
+ /**
+ * Recursive method which checks to see if a descendant is really an ancestor or if the two
+ * are equal.
+ *
+ * @param ancestor the possible ancestor of the descendant
+ * @param descendant the possible descendant of the ancestor
+ * @return true if the ancestor equals the descendant or if the descendant is really
+ * a subtype of the ancestor. otherwise false
+ * @throws NamingException if there are issues with superior attribute resolution
+ */
+ private boolean isAncestorOrEqual( AttributeType ancestor, AttributeType descendant ) throws NamingException
+ {
+ if ( ancestor == null || descendant == null )
+ {
+ return false;
+ }
+
+ //noinspection SimplifiableIfStatement
+ if ( ancestor.equals( descendant ) )
+ {
+ return true;
+ }
+
+ return isAncestorOrEqual( ancestor, descendant.getSuperior() );
}
}
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractSchemaObject.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractSchemaObject.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractSchemaObject.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AbstractSchemaObject.java Mon Oct 29 22:43:50 2007
@@ -35,7 +35,7 @@
protected final String oid;
/** whether or not this SchemaObject is active */
- protected boolean isObsolete = false;
+ protected boolean isObsolete;
/** a human readable identifiers for this SchemaObject */
protected String[] names = ArrayUtils.EMPTY_STRING_ARRAY;
@@ -275,6 +275,7 @@
// Object overloads
// ------------------------------------------------------------------------
+
/**
* Based on the hashCode of the oid property.
*
@@ -301,6 +302,7 @@
return true;
}
+ //noinspection SimplifiableIfStatement
if ( obj instanceof SchemaObject )
{
return oid.equals( ( ( SchemaObject ) obj ).getOid() );
Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AttributeType.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AttributeType.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AttributeType.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/schema/AttributeType.java Mon Oct 29 22:43:50 2007
@@ -220,4 +220,26 @@
* if there is a failure to resolve the matchingRule
*/
MatchingRule getSubstr() throws NamingException;
+
+
+ /**
+ * Checks to see if this AttributeType is the ancestor of another
+ * attributeType.
+ *
+ * @param descendant the perspective descendant to check
+ * @return true if the descendant is truely a derived from this AttributeType
+ * @throws NamingException if there are problems resolving superior types
+ */
+ boolean isAncestorOf( AttributeType descendant ) throws NamingException;
+
+
+ /**
+ * Checks to see if this AttributeType is the descendant of another
+ * attributeType.
+ *
+ * @param ancestor the perspective ancestor to check
+ * @return true if this AttributeType truely descends from the ancestor
+ * @throws NamingException if there are problems resolving superior types
+ */
+ boolean isDescentantOf( AttributeType ancestor ) throws NamingException;
}
Modified: directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/schema/SchemaUtilsTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/schema/SchemaUtilsTest.java?rev=589966&r1=589965&r2=589966&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/schema/SchemaUtilsTest.java (original)
+++ directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/schema/SchemaUtilsTest.java Mon Oct 29 22:43:50 2007
@@ -26,17 +26,6 @@
import junit.framework.TestCase;
import org.apache.directory.shared.ldap.NotImplementedException;
-import org.apache.directory.shared.ldap.schema.AbstractAttributeType;
-import org.apache.directory.shared.ldap.schema.AbstractMatchingRule;
-import org.apache.directory.shared.ldap.schema.AbstractSyntax;
-import org.apache.directory.shared.ldap.schema.AttributeType;
-import org.apache.directory.shared.ldap.schema.DefaultObjectClass;
-import org.apache.directory.shared.ldap.schema.MatchingRule;
-import org.apache.directory.shared.ldap.schema.Normalizer;
-import org.apache.directory.shared.ldap.schema.ObjectClass;
-import org.apache.directory.shared.ldap.schema.ObjectClassTypeEnum;
-import org.apache.directory.shared.ldap.schema.SchemaUtils;
-import org.apache.directory.shared.ldap.schema.Syntax;
import org.apache.directory.shared.ldap.schema.syntax.SyntaxChecker;
@@ -192,7 +181,8 @@
static class SyntaxImpl extends AbstractSyntax
{
- public final static long serialVersionUID = 1L;
+ @SuppressWarnings ( { "AnalyzingVariableNaming" } )
+ public static final long serialVersionUID = 1L;
protected SyntaxImpl(String oid)
{
@@ -272,6 +262,18 @@
public MatchingRule getSubstr() throws NamingException
{
return substr;
+ }
+
+
+ public boolean isAncestorOf( AttributeType attributeType ) throws NamingException
+ {
+ return false;
+ }
+
+
+ public boolean isDescentantOf( AttributeType attributeType ) throws NamingException
+ {
+ return false;
}
}