donaldp 2002/08/31 21:11:27
Added: src/java/org/apache/avalon/phoenix/components/cpbuilder/builder
ClassLoaderSetBuilder.java
Log:
Add in the start of a builder for ClassLoaderSet
Revision Changes Path
1.1
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/cpbuilder/builder/ClassLoaderSetBuilder.java
Index: ClassLoaderSetBuilder.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.phoenix.components.cpbuilder.builder;
import java.util.ArrayList;
import org.apache.avalon.excalibur.extension.Extension;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.phoenix.components.cpbuilder.metadata.ClassLoaderDef;
import org.apache.avalon.phoenix.components.cpbuilder.metadata.ClassLoaderSetDef;
import org.apache.avalon.phoenix.components.cpbuilder.metadata.EntryDef;
import org.apache.avalon.phoenix.components.cpbuilder.metadata.FileSetDef;
import org.apache.avalon.phoenix.components.cpbuilder.metadata.JoinDef;
/**
* This class builds a {@link ClassLoaderSetDef} object from
* specified configuration.
*
* @author <a href="mailto:peter at apache.org">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/09/01 04:11:27 $
*/
public class ClassLoaderSetBuilder
{
public ClassLoaderSetDef build( final Configuration config,
final String[] predefined )
throws ConfigurationException
{
final String defaultClassLoader =
config.getAttribute( "default" );
final String version =
config.getAttribute( "version" );
if( !"1.0".equals( version ) )
{
final String message = "Bad version:" + version;
throw new ConfigurationException( message );
}
final Configuration[] joinConfigs =
config.getChildren( "join" );
final JoinDef[] joins = buildJoins( joinConfigs );
final Configuration[] clConfigs =
config.getChildren( "classloader" );
final ClassLoaderDef[] classloaders =
buildClassLoaders( clConfigs );
return new ClassLoaderSetDef( defaultClassLoader,
predefined,
classloaders,
joins );
}
private ClassLoaderDef[] buildClassLoaders( Configuration[] configs )
throws ConfigurationException
{
final ArrayList loaders = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final ClassLoaderDef loader = buildLoader( configs[ i ] );
loaders.add( loader );
}
return (ClassLoaderDef[])loaders.toArray( new ClassLoaderDef[ loaders.size()
] );
}
private ClassLoaderDef buildLoader( final Configuration config )
throws ConfigurationException
{
final String name = config.getAttribute( "name" );
final String parent = config.getAttribute( "parent" );
final EntryDef[] entrys =
buildEntrys( config.getChildren( "entry" ) );
final Extension[] extensions = null;
//buildExtensions( config.getChildren( "extension" ) );
final FileSetDef[] fileSets =
buildFileSets( config.getChildren( "fileset" ) );
return new ClassLoaderDef( name, parent, entrys,
extensions, fileSets );
}
private FileSetDef[] buildFileSets( Configuration[] configs )
throws ConfigurationException
{
final ArrayList fileSets = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final FileSetDef fileSet =
buildFileSet( configs[ i ] );
fileSets.add( fileSet );
}
return (FileSetDef[])fileSets.toArray( new FileSetDef[ fileSets.size() ] );
}
private FileSetDef buildFileSet( Configuration config )
throws ConfigurationException
{
final String dir = config.getAttribute( "dir" );
final String[] includes =
buildSelectors( config.getChildren( "include" ) );
final String[] excludes =
buildSelectors( config.getChildren( "exclude" ) );
return new FileSetDef( dir, includes, excludes );
}
private String[] buildSelectors( Configuration[] configs )
throws ConfigurationException
{
final ArrayList selectors = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final String name =
configs[ i ].getAttribute( "name" );
selectors.add( name );
}
return (String[])selectors.toArray( new String[ selectors.size() ] );
}
private EntryDef[] buildEntrys( final Configuration[] configs )
throws ConfigurationException
{
final ArrayList entrys = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final EntryDef entry = buildEntry( configs[ i ] );
entrys.add( entry );
}
return (EntryDef[])entrys.toArray( new EntryDef[ entrys.size() ] );
}
private EntryDef buildEntry( final Configuration config )
throws ConfigurationException
{
final String location = config.getAttribute( "location" );
return new EntryDef( location );
}
private JoinDef[] buildJoins( final Configuration[] configs )
throws ConfigurationException
{
final ArrayList joins = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final JoinDef join = buildJoin( configs[ i ] );
joins.add( join );
}
return (JoinDef[])joins.toArray( new JoinDef[ joins.size() ] );
}
private JoinDef buildJoin( final Configuration config )
throws ConfigurationException
{
final String name = config.getAttribute( "name" );
final Configuration[] children =
config.getChildren( "classloader-ref" );
final String[] classloaders =
buildClassLoaderRefs( children );
return new JoinDef( name, classloaders );
}
private String[] buildClassLoaderRefs( final Configuration[] configs )
throws ConfigurationException
{
final ArrayList refs = new ArrayList();
for( int i = 0; i < configs.length; i++ )
{
final String ref = configs[ i ].getAttribute( "name" );
refs.add( ref );
}
return (String[])refs.toArray( new String[ refs.size() ] );
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>