Added ExtendedOperationHandlers property to ServerStartupConfiguration sothat users cn configure LDAP extended operation handlers.
git-svn-id: https://svn.apache.org/repos/asf/directory/apacheds/trunk@325857 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/main/src/main/java/org/apache/ldap/server/configuration/MutableServerStartupConfiguration.java b/main/src/main/java/org/apache/ldap/server/configuration/MutableServerStartupConfiguration.java
index 63b54f5..9094602 100644
--- a/main/src/main/java/org/apache/ldap/server/configuration/MutableServerStartupConfiguration.java
+++ b/main/src/main/java/org/apache/ldap/server/configuration/MutableServerStartupConfiguration.java
@@ -19,6 +19,7 @@
package org.apache.ldap.server.configuration;
import java.io.File;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -99,4 +100,8 @@
{
super.setMinaServiceRegistry( minaServiceRegistry );
}
+
+ public void setExtendedOperationHandlers(Collection handlers) {
+ super.setExtendedOperationHandlers(handlers);
+ }
}
diff --git a/main/src/main/java/org/apache/ldap/server/configuration/ServerStartupConfiguration.java b/main/src/main/java/org/apache/ldap/server/configuration/ServerStartupConfiguration.java
index a90a22e..b0047fd 100644
--- a/main/src/main/java/org/apache/ldap/server/configuration/ServerStartupConfiguration.java
+++ b/main/src/main/java/org/apache/ldap/server/configuration/ServerStartupConfiguration.java
@@ -18,6 +18,11 @@
*/
package org.apache.ldap.server.configuration;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.ldap.server.protocol.ExtendedOperationHandler;
import org.apache.mina.registry.ServiceRegistry;
import org.apache.mina.registry.SimpleServiceRegistry;
@@ -36,6 +41,7 @@
private int ldapPort = 389;
private int ldapsPort = 636;
private boolean enableKerberos;
+ private final Collection extendedOperationHandlers = new ArrayList();
protected ServerStartupConfiguration()
{
@@ -128,4 +134,24 @@
}
this.minaServiceRegistry = minaServiceRegistry;
}
+
+ public Collection getExtendedOperationHandlers()
+ {
+ return new ArrayList( extendedOperationHandlers );
+ }
+
+ protected void setExtendedOperationHandlers( Collection handlers )
+ {
+ for( Iterator i = handlers.iterator(); i.hasNext(); )
+ {
+ if( !( i.next() instanceof ExtendedOperationHandler ) )
+ {
+ throw new IllegalArgumentException(
+ "The specified handler collection contains an element which is not an ExtendedOperationHandler." );
+ }
+ }
+
+ this.extendedOperationHandlers.clear();
+ this.extendedOperationHandlers.addAll( handlers );
+ }
}
diff --git a/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java b/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java
index e0ad696..8cd8e2f 100644
--- a/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java
+++ b/main/src/main/java/org/apache/ldap/server/jndi/ServerContextFactory.java
@@ -40,6 +40,7 @@
import org.apache.ldap.common.util.PropertiesUtils;
import org.apache.ldap.server.DirectoryService;
import org.apache.ldap.server.configuration.ServerStartupConfiguration;
+import org.apache.ldap.server.protocol.ExtendedOperationHandler;
import org.apache.ldap.server.protocol.LdapProtocolProvider;
import org.apache.mina.common.TransportType;
import org.apache.mina.registry.Service;
@@ -204,9 +205,17 @@
int port = cfg.getLdapPort();
Service service = new Service( "ldap", TransportType.SOCKET, new InetSocketAddress( port ) );
+ // Register all extended operation handlers.
+ LdapProtocolProvider protocolProvider = new LdapProtocolProvider( ( Hashtable ) env.clone() );
+ for( Iterator i = cfg.getExtendedOperationHandlers().iterator(); i.hasNext(); )
+ {
+ ExtendedOperationHandler h = ( ExtendedOperationHandler ) i.next();
+ protocolProvider.addExtendedOperationHandler( h );
+ }
+
try
{
- minaRegistry.bind( service, new LdapProtocolProvider( ( Hashtable ) env.clone() ) );
+ minaRegistry.bind( service, protocolProvider );
ldapService = service;
if ( log.isInfoEnabled() )
{