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 2004/07/01 20:39:14 UTC

svn commit: rev 22435 - avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder

Author: mcconnell
Date: Thu Jul  1 11:39:13 2004
New Revision: 22435

Modified:
   avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLComponentProfileCreator.java
Log:
Enhancements to support simplification of the context entry directive model and better support for automated directive geneneration.

Modified: avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLComponentProfileCreator.java
==============================================================================
--- avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLComponentProfileCreator.java	(original)
+++ avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLComponentProfileCreator.java	Thu Jul  1 11:39:13 2004
@@ -269,52 +269,86 @@
         ArrayList list = new ArrayList();
         for( int i = 0; i < configs.length; i++ )
         {
-            Configuration conf = configs[ i ];
-            final String key = conf.getAttribute( "key" );
-            final Configuration[] children = conf.getChildren();
-            if( children.length != 1 )
-            {
-                final String error = 
-                  "Entry '" + key + "' does not contain one child element.";
-                throw new ConfigurationException( error );
-            }
-
-            Configuration child = children[0];
-            final String name = child.getName();
-            if( name.equals( "import" ) )
-            {
-                final String importKey = child.getAttribute( "key" );
-                list.add( new ImportDirective( key, importKey ) );
-            }
-            else if( name.equals( "constructor" ) )
-            {
-                final String classname = 
-                  child.getAttribute( "class", "java.lang.String" );
-                Configuration[] paramsConf = child.getChildren( "param" );
-                if( paramsConf.length > 0 )
-                {
-                    Parameter[] params = getParameters( paramsConf );
-                    ConstructorDirective constructor = 
-                      new ConstructorDirective( key, classname, params );
-                    list.add( constructor );
-                }
-                else
-                {
-                    ConstructorDirective constructor = 
-                      new ConstructorDirective( 
-                        key, classname, (String) child.getValue( null ) );
-                    list.add( constructor );
-                }
-            }
-            else
-            {
-                final String error = 
-                  "Entry child unrecognized: " + name;
-                throw new ConfigurationException( error );
-            }
+            Configuration conf = configs[ i ];
+            EntryDirective entry = getEntry( conf );
+            list.add( entry );
         }
         return (EntryDirective[])list.toArray( new EntryDirective[ 0 ] );
-    }
+    }
+
+    /**
+     * Utility method to create a single entry directive.
+     *
+     * @param config the entry directive configuration
+     * @return the entry directive
+     * @throws ConfigurationException if an error occurs
+     */
+    protected EntryDirective getEntry( Configuration conf )
+        throws ConfigurationException
+    {
+        final String key = conf.getAttribute( "key" );
+        final String classname = conf.getAttribute( "class", "java.lang.String" );
+        if( ( null != classname ) || ( null != conf.getValue( null ) ) )
+        {
+            String value = conf.getValue( null );
+            if( null != value )
+            {
+                return new ConstructorDirective( 
+                  key, classname, value );
+            } 
+            else
+            {
+                Configuration[] configs = conf.getChildren( "param" );
+                Parameter[] params = getParameters( configs );
+                return new ConstructorDirective( key, classname, params );
+            }
+        }
+        else
+        {
+            //
+            // its using the legacy constructor and import approach
+            //
+
+            final Configuration[] children = conf.getChildren();
+            if( children.length != 1 )
+            {
+                final String error = 
+                  "Entry '" + key + "' does not contain one child element.";
+                throw new ConfigurationException( error );
+            }
+
+            Configuration child = children[0];
+            final String name = child.getName();
+            if( name.equals( "import" ) )
+            {
+                final String importKey = child.getAttribute( "key" );
+                return new ImportDirective( key, importKey );
+            }
+            else if( name.equals( "constructor" ) )
+            {
+                final String classname2 = 
+                  child.getAttribute( "class", "java.lang.String" );
+                Configuration[] paramsConf = child.getChildren( "param" );
+                if( paramsConf.length > 0 )
+                {
+                    Parameter[] params = getParameters( paramsConf );
+                    return new ConstructorDirective( key, classname2, params );
+                }
+                else
+                {
+                    return new ConstructorDirective( 
+                      key, classname2, (String) child.getValue( null ) );
+                }
+            }
+            else
+            {
+                final String error = 
+                  "Entry child unrecognized: " + name;
+                throw new ConfigurationException( error );
+            }
+        }
+    }
+
 
     /**
      * Utility method to create a set of parameter directive.

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