donaldp     2002/06/22 23:49:15

  Modified:    
containerkit/src/java/org/apache/excalibur/containerkit/dependency
                        DependencyMap.java
               containerkit/src/java/org/apache/excalibur/containerkit/kernel
                        AbstractServiceKernel.java
  Log:
  Refactory DependencyMap so that it has notiong of parent DependencyMaps and 
also so that it allows components to be added to it dynamically.
  
  Revision  Changes    Path
  1.2       +55 -15    
jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java
  
  Index: DependencyMap.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DependencyMap.java        23 Jun 2002 05:59:17 -0000      1.1
  +++ DependencyMap.java        23 Jun 2002 06:49:15 -0000      1.2
  @@ -21,11 +21,40 @@
    */
   public class DependencyMap
   {
  -    private final ComponentMetaData[] m_components;
  +    /**
  +     * Parent DependencyMap. Components in parent
  +     * DependencyMap are potential Providers for services
  +     * if no component in current assembly satisfies dependency.
  +     */
  +    private final DependencyMap m_parent;
  +
  +    /**
  +     * The set of components in assembly.
  +     * Used when searching for providers/consumers.
  +     */
  +    private final ArrayList m_components = new ArrayList();
  +
  +    public DependencyMap()
  +    {
  +        this( null );
  +    }
  +
  +    public DependencyMap( final DependencyMap parent )
  +    {
  +        m_parent = parent;
  +    }
   
  -    public DependencyMap( final ComponentMetaData[] components )
  +    public void add( final ComponentMetaData component )
       {
  -        m_components = components;
  +        m_components.add( component );
  +    }
  +
  +    public void addAll( final ComponentMetaData[] components )
  +    {
  +        for( int i = 0; i < components.length; i++ )
  +        {
  +            m_components.add( components[ i ] );
  +        }
       }
   
       /**
  @@ -109,9 +138,12 @@
       {
           final ArrayList result = new ArrayList();
   
  -        for( int i = 0; i < m_components.length; i++ )
  +        final int size = m_components.size();
  +        for( int i = 0; i < size; i++ )
           {
  -            visitcomponent( m_components[ i ],
  +            final ComponentMetaData component =
  +                (ComponentMetaData)m_components.get( i );
  +            visitcomponent( component,
                               forward,
                               new ArrayList(),
                               result );
  @@ -188,14 +220,12 @@
       {
           final String name = component.getName();
   
  -        for( int i = 0; i < m_components.length; i++ )
  +        final int size = m_components.size();
  +        for( int i = 0; i < size; i++ )
           {
  -            final ComponentMetaData other = m_components[ i ];
  +            final ComponentMetaData other =
  +                (ComponentMetaData)m_components.get( i );
               final DependencyMetaData[] roles = other.getDependencies();
  -            if( null == roles )
  -            {
  -                continue;
  -            }
   
               for( int j = 0; j < roles.length; j++ )
               {
  @@ -206,6 +236,8 @@
                   }
               }
           }
  +
  +        //TODO: Search children consumers here
       }
   
       /**
  @@ -216,12 +248,20 @@
        */
       private ComponentMetaData getComponent( final String name )
       {
  -        for( int i = 0; i < m_components.length; i++ )
  +        final int size = m_components.size();
  +        for( int i = 0; i < size; i++ )
           {
  -            if( m_components[ i ].getName().equals( name ) )
  +            final ComponentMetaData component =
  +                (ComponentMetaData)m_components.get( i );
  +            if( component.getName().equals( name ) )
               {
  -                return m_components[ i ];
  +                return component;
               }
  +        }
  +
  +        if( null != m_parent )
  +        {
  +            return m_parent.getComponent( name );
           }
   
           //Should never happen if Verifier passed checks
  
  
  
  1.6       +2 -28     
jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java
  
  Index: AbstractServiceKernel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractServiceKernel.java        23 Jun 2002 05:59:18 -0000      1.5
  +++ AbstractServiceKernel.java        23 Jun 2002 06:49:15 -0000      1.6
  @@ -8,9 +8,7 @@
   package org.apache.excalibur.containerkit.kernel;
   
   import java.util.ArrayList;
  -import java.util.Collection;
   import java.util.HashMap;
  -import java.util.Iterator;
   import java.util.List;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
  @@ -57,14 +55,13 @@
        * The [EMAIL PROTECTED] DependencyMap} via which dependency graph is
        * produced.
        */
  -    private DependencyMap m_dependencyMap;
  +    private final DependencyMap m_dependencyMap = new DependencyMap();
   
       public void initialize()
           throws Exception
       {
           m_resourceProvider = prepareResourceProvider();
           m_lifecycleHelper = prepareLifecycleHelper();
  -        m_dependencyMap = new DependencyMap( getCompnentMetaDatas() );
       }
   
       protected abstract ResourceProvider prepareResourceProvider();
  @@ -109,28 +106,6 @@
       }
   
       /**
  -     * Return the array of meta data for set fo components.
  -     *
  -     * @return the array of meta data for set fo components.
  -     */
  -    private ComponentMetaData[] getCompnentMetaDatas()
  -    {
  -        final Collection entrys = m_entrys.values();
  -        final int size = entrys.size();
  -        final ComponentMetaData[] components = new ComponentMetaData[ size ];
  -
  -        int i = 0;
  -        final Iterator iterator = entrys.iterator();
  -        while( iterator.hasNext() )
  -        {
  -            final ComponentEntry entry = (ComponentEntry)iterator.next();
  -            components[ i++ ] = entry.getMetaData();
  -        }
  -
  -        return components;
  -    }
  -
  -    /**
        * Process a whole assembly through a lifecycle phase
        * (ie startup or shutdown). The components should be processed
        * in order specified by the dependency graph.
  @@ -224,7 +199,6 @@
       private void processComponentsNotice( final ComponentMetaData[] order,
                                             final boolean startup )
       {
  -
           if( getLogger().isInfoEnabled() )
           {
               final Integer count = new Integer( order.length );
  
  
  

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

Reply via email to