You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/03/08 11:12:37 UTC

svn commit: r634921 - in /directory: apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/ apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/ apacheds/branches/bigbang/core/sr...

Author: elecharny
Date: Sat Mar  8 02:12:34 2008
New Revision: 634921

URL: http://svn.apache.org/viewvc?rev=634921&view=rev
Log:
Removed references to the ObjectClassAttribute, it was far to expensive to process (the gain is 25% speed improvement)

Modified:
    directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerAttribute.java
    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/ServerEntry.java
    directory/apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
    directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientAttribute.java
    directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java

Modified: directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerAttribute.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerAttribute.java?rev=634921&r1=634920&r2=634921&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerAttribute.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/main/java/org/apache/directory/server/core/entry/DefaultServerAttribute.java Sat Mar  8 02:12:34 2008
@@ -22,6 +22,7 @@
 import org.apache.directory.shared.ldap.entry.AbstractValue;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.entry.client.ClientBinaryValue;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -630,7 +631,7 @@
     {
         Value<?> value = get();
         
-        if ( value instanceof ServerBinaryValue )
+        if ( value instanceof ClientBinaryValue )
         {
             return (byte[])value.get();
         }

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=634921&r1=634920&r2=634921&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 Sat Mar  8 02:12:34 2008
@@ -66,9 +66,6 @@
     /** A map containing all the attributes for this entry */
     private Map<AttributeType, ServerAttribute> serverAttributeMap = new HashMap<AttributeType, ServerAttribute>();
     
-    /** The objectClass container */
-    private ObjectClassAttribute objectClassAttribute;
-    
     /** The global registries */
     private final transient Registries registries;
     
@@ -104,8 +101,6 @@
                     OBJECT_CLASS_AT = registries.getAttributeTypeRegistry().lookup( SchemaConstants.OBJECT_CLASS_AT );
                 }
             }
-            
-            setObjectClassAttribute( new ObjectClassAttribute( registries, SchemaConstants.OBJECT_CLASS_AT ) );
         }
         catch ( NamingException ne )
         {
@@ -167,12 +162,6 @@
 
         for ( AttributeType attributeType:attributeTypes )
         {
-            if ( attributeType.equals(  OBJECT_CLASS_AT ) )
-            {
-                // The ObjectClass AttributeType has already been added
-                continue;
-            }
-            
             // Add a new AttributeType without value
             set( attributeType );
         }
@@ -202,24 +191,14 @@
 
         initObjectClassAT( registries );
 
-        if ( attributeType.equals(  OBJECT_CLASS_AT ) )
+        try
         {
-            // If the AttributeType is the ObjectClass AttributeType, then
-            // we don't add it to the entry, as it has already been added
-            // before. But we have to store the upId.
-            objectClassAttribute.setUpId( upId, OBJECT_CLASS_AT );
+            put( upId, attributeType, (String)null );
         }
-        else
+        catch ( NamingException ne )
         {
-            try
-            {
-                put( upId, attributeType, (String)null );
-            }
-            catch ( NamingException ne )
-            {
-                // What do we do ???
-                LOG.error( "We have had an error while adding the '{}' AttributeType : {}", upId, ne.getMessage() );
-            }
+            // What do we do ???
+            LOG.error( "We have had an error while adding the '{}' AttributeType : {}", upId, ne.getMessage() );
         }
     }
 
