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 2014/03/17 07:59:40 UTC

svn commit: r1578246 - in /directory/shared/trunk/ldap: codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/ codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/ extras/codec/src/main/java/org/apache/directory/ap...

Author: elecharny
Date: Mon Mar 17 06:59:39 2014
New Revision: 1578246

URL: http://svn.apache.org/r1578246
Log:
o Made the StandaloneLdapApiService class inherit from DefaultLdapCodecService in order to eliminate duplicate code
o The Cancel class now refers to the CancelRequest class internally to avoid the duplication of fields
o The PasswordModifyFactory does not set the value if it's null

Modified:
    directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java
    directory/shared/trunk/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/StandaloneLdapApiService.java
    directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/Cancel.java
    directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java

Modified: directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java?rev=1578246&r1=1578245&r2=1578246&view=diff
==============================================================================
--- directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java (original)
+++ directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/api/ldap/codec/osgi/DefaultLdapCodecService.java Mon Mar 17 06:59:39 2014
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.Map;
 
 import javax.naming.NamingException;
+import javax.naming.ldap.BasicControl;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
@@ -34,8 +35,8 @@ import org.apache.directory.api.asn1.ber
 import org.apache.directory.api.ldap.codec.BasicControlDecorator;
 import org.apache.directory.api.ldap.codec.api.CodecControl;
 import org.apache.directory.api.ldap.codec.api.ControlFactory;
-import org.apache.directory.api.ldap.codec.api.ExtendedRequestDecorator;
 import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
+import org.apache.directory.api.ldap.codec.api.ExtendedRequestDecorator;
 import org.apache.directory.api.ldap.codec.api.ExtendedResponseDecorator;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
@@ -72,13 +73,13 @@ public class DefaultLdapCodecService imp
     private static final Logger LOG = LoggerFactory.getLogger( DefaultLdapCodecService.class );
 
     /** The map of registered {@link org.apache.directory.api.ldap.codec.api.ControlFactory}'s */
-    private Map<String, ControlFactory<?, ?>> controlFactories = new HashMap<String, ControlFactory<?, ?>>();
+    protected Map<String, ControlFactory<?, ?>> controlFactories = new HashMap<String, ControlFactory<?, ?>>();
 
     /** The map of registered {@link org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory}'s by request OID */
-    private Map<String, ExtendedOperationFactory<?, ?>> extendedOperationsFactories = new HashMap<String, ExtendedOperationFactory<?, ?>>();
+    protected Map<String, ExtendedOperationFactory<?, ?>> extendedOperationsFactories = new HashMap<String, ExtendedOperationFactory<?, ?>>();
 
     /** The registered ProtocolCodecFactory */
-    private ProtocolCodecFactory protocolCodecFactory;
+    protected ProtocolCodecFactory protocolCodecFactory;
 
 
     /**
@@ -250,8 +251,8 @@ public class DefaultLdapCodecService imp
         ByteBuffer bb = ByteBuffer.allocate( decorator.computeLength() );
         decorator.encode( bb );
         bb.flip();
-        javax.naming.ldap.BasicControl jndiControl =
-            new javax.naming.ldap.BasicControl( control.getOid(), control.isCritical(), bb.array() );
+        BasicControl jndiControl =
+            new BasicControl( control.getOid(), control.isCritical(), bb.array() );
         return jndiControl;
     }
 
@@ -279,6 +280,7 @@ public class DefaultLdapCodecService imp
         ourControl.setCritical( control.isCritical() );
         ourControl.setValue( control.getEncodedValue() );
         ourControl.decode( control.getEncodedValue() );
+
         return ourControl;
     }
 
@@ -372,7 +374,8 @@ public class DefaultLdapCodecService imp
             public javax.naming.ldap.ExtendedResponse createExtendedResponse( String id, byte[] berValue, int offset,
                 int length ) throws NamingException
             {
-                ExtendedOperationFactory<?, ?> factory = extendedOperationsFactories.get( modelRequest.getRequestName() );
+                ExtendedOperationFactory<?, ?> factory = extendedOperationsFactories
+                    .get( modelRequest.getRequestName() );
 
                 try
                 {
@@ -413,9 +416,6 @@ public class DefaultLdapCodecService imp
 
     /**
      * {@inheritDoc}
-     */
-    /**
-     * {@inheritDoc}
      * @throws DecoderException 
      */
     @SuppressWarnings("unchecked")
