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 2015/10/20 18:16:03 UTC

svn commit: r1709634 - /directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java

Author: elecharny
Date: Tue Oct 20 16:16:03 2015
New Revision: 1709634

URL: http://svn.apache.org/viewvc?rev=1709634&view=rev
Log:
o Injected the SchemaManager into the LdifAnonymizer
o Allow the addition of some dedicated anonymizers
o Check for missing NamingContext
o Added a Writer so that the result is written on the flow, instead of accumulating the result in a String, to avoid OOM
o Added some output to expose the progression
o Handle a few errors

Modified:
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java

Modified: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java?rev=1709634&r1=1709633&r2=1709634&view=diff
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java (original)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java Tue Oct 20 16:16:03 2015
@@ -22,8 +22,11 @@ package org.apache.directory.ldap.client
 
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -235,7 +238,7 @@ public class LdifAnonymizer
             {
                 attributeAnonymizers.put( attributeType.getOid(), new IntegerAnonymizer() );
             }
-            else
+            if ( syntax.getOid().equals( SchemaConstants.DIRECTORY_STRING_SYNTAX ) )
             {
                 attributeAnonymizers.put( attributeType.getOid(), new StringAnonymizer() );
             }
@@ -248,6 +251,20 @@ public class LdifAnonymizer
     
     
     /**
+     * Add an attributeType that has to be anonymized, with its associated anonymizer.
+     *
+     * @param attributeType the AttributeType that has to be anonymized
+     * @param anonymizer the instance of anonymizer to use with this AttributeType
+     * @throws LdapException If the attributeType cannot be added
+     */
+    public void addAnonAttributeType( AttributeType attributeType, Anonymizer<?> anonymizer ) throws LdapException
+    {
+        schemaManager.add( attributeType );
+        attributeAnonymizers.put( attributeType.getOid(), anonymizer );
+    }
+    
+    
+    /**
      * Remove an attributeType that has to be anonymized
      *
      * @param attributeType the AttributeType that we don't want to be anonymized
@@ -286,7 +303,7 @@ public class LdifAnonymizer
         {
             Attribute attribute = new DefaultAttribute( attributeType );
             attribute.add( value );
-            Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType() );
+            Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType().getOid() );
 
             if ( value.isHumanReadable() )
             {
@@ -349,6 +366,11 @@ public class LdifAnonymizer
                 break;
             }
         }
+        
+        if ( namingContext == null )
+        {
+            throw new LdapException( "No naming context attached with this entry : " + entryDn );
+        }
 
         Rdn[] anonymizedRdns = new Rdn[entryDn.size()];
         int rdnPos = entryDn.size() - 1;
@@ -393,66 +415,121 @@ public class LdifAnonymizer
      * @throws LdapException If we got some LDAP related exception
      * @throws IOException If we had some issue during some IO operations
      */
