You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/07/31 19:20:27 UTC

svn commit: rev 31046 - in avalon/trunk/runtime/meta: api/src/java/org/apache/avalon/meta/info api/src/test/org/apache/avalon/meta/info/test impl/src/java/org/apache/avalon/meta/info/builder spi/src/java/org/apache/avalon/meta/info/builder

Author: niclas
Date: Sat Jul 31 10:20:26 2004
New Revision: 31046

Modified:
   avalon/trunk/runtime/meta/api/src/java/org/apache/avalon/meta/info/Type.java
   avalon/trunk/runtime/meta/api/src/test/org/apache/avalon/meta/info/test/TypeTestCase.java
   avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/TypeBuilder.java
   avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java
   avalon/trunk/runtime/meta/spi/src/java/org/apache/avalon/meta/info/builder/TypeFactory.java
Log:
Added Parameters override support in Meta.

Modified: avalon/trunk/runtime/meta/api/src/java/org/apache/avalon/meta/info/Type.java
==============================================================================
--- avalon/trunk/runtime/meta/api/src/java/org/apache/avalon/meta/info/Type.java	(original)
+++ avalon/trunk/runtime/meta/api/src/java/org/apache/avalon/meta/info/Type.java	Sat Jul 31 10:20:26 2004
@@ -20,6 +20,7 @@
 import java.io.Serializable;
 
 import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.parameters.Parameters;
 
 /**
  * This class contains the meta information about a particular
@@ -52,6 +53,7 @@
     private final CategoryDescriptor[] m_loggers;
     private final StageDescriptor[] m_stages;
     private final ExtensionDescriptor[] m_extensions;
+    private final Parameters m_parameters;
 
     /**
      * Creation of a new Type instance using a supplied component descriptor,
@@ -156,6 +158,47 @@
                  final Configuration defaults )
             throws NullPointerException
     {
+        this(
+          descriptor, security, loggers, context, services, dependencies,
+          stages, extensions, defaults, null );
+    }
+    
+        /**
+     * Creation of a new Type instance using a supplied component descriptor,
+     * logging, cotext, services, depedencies, stages and extension descriptors.
+     * @param descriptor a component descriptor that contains information about
+     *   the component type
+     * @param security a component security descriptor
+     * @param loggers a set of logger descriptors the declare the logging channels
+     *   required by the type
+     * @param context a component context descriptor that declares the context type
+     *   and context entry key and value classnames
+     * @param services a set of service descriprors that detail the service that
+     *   this component type is capable of supplying
+     * @param dependencies a set of depedency descriprors that detail the service
+     *   that this component type is depedent on
+     * @param stages a set of stage descriprors that detail the extensiuon stage
+     *   interfaces that this component requires a handler for
+     * @param extensions a set of lifecycle extension capabilities that this
+     *   componet can provide to its container during the process of stage
+     *   suppier resolution
+     * @param defaults the static configuration defaults
+     * @param params static parameter defaults
+     * @exception NullPointerException if the descriptor, loggers, context, services,
+     *   dependencies, stages, or extensions argument is null
+     */
+    public Type( final InfoDescriptor descriptor,
+                 final SecurityDescriptor security,
+                 final CategoryDescriptor[] loggers,
+                 final ContextDescriptor context,
+                 final ServiceDescriptor[] services,
+                 final DependencyDescriptor[] dependencies,
+                 final StageDescriptor[] stages,
+                 final ExtensionDescriptor[] extensions,
+                 final Configuration defaults,
+                 final Parameters params )
+            throws NullPointerException
+    {
         if ( null == descriptor )
         {
             throw new NullPointerException( "descriptor" );
@@ -198,6 +241,7 @@
         m_stages = stages;
         m_extensions = extensions;
         m_configuration = defaults;
+        m_parameters = params;
     }
 
     /**
@@ -348,6 +392,17 @@
     }
 
     /**
+     * Returns the default parameters supplied with the type.
+     *
+     * @return the default parameters or null if no packaged defaults
+     */
+    public Parameters getParameters()
+    {
+        return m_parameters;
+    }
+
+
+    /**
      * Return the lifecycle stages extensions required by this component type.
      *
      * @return an array of stage descriptors.
@@ -414,6 +469,9 @@
     */
     public boolean equals(Object other)
     {
+        if( null == other )
+            return false;
+
         if( ! (other instanceof Type ) )
             return false;
 
@@ -425,9 +483,28 @@
         if( ! m_security.equals( t.m_security ) )
             return false;
             
-        if( ! m_configuration.equals( t.m_configuration ) )
+        if( null == m_configuration )
+        {
+            if( ! ( null == t.m_configuration ) )
+                return false;
+        }
+        else
+        {
+            if( ! m_configuration.equals( t.m_configuration ) )
             return false;
-            
+        }
+
+        if( null == m_parameters )
+        {
+            if( ! ( null == t.m_parameters ) )
+                return false;
+        }
+        else
+        {
+            if( ! m_parameters.equals( t.m_parameters ) )
+            return false;
+        }
+
         if( ! m_context.equals( t.m_context ) )
             return false;
 
@@ -471,11 +548,19 @@
         hash >>>= 13;
         hash ^= m_context.hashCode();
         hash >>>= 13;
+
         if( m_configuration != null )
         { 
-            hash ^= m_context.hashCode();
+            hash ^= m_configuration.hashCode();
             hash >>>= 13;
         }
+
+        if( m_parameters != null )
+        {
+            hash ^= m_parameters.hashCode();
+            hash >>>= 13;
+        }
+
         hash >>>= 13;
         for( int i=0; i<m_services.length; i++ )
         {

Modified: avalon/trunk/runtime/meta/api/src/test/org/apache/avalon/meta/info/test/TypeTestCase.java
==============================================================================
--- avalon/trunk/runtime/meta/api/src/test/org/apache/avalon/meta/info/test/TypeTestCase.java	(original)
+++ avalon/trunk/runtime/meta/api/src/test/org/apache/avalon/meta/info/test/TypeTestCase.java	Sat Jul 31 10:20:26 2004
@@ -21,6 +21,7 @@
 import org.apache.avalon.meta.info.*;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.parameters.Parameters;
 
 import java.util.Properties;
 import java.io.*;
@@ -42,6 +43,7 @@
     private StageDescriptor[] m_stages;
     private ExtensionDescriptor[] m_extensions;
     private Configuration m_defaults;
+    private Parameters m_parameters;
     private ReferenceDescriptor m_reference;
     private String m_key;
 
@@ -74,6 +76,7 @@
             new ExtensionDescriptor( m_key )
         };
         m_defaults = new DefaultConfiguration("default");
+        m_parameters = Parameters.EMPTY_PARAMETERS;
     }
 
     private void checkType(Type type)
@@ -82,6 +85,7 @@
         checkArray(m_loggers, type.getCategories());
         assertEquals( m_security, type.getSecurity() );
         assertEquals( m_defaults, type.getConfiguration() );
+        assertEquals( m_parameters , type.getParameters() );
         assertEquals( m_context, type.getContext());
         checkArray(m_dependencies, type.getDependencies());
         assertEquals(m_dependencies[0], type.getDependency(m_dependencies[0].getKey()));
@@ -110,7 +114,7 @@
         Type type = 
           new Type(
             m_descriptor, m_security, m_loggers, m_context, m_services, m_dependencies, 
-            m_stages, m_extensions, m_defaults);
+            m_stages, m_extensions, m_defaults, m_parameters );
         checkType(type);
     }
 
