You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mi...@apache.org on 2002/02/15 05:23:06 UTC
cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/configuration NamingConfigurationBuilder.java
mirceatoma 02/02/14 20:23:06
Added: src/scratchpad/org/apache/avalon/excalibur/configuration
NamingConfigurationBuilder.java
Log:
Build configurations from JNDI/LDAP trees.
Revision Changes Path
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/configuration/NamingConfigurationBuilder.java
Index: NamingConfigurationBuilder.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.excalibur.configuration;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.Binding;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
/**
* A NamingConfigurationBuilder builds <code>Configuration</code>s from JNDI or
* LDAP directory trees.
*
* @author <a href="mailto:mirceatoma@apache.org">Mircea Toma</a>
*/
public class NamingConfigurationBuilder
{
private final boolean m_enableNamespaces;
/**
* Create a Configuration Builder that ignores namespaces.
*/
public NamingConfigurationBuilder()
{
this(false);
}
/**
* Create a Configuration Builder, specifying a flag that determines
* namespace support.
*
* @param enableNamespaces If <code>true</code>, a configuration with
* namespace information is built.
*/
public NamingConfigurationBuilder( final boolean enableNamespaces )
{
m_enableNamespaces = enableNamespaces;
}
/**
* Build a configuration object using an URI
*/
public Configuration build( final String uri ) throws NamingException
{
final Hashtable env = new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.SECURITY_AUTHENTICATION, "none" );
env.put( Context.PROVIDER_URL, uri );
final DirContext context = new InitialDirContext( env );
return build(context);
}
/**
* Build a configuration object using a naming context.
*/
public Configuration build( final Context context ) throws NamingException
{
final DefaultConfiguration configuration;
final String absoluteName = context.getNameInNamespace();
final NameParser parser = context.getNameParser( absoluteName );
final Name parsedName = parser.parse( absoluteName );
String name = absoluteName;
String prefix = "";
//if composite name, use only the relative name.
final int position = parsedName.size();
if ( position > 0 )
{
name = parsedName.get( position - 1 );
}
if ( context instanceof DirContext )
{
//extract element name, and namespace prefix
final Attributes attrs = ((DirContext)context).getAttributes( "" );
final NamingEnumeration attributes = attrs.getAll();
while ( attributes.hasMore() )
{
final Attribute attribute = (Attribute)attributes.next();
final String id = attribute.getID();
if ( name.startsWith( id ) )
{
name = (String)attribute.get();
if ( m_enableNamespaces ) prefix = id;
attrs.remove( id );
break;
}
}
configuration = new DefaultConfiguration( name, null, "", prefix );
copyAttributes( attrs, configuration );
}
else configuration = new DefaultConfiguration( name, null, "", prefix );
final NamingEnumeration bindings = context.listBindings( "" );
while ( bindings.hasMore() )
{
final Binding binding = (Binding)bindings.next();
final Object object = binding.getObject();
if (( object instanceof Number ) ||
( object instanceof String ))
{
configuration.setValue( object.toString() );
}
if ( object instanceof Context )
{
final Context child = (Context)object;
configuration.addChild( build( child ) );
}
}
return configuration;
}
private void copyAttributes( final Attributes attrs, final DefaultConfiguration configuration ) throws NamingException
{
final NamingEnumeration attributes = attrs.getAll();
while ( attributes.hasMore() )
{
final Attribute attribute = (Attribute)attributes.next();
final String attrName = attribute.getID();
final Object attrValue = attribute.get();
configuration.setAttribute( attrName, attrValue.toString() );
}
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>