@@ -290,13 +269,6 @@
 
         for ( ServerAttribute attribute:attributes )
         {
-            if ( attribute.getType().equals(  OBJECT_CLASS_AT ) )
-            {
-                // Treat the ObjectClass in a specific way
-                setObjectClassAttribute( attribute );
-                continue;
-            }
-            
             // Store a new ServerAttribute
             try
             {
@@ -385,100 +357,13 @@
     }
 
     
-    /**
-     * Stores the ObjectClassAttribute into its container.
-     *
-     * @param objectClassAttribute The instance of ObjectClassAttribute
-     * @return The previously stored ObjectClassAttribute, if any
-     */
-    private void setObjectClassAttribute( ObjectClassAttribute objectClassAttribute )
-    {
-        assert objectClassAttribute != null : "The ObjectClass Attribute should not be null";
-        
-        this.objectClassAttribute = objectClassAttribute;
-    }
-
-
-    /**
-     * Stores the ObjectClassAttribute into its container.
-     *
-     * @param objectClassAttribute The instance of ObjectClassAttribute
-     * @return The previously stored ObjectClassAttribute, if any
-     */
-    private ServerAttribute setObjectClassAttribute( ServerAttribute serverAttribute )
-    {
-        assert serverAttribute != null : "The ObjectClass Attribute should not be null";
-        
-        this.objectClassAttribute = new ObjectClassAttribute( registries );
-        ServerAttribute previous = serverAttributeMap.put( OBJECT_CLASS_AT, objectClassAttribute );
-        
-        return previous;
-    }
-
-
-    private ServerAttribute removeObjectClassAttribute( ServerAttribute objectClassAttribute ) throws NamingException
-    {
-        this.objectClassAttribute = (ObjectClassAttribute)objectClassAttribute;
-
-        return serverAttributeMap.remove( OBJECT_CLASS_AT );
-    }
-
-
-    public boolean addObjectClass( ObjectClass objectClass, String alias ) throws NamingException
-    {
-        boolean exists = objectClassAttribute.addObjectClass( objectClass, alias );
-        
-        if ( !exists )
-        {
-            // The ObjectClass is a new one : update the vaules
-        }
-
-        ServerAttribute existing = serverAttributeMap.get( OBJECT_CLASS_AT );
-        
-        existing.add( alias );
-        
-        return exists;
-    }
-
-
-    public boolean addObjectClass( ObjectClass objectClass ) throws NamingException
-    {
-        return addObjectClass( objectClass, objectClass.getName() );
-    }
-
-
-    public void addObjectClass( ObjectClassAttribute objectClassAttribute ) throws NamingException
-    {
-        this.objectClassAttribute = objectClassAttribute;
-        
-        ServerAttribute currentOc = serverAttributeMap.get( objectClassAttribute.getType() );
-        
-        if ( currentOc != null )
-        {
-            for ( Value<?> value:objectClassAttribute )
-            {
-                currentOc.add( value );
-            }
-        }
-        else
-        {
-            serverAttributeMap.put( OBJECT_CLASS_AT, objectClassAttribute );
-        }
-    }
-
-
-    public boolean hasObjectClass( ObjectClass objectClass )
-    {
-        return objectClassAttribute.hasObjectClass( objectClass );
-    }
-
-
     public boolean hasObjectClass( String objectClass )
     {
         try
         {
-            ObjectClass oc = registries.getObjectClassRegistry().lookup( objectClass );
-            return objectClassAttribute.hasObjectClass( oc );
+            ServerAttribute oc = serverAttributeMap.get( OBJECT_CLASS_AT );
+            
+            return oc.contains( objectClass );
         }
         catch ( NamingException ne )
         {
@@ -486,49 +371,6 @@
         }
     }
 
-
-    public Set<ObjectClass> getAbstractObjectClasses()
-    {
-        return objectClassAttribute.getAbstractObjectClasses();
-    }
-
-
-    public ObjectClass getStructuralObjectClass()
-    {
-        return objectClassAttribute.getStructuralObjectClass();
-    }
-
-
-    public Set<ObjectClass> getStructuralObjectClasses()
-    {
-        return objectClassAttribute.getStructuralObjectClasses();
-    }
-
-
-    public Set<ObjectClass> getAuxiliaryObjectClasses()
-    {
-        return objectClassAttribute.getAuxiliaryObjectClasses();
-    }
-
-
-    public Set<ObjectClass> getAllObjectClasses()
-    {
-        return objectClassAttribute.getAllObjectClasses();
-    }
-
-
-    public Set<AttributeType> getMustList()
-    {
-        return objectClassAttribute.getMustList();
-    }
-
-
-    public Set<AttributeType> getMayList()
-    {
-        return objectClassAttribute.getMayList();
-    }
-
-
     public boolean isValid()
     {
         throw new NotImplementedException();
@@ -627,30 +469,19 @@
                 throw new IllegalArgumentException( message );
             }
             
-            // The ObjectClass AT is special
-            if ( attributeType.equals( OBJECT_CLASS_AT ) )
+            if ( returnedServerAttributes == null )
             {
-                // Just do nothing but clear the ObjectClass values
-                objectClassAttribute.clear();
-                ServerAttribute newAttribute = new ObjectClassAttribute( registries );
-                serverAttributeMap.put( attributeType, newAttribute );
+                returnedServerAttributes = new ArrayList<ServerAttribute>();
             }
-            else
-            {
-                if ( returnedServerAttributes == null )
-                {
-                    returnedServerAttributes = new ArrayList<ServerAttribute>();
-                }
-
-                if ( serverAttributeMap.containsKey( attributeType ) )
-                {
-                    // Add the removed serverAttribute to the list
-                    returnedServerAttributes.add( serverAttributeMap.remove( attributeType ) );
-                }
 
-                ServerAttribute newAttribute = new DefaultServerAttribute( attributeType );
-                serverAttributeMap.put( attributeType, newAttribute );
+            if ( serverAttributeMap.containsKey( attributeType ) )
+            {
+                // Add the removed serverAttribute to the list
+                returnedServerAttributes.add( serverAttributeMap.remove( attributeType ) );
             }
+
+            ServerAttribute newAttribute = new DefaultServerAttribute( attributeType );
+            serverAttributeMap.put( attributeType, newAttribute );
         }
         
         return returnedServerAttributes;
@@ -682,49 +513,11 @@
                 throw new IllegalArgumentException( message );
             }
             