@@ -119,7 +123,7 @@
         Type type = 
           new Type( 
             m_descriptor, m_security, m_loggers, m_context, m_services, m_dependencies, 
-            m_stages, m_extensions, m_defaults );
+            m_stages, m_extensions, m_defaults, m_parameters );
 
         checkType( type );
 
@@ -142,6 +146,6 @@
 
     private static InfoDescriptor createSimpleInfo( String classname )
     {
-        return new InfoDescriptor( null, classname, null, null, null, null, null);
+        return new InfoDescriptor( null, classname, null, null, null, null, null );
     }
  }

Modified: avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/TypeBuilder.java
==============================================================================
--- avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/TypeBuilder.java	(original)
+++ avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/TypeBuilder.java	Sat Jul 31 10:20:26 2004
@@ -18,10 +18,14 @@
 package org.apache.avalon.meta.info.builder;
 
 import java.io.InputStream;
+import java.io.IOException;
+import java.util.Properties;
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.parameters.ParameterException;
 
 import org.apache.avalon.meta.ConfigurationBuilder;
 import org.apache.avalon.meta.info.Type;
@@ -177,11 +181,38 @@
             defaults = new DefaultConfiguration( "configuration", (String) null );
         }
 
+        final String xparams =
+            classname.replace( '.', '/' ) + ".xparams";
+        final InputStream paramsStream =
+            classLoader.getResourceAsStream( xparams );
+
+        Parameters params;
+        if( paramsStream != null )
+        {
+            try
+            {
+                Properties properties = new Properties();
+                properties.load( paramsStream );
+                params = Parameters.fromProperties( properties );
+            }
+            catch( IOException ioe )
+            {
+                final String error =
+                    "Unexpected exception while attempting to resolve parameters from src: "
+                        + xparams;
+                    throw new ParameterException( error );
+            }
+        }
+        else
+        {
+            params = null;
+        }
+
         //
         // build the type
         //
 