@@ -426,6 +426,7 @@ public class DefaultLdapCodecService imp
         ExtendedResponseDecorator<ExtendedResponse> resp;
 
         ExtendedOperationFactory<?, ?> extendedRequestFactory = extendedOperationsFactories.get( responseName );
+
         if ( extendedRequestFactory != null )
         {
             resp = ( ExtendedResponseDecorator<ExtendedResponse> ) extendedRequestFactory
@@ -440,6 +441,7 @@ public class DefaultLdapCodecService imp
         }
 
         resp.setMessageId( messageId );
+
         return ( E ) resp;
     }
 
@@ -452,6 +454,7 @@ public class DefaultLdapCodecService imp
         ExtendedRequest<?> req = null;
 
         ExtendedOperationFactory<?, ?> extendedRequestFactory = extendedOperationsFactories.get( oid );
+
         if ( extendedRequestFactory != null )
         {
             req = extendedRequestFactory.newRequest( value );
@@ -480,6 +483,7 @@ public class DefaultLdapCodecService imp
 
         ExtendedOperationFactory<?, ?> extendedRequestFactory = extendedOperationsFactories.get( decoratedMessage
             .getRequestName() );
+
         if ( extendedRequestFactory != null )
         {
             req = extendedRequestFactory.decorate( decoratedMessage );
@@ -503,6 +507,7 @@ public class DefaultLdapCodecService imp
 
         ExtendedOperationFactory<?, ?> extendedRequestFactory = extendedOperationsFactories.get( decoratedMessage
             .getResponseName() );
+
         if ( extendedRequestFactory != null )
         {
             resp = extendedRequestFactory.decorate( decoratedMessage );

Modified: directory/shared/trunk/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/StandaloneLdapApiService.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/StandaloneLdapApiService.java?rev=1578246&r1=1578245&r2=1578246&view=diff
==============================================================================
--- directory/shared/trunk/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/StandaloneLdapApiService.java (original)
+++ directory/shared/trunk/ldap/codec/standalone/src/main/java/org/apache/directory/api/ldap/codec/standalone/StandaloneLdapApiService.java Mon Mar 17 06:59:39 2014
@@ -21,38 +21,16 @@ package org.apache.directory.api.ldap.co
 
 
 import java.lang.reflect.Constructor;
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
-import javax.naming.NamingException;
-import javax.naming.ldap.BasicControl;
-
-import org.apache.directory.api.asn1.DecoderException;
-import org.apache.directory.api.asn1.EncoderException;
-import org.apache.directory.api.asn1.ber.Asn1Container;
-import org.apache.directory.api.ldap.codec.BasicControlDecorator;
-import org.apache.directory.api.ldap.codec.api.CodecControl;
 import org.apache.directory.api.ldap.codec.api.ControlFactory;
 import org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory;
-import org.apache.directory.api.ldap.codec.api.ExtendedRequestDecorator;
-import org.apache.directory.api.ldap.codec.api.ExtendedResponseDecorator;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
-import org.apache.directory.api.ldap.codec.api.MessageDecorator;
-import org.apache.directory.api.ldap.model.message.Control;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.model.message.ExtendedRequest;
-import org.apache.directory.api.ldap.model.message.ExtendedRequestImpl;
 import org.apache.directory.api.ldap.model.message.ExtendedResponse;
-import org.apache.directory.api.ldap.model.message.ExtendedResponseImpl;
-import org.apache.directory.api.ldap.model.message.Message;
-import org.apache.directory.api.ldap.model.message.controls.OpaqueControl;
 import org.apache.directory.api.util.Strings;
-import org.apache.directory.api.util.exception.NotImplementedException;
 import org.apache.mina.filter.codec.ProtocolCodecFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,24 +38,29 @@ import org.slf4j.LoggerFactory;
 
 /**
  * The default {@link org.apache.directory.api.ldap.codec.api.LdapApiService} implementation.
+ * It loads the Controls and ExtendedOperations as defined in the following system parameters :
+ * <li>Controls :
+ * <ul>
+ * <li>apacheds.controls</li> ok
+ * <li>default.controls</li>
+ * </ul>
+ * </li>
+ * <li>ExtendedOperations
+ * <ul>
+ * <li>apacheds.extendedOperations</li> ok
+ * <li>default.extendedOperation.responses</li>
+ * <li>extra.extendedOperations</ul>
+ * </ul>
+ * </li>
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class StandaloneLdapApiService implements LdapApiService
+public class StandaloneLdapApiService extends DefaultLdapCodecService
 {
     /** A logger */
     private static final Logger LOG = LoggerFactory.getLogger( StandaloneLdapApiService.class );
 
-    /** The map of registered {@link org.apache.directory.api.ldap.codec.api.ControlFactory}'s */
-    private Map<String, ControlFactory<?, ?>> controlFactories = new HashMap<String, ControlFactory<?, ?>>();
-
-    /** The map of registered {@link org.apache.directory.api.ldap.codec.api.ExtendedOperationFactory}'s by request OID */
-    private Map<String, ExtendedOperationFactory<?, ?>> extendendOperationsFactories = new HashMap<String, ExtendedOperationFactory<?, ?>>();
-
-    /** The LDAP {@link ProtocolCodecFactory} implementation used */
-    private ProtocolCodecFactory protocolCodecFactory;
-
     /** The list of controls to load at startup */
     public static final String CONTROLS_LIST = "apacheds.controls";
 
@@ -87,15 +70,6 @@ public class StandaloneLdapApiService im
     /** The (old) list of default controls to load at startup */
     private static final String OLD_DEFAULT_CONTROLS_LIST = "default.controls";
 
-    /** The (old) list of extra controls to load at startup */
-    private static final String OLD_EXTRA_CONTROLS_LIST = "extra.controls";
-
-    /** The (old) list of default extended operation requests to load at startup */
-    private static final String OLD_DEFAULT_EXTENDED_OPERATION_REQUESTS_LIST = "default.extendedOperation.requests";
-
-    /** The (old) list of default extended operation responses to load at startup */
-    private static final String OLD_DEFAULT_EXTENDED_OPERATION_RESPONSES_LIST = "default.extendedOperation.responses";
-
     /** The (old) list of extra extended operations to load at startup */
     private static final String OLD_EXTRA_EXTENDED_OPERATION_LIST = "extra.extendedOperations";
 
@@ -170,15 +144,16 @@ public class StandaloneLdapApiService im
         this( getControlsFromSystemProperties(), getExtendedOperationsFromSystemProperties() );
     }
 
+
     public StandaloneLdapApiService( List<String> controls, List<String> extendedOperations ) throws Exception
     {
         CodecFactoryUtil.loadStockControls( controlFactories, this );
-        
-        CodecFactoryUtil.loadStockExtendedOperations( extendendOperationsFactories, this );
-        
+
+        CodecFactoryUtil.loadStockExtendedOperations( extendedOperationsFactories, this );
+
         // Load the controls
         loadControls( controls );
-            
+
         // Load the extended operations
         loadExtendedOperations( extendedOperations );
 
@@ -190,12 +165,12 @@ public class StandaloneLdapApiService im
                 Class<? extends ProtocolCodecFactory> clazz = ( Class<? extends ProtocolCodecFactory> )
                     Class.forName( DEFAULT_PROTOCOL_CODEC_FACTORY );
                 Constructor<? extends ProtocolCodecFactory> constructor =
-                        clazz.getConstructor( LdapApiService.class );
-                if ( constructor != null ) 
+                    clazz.getConstructor( LdapApiService.class );
+                if ( constructor != null )
                 {
                     protocolCodecFactory = constructor.newInstance( this );
                 }
-                else 
+                else
                 {
                     protocolCodecFactory = clazz.newInstance();
                 }
@@ -239,26 +214,16 @@ public class StandaloneLdapApiService im
                     controlsList.add( control );
                 }
             }
-
-            // Loading old extra controls list from command line properties if it exists
-            String oldExtraControlsString = System.getProperty( OLD_EXTRA_CONTROLS_LIST );
-
-            if ( !Strings.isEmpty( oldExtraControlsString ) )
-            {
-                for ( String control : oldExtraControlsString.split( "," ) )
-                {
-                    controlsList.add( control );
-                }
-            }
         }