-            if ( serverAttribute.getType().equals( OBJECT_CLASS_AT ) )
-            {
-                ServerAttribute removed = null;
-                
-                // The objectClass attributeType is special 
-                if ( serverAttribute instanceof ObjectClassAttribute )
-                {
-                    removed = this.objectClassAttribute;
-
-                    this.objectClassAttribute = (ObjectClassAttribute)serverAttribute;
-                    serverAttributeMap.put( OBJECT_CLASS_AT, serverAttribute );
-                    previous.add( removed );
-                }
-                else
-                {
-                    // Here, the attributeType is ObjectClass, but the Attribute itself is 
-                    // not a instance of the ObjectClassAttribute. We will store all of
-                    // its values into a new instance of ObjectClassAttribute. 
-                    if ( serverAttribute.getType().getSyntax().isHumanReadable() )
-                    {
-                        ObjectClassAttribute objectClassAttribute = new ObjectClassAttribute( registries, serverAttribute );
-                        this.objectClassAttribute = objectClassAttribute;
-                        removed = serverAttributeMap.put( OBJECT_CLASS_AT, objectClassAttribute );
-                    }
-                    else
-                    {
-                        // The attribute must be a String
-                        String message = "Only String values supported for objectClass attribute";
-                        LOG.error(  message  );
-                        throw new UnsupportedOperationException( message );
-                    }
-
-                    previous.add( removed );
-                }
-            }
-            else
+            ServerAttribute removed = serverAttributeMap.put( serverAttribute.getType(), serverAttribute );
+            
+            if ( removed != null )
             {
-                ServerAttribute removed = serverAttributeMap.put( serverAttribute.getType(), serverAttribute );
-                
-                if ( removed != null )
-                {
-                    previous.add( removed );
-                }
+                previous.add( removed );
             }
         }
         
