mcconnell    2002/07/04 02:01:37

  Added:       assembly .cvsignore README.TXT build.properties build.xml
               assembly/demo/src/etc demo.mf
               assembly/demo/src/java/org/apache/excalibur/playground
                        BasicComponent.java BasicComponent.xinfo
                        BasicService.java ComplexComponent.java
                        ComplexComponent.xinfo InvalidComponent.java
                        InvalidComponent.xinfo SimpleComponent.java
                        SimpleComponent.xinfo SimpleService.java
                        TerminalComponent.java TerminalComponent.xinfo
               assembly/lib avalon-framework.jar
                        excalibur-configuration-1.0.jar
                        excalibur-containerkit-1.0.jar
                        excalibur-extension-1.0a.jar excalibur-i18n-1.0.jar
                        excalibur-io-1.1.jar logkit.jar
               assembly/src .cvsignore
               assembly/src/etc kernel.xml project.mf
               assembly/src/java/org/apache/excalibur/merlin/kernel
                        Container.java ContainerClassLoader.java
                        DefaultContainer.java DefaultContainer.xinfo
                        DefaultKernel.java DefaultKernel.xinfo Fileset.java
                        Kernel.java Main.java Map.java Resources.properties
                        Verifiable.java package.html
               assembly/src/java/org/apache/excalibur/merlin/kernel/doc-files
                        DefaultContainer.gif
               assembly/src/java/org/apache/excalibur/merlin/registry
                        AssemblyException.java
                        AssemblyRuntimeException.java
                        ComponentDefinition.java ComponentType.java
                        DefaultRegistry.java DefaultRegistry.xinfo
                        Profile.java ProfileException.java
                        ProfileRuntimeException.java Registry.java
                        RegistryException.java
                        RegistryRuntimeException.java Resources.properties
                        Selector.java ServiceRegistry.java
                        ServiceTable.java UnresolvedProviderException.java
                        package.html
               assembly/src/java/org/apache/excalibur/merlin/registry/doc-files
                        registry.gif
  Log:
  because its a community process
  
  Revision  Changes    Path
  1.4       +0 -0      jakarta-avalon-excalibur/assembly/.cvsignore
  
  
  
  
  1.5       +0 -0      jakarta-avalon-excalibur/assembly/README.TXT
  
  
  
  
  1.4       +0 -0      jakarta-avalon-excalibur/assembly/build.properties
  
  
  
  
  1.7       +12 -1     jakarta-avalon-excalibur/assembly/build.xml
  
  
  
  
  1.3       +5 -5      jakarta-avalon-excalibur/assembly/demo/src/etc/demo.mf
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicComponent.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicComponent.xinfo
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicService.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/ComplexComponent.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/ComplexComponent.xinfo
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/InvalidComponent.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/InvalidComponent.xinfo
  
  
  
  
  1.4       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleComponent.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleComponent.xinfo
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleService.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/TerminalComponent.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/TerminalComponent.xinfo
  
  
  
  
  1.3       +0 -0      jakarta-avalon-excalibur/assembly/lib/avalon-framework.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/lib/excalibur-configuration-1.0.jar
  
        <<Binary file>>
  
  
  1.6       +123 -126  
