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 2009/10/09 12:09:50 UTC

svn commit: r823497 - in /directory: apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/reg...

Author: elecharny
Date: Fri Oct  9 10:09:49 2009
New Revision: 823497

URL: http://svn.apache.org/viewvc?rev=823497&view=rev
Log:
Fixed many problems with cross references

Modified:
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/MatchingRuleSynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ObjectClassSynchronizer.java
    directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java Fri Oct  9 10:09:49 2009
@@ -393,11 +393,11 @@
     {
         StringBuilder sb = new StringBuilder();
         
-        Set<SchemaObject> usings = registries.getUsing( schemaObject );
+        Set<SchemaWrapper> useds = registries.getUsedBy( schemaObject );
         
-        for ( SchemaObject using:usings )
+        for ( SchemaWrapper used:useds )
         {
-            sb.append( using );
+            sb.append( used );
             sb.append( '\n' );
         }
         

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java Fri Oct  9 10:09:49 2009
@@ -167,6 +167,14 @@
         String schemaName = getSchemaName( entry.getDn() );
         AttributeType attributeType = factory.getAttributeType( entry, registries, schemaName );
         
+        // Applies the Registries to this AttributeType 
+        Schema schema = registries.getLoadedSchema( schemaName );
+        
+        if ( schema.isEnabled() && attributeType.isEnabled() )
+        {
+            attributeType.applyRegistries( registries );
+        }
+        
         String oid = attributeType.getOid();
         
         // Depending on the fact that the schema is enabled or disabled, we will have
@@ -194,20 +202,20 @@
         // Update the Registries now
         if ( atRegistry.contains( oid ) )
         {
-            // Don't inject the modified element if the schema is disabled
-            atRegistry.unregister( attributeType.getOid() );
-            
-            // Now, update the references.
+            // Update the references.
             // The Syntax
-            registries.delReference( attributeType.getSyntax(), attributeType );
+            registries.delReference( attributeType, attributeType.getSyntax() );
             
             // The Superior
-            registries.delReference( attributeType.getSuperior(), attributeType );
+            registries.delReference( attributeType, attributeType.getSuperior() );
             
             // The MatchingRules
-            registries.delReference( attributeType.getEquality(), attributeType );
-            registries.delReference( attributeType.getOrdering(), attributeType );
-            registries.delReference( attributeType.getSubstring(), attributeType );
+            registries.delReference( attributeType, attributeType.getEquality() );
+            registries.delReference( attributeType, attributeType.getOrdering() );
+            registries.delReference( attributeType, attributeType.getSubstring() );
+            
+            // Update the Registry
+            atRegistry.unregister( attributeType.getOid() );
             
             LOG.debug( "Removed {} from the enabled schema {}", attributeType, schemaName );
         }

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/MatchingRuleSynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/MatchingRuleSynchronizer.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/MatchingRuleSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/MatchingRuleSynchronizer.java Fri Oct  9 10:09:49 2009
@@ -168,6 +168,14 @@
         MatchingRule matchingRule = factory.getMatchingRule( entry, registries, schemaName );
         String oid = matchingRule.getOid();
         
+        // Applies the Registries to this MatchingRule 
+        Schema schema = registries.getLoadedSchema( schemaName );
+
+        if ( schema.isEnabled() && matchingRule.isEnabled() )
+        {
+            matchingRule.applyRegistries( registries );
+        }
+        
         deleteFromSchema( matchingRule, schemaName );
         
         if ( matchingRuleRegistry.contains( oid ) )
@@ -182,7 +190,9 @@
             // The Comparator
             registries.delReference( matchingRule, matchingRule.getLdapComparator() );
 
+            // Update the registry
             matchingRuleRegistry.unregister( matchingRule.getOid() );
+            
             LOG.debug( "Removed {} from the enabled schema {}", matchingRule, schemaName );
         }
         else

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ObjectClassSynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ObjectClassSynchronizer.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ObjectClassSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/ObjectClassSynchronizer.java Fri Oct  9 10:09:49 2009
@@ -171,6 +171,14 @@
         String schemaName = getSchemaName( entry.getDn() );
         ObjectClass objectClass = factory.getObjectClass( entry, registries, schemaName );
 
+        // Applies the Registries to this ObjectClass 
+        Schema schema = registries.getLoadedSchema( schemaName );
+
+        if ( schema.isEnabled() && objectClass.isEnabled() )
+        {
+            objectClass.applyRegistries( registries );
+        }
+        
         String oid = objectClass.getOid();
 
         if ( isSchemaEnabled( schemaName ) )
@@ -208,7 +216,9 @@
                 registries.delReference( objectClass, superior );
             }
             
+            // Update the Registry
             objectClassRegistry.unregister( objectClass.getOid() );
+            
             LOG.debug( "Removed {} from the enabled schema {}", objectClass, schemaName );
         }
         else