@@ -776,11 +569,6 @@
         
         for ( ServerAttribute serverAttribute:serverAttributes )
         {
-            if ( serverAttribute.getType().equals( OBJECT_CLASS_AT ) )
-            {
-                removeObjectClassAttribute( new ObjectClassAttribute( registries ) );
-            }
-
             if ( serverAttributeMap.containsKey( serverAttribute.getType() ) )
             {
                 serverAttributeMap.remove( serverAttribute.getType() );
@@ -824,21 +612,9 @@
         upId = getUpId( upId, attributeType );
         attributeType = getAttributeType( upId, attributeType );
 
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
-        {
-            // Create a new ObjectclassAttribute and return the previous one
-            ServerAttribute previous = this.objectClassAttribute;
-            
-            objectClassAttribute = new ObjectClassAttribute( registries, upId, values );
-            serverAttributeMap.put( OBJECT_CLASS_AT, objectClassAttribute );
-            return previous;
-        }
-        else
-        {
-            // We simply have to set the current attribute values
-            ServerAttribute serverAttribute = new DefaultServerAttribute( upId, attributeType, values );
-            return serverAttributeMap.put( attributeType, serverAttribute );
-        }
+        // We simply have to set the current attribute values
+        ServerAttribute serverAttribute = new DefaultServerAttribute( upId, attributeType, values );
+        return serverAttributeMap.put( attributeType, serverAttribute );
     }
 
 
@@ -894,22 +670,9 @@
 
         ServerAttribute serverAttribute = new DefaultServerAttribute( upId, attributeType );
 
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
-        {
-            // If the AttributeType is the ObjectClass AttributeType, then
-            // we don't add it to the entry, as it has already been added
-            // before. But we have to store the upId.
-            ServerAttribute previous = objectClassAttribute;
-            objectClassAttribute = new ObjectClassAttribute( registries, upId, values );
-            serverAttributeMap.put( OBJECT_CLASS_AT, objectClassAttribute );
-            return previous;
-        }
-        else
-        {
-            // We simply have to set the current attribute values
-            serverAttribute.put( values );
-            return serverAttributeMap.put( attributeType, serverAttribute );
-        }
+        // We simply have to set the current attribute values
+        serverAttribute.put( values );
+        return serverAttributeMap.put( attributeType, serverAttribute );
     }
 
 
@@ -1011,7 +774,7 @@
     {
         serverAttributeMap.clear();
 
-        setObjectClassAttribute( new ObjectClassAttribute( registries ) );
+        //setObjectClassAttribute( new ObjectClassAttribute( registries ) );
     }
 
 
@@ -1056,9 +819,6 @@
             // Clone the DN
             clone.dn = (LdapDN)dn.clone();
             
-            // Clone the ObjectClassAttribute
-            clone.objectClassAttribute = objectClassAttribute.clone();
-            
             // clone the ServerAttribute Map
             clone.serverAttributeMap = (Map<AttributeType, ServerAttribute>)(((HashMap<AttributeType, ServerAttribute>)serverAttributeMap).clone());
             
@@ -1265,60 +1025,6 @@
     
     
     /**
-     * Add a new ObjectClass, with its upId. If the upId is null,
-     * default to "objectClass".
-     * 
-     * Updates the objectClassAttribute and the serverAttributeMap.
-     */
-    private void addObjectClass( String upId, String... values ) throws NamingException, InvalidAttributeValueException
-    {
-        ServerAttribute attribute = serverAttributeMap.get( OBJECT_CLASS_AT );
-        
-        if ( objectClassAttribute == null )
-        {
-            objectClassAttribute = new ObjectClassAttribute( registries, upId, values );
-            serverAttributeMap.put(  OBJECT_CLASS_AT, objectClassAttribute );
-        }
-        else
-        {
-            objectClassAttribute.add( values );
-            
-            if ( attribute == null )
-            {
-                serverAttributeMap.put(  OBJECT_CLASS_AT, objectClassAttribute ); 
-            }
-            else
-            {
-                attribute.add( values );
-            }
-        }
-    }
-    
-    
-    /**
-     * Add a new ObjectClass, with its upId. If the upId is null,
-     * default to "objectClass".
-     * 
-     * Updates the objectClassAttribute and the serverAttributeMap.
-     */
-    private void addObjectClass( String upId, Value<?>... values ) throws NamingException, InvalidAttributeValueException
-    {
-        ServerAttribute attribute = serverAttributeMap.get( OBJECT_CLASS_AT );
-        
-        if ( objectClassAttribute == null )
-        {
-            objectClassAttribute = new ObjectClassAttribute( registries, upId, values );
-            serverAttributeMap.put( OBJECT_CLASS_AT, attribute );
-        }
-        else
-        {
-            objectClassAttribute.add( values );
-            attribute.add( values );
-        }
-    }
-    
-    
-    /**
      * Add a new ServerAttribute, with its upId. If the upId is null,
      * default to the AttributeType name.
      * 
@@ -1384,21 +1090,6 @@
      *  - if the attribute already exists, we add the value (no duplicate)
      *  - or we just add a new attribute to the Map
      *-----------------------------------------------------------------------*/
