Hi, I'd like to suggest the addition of a <system/> element for the files read by the ConfigurationFactory. It would add a configuration wrapping the system properties to the composite configuration. I'm attaching a small patch enabling this feature.

Emmanuel Bourg

Index: src/java/org/apache/commons/configuration/ConfigurationFactory.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-commons/configuration/src/java/org/apache/commons/configuration/ConfigurationFactory.java,v
retrieving revision 1.9
diff -u -r1.9 ConfigurationFactory.java
--- src/java/org/apache/commons/configuration/ConfigurationFactory.java 8 Mar 2004 
23:27:09 -0000       1.9
+++ src/java/org/apache/commons/configuration/ConfigurationFactory.java 31 Mar 2004 
12:57:46 -0000
@@ -101,7 +101,7 @@
      * different types of configuration, currently Properties, XML and JNDI.
      *
      * @return A Configuration object
-     * @throws Exception A generic exception that we had trouble during the
+     * @throws ConfigurationException A generic exception that we had trouble during 
the
      * loading of the configuration data.
      */
     public Configuration getConfiguration() throws ConfigurationException
@@ -256,24 +256,34 @@
             new BasePathConfigurationFactory(PropertiesConfiguration.class),
             METH_LOAD,
             additional);
+
         setupDigesterInstance(
             digester,
             matchString + "dom4j",
             new BasePathConfigurationFactory(DOM4JConfiguration.class),
             METH_LOAD,
             additional);
+
         setupDigesterInstance(
                digester,
                        matchString + "hierarchicalDom4j",
                        new 
BasePathConfigurationFactory(HierarchicalDOM4JConfiguration.class),
                        METH_LOAD,
                        additional);
+
         setupDigesterInstance(
             digester,
             matchString + "jndi",
             new JNDIConfigurationFactory(),
             null,
             additional);
+
+        setupDigesterInstance(
+            digester,
+            matchString + "system",
+            new SystemConfigurationFactory(),
+            null,
+            additional);
     }
 
     /**
@@ -396,7 +406,6 @@
      */
     public class DigesterConfigurationFactory
         extends AbstractObjectCreationFactory
-        implements ObjectCreationFactory
     {
         /** Actual class to use. */
         private Class clazz;
@@ -471,6 +480,16 @@
         public JNDIConfigurationFactory()
         {
             super(JNDIConfiguration.class);
+        }
+    }
+
+    /**
+     * An object factory to let the digester construct system configurations.
+     */
+    protected class SystemConfigurationFactory extends AbstractObjectCreationFactory
+    {
+        public Object createObject(Attributes attribs) throws Exception {
+            return ConfigurationConverter.getConfiguration(System.getProperties());
         }
     }

Index: src/test/org/apache/commons/configuration/TestConfigurationFactory.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestConfigurationFactory.java,v
retrieving revision 1.9
diff -u -r1.9 TestConfigurationFactory.java
--- src/test/org/apache/commons/configuration/TestConfigurationFactory.java     27 Feb 
2004 17:41:34 -0000      1.9
+++ src/test/org/apache/commons/configuration/TestConfigurationFactory.java     31 Mar 
2004 12:57:47 -0000
@@ -65,8 +65,8 @@
         Object o = jndiConfiguration.getProperty("test.boolean");
         assertNotNull(o);
         assertEquals("true",o.toString());
-
     }
+
     public void testLoadingConfiguration() throws Exception
     {
         configurationFactory.setConfigurationFileName(
@@ -184,6 +184,17 @@
         //configurationFactory.setDigesterRuleNamespaceURI("namespace-one");
 
         checkCompositeConfiguration();
+    }
+
+    public void testLoadingConfigurationSystem() throws Exception
+    {
+        
configurationFactory.setConfigurationFileName("conf/testDigesterConfigurationSystem.xml");
+        Configuration configuration = configurationFactory.getConfiguration();
+
+        System.setProperty("test.system", "value");
+
+        assertNotNull("null configuration");
+        assertEquals("'test.system' system property", "value", 
configuration.getProperty("test.system"));
     }
 
     public void testLoadingAdditional() throws Exception
<?xml version="1.0"?>
<configuration>
  <system/>
</configuration>

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

Reply via email to