Hi,

Heres a bunch of changes to containerkit. It includes;
* removing all references to the term "role" and replacing them with 
references to "key". 
* allowing metadata to have attributes attached to elements
* addition of PartitionMetaData to represent "groups" of components
* adaption of MetaDataBuilder so it takes a map of parameters
* a few typo fixes

This is one half of the changes to ContainerKit that are needed to get 
auto-assembly closer to happening

-- 
Cheers,

Peter Donald
--------------------------------------------------
"An intellectual is someone who has been educated 
beyond their intelligence."
-------------------------------------------------- 
? containerkit.txt
Index: src/java/org/apache/excalibur/containerkit/demo/SimpleMetaDataBuilder.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/demo/SimpleMetaDataBuilder.java,v
retrieving revision 1.1
diff -u -r1.1 SimpleMetaDataBuilder.java
--- src/java/org/apache/excalibur/containerkit/demo/SimpleMetaDataBuilder.java  23 Aug 
2002 08:51:15 -0000      1.1
+++ src/java/org/apache/excalibur/containerkit/demo/SimpleMetaDataBuilder.java  26 Nov 
+2002 11:56:36 -0000
@@ -8,12 +8,15 @@
 package org.apache.excalibur.containerkit.demo;
 
 import java.util.ArrayList;
+import java.util.Map;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.info.Attribute;
 import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
 import org.apache.excalibur.containerkit.metadata.DependencyMetaData;
 import org.apache.excalibur.containerkit.metadata.MetaDataBuilder;