-        return xmlTypeFactory.createType( classname, xinfo, defaults );
+        return xmlTypeFactory.createType( classname, xinfo, defaults, params );
     }
 
     private Configuration resolveConfiguration( ClassLoader classloader, Configuration config )

Modified: avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java
==============================================================================
--- avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java	(original)
+++ avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java	Sat Jul 31 10:20:26 2004
@@ -22,6 +22,7 @@
 import java.util.Properties;
 
 import org.apache.avalon.framework.Version;
+import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 
@@ -79,7 +80,24 @@
 
         final InputSource input = new InputSource( inputStream );
         final Configuration xinfo = ConfigurationBuilder.build( input );
-        return createType( classname, xinfo, (Configuration) null );
+        return createType( classname, xinfo, (Configuration) null, null );
+    }
+
+        /**
+     * Create an {@link Type} object for a specified classname from
+     * specified configuration data.
+     *
+     * @param classname The classname of Component
+     * @param info the Type configuration
+     * @param defaults the default configuration
+     * @return the created Type
+     * @throws BuildException if an error occurs
+     */
+    public Type createType(
+        final String classname, final Configuration info, final Configuration defaults )
+        throws BuildException
+    {
+         return createType( classname, info, defaults, null );
     }
 
     /**
@@ -89,11 +107,13 @@
      * @param classname The classname of Component
      * @param info the Type configuration
      * @param defaults the default configuration
+     * @param params the default static parameters
      * @return the created Type
-     * @throws Exception if an error occurs
+     * @throws BuildException if an error occurs
      */
     public Type createType( 
-        final String classname, final Configuration info, final Configuration defaults )
+        final String classname, final Configuration info, final Configuration defaults,
+        Parameters params )
         throws BuildException
     {
         final String topLevelName = info.getName();
@@ -149,14 +169,14 @@
 
         return new Type(
           descriptor, security, loggers, context, services, dependencies, phases, 
-          extensions, defaults );
+          extensions, defaults, params );
     }
 
     /**
      * Utility function to create a set of phase descriptor from a configuration.
      * @param config a configuration containing 0..n phase elements
      * @return an array of phase descriptors
-     * @exception Exception if a build error occurs
+     * @exception BuildException if a build error occurs
      */
     protected StageDescriptor[] buildStages( Configuration config ) 
       throws BuildException
@@ -175,7 +195,7 @@
      * Utility function to create a set of phase descriptor from a configuration.
      * @param config a configuration containing 0..n phase elements
      * @return an array of phase descriptors
-     * @exception Exception if a build error occurs
+     * @exception BuildException if a build error occurs
      */
     protected StageDescriptor buildPhase( Configuration config ) 
       throws BuildException
@@ -214,7 +234,7 @@
      *
      * @param service the service Configuration
      * @return the created ReferenceDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     protected ReferenceDescriptor buildReferenceDescriptor( final Configuration service )
         throws BuildException
@@ -229,7 +249,7 @@
      * @param service the service Configuration
      * @param classname the default type classname
      * @return the created ReferenceDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     protected ReferenceDescriptor buildReferenceDescriptor( final Configuration service, String classname )
         throws BuildException
