[ 
https://issues.apache.org/jira/browse/CONFIGURATION-756?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gary Gregory updated CONFIGURATION-756:
---------------------------------------
     External issue ID: 34
    External issue URL: https://github.com/apache/commons-configuration/pull/34

> Allow for custom behavior to handle errors loading included properties files.
> -----------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-756
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-756
>             Project: Commons Configuration
>          Issue Type: New Feature
>            Reporter: Gary Gregory
>            Assignee: Gary Gregory
>            Priority: Major
>
> The properties file format in Commons Configuration allows for a properties 
> file to load external properties files through a special key called 
> {{"include"}}. This PR allows for a call site to customize what happens when 
> an included file does not exist or is in error.
> https://github.com/apache/commons-configuration/pull/34
> The main change is to re-implement the current behavior for include error 
> handing through a new interface defined in {{PropertiesConfiguration}}:
> {code:java}
>     /**
>      * Defines error handling for the special {@code "include"} key.
>      *
>      * @since 2.6
>      */
>     public interface IncludeListener
>     {
>         /**
>          * Defines what to do when an include file is missing.
>          *
>          * @param fileName the missing file name.
>          * @throws ConfigurationException Optionally thrown by the 
> implementation to stop processing.
>          */
>         void onFileNotFound(String fileName) throws ConfigurationException;
>         /**
>          * Defines what to do when an exception is caught loading a property 
> file.
>          *
>          * @param e The exception.
>          * @throws ConfigurationException Optionally thrown by the 
> implementation to stop processing.
>          */
>         void onLoadException(ConfigurationException e) throws 
> ConfigurationException;
>     }
> {code}
> Where the default behavior does not change and is implemented as:
> {code:java}
>     /**
>      * Defines the default behavior.
>      *
>      * @since 2.6
>      */
>     public static class DefaultIncludeListener implements IncludeListener
>     {
>         /**
>          * The singleton instance.
>          */
>         public static final DefaultIncludeListener INSTANCE = new 
> DefaultIncludeListener();
>         @Override
>         public void onFileNotFound(final String fileName) throws 
> ConfigurationException
>         {
>             throw new ConfigurationException("Cannot resolve include file " + 
> fileName);
>         }
>         @Override
>         public void onLoadException(ConfigurationException e) throws 
> ConfigurationException
>         {
>             throw e;
>         }
>     }
> {code}
> In addition, a NOOP implementation is provided for simple use cases and tests:
> {code:java}
>     /**
>      * Implements all methods as noops.
>      *
>      * @since 2.6
>      */
>     public static class NoopIncludeListener implements IncludeListener
>     {
>         /**
>          * The singleton instance.
>          */
>         public static final NoopIncludeListener INSTANCE = new 
> NoopIncludeListener();
>         @Override
>         public void onFileNotFound(final String fileName) throws 
> ConfigurationException
>         {
>             // noop
>         }
>         @Override
>         public void onLoadException(ConfigurationException e) throws 
> ConfigurationException
>         {
>             // noop
>         }
>     }
> {code}
> You can set an include listener through new methods in 
> {{PropertiesConfiguration}} and through the fluent API as well. See the PR 
> for details.
> Note that this PR does not address detecting cyclical include files but does 
> include a new test method which is decorated with {{@Ignore}}.
>  



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to