-        
+
         return controlsList;
     }
 
+
     /**
-     * Parses the system properties to obtain the extended operations
-     * 
-     * @throws Exception
+     * Parses the system properties to obtain the extended operations.
+     * Such extended operations are stored in the <b>apacheds.extendedOperations</b>
+     * and <b>default.extendedOperation.requests</b> system properties.
      */
     private static List<String> getExtendedOperationsFromSystemProperties() throws Exception
     {
@@ -276,30 +241,6 @@ public class StandaloneLdapApiService im
         }
         else
         {
-            // Loading old default extended operations requests list from command line properties if it exists
-            String oldExtendedOperationsRequestsString = System
-                .getProperty( OLD_DEFAULT_EXTENDED_OPERATION_REQUESTS_LIST );
-
-            if ( !Strings.isEmpty( oldExtendedOperationsRequestsString ) )
-            {
-                for ( String extendedOperation : oldExtendedOperationsRequestsString.split( "," ) )
-                {
-                    extendedOperationsList.add( extendedOperation );
-                }
-            }
-
-            // Loading old default extended operations requests list from command line properties if it exists
-            String oldExtendedOperationsResponseString = System
-                .getProperty( OLD_DEFAULT_EXTENDED_OPERATION_RESPONSES_LIST );
-
-            if ( !Strings.isEmpty( oldExtendedOperationsResponseString ) )
-            {
-                for ( String extendedOperation : oldExtendedOperationsResponseString.split( "," ) )
-                {
-                    extendedOperationsList.add( extendedOperation );
-                }
-            }
-
             // Loading old extra extended operations list from command line properties if it exists
             String oldDefaultControlsString = System.getProperty( OLD_EXTRA_EXTENDED_OPERATION_LIST );
 
@@ -311,18 +252,22 @@ public class StandaloneLdapApiService im
                 }
             }
         }