@@ -257,7 +277,7 @@
      *
      * @param configuration the loggers configuration
      * @return the created CategoryDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     protected CategoryDescriptor[] buildLoggers( final Configuration configuration )
         throws BuildException
@@ -280,7 +300,7 @@
      *
      * @param logger the Logger configuration
      * @return the created CategoryDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     private CategoryDescriptor buildLogger( Configuration logger )
         throws BuildException
@@ -296,7 +316,7 @@
      *
      * @param configuration the dependencies configuration
      * @return the created DependencyDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     public DependencyDescriptor[] buildDependencies( final Configuration configuration )
         throws BuildException
@@ -335,8 +355,7 @@
         
         final boolean optional =
            dependency.getAttributeAsBoolean( "optional", false );
-        final int index =
-           dependency.getAttributeAsInteger( "index", -1 );
+
         final Properties attributes =
             buildAttributes( dependency.getChild( "attributes" ) );
 
@@ -358,7 +377,7 @@
      *
      * @param context the dependency configuration
      * @return the created ContextDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     protected ContextDescriptor buildContext( final Configuration context )
         throws BuildException
@@ -381,7 +400,7 @@
      *
      * @param servicesSet the services configuration
      * @return the created ServiceDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     public ServiceDescriptor[] buildServices( final Configuration servicesSet )
         throws BuildException
@@ -404,7 +423,7 @@
      *
      * @param service the service Configuration
      * @return the created ServiceDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     public ServiceDescriptor buildService( final Configuration service )
         throws BuildException
@@ -422,7 +441,7 @@
      * @param classname The classname of Component (used to create descriptor)
      * @param info the component info configuration fragment
      * @return the created InfoDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     public InfoDescriptor buildInfoDescriptor(
       final String classname, final Configuration info )
@@ -452,7 +471,7 @@
      *
      * @param config the security configuration fragment
      * @return the created SecurityDescriptor
-     * @throws ConfigurationException if an error occurs
+     * @throws BuildException if an error occurs
      */
     public SecurityDescriptor buildSecurityDescriptor( final Configuration config )
       throws BuildException
@@ -531,7 +550,7 @@
      * Utility function to create a set of phase descriptor from a configuration.
      * @param config a configuration containing 0..n phase elements
      * @return an array of phase descriptors
-     * @exception Exception if a build error occurs
+     * @exception BuildException if a build error occurs
      */
     protected ExtensionDescriptor[] buildExtensions( Configuration config ) 
       throws BuildException
@@ -549,7 +568,7 @@
      * Utility function to create an extension descriptor from a configuration.
      * @param config a configuration containing the extension definition
      * @return the extension descriptor
-     * @exception Exception if a build error occurs
+     * @exception BuildException if a build error occurs
      */
     protected ExtensionDescriptor buildExtension( Configuration config ) 
       throws BuildException

Modified: avalon/trunk/runtime/meta/spi/src/java/org/apache/avalon/meta/info/builder/TypeFactory.java
==============================================================================
--- avalon/trunk/runtime/meta/spi/src/java/org/apache/avalon/meta/info/builder/TypeFactory.java	(original)
+++ avalon/trunk/runtime/meta/spi/src/java/org/apache/avalon/meta/info/builder/TypeFactory.java	Sat Jul 31 10:20:26 2004
@@ -19,6 +19,7 @@
 
 import org.apache.avalon.meta.info.Type;
 import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.parameters.Parameters;
 
 /**
  * Simple interface used to create {@link Type}
@@ -43,5 +44,19 @@
      */
     Type createType( String path, Configuration xinfo, Configuration defaults )
         throws Exception;
+
+    /**
+     * Create a {@link Type} using a supplied type configuration and default configuration
+     *
+     * @param path the class resource name of component type that we are looking up
+     * @param xinfo the configuration fragment for the type
+     * @param defaults the configuration fragment for the default configuration
+     * @param params the default parameters
+     * @return the newly created {@link Type}
+     * @exception Exception if an error occurs
+     */
+    Type createType( String path, Configuration xinfo, Configuration defaults, Parameters params )
+        throws Exception;
+
 
 }

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