oheger      2004/11/19 11:25:47

  Modified:    configuration/src/test/org/apache/commons/configuration
                        TestConfigurationFactory.java
               configuration/conf testDigesterOptionalConfiguration.xml
               configuration/xdocs howto_configurationfactory.xml
               configuration/src/java/org/apache/commons/configuration
                        ConfigurationFactory.java
  Added:       configuration/conf testDigesterOptionalConfigurationEx.xml
  Log:
  Optional configurations: Renamed attribute from required to optional, added 
additional unit test and section in ConfigurationFactory howto
  
  Revision  Changes    Path
  1.19      +14 -1     
jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestConfigurationFactory.java
  
  Index: TestConfigurationFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestConfigurationFactory.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TestConfigurationFactory.java     19 Nov 2004 01:56:30 -0000      1.18
  +++ TestConfigurationFactory.java     19 Nov 2004 19:25:47 -0000      1.19
  @@ -47,6 +47,8 @@
               new File("conf/testDigesterConfiguration3.xml");
       private File testDigesterFileOptional =
               new File("conf/testDigesterOptionalConfiguration.xml");
  +    private File testDigesterFileOptionalEx =
  +             new File("conf/testDigesterOptionalConfigurationEx.xml");
   
       private File testDigesterBadXML = new 
File("conf/testDigesterBadXML.xml");
   
  @@ -259,6 +261,17 @@
           Configuration config = factory.getConfiguration();
           assertTrue(config.getBoolean("test.boolean"));
           assertEquals("value", config.getProperty("element"));
  +        
  +        factory.setConfigurationURL(testDigesterFileOptionalEx.toURL());
  +        try
  +        {
  +            config = factory.getConfiguration();
  +            fail("Unexisting properties loaded!");
  +        }
  +        catch(ConfigurationException cex)
  +        {
  +            // fine
  +        }
       }
   
       private void checkUnionConfig() throws Exception
  
  
  
  1.2       +7 -7      
jakarta-commons/configuration/conf/testDigesterOptionalConfiguration.xml
  
  Index: testDigesterOptionalConfiguration.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/conf/testDigesterOptionalConfiguration.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- testDigesterOptionalConfiguration.xml     14 Nov 2004 19:06:32 -0000      
1.1
  +++ testDigesterOptionalConfiguration.xml     19 Nov 2004 19:25:47 -0000      
1.2
  @@ -4,14 +4,14 @@
   
   <configuration>
     <properties fileName="test.properties"/>
  -  <xml fileName="test.xml" required="true"/>
  -  <hierarchicalXml fileName="nonExistingHierarchicalXML1.xml" 
required="false"/>
  -  <properties fileName="nonExistingProperties1.properties" required="no"/>
  -  <xml fileName="nonExistingXML1.xml" required="false"/>
  +  <xml fileName="test.xml" optional="false"/>
  +  <hierarchicalXml fileName="nonExistingHierarchicalXML1.xml" 
optional="true"/>
  +  <properties fileName="nonExistingProperties1.properties" optional="yes"/>
  +  <xml fileName="nonExistingXML1.xml" optional="true"/>
     
     <additional>
  -    <properties fileName="nonExistingProperties2.properties" required="no"/>
  -    <hierarchicalXml fileName="nonExistingHierarchicalXML2.xml" 
required="false"/>
  -    <xml fileName="nonExistingXML2.xml" required="false"/>
  +    <properties fileName="nonExistingProperties2.properties" optional="yes"/>
  +    <hierarchicalXml fileName="nonExistingHierarchicalXML2.xml" 
optional="true"/>
  +    <xml fileName="nonExistingXML2.xml" optional="true"/>
     </additional>
   </configuration>
  
  
  
  1.1                  
jakarta-commons/configuration/conf/testDigesterOptionalConfigurationEx.xml
  
  Index: testDigesterOptionalConfigurationEx.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1" ?>
  <!-- Configuration test file that is used to test whether invalid
       file names cause exceptions to be thrown -->
  
  <configuration>
    <!-- This should not cause an exception -->
    <properties fileName="unexisting.properties" optional="true"/>
    <!-- But this should! -->
    <properties fileName="unexisting.properties"/>
  </configuration>
  
  
  
  1.5       +44 -0     
