You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/12/12 10:48:41 UTC

svn commit: r486074 - in /directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2: ./ reponse/

Author: pamarcelot
Date: Tue Dec 12 01:48:40 2006
New Revision: 486074

URL: http://svn.apache.org/viewvc?view=rev&rev=486074
Log:
Resolving DIRSTUDIO-15 (In a DSML Response, the DSML Writer should encode values in Base64 when needed).

Modified:
    directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/ParserUtils.java
    directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/ExtendedResponseDsml.java
    directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/LdapResultDsml.java
    directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/SearchResultEntryDsml.java

Modified: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/ParserUtils.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/ParserUtils.java?view=diff&rev=486074&r1=486073&r2=486074
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/ParserUtils.java (original)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/ParserUtils.java Tue Dec 12 01:48:40 2006
@@ -1,12 +1,15 @@
 
 package org.apache.directory.ldapstudio.dsmlv2;
 
+import org.apache.directory.shared.ldap.ldif.LdifUtils;
+import org.apache.directory.shared.ldap.util.Base64;
 import org.xmlpull.v1.XmlPullParser;
 
 public class ParserUtils
 {
-    private static final String XML_SCHEMA_URI = "http://www.w3c.org/2001/XMLSchema";
-    private static final String XML_SCHEMA_INSTANCE_URI = "http://www.w3c.org/2001/XMLSchema-instance";
+    public static final String XML_SCHEMA_URI = "http://www.w3c.org/2001/XMLSchema";
+    public static final String XML_SCHEMA_INSTANCE_URI = "http://www.w3c.org/2001/XMLSchema-instance";
+    public static final String BASE64BINARY = "base64Binary";
 
     
     /**
@@ -49,6 +52,45 @@
         String [] splitedString = attrValue.split( ":" );
         return ( splitedString.length == 2 ) 
                 && ( XML_SCHEMA_URI.equals( parser.getNamespace( splitedString[0] ) ) ) 
-                && ( "base64Binary".equals( splitedString[1] ) );
+                && ( BASE64BINARY.equals( splitedString[1] ) );
+    }
+    
+    /**
+     * Indicates if the value needs to be encoded as Base64
+     *
+     * @param value the value to check
+     * @return true if the value needs to be encoded as Base64
+     */
+    public static boolean needsBase64Encoding( Object value )
+    {
+        if ( value instanceof byte[] )
+        {
+            return true;
+        }
+        else if ( value instanceof String )
+        {
+            return !LdifUtils.isLDIFSafe( (String) value );
+        }
+        return true;
+    }
+    
+    /**
+     * Encodes the value as a Base64 String
+     *
+     * @param value the value to encode
+     * @return the value encoded as a Base64 String 
+     */
+    public static String base64Encode( Object value )
+    {
+        if ( value instanceof byte[] )
+        {
+            return new String( Base64.encode( (byte[]) value ) );
+        }
+        else if ( value instanceof String )
+        {
+            return new String( Base64.encode( (( String ) value).getBytes() ) );
+        }
+        
+        return "";
     }
 }

Modified: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/ExtendedResponseDsml.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/ExtendedResponseDsml.java?view=diff&rev=486074&r1=486073&r2=486074
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/ExtendedResponseDsml.java (original)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/ExtendedResponseDsml.java Tue Dec 12 01:48:40 2006
@@ -20,9 +20,12 @@
 
 package org.apache.directory.ldapstudio.dsmlv2.reponse;
 
-
+import org.apache.directory.ldapstudio.dsmlv2.ParserUtils;
 import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.codec.extended.ExtendedResponse;
 import org.dom4j.Element;
