You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/06/10 11:37:56 UTC

svn commit: r189935 - in /directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration: Configuration.java ConfigurationUtil.java ContextPartitionConfiguration.java MutableContextPartitionConfiguration.java MutableStartupConfiguration.java StartupConfiguration.java

Author: trustin
Date: Fri Jun 10 02:37:55 2005
New Revision: 189935

URL: http://svn.apache.org/viewcvs?rev=189935&view=rev
Log:
Finished implementing configuration package.

Added:
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java   (with props)
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java   (with props)
Modified:
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/Configuration.java
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ContextPartitionConfiguration.java
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableContextPartitionConfiguration.java
    directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java

Modified: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/Configuration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/Configuration.java?rev=189935&r1=189934&r2=189935&view=diff
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/Configuration.java (original)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/Configuration.java Fri Jun 10 02:37:55 2005
@@ -54,6 +54,15 @@
     }
 
     /**
+     * Valids this configuration.
+     * 
+     * @throws ConfigurationException if this configuration is invalid
+     */
+    public void validate()
+    {
+    }
+    
+    /**
      * Converts this configuration to JNDI environment {@link Hashtable}.
      * This method simple returns a {@link Hashtable} that contains an entry
      * whose key is {@link #JNDI_KEY} and whose value is <tt>this</tt>.

Added: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java?rev=189935&view=auto
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java (added)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java Fri Jun 10 02:37:55 2005
@@ -0,0 +1,78 @@
+/*
+ *   @(#) $Id$
+ *
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.ldap.server.configuration;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * A utility class that provides common functionality while validating configuration.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+class ConfigurationUtil
+{
+    /**
+     * Checks all elements of the specified set is of the specified type,
+     * and returns cloned set.
+     * 
+     * @throws ConfigurationException if the specified set has an element of wrong type
+     */
+    static Set getTypeSafeSet( Set set, Class type )
+    {
+        Set newSet = new HashSet();
+        Iterator i = set.iterator();
+        while( i.hasNext() )
+        {
+            Object e = i.next();
+            if( !type.isAssignableFrom( e.getClass() ) )
+            {
+                throw new ConfigurationException(
+                        "Invalid element type: " + e.getClass() +
+                        " (expected " + type );
+            }
+            set.add( e );
+        }
+        return newSet;
+    }
+    
+    /**
+     * Returns the clone of the specified set.
+     */
+    static Set getClonedSet( Set set )
+    {
+        Set newSet = new HashSet();
+        newSet.addAll( set );
+        return newSet;
+    }
+    
+    static void validatePortNumber( int port )
+    {
+        if( port < 0 || port > 65535 )
+        {
+            throw new ConfigurationException( "Invalid port number: " + port );
+        }
+    }
+    
+    private ConfigurationUtil()
+    {
+    }
+}

Propchange: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ConfigurationUtil.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ContextPartitionConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ContextPartitionConfiguration.java?rev=189935&r1=189934&r2=189935&view=diff
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ContextPartitionConfiguration.java (original)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/ContextPartitionConfiguration.java Fri Jun 10 02:37:55 2005
@@ -40,7 +40,7 @@
     private String suffix;
     private Set indexedAttributes = new HashSet(); // Set<String>
     private Attributes rootEntry = new BasicAttributes();
-    private ContextPartition partition;
+    private ContextPartition contextPartition;
     
     /**
      * Creates a new instance.
@@ -51,39 +51,32 @@
 
     public Set getIndexedAttributes()
     {
-        Set result = new HashSet();
-        result.addAll( indexedAttributes );
-        return result;
+        return ConfigurationUtil.getClonedSet( indexedAttributes );
     }
     
     protected void setIndexedAttributes( Set indexedAttributes )
     {
-        Set newIndexedAttributes = new HashSet();
+        Set newIndexedAttributes = ConfigurationUtil.getTypeSafeSet(
+                indexedAttributes, String.class );
 
-        Iterator i = indexedAttributes.iterator();
+        Iterator i = newIndexedAttributes.iterator();
         while( i.hasNext() )
         {
-            Object e = i.next();
-            if( !(e instanceof String) )
-            {
-                throw new ConfigurationException( "All elements of indexedAttributes must be strings." );
-            }
-            
+            String attribute = ( String ) i.next();
             // TODO Attribute name must be normalized and validated
-            String attr = ( ( String ) e ).trim();
-            newIndexedAttributes.add( attr );
+            newIndexedAttributes.add( attribute );
         }
         this.indexedAttributes = newIndexedAttributes;
     }
     
-    public ContextPartition getPartition()
+    public ContextPartition getContextPartition()
     {
-        return partition;
+        return contextPartition;
     }
     
-    protected void setPartition( ContextPartition partition )
+    protected void setContextPartition( ContextPartition partition )
     {
-        this.partition = partition;
+        this.contextPartition = partition;
     }
     
     public Attributes getRootEntry()
@@ -105,5 +98,24 @@
     {
         // TODO Suffix should be normalized before being set
         this.suffix = suffix.trim();
+    }
+    
+    
+    /**
+     * Validates this configuration.
+     * 
+     * @throws ConfigurationException if this configuration is not valid
+     */
+    public void validate()
+    {
+        if( getSuffix() == null )
+        {
+            throw new ConfigurationException( "Suffix is not specified." );
+        }
+        
+        if( getContextPartition() == null )
+        {
+            throw new ConfigurationException( "Partition is not specified." );
+        }
     }
 }