-        
+
         return extendedOperationsList;
     }
 
-    private void loadControls( List<String> controlsList ) throws Exception 
+
+    /**
+     * Loads a list of controls from their FQCN.
+     */
+    private void loadControls( List<String> controlsList ) throws Exception
     {
         // Adding all controls
         if ( controlsList.size() > 0 )
         {
-            for ( String control : controlsList )
+            for ( String controlFQCN : controlsList )
             {
-                loadControl( control );
+                loadControl( controlFQCN );
             }
         }
     }
@@ -330,489 +275,75 @@ public class StandaloneLdapApiService im
 
     /**
      * Loads a control from its FQCN.
-     *
-     * @param control the control FQCN
-     * @throws Exception
      */
-    private void loadControl( String control ) throws Exception
+    private void loadControl( String controlFQCN ) throws Exception
     {
-        if ( controlFactories.containsKey( control ) )
+        if ( controlFactories.containsKey( controlFQCN ) )
         {
-            LOG.debug( "Factory for control {} was already loaded", control );
+            LOG.debug( "Factory for control {} was already loaded", controlFQCN );
             return;
         }
-        
+
         Class<?>[] types = new Class<?>[]
             { LdapApiService.class };
         // note, trimming whitespace doesnt hurt as it is a class name and
         // helps DI containers that use xml config as xml ignores whitespace
         @SuppressWarnings("unchecked")
         Class<? extends ControlFactory<?, ?>> clazz = ( Class<? extends ControlFactory<?, ?>> ) Class
-            .forName( control.trim() );
+            .forName( controlFQCN.trim() );
         Constructor<?> constructor = clazz.getConstructor( types );
 
         ControlFactory<?, ?> factory = ( ControlFactory<?, ?> ) constructor.newInstance( new Object[]
             { this } );
         controlFactories.put( factory.getOid(), factory );
+
         LOG.info( "Registered control factory: {}", factory.getOid() );
     }
 
-    
+
+    /**
+     * Loads a list of extended operation from their FQCN
+     */
     private void loadExtendedOperations( List<String> extendedOperationsList ) throws Exception
     {
         // Adding all extended operations
         if ( extendedOperationsList.size() > 0 )
         {
-            for ( String extendedOperation : extendedOperationsList )
+            for ( String extendedOperationFQCN : extendedOperationsList )
             {
-                loadExtendedOperation( extendedOperation );
+                loadExtendedOperation( extendedOperationFQCN );
             }
         }
     }
 
 