+import org.dom4j.Namespace;
+import org.dom4j.QName;
 
 
 /**
@@ -59,13 +62,39 @@
     public Element toDsml( Element root )
     {
         Element element = root.addElement( "extendedResponse" );
+        ExtendedResponse extendedResponse = instance.getExtendedResponse();
 
-        LdapResultDsml ldapResultDsml = new LdapResultDsml( instance.getExtendedResponse().getLdapResult(), instance );
+        // LDAP Result
+        LdapResultDsml ldapResultDsml = new LdapResultDsml( extendedResponse.getLdapResult(), instance );
         ldapResultDsml.toDsml( element );
-
-        // TODO add management for ReponseName and Response Tag
-
+        
+        // ResponseName
+        String responseName = extendedResponse.getResponseName();
+        if ( responseName != null )
+        {
+            element.addElement( "responseName").addText( responseName );
+        }
+        
+        // Response
+        Object response = extendedResponse.getResponse();
+        if ( response != null )
+        {
+            if ( ParserUtils.needsBase64Encoding( response ) )
+            {
+                Namespace xsdNamespace = new Namespace( "xsd", ParserUtils.XML_SCHEMA_URI );
+                Namespace xsiNamespace = new Namespace( "xsi", ParserUtils.XML_SCHEMA_INSTANCE_URI );
+                element.getDocument().getRootElement().add( xsdNamespace );
+                element.getDocument().getRootElement().add( xsiNamespace );
+                
+                Element responseElement = element.addElement( "response").addText( ParserUtils.base64Encode( response ) );
+                responseElement.addAttribute( new QName("type", xsiNamespace), "xsd:" + ParserUtils.BASE64BINARY );
+            }
+            else
+            {
+                element.addElement( "response").addText( response.toString() );
+            }
+        }
+        
         return element;
     }
-
 }

Modified: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/LdapResultDsml.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/LdapResultDsml.java?view=diff&rev=486074&r1=486073&r2=486074
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/LdapResultDsml.java (original)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/LdapResultDsml.java Tue Dec 12 01:48:40 2006
@@ -80,7 +80,7 @@
 
         // ErrorMessage
         String errorMessage = ( result.getErrorMessage() );
-        if ( !errorMessage.equals( "" ) )
+        if ( ( errorMessage != null ) && ( !errorMessage.equals( "" ) ) )
         {
             Element errorMessageElement = root.addElement( "errorMessage" );
             errorMessageElement.addText( errorMessage );

Modified: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/SearchResultEntryDsml.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/SearchResultEntryDsml.java?view=diff&rev=486074&r1=486073&r2=486074
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/SearchResultEntryDsml.java (original)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-dsml-parser/src/main/java/org/apache/directory/ldapstudio/dsmlv2/reponse/SearchResultEntryDsml.java Tue Dec 12 01:48:40 2006
@@ -26,9 +26,12 @@
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 
+import org.apache.directory.ldapstudio.dsmlv2.ParserUtils;
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.search.SearchResultEntry;
 import org.dom4j.Element;
+import org.dom4j.Namespace;
+import org.dom4j.QName;
 
 
 /**
@@ -78,15 +81,29 @@
             Element attributeElement = element.addElement( "attr" );
             attributeElement.addAttribute( "name", attribute.getID() );
 
-            // Loopint on Values Enumeration
+            // Looping on Values Enumeration
             try
             {
                 NamingEnumeration ne2 = attribute.getAll();
 
                 while ( ne2.hasMoreElements() )
                 {
-                    String str = ne2.nextElement().toString();
-                    attributeElement.addElement( "value" ).addText( str );
+                    Object value = ne2.nextElement();
+                    
+                    if ( ParserUtils.needsBase64Encoding( value ) )
+                    {
+                        Namespace xsdNamespace = new Namespace( "xsd", ParserUtils.XML_SCHEMA_URI );
+                        Namespace xsiNamespace = new Namespace( "xsi", ParserUtils.XML_SCHEMA_INSTANCE_URI );
+                        attributeElement.getDocument().getRootElement().add( xsdNamespace );
+                        attributeElement.getDocument().getRootElement().add( xsiNamespace );
+                        
+                        Element valueElement = attributeElement.addElement( "value" ).addText( ParserUtils.base64Encode( value ) );
+                        valueElement.addAttribute( new QName("type", xsiNamespace), "xsd:" + ParserUtils.BASE64BINARY );
+                    }
+                    else
+                    {
+                        attributeElement.addElement( "value" ).addText( value.toString() );
+                    }
                 }
             }
             catch ( NamingException e )
@@ -98,5 +115,4 @@
 
         return element;
     }
-
 }