+import org.apache.excalibur.containerkit.metadata.PartitionMetaData;
 import org.xml.sax.InputSource;
 
 /**
@@ -26,7 +29,20 @@
 public class SimpleMetaDataBuilder
     implements MetaDataBuilder
 {
-    public ComponentMetaData[] loadMetaData( final String location )
+    public static final String CONFIG_LOCATION = "simple:location";
+
+    public PartitionMetaData loadAssembly( final Map parameters )
+        throws Exception
+    {
+        final String location = (String)parameters.get( CONFIG_LOCATION );
+        final ComponentMetaData[] components = loadMetaData( location );
+        return new PartitionMetaData( "main", new String[ 0 ],
+                                      new PartitionMetaData[ 0 ],
+                                      components,
+                                      Attribute.EMPTY_SET );
+    }
+
+    private ComponentMetaData[] loadMetaData( final String location )
         throws Exception
     {
         final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
@@ -62,7 +78,7 @@
         final DependencyMetaData[] dependencies =
             parseAssociations( component.getChildren( "provide" ) );
 
-        return new ComponentMetaData( name, impl, dependencies, null, config );
+        return new ComponentMetaData( name, impl, dependencies, null, config, null );
     }
 
     private DependencyMetaData[] parseAssociations( final Configuration[] provides )
@@ -72,9 +88,10 @@
         for( int i = 0; i < provides.length; i++ )
         {
             final Configuration provide = provides[ i ];
-            final String role = provide.getAttribute( "role" );
-            final String provider = provide.getAttribute( "name" );
-            final DependencyMetaData association = new DependencyMetaData( role, 
provider );
+            final String key = provide.getAttribute( "key" );
+            final String provider = provide.getAttribute( "provider" );
+            final DependencyMetaData association =
+                new DependencyMetaData( key, provider, key, Attribute.EMPTY_SET );
             associations.add( association );
         }
         return (DependencyMetaData[])associations.toArray( new DependencyMetaData[ 
associations.size() ] );
Index: src/java/org/apache/excalibur/containerkit/demo/SimpleServiceKernel.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/demo/SimpleServiceKernel.java,v
retrieving revision 1.2
diff -u -r1.2 SimpleServiceKernel.java
--- src/java/org/apache/excalibur/containerkit/demo/SimpleServiceKernel.java    2 Oct 
2002 01:52:19 -0000       1.2
+++ src/java/org/apache/excalibur/containerkit/demo/SimpleServiceKernel.java    26 Nov 
+2002 11:56:36 -0000
@@ -18,6 +18,9 @@
 import org.apache.excalibur.containerkit.lifecycle.ResourceProvider;
 import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
 import org.apache.excalibur.containerkit.metadata.MetaDataBuilder;
+import org.apache.excalibur.containerkit.metadata.PartitionMetaData;
+import java.util.Map;
+import java.util.HashMap;
 
 /**
  * This is a simple ServiceKernel.
@@ -53,7 +56,10 @@
         m_metaDataBuilder = new SimpleMetaDataBuilder();
         setupLogger( getFactory(), "builder" );
 
-        final ComponentMetaData[] components = m_metaDataBuilder.loadMetaData( 
m_configURL );
+        final Map parameters = new HashMap();
+        parameters.put( SimpleMetaDataBuilder.CONFIG_LOCATION, m_configURL );
+        final PartitionMetaData partition = m_metaDataBuilder.loadAssembly( 
+parameters );
+        final ComponentMetaData[] components = partition.getComponents();
         for( int i = 0; i < components.length; i++ )
         {
             final ComponentMetaData component = components[ i ];
Index: src/java/org/apache/excalibur/containerkit/kernel/processor/DependencyMap.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/processor/DependencyMap.java,v
retrieving revision 1.2
diff -u -r1.2 DependencyMap.java
--- src/java/org/apache/excalibur/containerkit/kernel/processor/DependencyMap.java     
 2 Oct 2002 01:52:19 -0000       1.2
+++ src/java/org/apache/excalibur/containerkit/kernel/processor/DependencyMap.java     
+ 26 Nov 2002 11:56:37 -0000
@@ -217,12 +217,12 @@
         for( int i = 0; i < entrySet.length; i++ )
         {
             final ComponentProfile other = entrySet[ i ];
-            final DependencyMetaData[] roles =
+            final DependencyMetaData[] dependencies =
                 other.getMetaData().getDependencies();
 
-            for( int j = 0; j < roles.length; j++ )
+            for( int j = 0; j < dependencies.length; j++ )
             {
-                final String depends = roles[ j ].getProviderName();
+                final String depends = dependencies[ j ].getProviderName();
                 if( depends.equals( name ) )
                 {
                     visitcomponent( other, false, done, order, store );
Index: 
src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java,v
retrieving revision 1.19
diff -u -r1.19 AbstractResourceProvider.java
--- 
src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java
     16 Nov 2002 13:09:33 -0000      1.19
+++ 
+src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java
+     26 Nov 2002 11:56:38 -0000
@@ -339,7 +339,7 @@
 
     /**
      * Create a Map of services for specified component.
-     * The map maps role name to service provider.
+     * The map maps key name to service provider.
      *
      * @param componentEntry the component entry creating map for
      * @return the map
@@ -359,9 +359,9 @@
         for( int i = 0; i < dependencies.length; i++ )
         {
             final DependencyMetaData dependency = dependencies[ i ];
-            final String role = dependency.getRole();
+            final String key = dependency.getKey();
             final String providerName = dependency.getProviderName();
-            final boolean optional = info.getDependency( role ).isOptional();
+            final boolean optional = info.getDependency( key ).isOptional();
 
             final Object service =
                 getService( providerName, componentEntry );
@@ -370,7 +370,7 @@
                 final String message =
                     REZ.getString( "resource.missing-dependency.error",
                                    optional ? "1" : "2",
-                                   role,
+                                   key,
                                    component.getName() );
                 if( !optional )
                 {
@@ -383,7 +383,7 @@
                 }
             }
 
-            services.put( role, service );
+            services.put( key, service );
         }
 
         return services;
Index: src/java/org/apache/excalibur/containerkit/lifecycle/impl/Resource.properties
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/impl/Resource.properties,v
retrieving revision 1.2
diff -u -r1.2 Resource.properties
--- src/java/org/apache/excalibur/containerkit/lifecycle/impl/Resource.properties      
 25 Jun 2002 04:32:29 -0000      1.2
+++ src/java/org/apache/excalibur/containerkit/lifecycle/impl/Resource.properties      
+ 26 Nov 2002 11:56:38 -0000
@@ -1,7 +1,7 @@
 resource.missing-context-value.error=Missing {0,choice,1#Optional|2#Required} Context 
Entry with key "{1}" for component named "{2}".
 resource.bad-value-type.error=Bad value retrieved for 
{0,choice,1#Optional|2#Required} Context Entry with key "{1}" for component named 
"{2}". Expected to be of type "{3}" but was of type "{4}".
 resource.bad-context-type.error=The class of Contex object for component named "{2}" 
was expected to be of type {0} but was of tpye {1}.
-resource.service-not-a-component.error=The service with role "0" and implemenation 
class "{1}" does not implement the Component interface but is being exposed via 
ComponentManager.
-resource.missing-dependency.error=Missing {0,choice,1#Optional|2#Required} dependency 
with role "{1}" for component named {2}.
+resource.service-not-a-component.error=The service with key "0" and implemenation 
+class "{1}" does not implement the Component interface but is being exposed via 
+ComponentManager.
+resource.missing-dependency.error=Missing {0,choice,1#Optional|2#Required} dependency 
+with key "{1}" for component named {2}.
 resource.missing-parameters.error=Missing Parameters object for component named "{0}".
 resource.missing-parameters.error=Missing Configuration for component named "{0}".
Index: src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java,v
retrieving revision 1.13
diff -u -r1.13 ComponentMetaData.java
--- src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java  18 Aug 
2002 03:34:28 -0000      1.13
+++ src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java  26 Nov 
+2002 11:56:38 -0000
@@ -8,11 +8,13 @@
 package org.apache.excalibur.containerkit.metadata;
 
 import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.info.Attribute;
+import org.apache.avalon.framework.info.FeatureDescriptor;
 import org.apache.avalon.framework.parameters.Parameters;
 
 /**
  * Each component declared in the application is represented by
- * a ComponentPolicy. Note that this does not necessarily imply
+ * a ComponentMetaData. Note that this does not necessarily imply
  * that there is only one instance of actual component. The
  * ComponentMetaData could represent a pool of components, a single
  * component or a component prototype that is reused to create
@@ -22,8 +24,15 @@
  * @version $Revision: 1.13 $ $Date: 2002/08/18 03:34:28 $
  */
 public class ComponentMetaData
