CVS: plexus-container-new/src/java/org/apache/plexus DefaultPlexusContainer.java,1.23,1.24

[email protected] Sat, 31 May 2003 17:02:45 -0500
Newsgroups gmane.comp.java.plexus.devel
Message-ID <[email protected]>
Update of /cvsroot/plexus/plexus-container-new/src/java/org/apache/plexus
In directory eng.werken.com:/tmp/cvs-serv24889/src/java/org/apache/plexus

Modified Files:
	DefaultPlexusContainer.java 
Log Message:
o Adding preliminary support for the specification of addition configuration
 files using the <configurations-directory/> element in the main configuration.


Index: DefaultPlexusContainer.java
===================================================================
RCS file: /cvsroot/plexus/plexus-container-new/src/java/org/apache/plexus/DefaultPlexusContainer.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- DefaultPlexusContainer.java	25 May 2003 18:10:26 -0000	1.23
+++ DefaultPlexusContainer.java	31 May 2003 22:02:43 -0000	1.24
@@ -64,6 +64,7 @@
 import org.apache.plexus.classloader.ResourceManagerFactory;
 import org.apache.plexus.configuration.ConfigurationResourceException;
 import org.apache.plexus.configuration.XmlPullConfigurationBuilder;
+import org.apache.plexus.configuration.DefaultConfiguration;
 import org.apache.plexus.context.DefaultContext;
 import org.apache.plexus.lifecycle.LifecycleHandler;
 import org.apache.plexus.lifecycle.LifecycleHandlerFactory;
@@ -74,10 +75,13 @@
 import org.apache.plexus.service.repository.ComponentRepositoryFactory;
 import org.apache.plexus.util.ContextMapAdapter;
 import org.apache.plexus.util.InterpolationFilterReader;
+import org.apache.plexus.util.DirectoryScanner;
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.File;
+import java.io.FileReader;
 
 /** The main Plexus container component.
  *
@@ -348,7 +352,48 @@
                                            new ContextMapAdapter( getContext() ) );
 
         setConfiguration( builder.parse( interpolationFilterReader ) );
+
+        processConfigurationsDirectory();
     }
+
+    /**
+     * Process any additional component configuration files that have been
+     * specified. The specified directory is scanned recursively so configurations
+     * can be within nested directories to help with component organization.
+     */
+    protected void processConfigurationsDirectory()
+        throws Exception
+    {
+        String s = getConfiguration().getChild( "configurations-directory" ).getValue( null );
+
+        if ( s != null )
+        {
+            DefaultConfiguration componentsConfiguration =
+                (DefaultConfiguration) getConfiguration().getChild( "components");
+
+            File configurationsDirectory = new File( s );
+
+            if ( configurationsDirectory.exists()
+                 &&
+                 configurationsDirectory.isDirectory() )
+            {
+                DirectoryScanner scanner = new DirectoryScanner();
+                scanner.setBasedir( configurationsDirectory );
+                scanner.setIncludes( new String[]{ "**/*.conf", "**/*.xml" } );
+                scanner.scan();
+
+                String[] confs = scanner.getIncludedFiles();
+
+                for ( int i = 0; i < confs.length; i++ )
+                {
+                    File conf = new File( configurationsDirectory, confs[i] );
+                    Configuration c = builder.parse( new FileReader( conf ) );
+                    componentsConfiguration.addAllChildren( c.getChild( "components" ) );
+                }
+            }
+        }
+    }
+
 
     /** Initialize Logging.
      *