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/06/04 11:28:45 UTC

cvs commit: avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags AbstractTag.java ContextTag.java DependencyTag.java LoggerTag.java

mcconnell    2003/06/04 02:28:45

  Modified:    merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl
                        AbstractContextualizer.java
                        AvalonContextualizer.java
                        DefaultContextualizationService.java
                        DefaultContextualizer.java
                        DefaultDeploymentService.java
               merlin/merlin-core/src/test/org/apache/avalon/playground
                        ContextualizationHandler.java
               merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags
                        AbstractTag.java ContextTag.java DependencyTag.java
                        LoggerTag.java
  Log:
  Applied meta-tools patch from Christian Meier (tag resolution across class hierachy).
  
  Revision  Changes    Path
  1.3       +1 -0      avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AbstractContextualizer.java
  
  Index: AbstractContextualizer.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AbstractContextualizer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractContextualizer.java	29 Apr 2003 23:35:24 -0000	1.2
  +++ AbstractContextualizer.java	4 Jun 2003 09:28:44 -0000	1.3
  @@ -60,6 +60,7 @@
   
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.meta.model.ContextDirective;
  +import org.apache.avalon.assembly.lifecycle.Contextualization;
   
   /**
    * The abstract contextualizer class is a utility class that provides
  
  
  
  1.2       +1 -0      avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AvalonContextualizer.java
  
  Index: AvalonContextualizer.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AvalonContextualizer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AvalonContextualizer.java	29 Apr 2003 00:55:46 -0000	1.1
  +++ AvalonContextualizer.java	4 Jun 2003 09:28:44 -0000	1.2
  @@ -62,6 +62,7 @@
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.context.DefaultContext;
   import org.apache.avalon.meta.model.ContextDirective;
  +import org.apache.avalon.assembly.lifecycle.Contextualization;
   
   /**
    * Definition of an strategy handler that handles the Contextualization
  
  
  
  1.3       +3 -1      avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizationService.java
  
  Index: DefaultContextualizationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizationService.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultContextualizationService.java	8 May 2003 03:02:39 -0000	1.2
  +++ DefaultContextualizationService.java	4 Jun 2003 09:28:44 -0000	1.3
  @@ -53,9 +53,11 @@
   import java.util.Map;
   
   import org.apache.avalon.assembly.appliance.Appliance;
  +import org.apache.avalon.assembly.lifecycle.Contextualization;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +
   
   /**
    * The context service provides support for the contextualization of a
  
  
  
  1.2       +1 -0      avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizer.java
  
  Index: DefaultContextualizer.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultContextualizer.java	29 Apr 2003 00:55:46 -0000	1.1
  +++ DefaultContextualizer.java	4 Jun 2003 09:28:44 -0000	1.2
  @@ -57,6 +57,7 @@
   
   import java.util.Map;
   
  +import org.apache.avalon.assembly.lifecycle.Contextualization;
   import org.apache.avalon.assembly.locator.Contextualizable;
   import org.apache.avalon.assembly.locator.Locator;
   import org.apache.avalon.assembly.locator.impl.DefaultLocator;
  
  
  
  1.8       +2 -1      avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultDeploymentService.java
  
  Index: DefaultDeploymentService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultDeploymentService.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- DefaultDeploymentService.java	8 May 2003 03:02:39 -0000	1.7
  +++ DefaultDeploymentService.java	4 Jun 2003 09:28:44 -0000	1.8
  @@ -54,6 +54,7 @@
   import org.apache.avalon.assembly.lifecycle.DeploymentException;
   import org.apache.avalon.assembly.lifecycle.DeploymentService;
   import org.apache.avalon.assembly.locator.Contextualizable;
  +
   import org.apache.avalon.assembly.locator.Locator;
   import org.apache.avalon.assembly.locator.impl.DefaultLocator;
   import org.apache.avalon.assembly.logging.LoggingManager;
  
  
  
  1.5       +1 -1      avalon-sandbox/merlin/merlin-core/src/test/org/apache/avalon/playground/ContextualizationHandler.java
  
  Index: ContextualizationHandler.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/merlin-core/src/test/org/apache/avalon/playground/ContextualizationHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ContextualizationHandler.java	29 Apr 2003 14:22:20 -0000	1.4
  +++ ContextualizationHandler.java	4 Jun 2003 09:28:45 -0000	1.5
  @@ -58,7 +58,7 @@
   import java.lang.reflect.Constructor;
   import java.util.Map;
   
  -import org.apache.avalon.assembly.lifecycle.impl.Contextualization;
  +import org.apache.avalon.assembly.lifecycle.Contextualization;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.meta.model.ContextDirective;
   
  
  
  
  1.6       +41 -30    avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/AbstractTag.java
  
  Index: AbstractTag.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/AbstractTag.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractTag.java	4 Jun 2003 02:24:57 -0000	1.5
  +++ AbstractTag.java	4 Jun 2003 09:28:45 -0000	1.6
  @@ -49,12 +49,16 @@
   
   package org.apache.avalon.meta.info.builder.tags;
   
  -import org.apache.avalon.framework.Version;
   
   import com.thoughtworks.qdox.model.DocletTag;
   import com.thoughtworks.qdox.model.JavaClass;
   import com.thoughtworks.qdox.model.JavaMethod;
   import com.thoughtworks.qdox.model.Type;
  +import java.util.ArrayList;
  +import java.util.HashSet;
  +import java.util.List;
  +import java.util.Set;
  +import org.apache.avalon.framework.Version;
   
   /**
    * A doclet tag representing the name of the Type.
  @@ -86,8 +90,8 @@
       }
   
      /**
  -    * Return the user defined namespace for avalon tags. The value returned is established
  -    * by the javadoc tag 'avalon.namespace [namespace-value]' where
  +    * Return the user defined namespace for avalon tags. The value returned is 
  +    * established by the javadoc tag 'avalon.namespace [namespace-value]' where
       * [namespace-value] is a string representing the namespace identifier.
       * @return the namespace tag used to represent the avalon.meta tag space
       * @exception IllegalArgumentException if the namespace tag is declared by does not
  @@ -210,17 +214,20 @@
           final String resolvedType;
           if( type.indexOf(":") > -1 )
           {
  -            resolvedType = this.doResolveType( getJavaClass(), 
  -                                     type.substring( 0, type.indexOf(":") ) );
  -        }
  +            resolvedType = 
  +              this.doResolveType( getJavaClass(), 
  +              type.substring( 0, type.indexOf(":") ) );
  +        }    
           else
           {
  -            resolvedType = this.doResolveType( getJavaClass(), type );
  +            resolvedType = doResolveType( getJavaClass(), type );
           }
           if( resolvedType == null )
           {
  -            throw new RuntimeException( "can not find type " + type +
  -                              " in class " + getJavaClass().getFullyQualifiedName() );   
  +            final String message = 
  +              "Unable to find type " + type
  +              + " in class " + getJavaClass().getFullyQualifiedName();
  +            throw new RuntimeException( message );   
           }
           else 
           {
  @@ -235,35 +242,38 @@
           {
               return resolvedType;
           }
  -        else if( 
  -          clazz.getSuperJavaClass() == null 
  +        else if( clazz.getSuperJavaClass() == null 
             || JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
           {
               return null;
           }
           else 
           {
  -            return this.doResolveType( clazz.getSuperJavaClass(), type );
  +            return doResolveType( clazz.getSuperJavaClass(), type );
           }
       }
   
       /**
  -     * Retrieve a method with specified name and one parameter of specified
  -     * type. The method must also return void.
  +     * Retrieves all methods in the inheritance graph with specified name and 
  +     * one parameter of specified type. The methods must also return void.
        *
  -     * @param methodName the name of the method
  +     * @param methodName the name of the methods
        * @param parameterType the class name of parameter
  -     * @return the method if such a method exists
  +     * @return an array of such methods
        */
  -    protected JavaMethod getLifecycleMethod( final String methodName,
  -                                             final String parameterType )
  +    protected JavaMethod[] getLifecycleMethods( final String methodName,
  +						    final String parameterType )
       {
  -        return this.findLifecycleMethod( getJavaClass(), methodName, parameterType );
  +	List result = new ArrayList();
  +	findLifecycleMethod( result, getJavaClass(), methodName, parameterType );
  +	return (JavaMethod[]) result.toArray( new JavaMethod[ result.size() ] );
       }
   
  -    private JavaMethod findLifecycleMethod( final JavaClass clazz,
  -                                  final String methodName,
  -                                  final String parameterType )
  +    private void findLifecycleMethod( 
  +            final List result,
  +            final JavaClass clazz,
  +            final String methodName,
  +            final String parameterType )
       {
           final JavaMethod[] methods = clazz.getMethods();
           for( int i = 0; i < methods.length; i++ )
  @@ -274,16 +284,17 @@
                   && method.getParameters().length == 1
                   && method.getParameters()[ 0 ].getType().getValue().equals( parameterType ) )
               {
  -                return method;
  +                result.add( method );
  +		    break;		
               }
           }
  -        if( clazz.getSuperJavaClass() == null || JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
  -        {
  -            return null;
  -        }
  -        else 
  +
  +        if( 
  +            clazz.getSuperJavaClass() != null 
  +            && !JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
           {
  -            return this.findLifecycleMethod( clazz.getSuperJavaClass(), methodName, parameterType );
  +            this.findLifecycleMethod( 
  +              result, clazz.getSuperJavaClass(), methodName, parameterType );
           }
       }
   }
  
  
  
  1.4       +28 -17    avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/ContextTag.java
  
  Index: ContextTag.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/ContextTag.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ContextTag.java	16 Apr 2003 14:19:42 -0000	1.3
  +++ ContextTag.java	4 Jun 2003 09:28:45 -0000	1.4
  @@ -49,15 +49,17 @@
   
   package org.apache.avalon.meta.info.builder.tags;
   
  -import java.util.ArrayList;
   
  -import org.apache.avalon.meta.info.ContextDescriptor;
  -import org.apache.avalon.meta.info.EntryDescriptor;
  -import org.apache.avalon.meta.info.ReferenceDescriptor;
   
   import com.thoughtworks.qdox.model.DocletTag;
   import com.thoughtworks.qdox.model.JavaClass;
   import com.thoughtworks.qdox.model.JavaMethod;
  +import java.util.ArrayList;
  +import java.util.HashSet;
  +import java.util.Set;
  +import org.apache.avalon.meta.info.ContextDescriptor;
  +import org.apache.avalon.meta.info.EntryDescriptor;
  +import org.apache.avalon.meta.info.ReferenceDescriptor;
   
   /**
    * A doclet tag handler for the 'extension' tag.
  @@ -118,9 +120,9 @@
       */
       public ContextDescriptor getContext()
       {
  -        final JavaMethod method =
  -            getLifecycleMethod( "contextualize", CONTEXT_CLASS );
  -        if( null == method )
  +        final JavaMethod[] methods =
  +            getLifecycleMethods( "contextualize", CONTEXT_CLASS );
  +        if( methods.length == 0 )//null == method )
           {
               return new ContextDescriptor(
                 new ReferenceDescriptor( CONTEXT_CLASS  ),
  @@ -129,7 +131,8 @@
           else
           {
               String type = CONTEXT_CLASS;
  -            final DocletTag tag = method.getTagByName( getNS() + Tags.DELIMITER + KEY );
  +            final DocletTag tag = 
  +              methods[0].getTagByName( getNS() + Tags.DELIMITER + KEY );
               if( null != tag && null != tag.getNamedParameter( TYPE_PARAM ) )
               {
                   final String value = getNamedParameter( tag, TYPE_PARAM );
  @@ -137,14 +140,22 @@
               }
   
               final ArrayList list = new ArrayList();
  -            final DocletTag[] tags = method.getTagsByName( getNS() + Tags.DELIMITER + ENTRY );
  -            for( int i = 0; i < tags.length; i++ )
  -            {
  -                list.add( getEntry( tags[i] ) );
  -            }
  -
  -            final EntryDescriptor[] entries =
  -                (EntryDescriptor[])list.toArray( new EntryDescriptor[ list.size() ] );
  +            final Set marked = new HashSet( 10 );
  +	    for( int j = 0; j < methods.length; j++ )
  +	    {
  +		final DocletTag[] tags = 
  +              methods[j].getTagsByName( getNS() + Tags.DELIMITER + ENTRY );
  +		for( int i = 0; i < tags.length; i++ )
  +		{
  +		    final String key = getNamedParameter( tags[i], KEY_PARAM );
  +		    if( !marked.contains( key ) ){
  +			list.add( getEntry( tags[i] ) );
  +			marked.add( key );
  +		    }
  +		}
  +	    }
  +	    final EntryDescriptor[] entries =
  +		(EntryDescriptor[])list.toArray( new EntryDescriptor[ list.size() ] );
               return new ContextDescriptor(
                 new ReferenceDescriptor( type ), entries, null );
           }
  
  
  
  1.6       +33 -21    avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/DependencyTag.java
  
  Index: DependencyTag.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/DependencyTag.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DependencyTag.java	4 Jun 2003 02:24:57 -0000	1.5
  +++ DependencyTag.java	4 Jun 2003 09:28:45 -0000	1.6
  @@ -49,15 +49,17 @@
   
   package org.apache.avalon.meta.info.builder.tags;
   
  -import java.util.ArrayList;
   
  -import org.apache.avalon.framework.Version;
  -import org.apache.avalon.meta.info.DependencyDescriptor;
  -import org.apache.avalon.meta.info.ReferenceDescriptor;
   
   import com.thoughtworks.qdox.model.DocletTag;
   import com.thoughtworks.qdox.model.JavaClass;
   import com.thoughtworks.qdox.model.JavaMethod;
  +import java.util.ArrayList;
  +import java.util.HashSet;
  +import java.util.Set;
  +import org.apache.avalon.framework.Version;
  +import org.apache.avalon.meta.info.DependencyDescriptor;
  +import org.apache.avalon.meta.info.ReferenceDescriptor;
   
   /**
    * A doclet tag representing the lifestyle assigned to the Type.
  @@ -99,7 +101,7 @@
       protected static final String SERVICE_MANAGER_CLASS =
           "org.apache.avalon.framework.service.ServiceManager";
   
  -    private JavaMethod m_method;
  +    private JavaMethod[] m_methods;
   
   
      /**
  @@ -109,7 +111,7 @@
       public DependencyTag( final JavaClass clazz )
       {
           super( clazz );
  -        setMethod();
  +        setMethods();
       }
   
      /**
  @@ -119,17 +121,26 @@
       */
       public DependencyDescriptor[] getDependencies()
       {
  -        if( null == m_method )
  -        {
  -            return new DependencyDescriptor[0];
  -        }
           final ArrayList deps = new ArrayList();
  -        final DocletTag[] tags = getMethod().getTagsByName( getNS() + Tags.DELIMITER + KEY );
  -        for( int i = 0; i < tags.length; i++ )
  +        final Set marked = new HashSet( 10 );
  +        for( int j = 0; j < m_methods.length; j++ )
           {
  -            deps.add( getDependency( tags[i] ) );
  +            final DocletTag[] tags = 
  +              m_methods[j].getTagsByName( getNS() 
  +                                    + Tags.DELIMITER + KEY );
  +
  +            for( int i = 0; i < tags.length; i++ )
  +            {
  +                final String key = getNamedParameter( tags[i], TYPE_PARAM );
  +                if( !marked.contains( key ) )
  +                {
  +                    deps.add( getDependency( tags[i] ) );
  +                    marked.add( key );
  +                }
  +            }
           }
  -        return (DependencyDescriptor[])deps.toArray( new DependencyDescriptor[ deps.size() ] );
  +        return (DependencyDescriptor[])deps.toArray( 
  +          new DependencyDescriptor[ deps.size() ] );
       }
   
       private DependencyDescriptor getDependency( DocletTag tag )
  @@ -147,20 +158,21 @@
      /**
       * Set the value of the composition method.
       */
  -    private void setMethod()
  +    private void setMethods()
       {
  -        m_method = getLifecycleMethod( "compose", COMPONENT_MANAGER_CLASS );
  -        if( null == m_method )
  +        m_methods = getLifecycleMethods( "compose", COMPONENT_MANAGER_CLASS );
  +        if( m_methods.length == 0 )
           {
  -            m_method = getLifecycleMethod( "service", SERVICE_MANAGER_CLASS );
  +            m_methods = getLifecycleMethods( "service", SERVICE_MANAGER_CLASS );
           }
       }
   
      /**
       * Return the composition method.
  +    * @return an array of methods
       */
  -    private JavaMethod getMethod()
  +    private JavaMethod[] getMethods()
       {
  -        return m_method;
  +        return m_methods;
       }
   }
  
  
  
  1.4       +29 -24    avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/LoggerTag.java
  
  Index: LoggerTag.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/LoggerTag.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LoggerTag.java	16 Apr 2003 14:19:42 -0000	1.3
  +++ LoggerTag.java	4 Jun 2003 09:28:45 -0000	1.4
  @@ -49,13 +49,15 @@
   
   package org.apache.avalon.meta.info.builder.tags;
   
  -import java.util.ArrayList;
   
  -import org.apache.avalon.meta.info.LoggerDescriptor;
   
   import com.thoughtworks.qdox.model.DocletTag;
   import com.thoughtworks.qdox.model.JavaClass;
   import com.thoughtworks.qdox.model.JavaMethod;
  +import java.util.ArrayList;
  +import java.util.HashSet;
  +import java.util.Set;
  +import org.apache.avalon.meta.info.LoggerDescriptor;
   
   /**
    * A doclet tag handler supporting 'logger' tags.
  @@ -97,27 +99,30 @@
       */
       public LoggerDescriptor[] getLoggers()
       {
  -        final JavaMethod method =
  -            getLifecycleMethod( "enableLogging", LOGGER_CLASS );
  -
  -        if( null == method )
  -        {
  -            return new LoggerDescriptor[0];
  -        }
  -        else
  -        {
  -            final ArrayList loggers = new ArrayList();
  -            final DocletTag[] tags = method.getTagsByName( getNS() + Tags.DELIMITER + KEY  );
  -
  -            for( int i = 0; i < tags.length; i++ )
  -            {
  -                final String name =
  +        final JavaMethod[] methods =
  +            getLifecycleMethods( "enableLogging", LOGGER_CLASS );
  +	final ArrayList loggers = new ArrayList();
  +	final Set marked = new HashSet( 10 );
  +        
  +	for( int j = 0; j < methods.length; j++ )
  +	{
  +	    final DocletTag[] tags = 
  +		methods[j].getTagsByName( getNS() 
  +					  + Tags.DELIMITER + KEY );
  +
  +	    for( int i = 0; i < tags.length; i++ )
  +	    {
  +		final String name =
                       getNamedParameter( tags[ i ], NAME_PARAM, "" );
  -                final LoggerDescriptor logger =
  -                    new LoggerDescriptor( name, null );
  -                loggers.add( logger );
  -            }
  -            return (LoggerDescriptor[])loggers.toArray( new LoggerDescriptor[ loggers.size() ] );
  -        }
  +                
  +		if( !marked.contains( name ) ){
  +		    final LoggerDescriptor logger =
  +			new LoggerDescriptor( name, null );
  +		    loggers.add( logger );
  +		    marked.add( name );
  +		}
  +	    }
  +	}
  +	return (LoggerDescriptor[])loggers.toArray( new LoggerDescriptor[ loggers.size() ] );
       }
   }
  
  
  

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