Modified: directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java (original)
+++ directory/apacheds/branches/apacheds-schema/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java Fri Oct  9 10:09:49 2009
@@ -119,7 +119,7 @@
         String schemaName = getSchemaName( dn );
         LdapSyntax syntax = factory.getSyntax( entry, registries, schemaName );
 
-        // Applies the Registrie sto this Syntax 
+        // Applies the Registries to this Syntax 
         Schema schema = registries.getLoadedSchema( schemaName );
 
         if ( schema.isEnabled() && syntax.isEnabled() )
@@ -219,6 +219,14 @@
         String schemaName = getSchemaName( entry.getDn() );
         LdapSyntax syntax = factory.getSyntax( entry, registries, schemaName );
         
+        // Applies the Registries to this Syntax 
+        Schema schema = registries.getLoadedSchema( schemaName );
+
+        if ( schema.isEnabled() && syntax.isEnabled() )
+        {
+            syntax.applyRegistries( registries );
+        }
+
         String oid = syntax.getOid();
         
         if ( isSchemaEnabled( schemaName ) )
@@ -236,11 +244,12 @@
 
         if ( syntaxRegistry.contains( oid ) )
         {
-            syntaxRegistry.unregister( oid );
-            
-            // Now, update the references.
+            // Update the references.
             // The SyntaxChecker
-            registries.delReference( syntax.getSyntaxChecker(), syntax );
+            registries.delReference( syntax, syntax.getSyntaxChecker() );
+            
+            // Update the Registry
+            syntaxRegistry.unregister( oid );
             
             LOG.debug( "Removed {} from the enabled schema {}", syntax, schemaName );
         }

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java?rev=823497&r1=823496&r2=823497&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/Registries.java Fri Oct  9 10:09:49 2009
@@ -103,13 +103,13 @@
      *  A map storing a relation between a SchemaObject and all the 
      *  referencing SchemaObjects.
      */
-    protected Map<SchemaWrapper, Set<SchemaObject>> usedBy;
+    protected Map<SchemaWrapper, Set<SchemaWrapper>> usedBy;
     
     /**
      *  A map storing a relation between a SchemaObject and all the 
      *  SchemaObjects it uses.
      */
-    protected Map<SchemaWrapper, Set<SchemaObject>> using;
+    protected Map<SchemaWrapper, Set<SchemaWrapper>> using;
     
 
     /**
@@ -131,9 +131,9 @@
         normalizerRegistry = new NormalizerRegistry( oidRegistry );
         objectClassRegistry = new ObjectClassRegistry( oidRegistry );
         syntaxCheckerRegistry = new SyntaxCheckerRegistry( oidRegistry );
-        schemaObjectsBySchemaName = new HashMap<String, Set<SchemaWrapper>>();
-        usedBy = new ConcurrentHashMap<SchemaWrapper, Set<SchemaObject>>();
-        using = new ConcurrentHashMap<SchemaWrapper, Set<SchemaObject>>();
+        schemaObjectsBySchemaName = new ConcurrentHashMap<String, Set<SchemaWrapper>>();
+        usedBy = new ConcurrentHashMap<SchemaWrapper, Set<SchemaWrapper>>();
+        using = new ConcurrentHashMap<SchemaWrapper, Set<SchemaWrapper>>();
     }
 
     
@@ -848,7 +848,7 @@
     {
         SchemaWrapper wrapper = new SchemaWrapper( schemaObject );
         
-        Set<SchemaObject> set = using.get( wrapper );
+        Set<SchemaWrapper> set = usedBy.get( wrapper );
         
         return ( set != null ) && ( set.size() != 0 );
     }
@@ -860,7 +860,7 @@
      * @param schemaObject The SchemaObject we are looking for
      * @return The Set of referencing SchemaObject, or null 
      */
-    public Set<SchemaObject> getUsedBy( SchemaObject schemaObject )
+    public Set<SchemaWrapper> getUsedBy( SchemaObject schemaObject )
     {
         SchemaWrapper wrapper = new SchemaWrapper( schemaObject );
         
@@ -868,13 +868,78 @@
     }
 
     
+    public String dumpUsedBy()
+    {
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append(  "USED BY :\n" );
+        
+        for ( SchemaWrapper wrapper : usedBy.keySet() )
+        {
+            sb.append( wrapper.get().getObjectType() ).append( '[' ).append( wrapper.get().getOid() ).append( "] : {" );
+            
+            boolean isFirst = true;
+            
+            for ( SchemaWrapper uses : usedBy.get( wrapper) )
+            {
+                if ( isFirst )
+                {
+                    isFirst = false;
+                }
+                else
+                {
+                    sb.append( ", " );
+                }
+                
+                sb.append( uses.get().getObjectType() ).append( '[' ).append( wrapper.get().getOid() ).append( "]" );
+            }
+            
+            sb.append( "}\n" );
+        }
+        
+        return sb.toString();
+    }
+
+    
+    public String dumpUsing()
+    {
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append(  "USING :\n" );
+
+        for ( SchemaWrapper wrapper : using.keySet() )
+        {
+            sb.append( wrapper.get().getObjectType() ).append( '[' ).append( wrapper.get().getOid() ).append( "] : {" );
+            
+            boolean isFirst = true;
+            
+            for ( SchemaWrapper uses : using.get( wrapper) )
+            {
+                if ( isFirst )
+                {
+                    isFirst = false;
+                }
+                else
+                {
+                    sb.append( ", " );
+                }
+                
+                sb.append( uses.get().getObjectType() ).append( '[' ).append( wrapper.get().getOid() ).append( "]" );
+            }
+            
+            sb.append( "}\n" );
+        }
+        
+        return sb.toString();
+    }
+    
     /**
      * Gets the Set of SchemaObjects referenced by the given SchemaObject
      *
      * @param schemaObject The SchemaObject we are looking for
      * @return The Set of referenced SchemaObject, or null 
      */