jakarta-commons/configuration/xdocs/howto_configurationfactory.xml
  
  Index: howto_configurationfactory.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/xdocs/howto_configurationfactory.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- howto_configurationfactory.xml    22 Oct 2004 01:40:48 -0000      1.4
  +++ howto_configurationfactory.xml    19 Nov 2004 19:25:47 -0000      1.5
  @@ -231,6 +231,50 @@
                                still be returned from the second file (the 
defaults file).
                        </p>
                </subsection>
  +             <subsection name="Optional configuration sources">
  +                     <p>
  +                             The example above with two configuration 
sources - one for user
  +                             settings and one with default values - raises 
an interesting
  +                             question: What will happen if the user has not 
defined specific
  +                             properties yet? Or what if a new user starts 
our application for
  +                             the first time and thus no user specific 
properties exist?
  +                     </p>
  +                     <p>
  +                             The default behavior of 
<code>ConfigurationFactory</code> is to
  +                             throw a <code>ConfigurationException</code> 
exception if one of
  +                             the sources defined in the configuration 
definition file cannot
  +                             be loaded. For our example this behavior is not 
desired: the
  +                             properties file with specific user settings is 
not required. If it
  +                             cannot be loaded, the example application will 
still work because
  +                             a complete set of configuration properties is 
defined in the
  +                             second file.
  +                     </p>
  +                     <p>
  +                             <code>ConfigurationFactory</code> supports such 
optional
  +                             configuration sources. For this purpose in the 
definition of a
  +                             (file based) configuration source the 
<code>optional</code>
  +                             attribute can be placed. An example of this is 
shown below:
  +                     </p>
  +                     <source><![CDATA[
  +<?xml version="1.0" encoding="ISO-8859-1" ?>
  +
  +<configuration>
  +  <properties fileName="usersettings.properties" optional="true"/>
  +  <properties fileName="default.properties"/>
  +</configuration>
  +]]></source>
  +                     <p>
  +                             In this configuration definition file the first 
properties file
  +                             with user specific settings is marked as 
optional. This means that
  +                             if it cannot be loaded, 
<code>ConfigurationFactory</code> will
  +                             not throw an exception, but only write a 
warning message to its
  +                             logger. Note that the <code>optional</code> 
attribute is absent
  +                             for the second properties file. Thus it is 
mandatory, and the
  +                             <code>getConfiguration()</code> method of
  +                             <code>ConfigurationFactory</code> would throw 
an exception if it
  +                             could not be found.
  +                     </p>
  +             </subsection>
        </section>
   </body>
   
  
  
  
  1.19      +4 -4      
jakarta-commons/configuration/src/java/org/apache/commons/configuration/ConfigurationFactory.java
  
  Index: ConfigurationFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/src/java/org/apache/commons/configuration/ConfigurationFactory.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ConfigurationFactory.java 14 Nov 2004 19:06:32 -0000      1.18
  +++ ConfigurationFactory.java 19 Nov 2004 19:25:47 -0000      1.19
  @@ -59,7 +59,7 @@
       private static final String SEC_ADDITIONAL = SEC_ROOT + "additional/";
       
       /** Constant for the optional attribute.*/
  -    private static final String ATTR_REQUIRED = "required";
  +    private static final String ATTR_OPTIONAL = "optional";
       
       /** Constant for the fileName attribute.*/
       private static final String ATTR_FILENAME = "fileName";
  @@ -499,8 +499,8 @@
               }
               catch(ConfigurationException cex)
               {
  -                if(attributes.getValue(ATTR_REQUIRED) == null
  -                        || 
!PropertyConverter.toBoolean(attributes.getValue(ATTR_REQUIRED)).booleanValue())
  +                if(attributes.getValue(ATTR_OPTIONAL) != null
  +                        && 
PropertyConverter.toBoolean(attributes.getValue(ATTR_OPTIONAL)).booleanValue())
                   {
                       log.warn("Could not load optional configuration " + 
conf.getFileName());
                   }
  
  
  

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

Reply via email to