mcconnell    2002/08/16 04:48:12

  Modified:    src/java/org/apache/avalon/phoenix/tools/infobuilder
                        BlockInfoBuilder.java
  Log:
  Updated to support both the Phoenix blockinfo and the Avalon Type DTD for the xinfo 
file.
  
  Revision  Changes    Path
  1.21      +106 -21   
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/infobuilder/BlockInfoBuilder.java
  
  Index: BlockInfoBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/infobuilder/BlockInfoBuilder.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- BlockInfoBuilder.java     6 Aug 2002 11:57:42 -0000       1.20
  +++ BlockInfoBuilder.java     16 Aug 2002 11:48:12 -0000      1.21
  @@ -24,7 +24,8 @@
    * objects from Configuration objects. The format for Configuration object
    * is specified in the BlockInfo specification.
    *
  - * @author <a href="mailto:peter at apache.org">Peter Donald</a>
  + * @author <a href="mailto:[EMAIL PROTECTED]";>Peter Donald</a>
  + * @author <a href="mailto:[EMAIL PROTECTED]";>Stephen McConnell</a>
    * @version $Revision$ $Date$
    */
   public final class BlockInfoBuilder
  @@ -51,19 +52,47 @@
               getLogger().debug( message );
           }
   
  +        final boolean flag = info.getName().equals("type");
  +
  +        if( flag )
  +        {
  +            if( info.getChild("stages", false ) != null )
  +            {
  +                final String error =
  +                 "Poenix does not support components declaring phase extension 
dependecies." 
  +                 + " Class: " + classname; 
  +                throw new IllegalArgumentException( error );
  +            }
  +            if( info.getChild("extensions", false ) != null )
  +            {
  +                final String error =
  +                 "Poenix does not support components declaring phase extension 
handlers." 
  +                 + " Class: " + classname; 
  +                throw new IllegalArgumentException( error );
  +            }
  +        }
  +
           Configuration configuration = null;
   
           configuration = info.getChild( "services" );
  -        final ServiceDescriptor[] services = buildServices( configuration );
  +        final ServiceDescriptor[] services = buildServices( configuration, flag );
   
           configuration = info.getChild( "management-access-points" );
  -        final ServiceDescriptor[] management = buildServices( configuration );
  +        final ServiceDescriptor[] management = buildServices( configuration, flag );
   
           configuration = info.getChild( "dependencies" );
  -        final DependencyDescriptor[] dependencies = buildDependencies( classname, 
configuration );
  +        final DependencyDescriptor[] dependencies = buildDependencies( classname, 
configuration, flag );
   
  -        configuration = info.getChild( "block" );
  -        final BlockDescriptor descriptor = buildBlockDescriptor( classname, 
configuration );
  +        if( flag )
  +        {
  +            configuration = info.getChild( "component" );
  +        }
  +        else
  +        {
  +            configuration = info.getChild( "block" );
  +        }
  +
  +        final BlockDescriptor descriptor = buildBlockDescriptor( classname, 
configuration, flag );
   
           if( getLogger().isDebugEnabled() )
           {
  @@ -83,11 +112,13 @@
        *
        * @param classname The classname of Block (used for logging purposes)
        * @param configuration the dependencies configuration
  +     * @param flag if TRUE build dependencies using the Avalon Type DTD
        * @return the created DependencyDescriptor
        * @throws ConfigurationException if an error occurs
        */
       private DependencyDescriptor[] buildDependencies( final String classname,
  -                                                      final Configuration 
configuration )
  +                                                      final Configuration 
configuration,
  +                                                      final boolean flag )
           throws ConfigurationException
       {
           final Configuration[] elements = configuration.getChildren( "dependency" );
  @@ -96,7 +127,7 @@
           for( int i = 0; i < elements.length; i++ )
           {
               final DependencyDescriptor dependency =
  -                buildDependency( classname, elements[ i ] );
  +                buildDependency( classname, elements[ i ], flag );
               dependencies.add( dependency );
           }
   
  @@ -109,14 +140,25 @@
        *
        * @param classname The classname of Block (used for logging purposes)
        * @param dependency the dependency configuration
  +     * @param flag if TRUE build dependency using the Avalon Type DTD
        * @return the created DependencyDescriptor
        * @throws ConfigurationException if an error occurs
        */
       private DependencyDescriptor buildDependency( final String classname,
  -                                                  final Configuration dependency )
  +                                                  final Configuration dependency,
  +                                                  final boolean flag )
           throws ConfigurationException
       {
  -        final ServiceDescriptor service = buildService( dependency.getChild( 
"service" ) );
  +        ServiceDescriptor service;
  +        if( flag )
  +        {
  +            service = buildService( dependency.getChild( "reference" ), flag );
  +        }
  +        else
  +        {
  +            service = buildService( dependency.getChild( "service" ), flag );
  +        }
  +
           String role = dependency.getChild( "role" ).getValue( null );
   
           //default to name of service if role unspecified
  @@ -144,9 +186,10 @@
        *
        * @param servicesSet the services configuration
        * @return the created ServiceDescriptor
  +     * @param flag if TRUE build services using the Avalon Type DTD
        * @throws ConfigurationException if an error occurs
        */
  -    private ServiceDescriptor[] buildServices( final Configuration servicesSet )
  +    private ServiceDescriptor[] buildServices( final Configuration servicesSet, 
boolean flag )
           throws ConfigurationException
       {
           final Configuration[] elements = servicesSet.getChildren( "service" );
  @@ -154,7 +197,7 @@
   
           for( int i = 0; i < elements.length; i++ )
           {
  -            final ServiceDescriptor service = buildService( elements[ i ] );
  +            final ServiceDescriptor service = buildService( elements[ i ], flag );
               services.add( service );
           }
   
  @@ -167,15 +210,27 @@
        *
        * @param service the service Configuration
        * @return the created ServiceDescriptor
  +     * @param flag if TRUE build service using the Avalon Type DTD
        * @throws ConfigurationException if an error occurs
        */
  -    private ServiceDescriptor buildService( final Configuration service )
  +    private ServiceDescriptor buildService( final Configuration service, boolean 
flag )
           throws ConfigurationException
       {
  -        final String name = service.getAttribute( "name" );
  -        final String versionString = service.getAttribute( "version", "1.0" );
  -        final Version version = buildVersion( versionString );
  -        return new ServiceDescriptor( name, version );
  +        if( flag )
  +        {
  +            Configuration ref = service.getChild("reference");
  +            final String name = ref.getAttribute( "type" );
  +            final String versionString = ref.getAttribute( "version", "1.0" );
  +            final Version version = buildVersion( versionString );
  +            return new ServiceDescriptor( name, version );
  +        }
  +        else
  +        {
  +            final String name = service.getAttribute( "name" );
  +            final String versionString = service.getAttribute( "version", "1.0" );
  +            final Version version = buildVersion( versionString );
  +            return new ServiceDescriptor( name, version );
  +        }
       }
   
       /**
  @@ -188,11 +243,13 @@
        *
        * @param classname The classname of Block (used to create descriptor)
        * @param block the Block Configuration
  +     * @param flag if TRUE build descriptor using the Avalon Type DTD
        * @return the created BlockDescriptor
        * @throws ConfigurationException if an error occurs
        */
       private BlockDescriptor buildBlockDescriptor( final String classname,
  -                                                  final Configuration block )
  +                                                  final Configuration block,
  +                                                  final boolean flag )
           throws ConfigurationException
       {
           if( 0 == block.getChildren().length )
  @@ -204,11 +261,39 @@
               return null;
           }
   
  -        final String name = block.getChild( "name" ).getValue( null );
           final Version version = buildVersion( block.getChild( "version" 
).getValue() );
  -        final String schemaType = block.getChild( "schema-type" ).getValue( null );
  +        final String name = block.getChild( "name" ).getValue( null );
  +
  +        String schemaType;
  +        if( flag )
  +        {
  +             schemaType = getSchemaAttribute( block.getChild( "attributes" ) );
  +        }
  +        else
  +        {
  +             schemaType = block.getChild( "schema-type" ).getValue( null );
  +        }
   
           return new BlockDescriptor( name, classname, schemaType, version );
  +    }
  +
  +    /**
  +     * A utility method to get a schema attribute from a configuration.
  +     *
  +     * @param config a configuration representing an Attributes element
  +     * @return the schema name (possible null if undefined)
  +     * @throws ConfigurationException if an error occurs
  +     */
  +    private String getSchemaAttribute( Configuration config ) throws 
ConfigurationException
  +    {
  +        Configuration[] attributes = config.getChildren("attribute");
  +        for( int i=0; i<attributes.length; i++ )
  +        {
  +            Configuration attribute = attributes[i];
  +            if( attribute.getAttribute("key").equals("phoenix:shema-type") )
  +              return attribute.getAttribute("value");
  +        }
  +        return null;
       }
   
       /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to