Modified: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableContextPartitionConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableContextPartitionConfiguration.java?rev=189935&r1=189934&r2=189935&view=diff
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableContextPartitionConfiguration.java (original)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableContextPartitionConfiguration.java Fri Jun 10 02:37:55 2005
@@ -45,9 +45,9 @@
         super.setIndexedAttributes( indexedAttributes );
     }
 
-    public void setPartition( ContextPartition partition )
+    public void setContextPartition( ContextPartition partition )
     {
-        super.setPartition( partition );
+        super.setContextPartition( partition );
     }
 
     public void setRootEntry( Attributes rootEntry )
@@ -58,23 +58,5 @@
     public void setSuffix( String suffix )
     {
         super.setSuffix( suffix );
-    }
-    
-    /**
-     * Validates this configuration.
-     * 
-     * @throws ConfigurationException if this configuration is not valid
-     */
-    public void validate()
-    {
-        if( getSuffix() == null )
-        {
-            throw new ConfigurationException( "Suffix is not specified." );
-        }
-        
-        if( getPartition() == null )
-        {
-            throw new ConfigurationException( "Partition is not specified." );
-        }
     }
 }

Added: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java?rev=189935&view=auto
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java (added)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java Fri Jun 10 02:37:55 2005
@@ -0,0 +1,95 @@
+/*
+ *   @(#) $Id$
+ *
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.ldap.server.configuration;
+
+import java.io.File;
+import java.util.Set;
+
+import org.apache.ldap.server.interceptor.InterceptorChain;
+import org.apache.mina.registry.ServiceRegistry;
+
+/**
+ * A mutable version of {@link StartupConfiguration}.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class MutableStartupConfiguration extends StartupConfiguration
+{
+    private static final long serialVersionUID = -987437370955222007L;
+
+    public MutableStartupConfiguration()
+    {
+    }
+
+    public void setAuthenticators( Set authenticators )
+    {
+        super.setAuthenticators( authenticators );
+    }
+
+    public void setBootstrapSchemas( Set bootstrapSchemas )
+    {
+        super.setBootstrapSchemas( bootstrapSchemas );
+    }
+
+    public void setContextPartitionConfigurations( Set contextParitionConfigurations )
+    {
+        super.setContextPartitionConfigurations( contextParitionConfigurations );
+    }
+
+    public void setAllowAnonymousAccess( boolean enableAnonymousAccess )
+    {
+        super.setAllowAnonymousAccess( enableAnonymousAccess );
+    }
+
+    public void setEnableKerberos( boolean enableKerberos )
+    {
+        super.setEnableKerberos( enableKerberos );
+    }
+
+    public void setInterceptors( InterceptorChain interceptors )
+    {
+        super.setInterceptors( interceptors );
+    }
+
+    public void setLdapPort( int ldapPort )
+    {
+        super.setLdapPort( ldapPort );
+    }
+
+    public void setLdapsPort( int ldapsPort )
+    {
+        super.setLdapsPort( ldapsPort );
+    }
+
+    public void setMinaServiceRegistry( ServiceRegistry minaServiceRegistry )
+    {
+        super.setMinaServiceRegistry( minaServiceRegistry );
+    }
+
+    public void setTestEntries( Set testEntries )
+    {
+        super.setTestEntries( testEntries );
+    }
+
+    public void setWorkingDirectory( File workingDirectory )
+    {
+        super.setWorkingDirectory( workingDirectory );
+    }
+}

Propchange: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/MutableStartupConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java?rev=189935&r1=189934&r2=189935&view=diff
==============================================================================
--- directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java (original)
+++ directory/apacheds/branches/direve-158/core/src/main/java/org/apache/ldap/server/configuration/StartupConfiguration.java Fri Jun 10 02:37:55 2005
@@ -19,10 +19,24 @@
 package org.apache.ldap.server.configuration;
 
 import java.io.File;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
+import javax.naming.directory.Attributes;
+
+import org.apache.ldap.server.authn.Authenticator;
+import org.apache.ldap.server.authn.SimpleAuthenticator;
 import org.apache.ldap.server.interceptor.InterceptorChain;
+import org.apache.ldap.server.schema.bootstrap.ApacheSchema;
+import org.apache.ldap.server.schema.bootstrap.BootstrapSchema;
+import org.apache.ldap.server.schema.bootstrap.CoreSchema;
+import org.apache.ldap.server.schema.bootstrap.CosineSchema;
+import org.apache.ldap.server.schema.bootstrap.InetorgpersonSchema;
+import org.apache.ldap.server.schema.bootstrap.JavaSchema;
+import org.apache.ldap.server.schema.bootstrap.SystemSchema;
 import org.apache.mina.registry.ServiceRegistry;
+import org.apache.mina.registry.SimpleServiceRegistry;
 
 /**
  * A {@link Configuration} that starts up ApacheDS.
@@ -34,21 +48,255 @@
 {
     private static final long serialVersionUID = 4826762196566871677L;
 
-    protected File homeDirectory;
     protected File workingDirectory;
-    protected boolean enableAnonymousAccess;
-    protected Set authenticators; // Set<Authenticator> and their properties>?
-    protected InterceptorChain interceptors; // and their properties?
-    protected ServiceRegistry minaServiceRegistry;
+    protected boolean allowAnonymousAccess;
+    protected Set authenticators = new HashSet(); // Set<Authenticator> and their properties>?
+    protected InterceptorChain interceptors = InterceptorChain.newDefaultChain();
+    protected ServiceRegistry minaServiceRegistry = new SimpleServiceRegistry();
     protected int ldapPort = 389;
     protected int ldapsPort = 636;
     protected boolean enableKerberos;
     
-    protected Set bootstrapSchemas; // Set<BootstrapSchema>
-    protected Set contextParitions; // Set<suffix, partition, indices, attributes, and properties>?
-    protected Set testEntries; // Set<Attributes?>
+    protected Set bootstrapSchemas = new HashSet(); // Set<BootstrapSchema>
+    protected Set contextPartitionConfigurations; // Set<ContextPartitionConfiguration>
+    protected Set testEntries = new HashSet(); // Set<Attributes>
     
     protected StartupConfiguration()
     {
+        // Set default authenticators
+        authenticators.add( new SimpleAuthenticator() );
+        
+        // Set default bootstrap schemas
+        bootstrapSchemas.add( new CoreSchema() );
+        bootstrapSchemas.add( new CosineSchema() );        
+        bootstrapSchemas.add( new ApacheSchema() );        
+        bootstrapSchemas.add( new InetorgpersonSchema() );        
+        bootstrapSchemas.add( new JavaSchema() );        
+        bootstrapSchemas.add( new SystemSchema() );        
+    }
+
+    /**
+     * Returns {@link Authenticator}s to use for authenticating clients.
+     */
+    public Set getAuthenticators()
+    {
+        return ConfigurationUtil.getClonedSet( authenticators );
+    }
+
+    /**
+     * Sets {@link Authenticator}s to use for authenticating clients.
+     */
+    protected void setAuthenticators( Set authenticators )
+    {
+        this.authenticators = ConfigurationUtil.getTypeSafeSet(
+                authenticators, Authenticator.class );
+    }
+
+    /**
+     * Returns {@link BootstrapSchema}s to load while bootstrapping.
+     */
+    public Set getBootstrapSchemas()
+    {
+        return ConfigurationUtil.getClonedSet( bootstrapSchemas );
+    }
+
+    /**
+     * Sets {@link BootstrapSchema}s to load while bootstrapping.
+     */
+    protected void setBootstrapSchemas( Set bootstrapSchemas )
+    {
+        this.bootstrapSchemas = ConfigurationUtil.getTypeSafeSet(
+                bootstrapSchemas, BootstrapSchema.class );
+    }
+
+    /**
+     * Returns {@link ContextPartitionConfiguration}s to configure context partitions.
+     */
+    public Set getContextPartitionConfigurations()
+    {
+        return ConfigurationUtil.getClonedSet( contextPartitionConfigurations );
+    }
+
+    /**
+     * Sets {@link ContextPartitionConfiguration}s to configure context partitions.
+     */
+    protected void setContextPartitionConfigurations( Set contextParitionConfigurations )
+    {
+        Set newSet = ConfigurationUtil.getTypeSafeSet(
+                contextParitionConfigurations, ContextPartitionConfiguration.class );
+        
+        Iterator i = newSet.iterator();
+        while( i.hasNext() )
+        {
+            ( ( ContextPartitionConfiguration ) i.next() ).validate();
+        }
+        
+        this.contextPartitionConfigurations = newSet;
+    }
+
+    /**
+     * Returns <tt>true</tt> if anonymous access is allowed.
+     */
+    public boolean isAllowAnonymousAccess()
+    {
+        return allowAnonymousAccess;
+    }
+
+    /**
+     * Sets whether to allow anonymous access or not
+     */
+    protected void setAllowAnonymousAccess( boolean enableAnonymousAccess )
+    {
+        this.allowAnonymousAccess = enableAnonymousAccess;
+    }
+
+    /**
+     * Returns <tt>true</tt> if Kerberos support is enabled.
+     */
+    public boolean isEnableKerberos()
+    {
+        return enableKerberos;
+    }
+
+    /**
+     * Sets whether to enable Kerberos support or not.
+     */
+    protected void setEnableKerberos( boolean enableKerberos )
+    {
+        this.enableKerberos = enableKerberos;
+    }
+
+    /**
+     * Returns interceptor chain.
+     */
+    public InterceptorChain getInterceptors()
+    {
+        return interceptors;
+    }
+
+    /**
+     * Sets interceptor chain.
+     */
+    protected void setInterceptors( InterceptorChain interceptors )
+    {
+        if( interceptors == null )
+        {
+            throw new ConfigurationException( "Interceptors cannot be null" );
+        }
+        this.interceptors = interceptors;
+    }
+
+    /**
+     * Returns LDAP TCP/IP port number to listen to.
+     */
+    public int getLdapPort()
+    {
+        return ldapPort;
+    }
+
+    /**
+     * Sets LDAP TCP/IP port number to listen to.
+     */
+    protected void setLdapPort( int ldapPort )
+    {
+        ConfigurationUtil.validatePortNumber( ldapPort );
+        this.ldapPort = ldapPort;
+    }
+
+    /**
+     * Returns LDAPS TCP/IP port number to listen to.
+     */
+    public int getLdapsPort()
+    {
+        return ldapsPort;
+    }
+
+    /**
+     * Sets LDAPS TCP/IP port number to listen to.
+     */
+    protected void setLdapsPort( int ldapsPort )
+    {
+        ConfigurationUtil.validatePortNumber( ldapsPort );
+        this.ldapsPort = ldapsPort;
+    }
+
+    /**
+     * Returns <a href="http://directory.apache.org/subprojects/network/">MINA</a>
+     * {@link ServiceRegistry} that will be used by ApacheDS.
+     */
+    public ServiceRegistry getMinaServiceRegistry()
+    {
+        return minaServiceRegistry;
+    }
+
+    /**
+     * Sets <a href="http://directory.apache.org/subprojects/network/">MINA</a>
+     * {@link ServiceRegistry} that will be used by ApacheDS.
+     */
+    protected void setMinaServiceRegistry( ServiceRegistry minaServiceRegistry )
+    {
+        if( interceptors == null )
+        {
+            throw new ConfigurationException( "MinaServiceRegistry cannot be null" );
+        }
+        this.minaServiceRegistry = minaServiceRegistry;
+    }
+
+    /**
+     * Returns test directory entries({@link Attributes}) to be loaded while
+     * bootstrapping.
+     */
+    public Set getTestEntries()
+    {
+        return ConfigurationUtil.getClonedSet( testEntries );
+    }
+
+    /**
+     * Sets test directory entries({@link Attributes}) to be loaded while
+     * bootstrapping.
+     */
+    protected void setTestEntries( Set testEntries )
+    {
+        this.testEntries = ConfigurationUtil.getTypeSafeSet(
+                testEntries, Attributes.class );
+    }
+
+    /**
+     * Returns working directory (counterpart of <tt>var/lib</tt>).
+     */
+    public File getWorkingDirectory()
+    {
+        return workingDirectory;
+    }
+
+    /**
+     * Sets working directory (counterpart of <tt>var/lib</tt>).
+     */
+    protected void setWorkingDirectory( File workingDirectory )
+    {
+        workingDirectory.mkdirs();
+        if( !workingDirectory.exists() )
+        {
+            throw new ConfigurationException( "Working directory '" + workingDirectory + "' doesn't exist." );
+        }
+        if( !workingDirectory.isDirectory() )
+        {
+            throw new ConfigurationException( "Working directory '" + workingDirectory + "' is not a directory." );
+        }
+
+        this.workingDirectory = workingDirectory;
+    }
+    
+    public void validate()
+    {
+        if( workingDirectory == null )
+        {
+            throw new ConfigurationException( "WorkingDirectory is not specified." );
+        }
+        
+        if( contextPartitionConfigurations == null || contextPartitionConfigurations.size() == 0 )
+        {
+            throw new ConfigurationException( "ContextPartitionConfiguration is not specified." );
+        }
     }
 }