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 2017/04/17 11:15:00 UTC

svn commit: r1791680 - in /directory/shared/branches/shared-value/ldap: model/src/main/java/org/apache/directory/api/ldap/model/ldif/ model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/ schema/data/src/main/java/org/apache/di...

Author: elecharny
Date: Mon Apr 17 11:14:59 2017
New Revision: 1791680

URL: http://svn.apache.org/viewvc?rev=1791680&view=rev
Log:
Ported modifications made in trunk

Modified:
    directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReader.java
    directory/shared/branches/shared-value/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/DummySyntaxChecker.java
    directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/AttributeClassLoader.java
    directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/SchemaEntityFactory.java

Modified: directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReader.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReader.java?rev=1791680&r1=1791679&r2=1791680&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReader.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReader.java Mon Apr 17 11:14:59 2017
@@ -369,13 +369,15 @@ public class LdifAttributesReader extend
     /**
      * Parse a ldif file. The following rules are processed :
      *
+     * <pre>
      * &lt;ldif-file&gt; ::= &lt;ldif-attrval-record&gt; &lt;ldif-attrval-records&gt; |
      * &lt;ldif-change-record&gt; &lt;ldif-change-records&gt; &lt;ldif-attrval-record&gt; ::=
      * &lt;dn-spec&gt; &lt;sep&gt; &lt;attrval-spec&gt; &lt;attrval-specs&gt; &lt;ldif-change-record&gt; ::=
      * &lt;dn-spec&gt; &lt;sep&gt; &lt;controls-e&gt; &lt;changerecord&gt; &lt;dn-spec&gt; ::= "dn:" &lt;fill&gt;
      * &lt;distinguishedName&gt; | "dn::" &lt;fill&gt; &lt;base64-distinguishedName&gt;
      * &lt;changerecord&gt; ::= "changetype:" &lt;fill&gt; &lt;change-op&gt;
-     *
+     * </pre>
+     * 
      * @return The read entry
      * @throws LdapLdifException If the entry can't be read or is invalid
      */

Modified: directory/shared/branches/shared-value/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/DummySyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/DummySyntaxChecker.java?rev=1791680&r1=1791679&r2=1791680&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/DummySyntaxChecker.java (original)
+++ directory/shared/branches/shared-value/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxCheckers/DummySyntaxChecker.java Mon Apr 17 11:14:59 2017
@@ -33,20 +33,46 @@ import org.apache.directory.api.ldap.mod
 public class DummySyntaxChecker extends SyntaxChecker
 {
     /**
-     * Creates a new instance of DummySyntaxChecker.
+     * A static Builder for this class
      */
-    public DummySyntaxChecker()
+    public static final class Builder extends SCBuilder<DummySyntaxChecker>
     {
-        super( SchemaConstants.OCTET_STRING_SYNTAX );
+        /**
+         * The Builder constructor
+         */
+        private Builder()
+        {
+            super( SchemaConstants.OCTET_STRING_SYNTAX );
+        }
+        
+        
+        /**
+         * Create a new instance of DummySyntaxChecker
+         * @return A new instance of DummySyntaxChecker
+         */
+        @Override
+        public DummySyntaxChecker build()
+        {
+            return new DummySyntaxChecker( oid );
+        }
     }
 
 
     /**
+     * @return An instance of the Builder for this class
+     */
+    public static Builder builder()
+    {
+        return new Builder();
+    }
+
+    
+    /**
      * Creates a new instance of DummySyntaxChecker, with a specific OID
      * 
      * @param oid The Syntax's OID 
      */
-    public DummySyntaxChecker( String oid )
+    private DummySyntaxChecker( String oid )
     {
         super( oid );
     }

Modified: directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/AttributeClassLoader.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/AttributeClassLoader.java?rev=1791680&r1=1791679&r2=1791680&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/AttributeClassLoader.java (original)
+++ directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/AttributeClassLoader.java Mon Apr 17 11:14:59 2017
@@ -20,12 +20,21 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
 import org.apache.directory.api.i18n.I18n;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.Value;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
 
 
 /**
@@ -35,7 +44,6 @@ import org.apache.directory.api.ldap.mod
  */
 public class AttributeClassLoader extends ClassLoader
 {
-
     /** The attribute. */
     private Attribute attribute;
 
@@ -65,6 +73,64 @@ public class AttributeClassLoader extend
 
         this.attribute = attribute;
     }
+    
+    
+    /**
+     * Read data from a jar, and write them into a byte[]
+     */
+    private static byte[] getBytes( InputStream input ) throws IOException 
+    {
+        ByteArrayOutputStream result = new ByteArrayOutputStream();
+
+        byte[] buf = new byte[2048];
+        int bytesRead = input.read( buf );
+
+        while ( bytesRead != -1 ) 
+        {
+            result.write( buf, 0, bytesRead );
+            bytesRead = input.read( buf );
+        }
+      
+        result.flush();
+        result.close();
+        
+        return result.toByteArray();
+    }
+
+    
+    private Map<String, Class<?>> loadClasses( byte[] jarBytes ) throws IOException 
+    {
+        Map<String, Class<?>> map = new HashMap<>();
+        
+        try ( JarInputStream jis = new JarInputStream( new ByteArrayInputStream( jarBytes ) ) ) 
+        {
+            JarEntry entry;
+            boolean isJar = false;
+            
+            while ( ( entry = jis.getNextJarEntry() ) != null ) 
+            {
+                String fileName = entry.getName();
+                isJar = true;
+                
+                // Just consider the files ending with .class
+                if ( fileName.endsWith( ".class" ) )
+                {
+                    String className = fileName.substring( 0,  fileName.length() - ".class".length() ).replace( '/', '.' );
+                    byte[] classBytes = getBytes( jis );
+                    
+                    Class<?> clazz = defineClass( className, classBytes, 0, classBytes.length );
+                    map.put( className, clazz );
+                }
+            }
+            
+            if ( !isJar )
+            {
+                return null;
+            }
+        }
+
+        return map;
+    }
 
 
     /**
@@ -84,6 +150,31 @@ public class AttributeClassLoader extend
 
         classBytes = value.getBytes();
 
-        return defineClass( name, classBytes, 0, classBytes.length );
+        // May be we are dealing with a JAR ?
+        try 
+        {
+            Map<String, Class<?>> classes = loadClasses( classBytes );
+            
+            if ( classes == null )
+            {
+                // May be a simple class ?
+                return defineClass( name, classBytes, 0, classBytes.length );
+            }
+            
+            for ( Map.Entry<String, Class<?>> entry : classes.entrySet() )
+            {
+                if ( entry.getKey().contains( name ) )
+                {
+                    return entry.getValue();
+                }
+            }
+        }
+        catch ( IOException ioe )
+        {
+            // Ok, may be a pure class
+            return defineClass( name, classBytes, 0, classBytes.length );
+        }
+        
+        return null;
     }
 }

Modified: directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/SchemaEntityFactory.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/SchemaEntityFactory.java?rev=1791680&r1=1791679&r2=1791680&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/SchemaEntityFactory.java (original)
+++ directory/shared/branches/shared-value/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/loader/SchemaEntityFactory.java Mon Apr 17 11:14:59 2017
@@ -306,7 +306,7 @@ public class SchemaEntityFactory impleme
                 LOG.error( "Cannot load the syntax checker class constructor for class {}", className );
                 throw new LdapSchemaException( "Cannot load the syntax checker class " + cnfe.getMessage() );
             }
-                
+            
             byteCodeStr = new String( Base64.encode( byteCode.getBytes() ) );
         }