jakarta-avalon-excalibur/assembly/lib/excalibur-containerkit-1.0.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/lib/excalibur-extension-1.0a.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      jakarta-avalon-excalibur/assembly/lib/excalibur-i18n-1.0.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      jakarta-avalon-excalibur/assembly/lib/excalibur-io-1.1.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      jakarta-avalon-excalibur/assembly/lib/logkit.jar
  
        <<Binary file>>
  
  
  1.3       +0 -0      jakarta-avalon-excalibur/assembly/src/.cvsignore
  
  
  
  
  1.3       +6 -0      jakarta-avalon-excalibur/assembly/src/etc/kernel.xml
  
  
  
  
  1.4       +3 -3      jakarta-avalon-excalibur/assembly/src/etc/project.mf
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Container.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/ContainerClassLoader.java
  
  
  
  
  1.4       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultContainer.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultContainer.xinfo
  
  
  
  
  1.4       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.xinfo
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Fileset.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Kernel.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Main.java
  
  
  
  
  1.1                  
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Map.java
  
  Index: Map.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.excalibur.merlin.kernel;
  
  import java.util.ArrayList;
  import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
  import org.apache.excalibur.containerkit.metadata.DependencyMetaData;
  import org.apache.excalibur.containerkit.metainfo.DependencyDescriptor;
  
  /**
   * Utility class to help aquire a ordered graph of
   * consumers and providers for specific components.  This is a locally 
   * variant of the containerkit DependencyMap.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Peter Donald</a>
   * @author <a href="mailto:[EMAIL PROTECTED]";>Stephen McConnell</a>
   * @version $Revision: 1.1 $ $Date: 2002/07/04 09:01:35 $
   */
  public class Map
  {
      /**
       * Parent Map. Components in parent
       * Map are potential Providers for services
       * if no component in current assembly satisfies dependency.
       */
      private final Map m_parent;
  
      /**
       * The container providing the componenent.
       */ 
      private Container m_container;
  
      /**
       * The set of components declared by the container as available.,
       * Used when searching for providers/consumers.
       */
      private final ArrayList m_components = new ArrayList();
  
      /**
       * The child {@link Map} objects.
       * Possible consumers of services in this assembly.
       */
      private final ArrayList m_children = new ArrayList();
  
  
      public Map()
      {
          this( null );
      }
  
      public Map( final Map parent )
      {
          m_parent = parent;
      }
  
      /**
       * Add child dependency graph.
       *
       * @param child the child map
       */
      public void addChild( final Map child )
      {
          m_children.add( child );
      }
  
      /**
       * Remove child dependency graph.
       *
       * @param child the child map
       */
      public void removeChild( final Map child )
      {
          m_children.remove( child );
      }
  
      /**
       * Add a component to current dependency graph.
       *
       * @param component the component
       */
      public void add( final ComponentMetaData component )
      {
          m_components.add( component );
      }
  
      /**
       * Get the serilized graph of {@link ComponentMetaData} objects
       * required when starting up all the components. This makes sure
       * that all providers occur before their coresponding
       * consumers in graph.
       *
       * @return the ordered list of components
       */
      public ComponentMetaData[] getStartupGraph()
      {
          return walkGraph( true );
      }
  
      /**
       * Get the serilized graph of {@link ComponentMetaData} objects
       * required when shutting down all the components. This makes
       * sure that all consumers occur before their coresponding
       * providers in graph.
       *
       * @return the ordered list of components
       */
      public ComponentMetaData[] getShutdownGraph()
      {
          return walkGraph( false );
      }
  
      /**
       * Get the serilized graph of {@link ComponentMetaData} objects
       * that use services of specified component.
       *
       * @param component the component
       * @return the ordered list of consumers
       */
      public ComponentMetaData[] getConsumerGraph( final ComponentMetaData component )
      {
          return getComponentGraph( component, false );
      }
  
      /**
       * Get the serilized graph of {@link ComponentMetaData} objects
       * that provide specified component with services.
       *
       * @param component the component
       * @return the ordered list of providers
       */
      public ComponentMetaData[] getProviderGraph( final ComponentMetaData component )
      {
          return getComponentGraph( component, true );
      }
  
      /**
       * Get the graph of a single component.
       *
       * @param component the component
       * @param providers true if traversing providers, false if consumers
       * @return the list of components in graph
       */
      private ComponentMetaData[] getComponentGraph( final ComponentMetaData 
component, final boolean providers )
      {
          final ArrayList result = new ArrayList();
          visitcomponent( component,
                          providers,
                          new ArrayList(),
                          result );
  
          final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size() 
];
          return (ComponentMetaData[])result.toArray( returnValue );
      }
  
      /**
       * Method to generate an ordering of nodes to traverse.
       * It is expected that the specified components have passed
       * verification tests and are well formed.
       *
       * @param providers true if forward dependencys traced, false if dependencies 
reversed
       * @return the ordered node names
       */
      private ComponentMetaData[] walkGraph( final boolean providers )
      {
          final ArrayList result = new ArrayList();
          final ArrayList done = new ArrayList();
  
          final int size = m_components.size();
          for( int i = 0; i < size; i++ )
          {
              final ComponentMetaData component =
                  (ComponentMetaData)m_components.get( i );
              visitcomponent( component,
                              providers,
                              done,
                              result );
          }
  
          final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size() 
];
          return (ComponentMetaData[])result.toArray( returnValue );
      }
  
      /**
       * Visit a component when traversing dependencies.
       *
       * @param component the component
       * @param providers true if walking tree looking for providers, else false
       * @param done those nodes already traversed
       * @param order the order in which nodes have already been
       *             traversed
       */
      private void visitcomponent( final ComponentMetaData component,
                                   final boolean providers,
                                   final ArrayList done,
                                   final ArrayList order )
      {
          //If already visited this component then bug out early
          if( done.contains( component ) )
          {
              return;
          }
          done.add( component );
  
          if( providers )
          {
              visitProviders( component, done, order );
          }
          else
          {
              visitConsumers( component, done, order );
          }
  
          order.add( component );
      }
  
      /**
       * Traverse graph of components that provide services to
       * the specified component.
       *
       * @param component the ComponentMetaData
       */
      private void visitProviders( final ComponentMetaData component,
                                   final ArrayList done,
                                   final ArrayList order )
      {
          final DependencyDescriptor[] descriptors =
              component.getComponentInfo().getDependencies();
  
          for( int i = 0; i < descriptors.length; i++ )
          {
              final DependencyMetaData dependency =
                  component.getDependency( descriptors[ i ].getRole() );
  
              // added != null clause to catch cases where an optional 
              // dependency exists and the dependecy has not been bound 
              // to a provider
  
              if( dependency != null ) 
              {
                  final ComponentMetaData other =
                    getComponent( dependency.getProviderName() );
                  visitcomponent( other, true, done, order );
              }
          }
      }
  
      /**
       * Traverse all Consumers of component. ie Anyone that uses
       * service provided by component.
       *
       * @param component the ComponentMetaData
       */
      private void visitConsumers( final ComponentMetaData component,
                                   final ArrayList done,
                                   final ArrayList order )
      {
          final String name = component.getName();
  
          final int size = m_components.size();
          for( int i = 0; i < size; i++ )
          {
              final ComponentMetaData other =
                  (ComponentMetaData)m_components.get( i );
              final DependencyMetaData[] roles = other.getDependencies();
  
              for( int j = 0; j < roles.length; j++ )
              {
                  final String depends = roles[ j ].getProviderName();
                  if( depends.equals( name ) )
                  {
                      visitcomponent( other, false, done, order );
                  }
              }
          }
  
          final int childCount = m_children.size();
          for( int i = 0; i < childCount; i++ )
          {
              final Map map = (Map)m_children.get( i );
              map.visitConsumers( component, done, order );
          }
      }
  
      /**
       * Utility method to get component with specified name from specified array.
       *
       * @param name the name of component
       * @return the component
       */
      private ComponentMetaData getComponent( final String name )
      {
          final int size = m_components.size();
          for( int i = 0; i < size; i++ )
          {
              final ComponentMetaData component =
                  (ComponentMetaData)m_components.get( i );
              if( component.getName().equals( name ) )
              {
                  return component;
              }
          }
  
          if( null != m_parent )
          {
              return m_parent.getComponent( name );
          }
  
          //Should never happen if Verifier passed checks
          throw new IllegalStateException();
      }
  }
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Resources.properties
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Verifiable.java
  
  
  
  
  1.4       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/package.html
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/doc-files/DefaultContainer.gif
  
        <<Binary file>>
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/AssemblyException.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/AssemblyRuntimeException.java
  
  
  
  
  1.4       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ComponentDefinition.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ComponentType.java
  
  
  
  
  1.9       +4 -6      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.java
  
  
  
  
  1.6       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.xinfo
  
  
  
  
  1.5       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ProfileException.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ProfileRuntimeException.java
  
  
  
  
  1.5       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Registry.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/RegistryException.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/RegistryRuntimeException.java
  
  
  
  
  1.3       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Resources.properties
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Selector.java
  
  
  
  
  1.5       +19 -5     
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceRegistry.java
  
  
  
  
  1.4       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceTable.java
  
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/UnresolvedProviderException.java
  
  
  
  
  1.4       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/package.html
  
  
  
  
  1.4       +0 -0      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/doc-files/registry.gif
  
        <<Binary file>>
  
  

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

Reply via email to