+    extends FeatureDescriptor
 {
     /**
+     * The name of the component. This is an
+     * abstract name used during assembly.
+     */
+    private final String m_name;
+
+    /**
      * The implementationKey for this component.
      * Usually this represents a classname but
      * alternative mechanisms could be used (ie URL
@@ -32,12 +41,6 @@
     private final String m_implementationKey;
 
     /**
-     * The name of the component. This is an
-     * abstract name used during assembly.
-     */
-    private final String m_name;
-
-    /**
      * The resolution of any dependencies required by
      * the component type.
      */
@@ -57,14 +60,20 @@
      * Create a ComponentMetaData.
      *
      * @param name the abstract name of component meta data instance
+     * @param implementationKey the key used to create component (usually a classname)
      * @param dependencies the meta data for any dependencies
+     * @param parameters the parameters that the component will be provided (may be 
+null)
+     * @param configuration the configuration that the component will be provided 
+(may be null)
+     * @param attributes the extra attributes that are used to describe component
      */
     public ComponentMetaData( final String name,
                               final String implementationKey,
                               final DependencyMetaData[] dependencies,
                               final Parameters parameters,
-                              final Configuration configuration )
+                              final Configuration configuration,
+                              final Attribute[] attributes )
     {
+        super( attributes );
         if( null == name )
         {
             throw new NullPointerException( "name" );
@@ -86,9 +95,9 @@
     }
 
     /**
-     * Return the name of component profile.
+     * Return the name of component metadata.
      *
-     * @return the name of the component profile.
+     * @return the name of the component metadata.
      */
     public String getName()
     {
@@ -136,15 +145,15 @@
     }
 
     /**
-     * Return the dependency for component with specified role.
+     * Return the dependency for component with specified key.
      *
-     * @return the dependency for component with specified role.
+     * @return the dependency for component with specified key.
      */
-    public DependencyMetaData getDependency( final String role )
+    public DependencyMetaData getDependency( final String key )
     {
         for( int i = 0; i < m_dependencies.length; i++ )
         {
-            if( m_dependencies[ i ].getRole().equals( role ) )
+            if( m_dependencies[ i ].getKey().equals( key ) )
             {
                 return m_dependencies[ i ];
             }
Index: src/java/org/apache/excalibur/containerkit/metadata/DependencyMetaData.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/DependencyMetaData.java,v
retrieving revision 1.10
diff -u -r1.10 DependencyMetaData.java
--- src/java/org/apache/excalibur/containerkit/metadata/DependencyMetaData.java 2 Oct 
2002 01:46:57 -0000       1.10
+++ src/java/org/apache/excalibur/containerkit/metadata/DependencyMetaData.java 26 Nov 
+2002 11:56:39 -0000
@@ -7,12 +7,15 @@
  */
 package org.apache.excalibur.containerkit.metadata;
 
+import org.apache.avalon.framework.info.FeatureDescriptor;
+import org.apache.avalon.framework.info.Attribute;
+
 /**
  * The {@link DependencyMetaData} is the mapping of a component as a dependency
  * of another component. Each component declares dependencies (via
  * {@link org.apache.avalon.framework.info.ComponentInfo})
  * and for each dependency there must be a coressponding DependencyMetaData which
- * has a matching role. The name value in {@link DependencyMetaData} object must refer
+ * has a matching key. The name value in {@link DependencyMetaData} object must refer
  * to another Component that implements a service as specified in DependencyInfo.
  *
  * <p>Note that it is invalid to have circular dependencies.</p>
@@ -22,11 +25,12 @@
  * @version $Revision: 1.10 $ $Date: 2002/10/02 01:46:57 $
  */
 public final class DependencyMetaData
+    extends FeatureDescriptor
 {
     /**
-     * The name that the client component will use to access a dependency.
+     * The key that the client component will use to access a dependency.
      */
-    private final String m_role;
+    private final String m_key;
 
     /**
      * the name of the component profile that represents a component
@@ -35,29 +39,52 @@
     private final String m_providerName;
 
     /**
-     * Create Association between role and provider.
+     * The key that is used when the dependency is a map dependency.
+     * Usually this defaults to the same value as the key.
+     */
+    private final String m_alias;
+
+    /**
+     * Create Association between key and provider.
      *
-     * @param role the name client uses to access component
+     * @param key the key the client uses to access component
      * @param providerName the name of {@link ComponentMetaData}
      *   that is associated as a service provider
      */
-    public DependencyMetaData( final String role,
-                               final String providerName )
+    public DependencyMetaData( final String key,
+                               final String providerName,
+                               final String alias,
+                               final Attribute[] attributes )
     {
-        m_role = role;
+        super( attributes );
+
+        if( null == key )
+        {
+            throw new NullPointerException( "key" );
+        }
+        if( null == providerName )
+        {
+            throw new NullPointerException( "providerName" );
+        }
+        if( null == alias )
+        {
+            throw new NullPointerException( "alias" );
+        }
+        m_key = key;
         m_providerName = providerName;
+        m_alias = alias;
     }
 
     /**
-     * Return the name that will be used by a component instance to access a
+     * Return the key that will be used by a component instance to access a
      * dependent service.
      *
      * @return the name that the client component will use to access dependency.
      * @see org.apache.avalon.framework.service.ServiceManager#lookup( String )
      */
-    public String getRole()
+    public String getKey()
     {
-        return m_role;
+        return m_key;
     }
 
     /**
@@ -69,5 +96,17 @@
     public String getProviderName()
     {
         return m_providerName;
+    }
+
+    /**
+     * The key under which the dependency is placed in map if dependency is
+     * a Map dependency.
+     *
+     * @return the key under which the dependency is placed in map if dependency is
+     *         a Map dependency.
+     */
+    public String getAlias()
+    {
+        return m_alias;
     }
 }
Index: src/java/org/apache/excalibur/containerkit/metadata/MetaDataBuilder.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/MetaDataBuilder.java,v
retrieving revision 1.2
diff -u -r1.2 MetaDataBuilder.java
--- src/java/org/apache/excalibur/containerkit/metadata/MetaDataBuilder.java    2 Oct 
2002 01:52:19 -0000       1.2
+++ src/java/org/apache/excalibur/containerkit/metadata/MetaDataBuilder.java    26 Nov 
+2002 11:56:39 -0000
@@ -7,11 +7,11 @@
  */
 package org.apache.excalibur.containerkit.metadata;
 
-
+import java.util.Map;
 
 /**
- * Load metadata from some source. The source is usually
- * one or more xml config files.
+ * Load metadata for an Assembly from some source.
+ * The source is usually one or more xml config files.
  *
  * @author <a href="mailto:peter at apache.org">Peter Donald</a>
  * @version $Revision: 1.2 $ $Date: 2002/10/02 01:52:19 $
@@ -20,15 +20,14 @@
 {
     /**
      * Load metadata from a particular source
-     * defined by location string. The format of
-     * location string and format of source loaded
-     * from is left unspecified.
+     * using specified map of parameters. The content
+     * of the parameters is left unspecified.
      *
-     * @param location the location of meta data source
+     * @param parameters the parameters indicating method to load meta data source
      * @return the set of components in metadata
-     * @throws java.lang.Exception if unable to load or resolve meta
-     *         data for any reason
+     * @throws Exception if unable to load or resolve
+     *         meta data for any reason
      */
-    ComponentMetaData[] loadMetaData( String location )
+    PartitionMetaData loadAssembly( Map parameters )
         throws Exception;
 }
Index: src/java/org/apache/excalibur/containerkit/metadata/package.html
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/package.html,v
retrieving revision 1.2
diff -u -r1.2 package.html
--- src/java/org/apache/excalibur/containerkit/metadata/package.html    6 Jul 2002 
01:13:01 -0000       1.2
+++ src/java/org/apache/excalibur/containerkit/metadata/package.html    26 Nov 2002 
+11:56:39 -0000
@@ -1,5 +1,4 @@
-
 <body>
 A set of classes supporting the representation of information about a
-component profile.
+component assembly.
 </body>
Index: src/java/org/apache/excalibur/containerkit/registry/ComponentProfile.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/registry/ComponentProfile.java,v
retrieving revision 1.1
diff -u -r1.1 ComponentProfile.java
--- src/java/org/apache/excalibur/containerkit/registry/ComponentProfile.java   24 Aug 
2002 08:49:03 -0000      1.1
+++ src/java/org/apache/excalibur/containerkit/registry/ComponentProfile.java   26 Nov 
+2002 11:56:39 -0000
@@ -27,6 +27,7 @@
      * the type of this component.
      */
     private final ComponentInfo m_info;
+    
     /**
      * The {@link ComponentMetaData} that describes
      * this component.
Index: src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java,v
retrieving revision 1.40
diff -u -r1.40 AssemblyVerifier.java
--- src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java   12 Nov 
2002 01:39:42 -0000      1.40
+++ src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java   26 Nov 
+2002 11:56:40 -0000
@@ -245,13 +245,13 @@
         throws VerifyException
     {
         final ComponentInfo info = component.getInfo();
-        final DependencyMetaData[] roles = component.getMetaData().getDependencies();
+        final DependencyMetaData[] dependencies = 
+component.getMetaData().getDependencies();
 
-        for( int i = 0; i < roles.length; i++ )
+        for( int i = 0; i < dependencies.length; i++ )
         {
-            final String providerName = roles[ i ].getProviderName();
-            final String roleName = roles[ i ].getRole();
-            final String implementationKey = info.getDependency( roleName ).getType();
+            final String providerName = dependencies[ i ].getProviderName();
+            final String key = dependencies[ i ].getKey();
+            final String implementationKey = info.getDependency( key ).getType();
 
             //Get the other component that is providing service
             final ComponentProfile provider = getComponentProfile( providerName, 
others );
@@ -259,7 +259,7 @@
             {
                 final String message =
                     REZ.getString( "assembly.missing-dependency.error",
-                                   roleName,
+                                   key,
                                    providerName,
                                    component.getMetaData().getName() );
                 throw new VerifyException( message );
@@ -404,15 +404,15 @@
     protected void verifyDependenciesMap( final ComponentProfile component )
         throws VerifyException
     {
-        //Make sure all role entries specified in config file are valid
+        //Make sure all dependency entries specified in config file are valid
         final DependencyMetaData[] dependencySet =
             component.getMetaData().getDependencies();
 
         for( int i = 0; i < dependencySet.length; i++ )
         {
-            final String roleName = dependencySet[ i ].getRole();
+            final String key = dependencySet[ i ].getKey();
             final ComponentInfo info = component.getInfo();
-            final DependencyDescriptor descriptor = info.getDependency( roleName );
+            final DependencyDescriptor descriptor = info.getDependency( key );
 
             //If there is no dependency descriptor in ComponentInfo then
             //user has specified an uneeded dependency.
@@ -420,8 +420,8 @@
             {
                 final String message =
                     REZ.getString( "assembly.unknown-dependency.error",
-                                   roleName,
-                                   roleName,
+                                   key,
+                                   key,
                                    component.getMetaData().getName() );
                 throw new VerifyException( message );
             }
@@ -433,12 +433,12 @@
         for( int i = 0; i < dependencies.length; i++ )
         {
             final DependencyDescriptor dependency = dependencies[ i ];
-            final DependencyMetaData role =
+            final DependencyMetaData dependencyMetaData =
                 component.getMetaData().getDependency( dependency.getKey() );
 
-            //If there is no Role then the user has failed
+            //If there is no metaData then the user has failed
             //to specify a needed dependency.
-            if( null == role && !dependency.isOptional() )
+            if( null == dependencyMetaData && !dependency.isOptional() )
             {
                 final String message =
                     REZ.getString( "assembly.unspecified-dependency.error",
Index: src/java/org/apache/excalibur/containerkit/verifier/Resources.properties
===================================================================
RCS file: 
/home/cvspublic/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/Resources.properties,v
retrieving revision 1.11
diff -u -r1.11 Resources.properties
--- src/java/org/apache/excalibur/containerkit/verifier/Resources.properties    14 Sep 
2002 06:21:00 -0000      1.11
+++ src/java/org/apache/excalibur/containerkit/verifier/Resources.properties    26 Nov 
+2002 11:56:41 -0000
@@ -6,11 +6,11 @@
 assembly.nocircular-dependencies.notice=Verifying that there are no circular 
dependencies between Components.
 assembly.component-type.notice=Verifying that the specified Components have valid 
types.
 assembly.circular-dependency.error=Component named "{0}" has a circular dependency 
via path: {1}.
-assembly.missing-dependency.error=Component "{1}" that satisfies the dependency with 
role "{0}" of Component "{2}" does not exist.
+assembly.missing-dependency.error=Component "{1}" that satisfies the dependency with 
+key "{0}" of Component "{2}" does not exist.
 assembly.dependency-missing-service.error=Dependency "{0}" of Block "{2}" does not 
offer the required service "{1}".
 assembly.bad-class.error=Unable to load class "{1}" for Component named "{0}". 
(Reason: {2}).
 assembly.bad-name.error=The Component name "{0}" is invalid. Valid names contain only 
letters, digits and the '-' character.
 assembly.duplicate-name.error=The name "{0}" is used by multiple Components in 
assembly.
-assembly.unknown-dependency.error=Unknown dependency named "{0}" with role "{1}" 
declared for Component {2}.
-assembly.unspecified-dependency.error=Dependency for role "{0}" not specified for the 
Component named "{1}".
+assembly.unknown-dependency.error=Unknown dependency named "{0}" with key "{1}" 
+declared for Component {2}.
+assembly.unspecified-dependency.error=Dependency for key "{0}" not specified for the 
+Component named "{1}".
 error=Component named "{0}" of type "{1}" is not Contextualizable but declares 
Context Entrys.
/*
 * 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.containerkit.metadata;

import org.apache.avalon.framework.info.Attribute;
import org.apache.avalon.framework.info.FeatureDescriptor;

/**
 * In each Assembly there may be groups of components that
 * are activated together and treated as a group. These
 * components are all "visible" to each other as peers.
 * The group will have a name and may use resources from
 * other partitions. Partitions can also be nested one inside
 * each other.
 *
 * @author <a href="mailto:peter at apache.org">Peter Donald</a>
 * @version $Revision: 1.13 $ $Date: 2002/08/18 03:34:28 $
 */
public class PartitionMetaData
    extends FeatureDescriptor
{
    /**
     * Constant for an empty set of partitions.
     */
    public static final PartitionMetaData[] EMPTY_SET = new PartitionMetaData[ 0 ];

    /**
     * The name of the partition. This is an
     * abstract name used during assembly.
     */
    private final String m_name;

    /**
     * An array listing the set of other partitions required by
     * this partition. The required partitions must be initialized
     * and in ready state prior to this partition starting and this
     * partition must be shutdown prior
     */
    private final String[] m_depends;

    /**
     * AN array of partitions that are contained by this
     * object.
     */
    private final PartitionMetaData[] m_partitions;

    /**
     * AN array of partitions that are contained by this
     * object.
     */
    private final ComponentMetaData[] m_components;

    /**
     * Create a ComponentMetaData.
     *
     * @param name the abstract name of component meta data instance
     * @param depends the partitions depended upon by this parition
     * @param partitions the partitions contained by this partition
     * @param components the components contained by this partition
     * @param attributes the extra attributes that are used to describe component
     */
    public PartitionMetaData( final String name,
                              final String[] depends,
                              final PartitionMetaData[] partitions,
                              final ComponentMetaData[] components,
                              final Attribute[] attributes )
    {
        super( attributes );
        if( null == name )
        {
            throw new NullPointerException( "name" );
        }
        if( null == depends )
        {
            throw new NullPointerException( "depends" );
        }
        if( null == partitions )
        {
            throw new NullPointerException( "partitions" );
        }
        if( null == components )
        {
            throw new NullPointerException( "components" );
        }

        m_name = name;
        m_depends = depends;
        m_partitions = partitions;
        m_components = components;
    }

    /**
     * Return the name of component profile.
     *
     * @return the name of the component profile.
     */
    public String getName()
    {
        return m_name;
    }

    /**
     * Return the set of prereqs for this partition.
     *
     * @return the set of prereqs for this partition.
     */
    public String[] getDepends()
    {
        return m_depends;
    }

    /**
     * Return the set of partitions contained in this partition.
     *
     * @return the set of partitions contained in this partition.
     */
    public PartitionMetaData[] getPartitions()
    {
        return m_partitions;
    }

    /**
     * Return the set of components contained in this partition.
     *
     * @return the set of components contained in this partition.
     */
    public ComponentMetaData[] getComponents()
    {
        return m_components;
    }

    /**
     * Return the partition with specified name.
     *
     * @return the partition with specified name.
     */
    public PartitionMetaData getPartition( final String name )
    {
        for( int i = 0; i < m_partitions.length; i++ )
        {
            final PartitionMetaData partition = m_partitions[ i ];
            if( partition.getName().equals( name ) )
            {
                return partition;
            }
        }
        return null;
    }

    /**
     * Return the component with specified name.
     *
     * @return the component with specified name.
     */
    public ComponentMetaData getComponent( final String name )
    {
        for( int i = 0; i < m_components.length; i++ )
        {
            final ComponentMetaData component = m_components[ i ];
            if( component.getName().equals( name ) )
            {
                return component;
            }
        }
        return null;
    }
}

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

Reply via email to