-
-    /**
-     * Add some Values to the current Entry.
-     *
-     * @param upId The user provided ID of the attribute we want to add 
-     * some values to
-     * @param values The list of Values to add
-     * @throws NamingException
-     *
-    public void add( String upId, Value<?>... values ) throws NamingException
-    {
-        
-    }
-    
-    
     /**
      * Add an attribute (represented by its ID and some String values) into an 
      * entry.
@@ -1418,27 +1109,19 @@
             throw new IllegalArgumentException( message );
         }
         
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
+        ServerAttribute attribute = serverAttributeMap.get( attributeType );
+        
+        if ( attribute != null )
         {
-            // This is an objectClass, call the appropriate method
-            addObjectClass( null, values );
+            // This Attribute already exist, we add the values 
+            // into it
+            attribute.add( values );
         }
         else
         {
-            ServerAttribute attribute = serverAttributeMap.get( attributeType );
-            
-            if ( attribute != null )
-            {
-                // This Attribute already exist, we add the values 
-                // into it
-                attribute.add( values );
-            }
-            else
-            {
-                // We have to create a new Attribute and set the values
-                // and the upId
-                createAttribute( null, attributeType, values );
-            }
+            // We have to create a new Attribute and set the values
+            // and the upId
+            createAttribute( null, attributeType, values );
         }
     }
 
@@ -1505,25 +1188,17 @@
             throw new IllegalArgumentException( message );
         }
         
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
+        ServerAttribute attribute = serverAttributeMap.get( attributeType );
+    
+        if ( attribute != null )
         {
-            // This is an objectClass, call the appropriate method
-            addObjectClass( null, values );
+            // This Attribute already exist, we add the values 
+            // into it
+            attribute.add( values );
         }
         else
         {
-            ServerAttribute attribute = serverAttributeMap.get( attributeType );
-        
-            if ( attribute != null )
-            {
-                // This Attribute already exist, we add the values 
-                // into it
-                attribute.add( values );
-            }
-            else
-            {
-                createAttribute( null, attributeType, values );
-            }
+            createAttribute( null, attributeType, values );
         }
     }
 
@@ -1587,28 +1262,20 @@
         
         upId = getUpId( upId, attributeType );
 
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
+        ServerAttribute attribute = serverAttributeMap.get( attributeType );
+        
+        if ( attribute != null )
         {
-            // This is an objectClass, call the appropriate method
-            addObjectClass( upId, values );
+            // This Attribute already exist, we add the values 
+            // into it
+            attribute.add( values );
+            attribute.setUpId( upId, attributeType );
         }
         else
         {
-            ServerAttribute attribute = serverAttributeMap.get( attributeType );
-            
-            if ( attribute != null )
-            {
-                // This Attribute already exist, we add the values 
-                // into it
-                attribute.add( values );
-                attribute.setUpId( upId, attributeType );
-            }
-            else
-            {
-                // We have to create a new Attribute and set the values
-                // and the upId
-                createAttribute( upId, attributeType, values );
-            }
+            // We have to create a new Attribute and set the values
+            // and the upId
+            createAttribute( upId, attributeType, values );
         }
     }
 
@@ -1672,26 +1339,18 @@
         
         upId = getUpId( upId, attributeType );
         
-        if ( attributeType.equals( OBJECT_CLASS_AT ) )
+        ServerAttribute attribute = serverAttributeMap.get( attributeType );
+    
+        if ( attribute != null )
         {
-            // This is an objectClass, call the appropriate method
-            addObjectClass( upId, values );
+            // This Attribute already exist, we add the values 
+            // into it
+            attribute.add( values );
+            attribute.setUpId( upId, attributeType );
         }
         else
         {
-            ServerAttribute attribute = serverAttributeMap.get( attributeType );
-        
-            if ( attribute != null )
-            {
-                // This Attribute already exist, we add the values 
-                // into it
-                attribute.add( values );
-                attribute.setUpId( upId, attributeType );
-            }
-            else
-            {
-                createAttribute( upId, attributeType, values );
-            }
+            createAttribute( upId, attributeType, values );
         }
     }
 
@@ -1784,13 +1443,6 @@
      */
     public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException
     {
-        /*if ( in.available() == 0 )
-        {
-            String message = "Cannot read an null Attribute";
-            LOG.error( message );
-            throw new IOException( message );
-        }*/
-
         // Read the DN
         LdapDN dn = (LdapDN)in.readObject();
         
@@ -1905,11 +1557,6 @@
         sb.append( "DefaultEntryServer\n" );
         sb.append( "    dn: " ).append( dn ).append( '\n' );
         
-        if ( objectClassAttribute != null )
-        {
-            sb.append( objectClassAttribute );
-        }
-
         if ( serverAttributeMap.size() != 0 )
         {
             for ( ServerAttribute attribute:serverAttributeMap.values() )

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=634921&r1=634920&r2=634921&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 Sat Mar  8 02:12:34 2008
@@ -20,8 +20,7 @@
 
 
 import org.apache.directory.shared.ldap.schema.AttributeType;
-import org.apache.directory.shared.ldap.entry.EntryAttribute;
-import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.entry.client.ClientAttribute;
 
 import javax.naming.NamingException;
 import javax.naming.directory.InvalidAttributeValueException;
@@ -34,7 +33,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public interface ServerAttribute extends EntryAttribute<Value<?>>
+public interface ServerAttribute extends ClientAttribute
 {
     /**
      * Gets the attribute type associated with this ServerAttribute.
@@ -43,19 +42,6 @@
      */
     AttributeType getType();
 
-    /**
-     * 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
-     */
-    String getUpId();
-    
     
     /**
      * Set the user provided ID. If we have none, the upId is assigned
@@ -72,35 +58,6 @@
      */
     public void setUpId( String upId, AttributeType attributeType );
 
-    
-    /**
-     * Checks to see if this attribute is valid along with the values it contains.
-     *
-     * @return true if the attribute and it's values are valid, false otherwise
-     * @throws NamingException if there is a failure to check syntaxes of values
-     */
-    boolean isValid() throws NamingException;
-    
-    
-    /**
-     * Get the String value, if and only if the value is known to be a String,
-     * otherwise a InvalidAttributeValueException will be thrown
-     *
-     * @return The value as a String
-     * @throws InvalidAttributeValueException If the value is a byte[]
-     */
-    String getString() throws InvalidAttributeValueException;
-
-
-    /**
-     * Get the byte[] value, if and only if the value is known to be Binary,
-     * otherwise a InvalidAttributeValueException will be thrown
-     *
-     * @return The value as a String
-     * @throws InvalidAttributeValueException If the value is a String
-     */
-    byte[] getBytes() throws InvalidAttributeValueException;
-    
     
     /**
      * Check if the current attribute type is of the expected attributeType 

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=634921&r1=634920&r2=634921&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 Sat Mar  8 02:12:34 2008
@@ -41,43 +41,6 @@
     // -----------------------------------------------------------------------
     // Schema Related Methods
     // -----------------------------------------------------------------------
-
-
-    /**
-     * 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 );
-
-
     /**
      * Checks to see if this entry is of the objectClass.
      *
@@ -85,78 +48,6 @@
      * @return true if this entry is of the objectClass, false otherwise
      */
     boolean hasObjectClass( String 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
-     * one structural objectClass which is illegal, then the first to be found
-     * will be returned.
-     *
-     * @return the first structural objectClass found in this entry
-     */
-    ObjectClass getStructuralObjectClass();
-
-
-    /**
-     * 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.
-     *
-     * @return the set of auxiliary objectClasses found in this entry
-     */
-    Set<ObjectClass> getAuxiliaryObjectClasses();
-
-
-    /**
-     * 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> getAllObjectClasses();
-
-
-    /**
-     * Gets the combinded set of all required attributes for this entry across
-     * all objectClasses.
-     *
-     * @return the combinded set of all required attributes
-     */
-    Set<AttributeType> getMustList();
-
-
-    /**
-     * Gets the combined set of all optional attributes for this entry across
-     * all objectClasses.
-     *
-     * @return the combined set of all optional attributes
-     */
-    Set<AttributeType> getMayList();
 
     
     /**

Modified: directory/apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java?rev=634921&r1=634920&r2=634921&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java (original)
+++ directory/apacheds/branches/bigbang/core-entry/src/test/java/org/apache/directory/server/core/entry/DefaultServerEntryTest.java Sat Mar  8 02:12:34 2008
@@ -102,10 +102,9 @@
         LdapDN dn = new LdapDN( "cn=test" );
         DefaultServerEntry entry = new DefaultServerEntry( registries, dn );
         
-        ObjectClassAttribute oc = new ObjectClassAttribute( registries );
-        oc.add( "top", "person", "inetOrgPerson", "organizationalPerson" );
+        AttributeType OBJECT_CLASS_AT = registries.getAttributeTypeRegistry().lookup( SchemaConstants.OBJECT_CLASS_AT );
         
-        entry.addObjectClass( oc );
+        entry.put( "objectClass", OBJECT_CLASS_AT, "top", "person", "inetOrgPerson", "organizationalPerson" );
         entry.put( "cn", registries.getAttributeTypeRegistry().lookup( "cn" ), "test" );
         
         Attributes attributes = ServerEntryUtils.toAttributesImpl( entry );
@@ -139,11 +138,9 @@
         LdapDN dn = new LdapDN( "cn=test" );
         DefaultServerEntry entry = new DefaultServerEntry( registries,dn );
         
-        ObjectClassAttribute oc = new ObjectClassAttribute( registries );
-        oc.add( "top", "person", "inetOrgPerson", "organizationalPerson" );
+        AttributeType OBJECT_CLASS_AT = registries.getAttributeTypeRegistry().lookup( SchemaConstants.OBJECT_CLASS_AT );
         
-        entry.addObjectClass( oc );
-        //entry.put( "cn", registries.getAttributeTypeRegistry().lookup( "cn" ), "test" );
+        entry.put( "objectClass", OBJECT_CLASS_AT, "top", "person", "inetOrgPerson", "organizationalPerson" );
         
         Attributes attributes = ServerEntryUtils.toBasicAttributes( entry );
         
@@ -425,12 +422,11 @@
         
         // test an ObjectClass replacement
         AttributeType OBJECT_CLASS_AT = registries.getAttributeTypeRegistry().lookup( SchemaConstants.OBJECT_CLASS_AT );
-        ServerAttribute oc = new ObjectClassAttribute( registries, "OBJECTCLASS", "person", "inetorgperson" );
+        ServerAttribute oc = new DefaultServerAttribute( "OBJECTCLASS", OBJECT_CLASS_AT, "person", "inetorgperson" );
         List<ServerAttribute> oldOc = entry.put( oc );
         
         assertNotNull( oldOc );
-        assertEquals( 1, oldOc.size() );
-        assertEquals( null, oldOc.get( 0 ).get() );
+        assertEquals( 0, oldOc.size() );
         
         assertNotNull( entry.get( "objectClass" ) );
 
@@ -1748,7 +1744,6 @@
         
         byte[] b1 = StringTools.getBytesUtf8( "test1" );
         byte[] b2 = StringTools.getBytesUtf8( "test2" );
-        byte[] b3 = StringTools.getBytesUtf8( "test3" );
 
         Value<String> test1 = new ServerStringValue( atCN, "test1" );
         Value<String> test2 = new ServerStringValue( atCN, "test2" );

Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=634921&r1=634920&r2=634921&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Sat Mar  8 02:12:34 2008
@@ -1481,7 +1481,7 @@
 
             entry.remove( SchemaConstants.OBJECT_CLASS_AT );
 
-            ServerAttribute newOc = new ObjectClassAttribute( registries );
+            ServerAttribute newOc = new DefaultServerAttribute( oc.getType() );
 
             for ( ObjectClass currentOC:objectClasses )
             {

Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientAttribute.java?rev=634921&r1=634920&r2=634921&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientAttribute.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientAttribute.java Sat Mar  8 02:12:34 2008
@@ -23,6 +23,7 @@
 import org.apache.directory.shared.ldap.entry.Value;
 
 import javax.naming.NamingException;
+import javax.naming.directory.InvalidAttributeValueException;
 
 
 /**
@@ -35,24 +36,30 @@
 public interface ClientAttribute extends EntryAttribute<Value<?>>
 {
     /**
-     * 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.
+     * Checks to see if this attribute is valid along with the values it contains.
      *
-     * @return the user provided identifier for this attribute
+     * @return true if the attribute and it's values are valid, false otherwise
+     * @throws NamingException if there is a failure to check syntaxes of values
      */
-    String getUpId();
+    boolean isValid() throws NamingException;
 
+
+    /**
+     * Get the byte[] value, if and only if the value is known to be Binary,
+     * otherwise a InvalidAttributeValueException will be thrown
+     *
+     * @return The value as a String
+     * @throws InvalidAttributeValueException If the value is a String
+     */
+    byte[] getBytes() throws InvalidAttributeValueException;
+    
     
     /**
-     * Checks to see if this attribute is valid along with the values it contains.
+     * Get the String value, if and only if the value is known to be a String,
+     * otherwise a InvalidAttributeValueException will be thrown
      *
-     * @return true if the attribute and it's values are valid, false otherwise
-     * @throws NamingException if there is a failure to check syntaxes of values
+     * @return The value as a String
+     * @throws InvalidAttributeValueException If the value is a byte[]
      */
-    boolean isValid() throws NamingException;
+    String getString() throws InvalidAttributeValueException;
 }

Modified: directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java?rev=634921&r1=634920&r2=634921&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java (original)
+++ directory/shared/branches/bigbang/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java Sat Mar  8 02:12:34 2008
@@ -170,6 +170,54 @@
 
 
     /**
+     * Get the byte[] value, if and only if the value is known to be Binary,
+     * otherwise a InvalidAttributeValueException will be thrown
+     *
+     * @return The value as a String
+     * @throws InvalidAttributeValueException If the value is a String
+     */
+    public byte[] getBytes() throws InvalidAttributeValueException
+    {
+        Value<?> value = get();
+        
+        if ( value instanceof ClientBinaryValue )
+        {
+            return (byte[])value.get();
+        }
+        else
+        {
+            String message = "The value is expected to be a byte[]";
+            LOG.error( message );
+            throw new InvalidAttributeValueException( message );
+        }
+    }
+
+
+    /**
+     * Get the String value, if and only if the value is known to be a String,
+     * otherwise a InvalidAttributeValueException will be thrown
+     *
+     * @return The value as a String
+     * @throws InvalidAttributeValueException If the value is a byte[]
+     */
+    public String getString() throws InvalidAttributeValueException
+    {
+        Value<?> value = get();
+        
+        if ( value instanceof ClientStringValue )
+        {
+            return (String)value.get();
+        }
+        else
+        {
+            String message = "The value is expected to be a String";
+            LOG.error( message );
+            throw new InvalidAttributeValueException( message );
+        }
+    }
+
+
+    /**
      * Get's the attribute identifier. Its value is the same than the
      * user provided ID.
      *