-    public String anonymizeFile( String ldifFile ) throws LdapException, IOException
+    public void anonymizeFile( String ldifFile, Writer writer ) throws LdapException, IOException
     {
-        LdifReader ldifReader = new LdifReader( schemaManager );
+        File inputFile = new File( ldifFile );
+        
+        if ( !inputFile.exists() )
+        {
+            System.out.println( "Cannot open file " + ldifFile );
+            return;
+        }
+        
+        LdifReader ldifReader = new LdifReader( inputFile, schemaManager );
+        int count = 0;
+        List<LdifEntry> errors = new ArrayList<LdifEntry>();
 
         try
         {
-            List<LdifEntry> entries = ldifReader.parseLdifFile( ldifFile );
-            StringBuilder result = new StringBuilder();
-
-            for ( LdifEntry ldifEntry : entries )
+            for ( LdifEntry ldifEntry : ldifReader )
             {
-                Entry entry = ldifEntry.getEntry();
-                Entry newEntry = new DefaultEntry( schemaManager );
-
-                // Process the DN first
-                Dn entryDn = entry.getDn();
+                count++;
                 
-                Dn anonymizedDn = anonymizeDn( entryDn );
-
-                // Now, process the entry
-                for ( Attribute attribute : entry )
+                try
                 {
-                    AttributeType attributeType = attribute.getAttributeType();
+                    Entry entry = ldifEntry.getEntry();
+                    Entry newEntry = new DefaultEntry( schemaManager );
+    
+                    // Process the DN first
+                    Dn entryDn = entry.getDn();
                     
-                    if ( attributeType.getSyntax().getSyntaxChecker() instanceof DnSyntaxChecker )
+                    Dn anonymizedDn = anonymizeDn( entryDn );
+                    
+                    if ( anonymizedDn == null )
                     {
-                        for ( Value<?> dnValue : attribute )
-                        {
-                            Dn dn = new Dn( schemaManager, dnValue.getString() );
-                            Dn newdDn = anonymizeDn( dn );
-                            newEntry.add( attributeType, newdDn.toString() );
-                        }
+                        // Wrong entry base DN
+                        continue;
                     }
-                    else
-                    {
-                        int h = attribute.getAttributeType().hashCode();
-                        Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType().getOid() );
     
-                        if ( anonymizer == null )
+                    // Now, process the entry
+                    for ( Attribute attribute : entry )
+                    {
+                        AttributeType attributeType = attribute.getAttributeType();
+                        
+                        if ( attributeType.getSyntax().getSyntaxChecker() instanceof DnSyntaxChecker )
                         {
-                            newEntry.add( attribute );
+                            for ( Value<?> dnValue : attribute )
+                            {
+                                String dnStr = dnValue.getString();
+                                Dn dn = new Dn( schemaManager, dnStr );
+                                Dn newdDn = anonymizeDn( dn );
+                                newEntry.add( attributeType, newdDn.toString() );
+                            }
                         }
                         else
                         {
-                            Attribute anonymizedAttribute = anonymizer.anonymize( valueMap, attribute );
-    
-                            newEntry.add( anonymizedAttribute );
+                            Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType().getOid() );
+        
+                            if ( anonymizer == null )
+                            {
+                                newEntry.add( attribute );
+                            }
+                            else
+                            {
+                                Attribute anonymizedAttribute = anonymizer.anonymize( valueMap, attribute );
+        
+                                newEntry.add( anonymizedAttribute );
+                            }
                         }
                     }
+
+                    newEntry.setDn( anonymizedDn );
+                    writer.write( LdifUtils.convertToLdif( newEntry ) );
+                    writer.write( "\n" );
+
+                    System.out.print( '.' );
+                    
+                    if ( count % 100  == 0 )
+                    {
+                        System.out.println();
+                    }
                 }
+                catch ( Exception e )
+                {
+                    System.out.print( '*' );
 
-                newEntry.setDn( anonymizedDn );
-                result.append( LdifUtils.convertToLdif( newEntry ) );
-                result.append( "\n" );
+                    if ( count % 100  == 0 )
+                    {
+                        System.out.println();
+                    }
+                    
+                    errors.add( ldifEntry );
+                }
             }
 
-            return result.toString();
+            System.out.println();
+            
+            if ( errors.size() != 0 )
+            {
+                System.out.println( "There are " + errors.size() + " bad entries" );
+                
+                for ( LdifEntry ldifEntry : errors )
+                {
+                    System.out.println( "---------------------------------------------------" );
+                    System.out.println( ldifEntry.getDn() );
+                }
+            }
         }
         finally
         {
+            System.out.println();
+
+            if ( errors.size() != 0 )
+            {
+                System.out.println( "There are " + errors.size() + " bad entries" );
+            }
+                
+            System.out.println( "Nb entries : " + count ); 
             ldifReader.close();
         }
     }
@@ -484,12 +561,19 @@ public class LdifAnonymizer
                 Dn entryDn = entry.getDn();
                 
                 Dn anonymizedDn = anonymizeDn( entryDn );
+                
+                if ( anonymizedDn == null )
+                {
+                    continue;
+                }
 
                 // Now, process the entry
                 for ( Attribute attribute : entry )
                 {
                     AttributeType attributeType = attribute.getAttributeType();
                     
+                    // Deal with the special case of 
+                    
                     if ( attributeType.getSyntax().getSyntaxChecker() instanceof DnSyntaxChecker )
                     {
                         for ( Value<?> dnValue : attribute )
@@ -501,7 +585,7 @@ public class LdifAnonymizer
                     }
                     else
                     {
-                        Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType() );
+                        Anonymizer anonymizer = attributeAnonymizers.get( attribute.getAttributeType().getOid() );
     
                         if ( anonymizer == null )
                         {
@@ -510,8 +594,11 @@ public class LdifAnonymizer
                         else
                         {
                             Attribute anonymizedAttribute = anonymizer.anonymize( valueMap, attribute );
-    
-                            newEntry.add( anonymizedAttribute );
+                            
+                            if ( anonymizedAttribute != null )
+                            {
+                                newEntry.add( anonymizedAttribute );
+                            }
                         }
                     }
                 }
@@ -523,6 +610,11 @@ public class LdifAnonymizer
 
             return result.toString();
         }
+        catch ( Exception e )
+        {
+            System.out.println( "Error :"  + e.getMessage() );
+            return null;
+        }
         finally
         {
             ldifReader.close();