-    public Set<SchemaObject> getUsing( SchemaObject schemaObject )
+    public Set<SchemaWrapper> getUsing( SchemaObject schemaObject )
     {
         SchemaWrapper wrapper = new SchemaWrapper( schemaObject );
         
@@ -897,15 +962,17 @@
         
         SchemaWrapper wrapper = new SchemaWrapper( reference );
         
-        Set<SchemaObject> usedBy = getUsedBy( reference );
+        Set<SchemaWrapper> uses = getUsing( reference );
         
-        if ( usedBy == null )
+        if ( uses == null )
         {
-            usedBy = new HashSet<SchemaObject>();
-            using.put( wrapper, usedBy );
+            uses = new HashSet<SchemaWrapper>();
         }
         
-        usedBy.add( referee );
+        uses.add( new SchemaWrapper( referee ) );
+        
+        // Put back the set (this is a concurrentHashMap, it won't be replaced implicitly
+        using.put( wrapper, uses );
     }
     
     
@@ -917,8 +984,13 @@
      */
     public void addReference( SchemaObject reference, SchemaObject referee )
     {
+        dump( "add", reference, referee );
+
         addUsing( reference, referee );
         addUsedBy( referee, reference );
+
+        System.out.println( dumpUsedBy() );
+        System.out.println( dumpUsing() );
     }
 
 
@@ -934,17 +1006,20 @@
         {
             return;
         }
+        
         SchemaWrapper wrapper = new SchemaWrapper( referee );
         
-        Set<SchemaObject> using = getUsing( referee );
+        Set<SchemaWrapper> uses = getUsedBy( referee );
         
-        if ( using == null )
+        if ( uses == null )
         {
-            using = new HashSet<SchemaObject>();
-            usedBy.put( wrapper, using );
+            uses = new HashSet<SchemaWrapper>();
         }
         
-        using.add( reference );
+        uses.add( new SchemaWrapper( reference ) );
+        
+        // Put back the set (this is a concurrentHashMap, it won't be replaced implicitly
+        usedBy.put( wrapper, uses );
     }
     
     
@@ -961,21 +1036,25 @@
             return;
         }
         
-        Set<SchemaObject> usedBy = getUsedBy( reference );
+        Set<SchemaWrapper> uses = getUsing( reference );
         
-        if ( usedBy == null )
+        if ( uses == null )
         {
             return;
         }
         
-        usedBy.remove( referee );
+        uses.remove( new SchemaWrapper( referee ) );
+        
+        SchemaWrapper wrapper = new SchemaWrapper( reference );
         
-        if ( usedBy.size() == 0 )
+        if ( uses.size() == 0 )
         {
-            SchemaWrapper wrapper = new SchemaWrapper( reference );
-            
             using.remove( wrapper );
         }
+        else
+        {
+            using.put( wrapper, uses );
+        }
         
         return;
     }
@@ -994,21 +1073,25 @@
             return;
         }
 
-        Set<SchemaObject> using = getUsing( referee );
+        Set<SchemaWrapper> uses = getUsedBy( referee );
         
-        if ( using == null )
+        if ( uses == null )
         {
             return;
         }
         
-        using.remove( reference );
+        uses.remove( new SchemaWrapper( reference ) );
         
-        if ( using.size() == 0 )
+        SchemaWrapper wrapper = new SchemaWrapper( referee );
+
+        if ( uses.size() == 0 )
         {
-            SchemaWrapper wrapper = new SchemaWrapper( referee );
-            
             usedBy.remove( wrapper );
         }
+        else
+        {
+            usedBy.put( wrapper, uses );
+        }
         
         return;
     }
@@ -1022,7 +1105,16 @@
      */
     public void delReference( SchemaObject reference, SchemaObject referee )
     {
+        dump( "del", reference, referee );
         delUsing( reference, referee );
         delUsedBy( referee, reference );
+        System.out.println( dumpUsedBy() );
+        System.out.println( dumpUsing() );
+    }
+    
+    
+    private void dump( String op, SchemaObject reference, SchemaObject referee )
+    {
+        System.out.println( op + " : " + reference.getObjectType() + "[" + reference.getOid() + "]/[" + referee.getObjectType() + "[" + referee.getOid() +"]" );
     }
 }