[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [configuration] System configuration & ConfigurationFactory
From:       Emmanuel Bourg <ebourg () micropole-univers ! com>
Date:       2004-03-31 13:07:30
Message-ID: 200403311308.PAA14669 () vertigo ! micropole ! com
[Download RAW message or body]

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


["system.patch" (text/plain)]

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


["testDigesterConfigurationSystem.xml" (text/xml)]

<?xml version="1.0"?>
<configuration>
  <system/>
</configuration>



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic