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 2006/08/18 16:12:02 UTC

svn commit: r432593 - in /directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap: ldif/LdifUtils.java message/LockableAttributesImpl.java

Author: akarasulu
Date: Fri Aug 18 07:12:02 2006
New Revision: 432593

URL: http://svn.apache.org/viewvc?rev=432593&view=rev
Log:
applying second set of patches for DIRSERVER-612

Modified:
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifUtils.java
    directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/message/LockableAttributesImpl.java

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifUtils.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifUtils.java?rev=432593&r1=432592&r2=432593&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifUtils.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifUtils.java Fri Aug 18 07:12:02 2006
@@ -16,6 +16,13 @@
  */
 package org.apache.directory.shared.ldap.ldif;
 
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+
+import org.apache.directory.shared.ldap.util.Base64;
+
 
 /**
  * Some LDIF useful methods
@@ -101,5 +108,119 @@
     	// The String cannot end with a space
     	return ( currentChar != ' ' );
     }
+    
+    /**
+     * Convert an Attributes as LDIF
+     * @param attrs the Attributes to convert
+     * @return the corresponding LDIF code as a String
+     * @throws NamingException If a naming exception is encountered.
+     */
+    public static String convertToLdif( Attributes attrs ) throws NamingException
+    {
+		StringBuffer sb = new StringBuffer();
+		
+		NamingEnumeration ne = attrs.getAll();
+		
+		while ( ne.hasMore() )
+		{
+			Object attribute = ne.next();
+			if (attribute instanceof Attribute) {
+				sb.append( convertToLdif( (Attribute) attribute ) );
+			}			
+		}
+		
+		return sb.toString();
+	}
+    
+    /**
+     * Converts an Attribute as LDIF
+     * @param attr the Attribute to convert
+     * @return the corresponding LDIF code as a String
+     * @throws NamingException If a naming exception is encountered.
+     */
+	private static String convertToLdif(Attribute attr) throws NamingException
+	{
+		StringBuffer sb = new StringBuffer();
+		
+		// iterating on the attribute's values
+		for ( int i = 0; i < attr.size(); i++ )
+        {
+			StringBuffer lineBuffer = new StringBuffer();
+			
+			lineBuffer.append( attr.getID() );
+			
+			Object value = attr.get(i);
+            
+            // Checking if the value is binary
+            if ( value instanceof byte[] )
+            {
+            	// It is binary, so we have to encode it using Base64 before adding it
+            	char[] encoded = Base64.encode( ( byte[] ) value );
+            	
+            	lineBuffer.append( ":: " + new String( encoded ) );                        	
+            }
+            else if ( value instanceof String )
+            {
+            	// It's a String but, we have to check if encoding isn't required
+            	String str = (String) value;
+            	if ( !LdifUtils.isLDIFSafe( str ) )
+            	{
+            		char[] encoded = Base64.encode( ( ( String ) value ).getBytes() );
+            		
+            		lineBuffer.append( ":: " + new String( encoded ) );
+            	}
+            	else
+            	{
+            		lineBuffer.append( ": " + value );
+            	}
+            }
+            
+            lineBuffer.append( "\n" );
+            sb.append( stripLineToNChars(lineBuffer.toString(), 80));
+        }
+		
+		return sb.toString();
+	}
+	
+	/**
+	 * Strips the String every n specified characters
+	 * @param str the string to strip
+	 * @param nbChars the number of characters
+	 * @return the stripped String
+	 */
+	private static String stripLineToNChars( String str, int nbChars)
+	{
+		if ( str.length() <= nbChars )
+		{
+			return str;
+		}
+		
+		StringBuffer sb = new StringBuffer();
+		String substr;
+		int i = 0;
+		boolean firstPass = true;
+		
+		while ( i < (str.length() - nbChars) ) {
+			if ( firstPass )
+			{
+				substr = str.substring( i, i + nbChars);
+				firstPass = false;
+				// Since we add a space at the beginning of the next line,
+				// we need to update nbChars
+				nbChars--;
+			}
+			else
+			{
+				substr = str.substring( i, i + nbChars );
+			}
+			
+			sb.append( substr + "\n " );
+			i = i + nbChars;
+		}
+		// Adding the last characters
+		sb.append( str.substring(i, str.length() ) );
+		
+		return sb.toString();
+	}
 }
 

Modified: directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/message/LockableAttributesImpl.java
URL: http://svn.apache.org/viewvc/directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/message/LockableAttributesImpl.java?rev=432593&r1=432592&r2=432593&view=diff
==============================================================================
--- directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/message/LockableAttributesImpl.java (original)
+++ directory/branches/shared/0.9.5/ldap/src/main/java/org/apache/directory/shared/ldap/message/LockableAttributesImpl.java Fri Aug 18 07:12:02 2006
@@ -471,7 +471,7 @@
 
 
     /**
-     * Prints out the attributes as an LDIF.
+     * Returns a string representation of the object.
      * 
      * @see java.lang.Object#toString()
      */