donaldp 2002/07/05 21:21:46 Added: util/src/java/org/apache/excalibur/configuration NamingConfigurationBuilder.java Removed: all/src/scratchpad/org/apache/avalon/excalibur/configuration NamingConfigurationBuilder.java Log: Move Naming configuration builder to util. Revision Changes Path 1.1 jakarta-avalon-excalibur/util/src/java/org/apache/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.excalibur.configuration; import java.util.Hashtable; import javax.naming.Binding; import javax.naming.Context; import javax.naming.Name; import javax.naming.NameParser; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; 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:[EMAIL PROTECTED]">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: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>