You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2003/03/17 05:07:39 UTC

cvs commit: avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl DefaultBlockLoader.java

mcconnell    2003/03/16 20:07:39

  Modified:    merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl
                        DefaultBlockLoader.java
  Log:
  Updated to support the creation of dependency and service descriptors as part of the an overall root blocn definition.  This change is in support of support for dynamic type simulation by a composite block.
  
  Revision  Changes    Path
  1.2       +81 -40    avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl/DefaultBlockLoader.java
  
  Index: DefaultBlockLoader.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl/DefaultBlockLoader.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultBlockLoader.java	13 Mar 2003 01:05:04 -0000	1.1
  +++ DefaultBlockLoader.java	17 Mar 2003 04:07:39 -0000	1.2
  @@ -118,6 +118,9 @@
   import org.apache.avalon.meta.model.LoggingDirective;
   import org.apache.avalon.meta.model.Profile;
   import org.apache.avalon.meta.info.Type;
  +import org.apache.avalon.meta.info.DependencyDescriptor;
  +import org.apache.avalon.meta.info.ServiceDescriptor;
  +import org.apache.avalon.meta.info.builder.XMLTypeCreator;
   import org.apache.excalibur.configuration.ConfigurationUtil;
   
   
  @@ -160,6 +163,8 @@
   
       private static final XMLProfileCreator BUILDER = new XMLProfileCreator();
   
  +    private static final XMLTypeCreator TYPE_CREATOR = new XMLTypeCreator();
  +
       //==============================================================
       // state
       //==============================================================
  @@ -350,13 +355,62 @@
           }
   
           //
  -        // create an appliance context 
  +        // create the containment profile
  +        //
  +
  +        ContainerDescriptor descriptor = 
  +          createContainerDescriptor( name, engine, implementation );
  +
  +        //
  +        // create the block dependencies
  +        //
  +
  +        Configuration depsConfig = block.getChild( "dependencies" );
  +        DependencyDescriptor[] dependencies; 
  +        try
  +        {
  +            dependencies = TYPE_CREATOR.buildDependencies( depsConfig);
  +        }
  +        catch( ConfigurationException ce )
  +        {
  +            final String error = 
  +              "Invalid dependencies declaration in block specification:\n"
  +              + ConfigurationUtil.list( depsConfig );
  +            throw new BlockException( error, ce );
  +        }
  +
  +        //
  +        // create the block services
  +        //
  +
  +        Configuration servicesConfig = block.getChild( "dependencies" );
  +        ServiceDescriptor[] services;
  +        try
  +        {
  +            services = TYPE_CREATOR.buildServices( depsConfig);
  +        }
  +        catch( ConfigurationException ce )
  +        {
  +            final String error = 
  +              "Invalid services declaration in block specification:\n"
  +              + ConfigurationUtil.list( depsConfig );
  +            throw new BlockException( error, ce );
  +        }
  +
  +        //
  +        // create any subsidiary blocks
           //
   
           String partition = root + name + Container.PATH_SEPERATOR;
  -        ContainerDescriptor descriptor = createContainerDescriptor( name, engine, implementation );
  -        List list = createChildBlocks( engine, partition, implementation, config, base, getLogger() );
  -        return createBlock( engine, list, descriptor, name, root, config );
  +        List children = 
  +          createChildBlocks( engine, partition, implementation, config, base );
  +
  +        //
  +        // create the block 
  +        //
  +
  +        return createBlock( 
  +          dependencies, services, engine, children, descriptor, name, root, config );
       }
   
       //==============================================================
  @@ -469,7 +523,7 @@
       * 
       * @param name the container name
       * @param engine the classloader to use
  -    * @param config the confuration describing the containment scenario
  +    * @param config the configuration describing the block implementation
       * @return the container descriptor
       */
       private ContainerDescriptor createContainerDescriptor( 
  @@ -524,12 +578,13 @@
       * @param engine the parent classloader
       * @param partition the partition to be applied to the child containers
       * @param config the parent block configuration 
  -    * @param logger the logger from which child loggers shall be created
  -    * @return a list of appliance instances each representing a container container
  +    * @param custom override targets
  +    * @param base the base url
  +    * @return a list of appliance instances each representing a subsidiary container
       */
       private List createChildBlocks( 
         EngineClassLoader engine, String partition,
  -      Configuration config, Configuration custom, URL base, Logger logger )
  +      Configuration config, Configuration custom, URL base )
         throws BlockException
       {
           List list = new ArrayList();
  @@ -564,30 +619,6 @@
                     + " from base: " + base;
                   throw new BlockException( error, e );
               }
  -
  -            //
  -            // check if there is a qualifying configuration URL
  -            //
  -
  -            URL conf = null;
  -            /*
  -            Configuration target = include.getChild("configuration");
  -            String ref = target.getAttribute( "src", null );
  -            if( ref != null )
  -            {
  -                try
  -                {
  -                    conf = new URL( base, ref );
  -                }
  -                catch( MalformedURLException mue )
  -                {
  -                    final String error = 
  -                      "Cannot parse supplied configuration src attribute: " + ref
  -                      + ConfigurationUtil.list( target );
  -                    throw new BlockException( error );
  -                }
  -            }
  -            */
    
               if( getLogger().isDebugEnabled() )
               {
  @@ -596,7 +627,7 @@
                   getLogger().debug( info );
               }
   
  -            Block block = installSource( engine, partition, source, conf );
  +            Block block = installSource( engine, partition, source, null );
               list.add( block );
           }
   
  @@ -624,7 +655,7 @@
               }
   
               Block block = createContainmentBlock( 
  -              loader, partition, name, child, custom, base, getLogger() );
  +              loader, partition, name, child, custom, base );
               list.add( block );
           }
   
  @@ -638,17 +669,18 @@
       * @param partition the partition to assigne to the container
       * @param name the appliance name
       * @param config the configuration of the container
  -    * @param logger the logging channel to apply to classloaders created for child containers
  +    * @param custom configuratio target overrides
  +    * @param base the base url
       * @return the containment block
       * @exception BlockException if an error occurs during creation of the block
       */
       private Block createContainmentBlock( 
         EngineClassLoader engine, String partition, String name, 
  -      Configuration config, Configuration custom, URL base, Logger logger )
  +      Configuration config, Configuration custom, URL base )
         throws BlockException
       {
           String subPartition = partition + name + Container.PATH_SEPERATOR;
  -        List list = createChildBlocks( engine, subPartition, config, custom, base, logger );
  +        List list = createChildBlocks( engine, subPartition, config, custom, base );
   
           ContainerDescriptor descriptor;
           try
  @@ -662,12 +694,18 @@
               throw new BlockException( error, e );
           }
   
  -        return createBlock( engine, list, descriptor, name, partition, custom ); 
  +        DependencyDescriptor[] dependecies = new DependencyDescriptor[0];
  +        ServiceDescriptor[] services = new ServiceDescriptor[0];
  +
  +        return createBlock( 
  +          dependecies, services, engine, list, descriptor, name, partition, custom ); 
       }
   
      /**
       * Create a block.
       *
  +    * @param dependencies block dependencies
  +    * @param services block services
       * @param engine the containers classloader
       * @param containers the list of subsidiary blocks
       * @param descriptor the container descriptor
  @@ -678,6 +716,7 @@
       * @exception BlockException if an error occurs during creation of the block
       */
       private Block createBlock( 
  +      DependencyDescriptor[] dependencies, ServiceDescriptor[] services, 
         EngineClassLoader engine, List containers, ContainerDescriptor descriptor, 
         String name, String partition, Configuration custom )
         throws BlockException
  @@ -698,10 +737,12 @@
           context.put("urn:merlin:container.descriptor", descriptor );
           context.put("urn:merlin:container.library", this );
           context.put("urn:merlin:container.containers", containers );
  +        context.put("urn:merlin:container.dependencies", dependencies );
  +        context.put("urn:merlin:container.services", services );
           context.makeReadOnly();
   
           //
  -        // create the containement appliance
  +        // create the containment appliance
           //
   
           try
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org