-    private void loadExtendedOperation( String extendedOperation ) throws Exception
+    /**
+     * Loads an of extended operations from its FQCN
+     */
+    private void loadExtendedOperation( String extendedOperationFQCN ) throws Exception
     {
-        if ( extendendOperationsFactories.containsKey( extendedOperation ) )
+        if ( extendedOperationsFactories.containsKey( extendedOperationFQCN ) )
         {
-            LOG.debug( "Factory for extended operation {} was already loaded", extendedOperation );
+            LOG.debug( "Factory for extended operation {} was already loaded", extendedOperationFQCN );
             return;
         }
-        
+
         Class<?>[] types = new Class<?>[]
             { LdapApiService.class };
-        // note, trimming whitespace doesnt hurt as it is a class name and
+
+        // note, trimming whitespace doesn't hurt as it is a class name and
         // helps DI containers that use xml config as xml ignores whitespace
         @SuppressWarnings("unchecked")
         Class<? extends ExtendedOperationFactory<?, ?>> clazz = ( Class<? extends ExtendedOperationFactory<?, ?>> ) Class
-            .forName( extendedOperation.trim() );
+            .forName( extendedOperationFQCN.trim() );
         Constructor<?> constructor = clazz.getConstructor( types );
 
         @SuppressWarnings("unchecked")
         ExtendedOperationFactory<ExtendedRequest<ExtendedResponse>, ExtendedResponse> factory = ( ExtendedOperationFactory<ExtendedRequest<ExtendedResponse>, ExtendedResponse> ) constructor
             .newInstance( new Object[]
                 { this } );
-        extendendOperationsFactories.put( factory.getOid(), factory );
-        LOG.info( "Registered pre-bundled extended operation factory: {}", factory.getOid() );
-    }
-
-
-    //-------------------------------------------------------------------------
-    // LdapCodecService implementation methods
-    //-------------------------------------------------------------------------
-    /**
-     * {@inheritDoc}
-     */
-    public ControlFactory<?, ?> registerControl( ControlFactory<?, ?> factory )
-    {
-        return controlFactories.put( factory.getOid(), factory );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ControlFactory<?, ?> unregisterControl( String oid )
-    {
-        return controlFactories.remove( oid );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public Iterator<String> registeredControls()
-    {
-        return Collections.unmodifiableSet( controlFactories.keySet() ).iterator();
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isControlRegistered( String oid )
-    {
-        return controlFactories.containsKey( oid );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public Iterator<String> registeredExtendedRequests()
-    {
-        return Collections.unmodifiableSet( extendendOperationsFactories.keySet() ).iterator();
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedOperationFactory<?, ?>
-        registerExtendedRequest( ExtendedOperationFactory<?, ?> factory )
-    {
-        return extendendOperationsFactories.put( factory.getOid(), factory );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ProtocolCodecFactory getProtocolCodecFactory()
-    {
-        return protocolCodecFactory;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ProtocolCodecFactory registerProtocolCodecFactory( ProtocolCodecFactory protocolCodecFactory )
-    {
-        ProtocolCodecFactory old = this.protocolCodecFactory;
-        this.protocolCodecFactory = protocolCodecFactory;
-        return old;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public CodecControl<? extends Control> newControl( String oid )
-    {
-        ControlFactory<?, ?> factory = controlFactories.get( oid );
-
-        if ( factory == null )
-        {
-            return new BasicControlDecorator<Control>( this, new OpaqueControl( oid ) );
-        }
-
-        return factory.newCodecControl();
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public CodecControl<? extends Control> newControl( Control control )
-    {
-        if ( control == null )
-        {
-            throw new NullPointerException( "Control argument was null." );
-        }
-
-        // protect agains being multiply decorated
-        if ( control instanceof CodecControl )
-        {
-            return ( org.apache.directory.api.ldap.codec.api.CodecControl<?> ) control;
-        }
-
-        @SuppressWarnings("rawtypes")
-        ControlFactory factory = controlFactories.get( control.getOid() );
-
-        if ( factory == null )
-        {
-            return new BasicControlDecorator<Control>( this, control );
-        }
-
-        return factory.newCodecControl( control );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public javax.naming.ldap.Control toJndiControl( Control control ) throws EncoderException
-    {
-        CodecControl<? extends Control> decorator = newControl( control );
-        ByteBuffer bb = ByteBuffer.allocate( decorator.computeLength() );
-        decorator.encode( bb );
-        bb.flip();
-        BasicControl jndiControl =
-            new BasicControl( control.getOid(), control.isCritical(), bb.array() );
-        return jndiControl;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public Control fromJndiControl( javax.naming.ldap.Control control ) throws DecoderException
-    {
-        @SuppressWarnings("rawtypes")
-        ControlFactory factory = controlFactories.get( control.getID() );
-
-        if ( factory == null )
-        {
-            OpaqueControl ourControl = new OpaqueControl( control.getID() );
-            ourControl.setCritical( control.isCritical() );
-            BasicControlDecorator<Control> decorator =
-                new BasicControlDecorator<Control>( this, ourControl );
-            decorator.setValue( control.getEncodedValue() );
-            return decorator;
-        }
-
-        @SuppressWarnings("unchecked")
-        CodecControl<? extends Control> ourControl = factory.newCodecControl();
-        ourControl.setCritical( control.isCritical() );
-        ourControl.setValue( control.getEncodedValue() );
-        ourControl.decode( control.getEncodedValue() );
-
-        return ourControl;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public Asn1Container newMessageContainer()
-    {
-        return new LdapMessageContainer<MessageDecorator<? extends Message>>( this );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public javax.naming.ldap.ExtendedResponse toJndi( final ExtendedResponse modelResponse ) throws EncoderException
-    {
-        throw new NotImplementedException( "Figure out how to transform" );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedResponse fromJndi( javax.naming.ldap.ExtendedResponse jndiResponse ) throws DecoderException
-    {
-        throw new NotImplementedException( "Figure out how to transform" );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedOperationFactory<?, ?> unregisterExtendedRequest(
-        String oid )
-    {
-        return extendendOperationsFactories.remove( oid );
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedRequest<?> fromJndi( javax.naming.ldap.ExtendedRequest jndiRequest ) throws DecoderException
-    {
-        ExtendedRequestDecorator<?, ?> decorator =
-            ( ExtendedRequestDecorator<?, ?> ) newExtendedRequest( jndiRequest.getID(), jndiRequest.getEncodedValue() );
-        return decorator;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public javax.naming.ldap.ExtendedRequest toJndi( final ExtendedRequest<?> modelRequest ) throws EncoderException
-    {
-        final String oid = modelRequest.getRequestName();
-        final byte[] value;
-
-        if ( modelRequest instanceof ExtendedRequestDecorator )
-        {
-            ExtendedRequestDecorator<?, ?> decorator = ( ExtendedRequestDecorator<?, ?> ) modelRequest;
-            value = decorator.getRequestValue();
-        }
-        else
-        {
-            // have to ask the factory to decorate for us - can't do it ourselves
-            ExtendedOperationFactory<?, ?> extendedRequestFactory = extendendOperationsFactories.get( modelRequest
-                .getRequestName() );
-            ExtendedRequestDecorator<?, ?> decorator = extendedRequestFactory.decorate( modelRequest );
-            value = decorator.getRequestValue();
-        }
-
-        javax.naming.ldap.ExtendedRequest jndiRequest = new javax.naming.ldap.ExtendedRequest()
-        {
-            private static final long serialVersionUID = -4160980385909987475L;
-
-
-            public String getID()
-            {
-                return oid;
-            }
-
-
-            public byte[] getEncodedValue()
-            {
-                return value;
-            }
-
-
-            public javax.naming.ldap.ExtendedResponse createExtendedResponse( String id, byte[] berValue, int offset,
-                int length ) throws NamingException
-            {
-                ExtendedOperationFactory<?, ?> factory = extendendOperationsFactories.get( modelRequest
-                    .getRequestName() );
-
-                try
-                {
-                    final ExtendedResponseDecorator<?> resp = ( ExtendedResponseDecorator<?> ) factory
-                        .newResponse( berValue );
-                    javax.naming.ldap.ExtendedResponse jndiResponse = new javax.naming.ldap.ExtendedResponse()
-                    {
-                        private static final long serialVersionUID = -7686354122066100703L;
-
-
-                        public String getID()
-                        {
-                            return oid;
-                        }
-
-
-                        public byte[] getEncodedValue()
-                        {
-                            return resp.getResponseValue();
-                        }
-                    };
-
-                    return jndiResponse;
-                }
-                catch ( DecoderException e )
-                {
-                    NamingException ne = new NamingException( "Unable to decode encoded response value: " +
-                        Strings.dumpBytes( berValue ) );
-                    ne.setRootCause( e );
-                    throw ne;
-                }
-            }
-        };
+        extendedOperationsFactories.put( factory.getOid(), factory );
 
-        return jndiRequest;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     * @throws DecoderException 
-     */
-    @SuppressWarnings("unchecked")
-    public <E extends ExtendedResponse> E newExtendedResponse( String responseName, int messageId,
-        byte[] serializedResponse )
-        throws DecoderException
-    {
-        ExtendedResponseDecorator<ExtendedResponse> resp;
-
-        ExtendedOperationFactory<?, ?> extendedRequestFactory = extendendOperationsFactories.get( responseName );
-
-        if ( extendedRequestFactory != null )
-        {
-            resp = ( ExtendedResponseDecorator<ExtendedResponse> ) extendedRequestFactory
-                .newResponse( serializedResponse );
-        }
-        else
-        {
-            resp = new ExtendedResponseDecorator<ExtendedResponse>( this,
-                new ExtendedResponseImpl( responseName ) );
-            resp.setResponseValue( serializedResponse );
-            resp.setResponseName( responseName );
-        }
-
-        resp.setMessageId( messageId );
-
-        return ( E ) resp;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedRequest<?> newExtendedRequest( String oid, byte[] value )
-    {
-        ExtendedRequest<?> req = null;
-
-        ExtendedOperationFactory<?, ?> extendedRequestFactory = extendendOperationsFactories
-            .get( oid );
-
-        if ( extendedRequestFactory != null )
-        {
-            if ( value == null )
-            {
-                req = extendedRequestFactory.newRequest();
-            }
-            else
-            {
-                req = extendedRequestFactory.newRequest( value );
-            }
-        }
-        else
-        {
-            ExtendedRequestDecorator<ExtendedRequest<ExtendedResponse>, ExtendedResponse> decorator =
-                new ExtendedRequestDecorator<ExtendedRequest<ExtendedResponse>, ExtendedResponse>( this,
-                    new ExtendedRequestImpl() );
-            decorator.setRequestName( oid );
-            decorator.setRequestValue( value );
-            req = decorator;
-        }
-
-        return req;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public ExtendedRequestDecorator<?, ?> decorate( ExtendedRequest<?> decoratedMessage )
-    {
-        ExtendedRequestDecorator<?, ?> req = null;
-
-        ExtendedOperationFactory<?, ?> extendedRequestFactory = extendendOperationsFactories.get( decoratedMessage
-            .getRequestName() );
-
-        if ( extendedRequestFactory != null )
-        {
-            req = extendedRequestFactory.decorate( decoratedMessage );
-        }
-        else
-        {
-            req = new ExtendedRequestDecorator<ExtendedRequest<ExtendedResponse>, ExtendedResponse>( this,
-                ( ExtendedRequest<ExtendedResponse> ) decoratedMessage );
-        }
-
-        return req;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public ExtendedResponseDecorator<?> decorate( ExtendedResponse decoratedMessage )
-    {
-        ExtendedResponseDecorator<?> resp = null;
-
-        ExtendedOperationFactory<?, ?> extendedRequestFactory = extendendOperationsFactories.get( decoratedMessage
-            .getResponseName() );
-
-        if ( extendedRequestFactory != null )
-        {
-            resp = extendedRequestFactory.decorate( decoratedMessage );
-        }
-        else
-        {
-            resp = new ExtendedResponseDecorator<ExtendedResponse>( this, decoratedMessage );
-        }
-
-        return resp;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExtendedOperationRegistered( String oid )
-    {
-        return extendendOperationsFactories.containsKey( oid );
+        LOG.info( "Registered pre-bundled extended operation factory: {}", factory.getOid() );
     }
 }

Modified: directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/Cancel.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/Cancel.java?rev=1578246&r1=1578245&r2=1578246&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/Cancel.java (original)
+++ directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/Cancel.java Mon Mar 17 06:59:39 2014
@@ -27,6 +27,8 @@ import org.apache.directory.api.asn1.Enc
 import org.apache.directory.api.asn1.ber.tlv.BerValue;
 import org.apache.directory.api.asn1.ber.tlv.TLV;
 import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
+import org.apache.directory.api.ldap.extras.extended.CancelRequest;
+import org.apache.directory.api.ldap.extras.extended.CancelRequestImpl;
 
 
 /**
@@ -45,7 +47,7 @@ import org.apache.directory.api.asn1.ber
 public class Cancel extends AbstractAsn1Object
 {
     /** The Id of the the message to cancel */
-    private int cancelId;
+    private CancelRequest cancelRequest;
 
     /** Length of the sequence */
     private int cancelSequenceLength;
@@ -58,7 +60,8 @@ public class Cancel extends AbstractAsn1
      */
     public Cancel( int cancelId )
     {
-        this.cancelId = cancelId;
+        cancelRequest = new CancelRequestImpl();
+        cancelRequest.setCancelId( cancelId );
     }
 
 
@@ -68,6 +71,7 @@ public class Cancel extends AbstractAsn1
     public Cancel()
     {
         super();
+        cancelRequest = new CancelRequestImpl();
     }
 
 
@@ -78,7 +82,7 @@ public class Cancel extends AbstractAsn1
      */
     public int getCancelId()
     {
-        return cancelId;
+        return cancelRequest.getCancelId();
     }
 
 
@@ -89,7 +93,7 @@ public class Cancel extends AbstractAsn1
      */
     public void setCancelId( int cancelId )
     {
-        this.cancelId = cancelId;
+        cancelRequest.setCancelId( cancelId );
     }
 
 
@@ -103,7 +107,7 @@ public class Cancel extends AbstractAsn1
     public int computeLength()
     {
         // The messageId length
-        cancelSequenceLength = 1 + 1 + BerValue.getNbBytes( cancelId );
+        cancelSequenceLength = 1 + 1 + BerValue.getNbBytes( cancelRequest.getCancelId() );
 
         // Add the sequence and the length
         return 1 + 1 + cancelSequenceLength;
@@ -126,7 +130,7 @@ public class Cancel extends AbstractAsn1
         bb.put( TLV.getBytes( cancelSequenceLength ) );
 
         // The messageId
-        BerValue.encode( bb, cancelId );
+        BerValue.encode( bb, cancelRequest.getCancelId() );
 
         return bb;
     }
@@ -140,7 +144,7 @@ public class Cancel extends AbstractAsn1
         StringBuffer sb = new StringBuffer();
 
         sb.append( "Cancel extended operation" );
-        sb.append( "    cancelId : " ).append( cancelId ).append( '\n' );
+        sb.append( "    cancelId : " ).append( cancelRequest.getCancelId() ).append( '\n' );
 
         return sb.toString();
     }

Modified: directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java?rev=1578246&r1=1578245&r2=1578246&view=diff
==============================================================================
--- directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java (original)
+++ directory/shared/trunk/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyFactory.java Mon Mar 17 06:59:39 2014
@@ -94,7 +94,12 @@ public class PasswordModifyFactory imple
     public PwdModifyRequest newRequest( byte[] value )
     {
         PasswordModifyRequestDecorator req = new PasswordModifyRequestDecorator( codec, new PwdModifyRequestImpl() );
-        req.setRequestValue( value );
+
+        if ( value != null )
+        {
+            req.setRequestValue( value );
+        }
+
         return req;
     }
 
@@ -139,7 +144,7 @@ public class PasswordModifyFactory imple
 
         PasswordModifyResponseContainer container = new PasswordModifyResponseContainer();
         PwdModifyResponse pwdModifyResponse = null;
-        
+
         try
         {
             decoder.decode( buffer, container );
@@ -166,14 +171,14 @@ public class PasswordModifyFactory imple
         }
 
         PasswordModifyResponseDecorator decorated = new PasswordModifyResponseDecorator( codec, pwdModifyResponse );
-        
+
         Control ppolicyControl = response.getControl( PasswordPolicy.OID );
-        
-        if( ppolicyControl != null )
+
+        if ( ppolicyControl != null )
         {
             decorated.addControl( ppolicyControl );
         }
-        
+
         return decorated;
     }
 }